CVS: gcc/gcc-3.3/gcc/config/msp430 libgcc.S, 1.15.2.1, 1.15.2.2 msp430.c, 1.99.2.2, 1.99.2.3 msp430.h, 1.49.2.1, 1.49.2.2

"Sergey A. Borshch" <[email protected]> Thu, 5 Feb 2009 01:29:39 +0000
Newsgroups gmane.comp.hardware.texas-instruments.msp430.gcc.cvs
Message-ID <[email protected]>
Update of /cvsroot/mspgcc/gcc/gcc-3.3/gcc/config/msp430
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv26558/gcc-3.3/gcc/config/msp430

Modified Files:
      Tag: MSP430X
	libgcc.S msp430.c msp430.h 
Log Message:
prologue & epilogue generation reworked. stack frame bug fixed
__prologue_saver improved.
some rudimental comments removed.


Index: libgcc.S
===================================================================
RCS file: /cvsroot/mspgcc/gcc/gcc-3.3/gcc/config/msp430/libgcc.S,v
retrieving revision 1.15.2.1
retrieving revision 1.15.2.2
diff -u -w -d -r1.15.2.1 -r1.15.2.2
--- libgcc.S	26 Jan 2009 15:57:16 -0000	1.15.2.1
+++ libgcc.S	5 Feb 2009 01:29:37 -0000	1.15.2.2
@@ -564,15 +564,16 @@
 	.global __prologue_saver
 	.func	__prologue_saver
 __prologue_saver:
-	mov	r4, 0(r1)
-	mov	r5, 2(r1)
-	mov	r6, 4(r1)
-	mov	r7, 6(r1)
-	mov	r8, 8(r1)
-	mov	r9, 10(r1)
-	mov	r10, 12(r1)
-	mov	r11, 14(r1)
-	br	r12	; now jump to the function body
+        ;       0(r1) = return address
+	mov	r4, 2(r1)
+	mov	r5, 4(r1)
+	mov	r6, 6(r1)
+	mov	r7, 8(r1)
+	mov	r8, 10(r1)
+	mov	r9, 12(r1)
+	mov	r10, 14(r1)
+	mov	r11, 16(r1)
+	ret
 .endfunc
 
 #endif
@@ -703,28 +704,17 @@
 #endif /* defined (L_udivmoddi3_parts) */
 
 #if defined (L_clobbers) && defined(__MSP430_SAVE_PROLOGUE__) && !defined(__MSP430X__)
-/* 
-   we cannot use __prologue_saver as r12 is used for operand
-   but we can use __epilogue_restorer, as __restore_clobbers
-*/
-__store_clobbers:
-        push    r11
-        push    r10
-        push    r9
-        push    r8
-        push    r7
-        push    r6
-        push    r5
-        push    r4
-        ret
+
 .set __restore_clobbers, __epilogue_restorer
+
 #endif /* defined (L_clobbers) */
 
         .macro	store_clobbers
 #if defined(__MSP430X__)
         XPUSHM  #8, r11
 #elif defined(__MSP430_SAVE_PROLOGUE__)
-        call    #__store_clobbers
+        sub     #16, r1
+        call    #__prologue_saver
 #else
         push    r11
         push    r10

Index: msp430.c
===================================================================
RCS file: /cvsroot/mspgcc/gcc/gcc-3.3/gcc/config/msp430/msp430.c,v
retrieving revision 1.99.2.2
retrieving revision 1.99.2.3
diff -u -w -d -r1.99.2.2 -r1.99.2.3
--- msp430.c	4 Feb 2009 23:10:06 -0000	1.99.2.2
+++ msp430.c	5 Feb 2009 01:29:37 -0000	1.99.2.3
@@ -77,7 +77,6 @@
 
 /* aux functions */
 static int msp430_cc_source PARAMS ((rtx, enum rtx_code, rtx, rtx));
-static int msp430_func_num_saved_regs PARAMS ((void));
 static int noint_hwmul_function_p PARAMS ((tree func));
 static int interrupt_function_p PARAMS ((tree func));
 static int msp430_naked_function_p PARAMS ((tree func));
@@ -113,9 +112,10 @@
   enum  hwmul_t hwmul;
 };
 
-// we can add more options, 
-// for example cpu bugs workaround requirements as soon as they will be implemented
-// remark: CPU4 bug workaround implemented in assembler
+/* we can add more options, 
+   for example cpu bugs workaround requirements as soon as they will be implemented.
+   remark: CPU4 bug workaround implemented in assembler
+ */
 #define MSP430_ISA_1    CORE_430,   HWMUL_ABSENT
 #define MSP430_ISA_2    CORE_430,   HWMUL_16X16
 #define MSP430_ISA_3    CORE_430,   HWMUL_32X32
@@ -455,9 +455,9 @@
 msp430_save_prologue_function_p (func)
      tree func;
 {
+  tree a;
   if (TARGET_SAVE_PROLOGUE)
     return !0;
-  tree a;
   if (TREE_CODE (func) != FUNCTION_DECL)
     abort ();
   a = lookup_attribute ("saveprologue", DECL_ATTRIBUTES (func));
@@ -916,30 +916,6 @@
   return 0;
 }
 
-/* Returns a number of pushed registers */
-static int
-msp430_func_num_saved_regs ()
-{
-  int i;
-  int saves = 0;
-  int interrupt_func_p = interrupt_function_p (current_function_decl);
-  int leaf_func_p = leaf_function_p ();
-
-  for (i = 4; i < 16; i++)
-    {
-      if ((regs_ever_live[i]
-	   && (!call_used_regs[i]
-	       || interrupt_func_p))
-	  || (!leaf_func_p && (call_used_regs[i] && interrupt_func_p)))
-	{
-	  saves += 1;
-	}
-    }
-
-  return saves;
-}
-
-
 /* Output function prologue */
 void
 function_prologue (file, size)
@@ -961,7 +937,6 @@
   int ree = msp430_reentrant_function_p (current_function_decl);
   int save_prologue_p =
       msp430_save_prologue_function_p (current_function_decl);
-  int num_saved_regs;
 
   return_issued = 0;
   last_insn_address = 0;
@@ -1057,101 +1032,118 @@
     }
   else
     {
-      do
-        {
-          if (tfp)
-             break;
-          num_saved_regs = msp430_func_num_saved_regs ();
-          if (!interrupt_func_p)
+      if (!tfp)
             {
               if ( MCU_CORE_X )
                 {
-                  if (num_saved_regs)
+              int sequental_regs = 0;
+              for (i = 15; i >= 4; i--)
                     {
-                      fprintf (file, "\tpushm%s\t#%d, r11\n", ARG_SIZE, num_saved_regs);
+                  if ((regs_ever_live[i]
+                       && (!call_used_regs[i] || interrupt_func_p))
+                    || (!leaf_func_p
+                       && (call_used_regs[i] && interrupt_func_p)))
+                    {
+                      sequental_regs++;
+                    }
+                  else if (sequental_regs != 0)
+                    {
+                      fprintf (file, "\tpushm%s\t#%d, r%d\n", ARG_SIZE, sequental_regs, i + sequental_regs);
                       prologue_size += 1;
-                      size -= (8 - num_saved_regs) * target_mcu.regs_size == REGS_20BITS ? 4 : 2;
+                      sequental_regs = 0;
                     }
-                  break;
                 }
-              else
-                {
-                  /* Here, we've got a chance to jump to prologue saver */
-                  if (save_prologue_p && !arg_register_used[12] && num_saved_regs > 3)
-                    {
-                      /* because if num_saved_regs <= 3, inlined pushes
-                         takes less time and/or code space 
-                      */
-                      fprintf (file, "\tsub\t#16, r1\n");
-                      fprintf (file, "\tmov\t#1f, r12\n");
-                      fprintf (file, "\tbr\t#__prologue_saver+%d\n",
-		           (8 - num_saved_regs) * 4);
-                      fprintf (file, "1:\n");
-                      if (cfp && 8 - num_saved_regs)
+              if (sequental_regs != 0)
                         {
-                          /* adjust stack back */
-                          int n = (8 - num_saved_regs) * 2;
-	                  fprintf (file, "\tadd\t#%d, r1\n", n);
-	                  if (n != 0 && n != 1 && n != 2 && n != 4 && n != 8)
-		            prologue_size += 2;
-                          else
+                  fprintf (file, "\tpushm%s\t#%d, r%d\n", ARG_SIZE, sequental_regs, 3 + sequental_regs);
 		            prologue_size += 1;
 	                }
-	              else
-                        /* space alredy reserved by sub #16, r1 */
-                        size -= (8 - num_saved_regs) * 2;
-                      prologue_size += 7;
-                      break;
-                    }
 	        }
-            } /* !interrupt_func_p */
-          if ( MCU_CORE_X )
+          else  /* !MCU_CORE_X */
             {
                 int sequental_regs = 0;
-                for (i = 15; i >= 4; i--)
+              for (i = 15; i >= 12; i--)
                   {
                     if ((regs_ever_live[i]
-                         && (!call_used_regs[i]
-                             || interrupt_func_p))
-                        || (!leaf_func_p && (call_used_regs[i]
-                                             && (interrupt_func_p))))
+                       && (!call_used_regs[i] || interrupt_func_p))
+                     || (!leaf_func_p 
+                       && (call_used_regs[i] && interrupt_func_p)))
                       {
-                          sequental_regs++;
+                      fprintf (file, "\tpush\tr%d\n", i);
+                      prologue_size += 1;
                       }
-                      else
+                }
+              /* Here, we've got a chance to jump to prologue saver */
+              if ( save_prologue_p )
                       {
-                          if (sequental_regs != 0)
+                  int regs_to_save = 0;
+                  int stack_adjust = 0;
+                  int stack_adjust_cmd_size = 0;
+                  for (i = 11; i >= 4; i--)
                             {
-                              fprintf (file, "\tpushm%s\t#%d, r%d\n", ARG_SIZE, sequental_regs, i + sequental_regs);
-                              prologue_size += 1;
-                              sequental_regs = 0;
+                      if ((regs_ever_live[i]
+                           && (!call_used_regs[i] || interrupt_func_p))
+                         || (!leaf_func_p 
+                           && (call_used_regs[i] && interrupt_func_p)))
+                        {
+                          if (sequental_regs == 11 - i) /* if continuous set of regs */
+                              ++sequental_regs;
+                          ++regs_to_save;
                             }
                       }
+                  if (regs_to_save != sequental_regs    /* need to save more regs */
+                    || (cfp && sequental_regs != 8))    /* crit. func and extra stack allocated */
+                     {
+                        stack_adjust = (8 - sequental_regs) * 2;
+                        stack_adjust_cmd_size = stack_adjust == 0 || stack_adjust == 1 || 
+                            stack_adjust == 2 || stack_adjust == 4 || stack_adjust == 8 ?
+                            1 : 2;
                   }
-                if (sequental_regs != 0)
+                  if (sequental_regs > 4 + stack_adjust_cmd_size)
                   {
-                    fprintf (file, "\tpushm%s\t#%d, r%d\n", ARG_SIZE, sequental_regs, 3 + sequental_regs);
-                    prologue_size += 1;
+                      /* because if less, inlined pushes
+                         takes less time and/or code space 
+                      */
+                      fprintf (file, "\tsub\t#16, r1\n");
+                      fprintf (file, "\tcall\t#__prologue_saver+%d\n",
+                                     (8 - sequental_regs) * 4);
+                      if (stack_adjust)
+                        {
+                          /* adjust stack back */
+                          fprintf (file, "\tadd\t#%d, r1\n", stack_adjust);
+                          prologue_size += 4 + stack_adjust_cmd_size;
+                        }
+                      else
+                        {
+                          /* space already reserved by sub #16, r1 */
+                          size -= (8 - sequental_regs) * 2;
+                          prologue_size += 4;
                   }
             }
           else
+                    for(i = 0; i < sequental_regs; ++i)
             {
-                for (i = 15; i >= 4; i--)
+                        fprintf (file, "\tpush\tr%d\n", 11 - i);
+                        prologue_size += 1;
+                      }
+                }  /* save_prologue_p */
+              /* here R15...R12 are pushed if needed, 
+                 and sequental_regs regs down from R11 saved,
+                 so push remainig regs
+              */
+              for (i = 11 - sequental_regs; i >= 4; i--)
                   {
                     if ((regs_ever_live[i]
-                         && (!call_used_regs[i]
-                             || interrupt_func_p))
-                        || (!leaf_func_p && (call_used_regs[i]
-                                             && (interrupt_func_p))))
+                       && (!call_used_regs[i] || interrupt_func_p))
+                    || (!leaf_func_p 
+                       && (call_used_regs[i] && interrupt_func_p)))
                       {
                         fprintf (file, "\tpush\tr%d\n", i);
                         prologue_size += 1;
                       }
                   }
-            }
-	}
-      while(0);
-
+            }  /* !MCU_CORE_X */
+        } /* !tfp */
       if (!interrupt_func_p && cfp)
 	{
 	  prologue_size += 3;
@@ -1207,7 +1199,7 @@
 	    prologue_size += 1;
 	  else
 	    prologue_size += 2;
-	}
+        }   /* if (size) */
 
       /* disable interrupt for reentrant function */
       if (!interrupt_func_p && ree)
@@ -1215,8 +1207,7 @@
 	  prologue_size += 1;
 	  fprintf (file, "\tdint\n");
 	}
-    }
-
+    } /* !main */
   fprintf (file, "\t/* prologue end (size=%d) */\n\n", prologue_size);
 }
 
@@ -1240,7 +1231,6 @@
   int still_return = 1;
   int function_size;
 
-
   last_insn_address = 0;
   jump_tables_size = 0;
   epilogue_size = 0;
@@ -1319,37 +1309,15 @@
 	    fprintf (file, "\tpop\tr2\n");
 	}
 
-      if (save_prologue_p && !MCU_CORE_X
-	  && !interrupt_func_p && msp430_func_num_saved_regs () > 2)
-	{
-            fprintf (file, "\tbr\t#__epilogue_restorer+%d\n",
-                        (8 - msp430_func_num_saved_regs ()) * 2);
-            epilogue_size += 2;
-	}
-      else if ( save_prologue_p && !MCU_CORE_X
-               && interrupt_func_p)
-        {
-            int num_saved_regs = msp430_func_num_saved_regs ();
-            if (wakeup_func_p)
-              {
-                fprintf (file, "\tbic\t#0xf0,%d(r1)\n", num_saved_regs * 2);
-                epilogue_size += 3;
-              }
-            fprintf (file, "\tbr\t#__epilogue_restorer_intr+%d\n",
-                        (12 - num_saved_regs) * 2);
-            epilogue_size += 2;
-	}
-      else
-	{
           if ( MCU_CORE_X )
             {
               int sequental_regs = 0;
-              for (i = 4; i < 16; i++)
+          for (i = 4; i <= 15; i++)
                 {
                    if ((regs_ever_live[i]
-                      && (!call_used_regs[i]
-                        || interrupt_func_p))
-                      || (!leaf_func_p && (call_used_regs[i] && interrupt_func_p)))
+                    && (!call_used_regs[i] || interrupt_func_p))
+                  || (!leaf_func_p 
+                    && (call_used_regs[i] && interrupt_func_p)))
                      {
                        sequental_regs++;
                      }
@@ -1367,7 +1335,48 @@
                   epilogue_size += 1;
                 }
             }
-          else
+      else /* !MCU_CORE_X */
+        {
+          if (save_prologue_p)
+            {
+              int num_saved_regs = 0;
+              int start_from = interrupt_func_p ? 15 : 11;  /* gcc 3.4.3 fails into segmentation fault without this local */
+              for (i = 4; i <= start_from; ++i)
+                {
+                  if (regs_ever_live[i] && !call_used_regs[i])
+                    ++num_saved_regs;
+                  else if (num_saved_regs)
+                    {
+                      do
+                        {
+                          fprintf (file, "\tpop\tr%d\n", i - num_saved_regs);
+                          epilogue_size += 1;
+                        }
+                      while (--num_saved_regs);
+                    }
+                }
+              if (num_saved_regs)
+                {
+                  if (!interrupt_func_p)
+                    {
+                      fprintf (file, "\tbr\t#__epilogue_restorer+%d\n",
+                                (8 - num_saved_regs) * 2);
+                    }
+                  else /* interrupt_func_p */
+                    {
+                      if (wakeup_func_p)
+                        {
+                          fprintf (file, "\tbic\t#0xf0,%d(r1)\n", num_saved_regs * 2);
+                          epilogue_size += 3;
+                        }
+                      fprintf (file, "\tbr\t#__epilogue_restorer_intr+%d\n",
+                                     (12 - num_saved_regs) * 2);
+                    }
+                  epilogue_size += 2;
+                  still_return = 0;
+                }
+    	    } 
+          else /* !save_prologue_p */
             {
               for (i = 4; i < 16; i++)
                 {
@@ -1381,6 +1390,9 @@
                      }
                 }
             }
+        } /* !MCU_CORE_X */
+      if (still_return)
+        {
 	  if (interrupt_func_p)
 	    {
 	      if (wakeup_func_p)
@@ -1388,18 +1400,16 @@
 		  fprintf (file, "\tbic\t#0xf0,0(r1)\n");
 		  epilogue_size += 3;
 		}
-
 	      fprintf (file, "\treti\n");
 	      epilogue_size += 1;
 	    }
-	  else
+          else /* !interrupt_func_p */
 	    {
-	      if (still_return)
 		fprintf (file, CHECK_JUMP_SIZE("\tret\n","\treta\n"));
 	      epilogue_size += 1;
 	    }
-	}
-    }
+        } /* still_return */
+    } /* !main_p */
 
   fprintf (file, "\t/* epilogue end (size=%d) */\n", epilogue_size);
 done_epilogue:

Index: msp430.h
===================================================================
RCS file: /cvsroot/mspgcc/gcc/gcc-3.3/gcc/config/msp430/msp430.h,v
retrieving revision 1.49.2.1
retrieving revision 1.49.2.2
diff -u -w -d -r1.49.2.1 -r1.49.2.2
--- msp430.h	26 Jan 2009 15:57:17 -0000	1.49.2.1
+++ msp430.h	5 Feb 2009 01:29:37 -0000	1.49.2.2
@@ -57,6 +57,7 @@
 #define MASK_RTL_DUMP		0x00000010
 #define MASK_ALL_DEBUG		0x00000FE0
 #define MASK_FORCE_HWMUL	0x00001000
+#define MASK_INT8			0x00002000
 #define MASK_NO_STACK_INIT	0x00008000
 #define MASK_NO_VOLAT_WRKAR	0x00010000
 #define MASK_REORDER		0x00020000
@@ -72,6 +73,7 @@
 #define TARGET_PROF_STD		(target_flags & MASK_PROF_STD)
 #define TARGET_PROF_LIB		(target_flags & MASK_PROF_LIB)
 #define TARGET_PROF_STACK	(target_flags & MASK_PROF_STACK)
+#define TARGET_INT8  		(target_flags & MASK_INT8)
 #define TARGET_NO_HWMUL	        (target_flags & MASK_NO_HWMUL)
 #define TARGET_HWMUL		(target_flags & MASK_FORCE_HWMUL)
 #define TARGET_NOINT_HWMUL	(target_flags & MASK_NOINT_HWMUL)
@@ -92,6 +94,7 @@
   { "pgr", MASK_PROF_STACK,N_("Add stack information to profiler") }, \
   { "rtl", MASK_RTL_DUMP, NULL },					\
   { "deb", MASK_ALL_DEBUG, NULL },					\
+  { "int8", MASK_INT8, N_("Assume int to be 8 bit integer") },		\
   { "force-hwmul", MASK_FORCE_HWMUL,N_("Force hardware multiplier") },\
   { "disable-hwmul", MASK_NO_HWMUL, N_("Disable hardware multiplier") }, \
   { "inline-hwmul", MASK_INLINESIHWMUL, N_("Issue inline multiplication code for 32-bit integers") }, \
@@ -188,7 +191,6 @@
    See also the macro `Pmode' defined below.  */
 #define POINTER_SIZE 16
 
-
 /* Maximum sized of reasonable data type
    DImode or Dfmode ...  */
 #define MAX_FIXED_MODE_SIZE 32
@@ -214,7 +216,7 @@
 
 /* A C expression for the size in bits of the type `int' on the
      target machine.  If you don't define this, the default is one word.  */
-#define INT_TYPE_SIZE ( 16)
+#define INT_TYPE_SIZE (TARGET_INT8 ? 8 : 16)
 
 
 /* A C expression for the size in bits of the type `short' on the
@@ -1938,10 +1940,10 @@
    name string in the `symbol_ref' (if one bit is not enough
    information).  */
 
-
+/*
 #define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \
   (VAR) = (SYMBOL_NAME) + ((SYMBOL_NAME)[0] == '*' || (SYMBOL_NAME)[0] == '@');
-/* `STRIP_NAME_ENCODING (VAR, SYM_NAME)'
+  `STRIP_NAME_ENCODING (VAR, SYM_NAME)'
    Decode SYM_NAME and store the real name part in VAR, sans the
    characters that encode section info.  Define this macro if
    `ENCODE_SECTION_INFO' alters the symbol's name string.  */
@@ -2270,17 +2272,11 @@
   do {									\
     if (!flag_inhibit_size_directive)					\
       {									\
-        char label[256];						\
-	static int labelno;						\
-	labelno++;							\
-	ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno);		\
-	ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno);		\
-	fprintf (FILE, "%s", SIZE_ASM_OP);				\
-	assemble_name (FILE, (FNAME));					\
-        fprintf (FILE, ",");						\
-	assemble_name (FILE, label);					\
-        fprintf (FILE, "-");						\
-	assemble_name (FILE, (FNAME));					\
+        fputs (SIZE_ASM_OP, FILE);                      \
+        assemble_name (FILE, FNAME);                    \
+        fputs (", .-", FILE);                           \
+        assemble_name (FILE, FNAME);                    \
+        putc ('\n', FILE);                              \
 	fprintf (FILE,"\n/********* End of function ******/\n\n");	\
       }									\
   } while (0)
@@ -3095,10 +3091,6 @@
 #define ASM_SPEC "      \
 %{mmcu=*:-mmcu=%*}      \
 "
-/*
-   As assembler don't care about hardware multiplier,
-   translate gcc generic cpu types (see t-msp430) into gas generic types
-*/
 /* A C string constant that tells the GNU CC driver program options to
    pass to the assembler.  It can also specify how to translate
    options you give to GNU CC into options for GNU CC to pass to the
@@ -3117,142 +3109,6 @@
 #define LINK_SPEC "\
 %{mmcu=*:-m %*}      \
 "
-/*
-%{!mmcu=*|mmcu=msp430x110:-m msp430x110} \
-%{mmcu=msp430x112:-m msp430x112} \
-%{mmcu=msp430x1101:-m msp430x1101} \
-%{mmcu=msp430x1111:-m msp430x1111} \
-%{mmcu=msp430x1121:-m msp430x1121} \
-%{mmcu=msp430x1122:-m msp430x1122} \
-%{mmcu=msp430x1132:-m msp430x1132} \
-%{mmcu=msp430x122:-m msp430x122} \
-%{mmcu=msp430x123:-m msp430x123} \
-%{mmcu=msp430x1222:-m msp430x1222} \
-%{mmcu=msp430x1232:-m msp430x1232} \
-%{mmcu=msp430x133:-m msp430x133} \
-%{mmcu=msp430x135:-m msp430x135} \
-%{mmcu=msp430x1331:-m msp430x1331} \
-%{mmcu=msp430x1351:-m msp430x1351} \
-%{mmcu=msp430x147:-m msp430x147} \
-%{mmcu=msp430x148:-m msp430x148} \
-%{mmcu=msp430x149:-m msp430x149} \
-%{mmcu=msp430x1471:-m msp430x1471} \
-%{mmcu=msp430x1481:-m msp430x1481} \
-%{mmcu=msp430x1491:-m msp430x1491} \
-%{mmcu=msp430x155:-m msp430x155} \
-%{mmcu=msp430x156:-m msp430x156} \
-%{mmcu=msp430x157:-m msp430x157} \
-%{mmcu=msp430x167:-m msp430x167} \
-%{mmcu=msp430x168:-m msp430x168} \
-%{mmcu=msp430x169:-m msp430x169} \
-%{mmcu=msp430x1610:-m msp430x1610} \
-%{mmcu=msp430x1611:-m msp430x1611} \
-%{mmcu=msp430x1612:-m msp430x1612} \
-%{mmcu=msp430x2001:-m msp430x2001} \
-%{mmcu=msp430x2011:-m msp430x2011} \
-%{mmcu=msp430x2002:-m msp430x2002} \
-%{mmcu=msp430x2012:-m msp430x2012} \
-%{mmcu=msp430x2003:-m msp430x2003} \
-%{mmcu=msp430x2013:-m msp430x2013} \
-%{mmcu=msp430x2101:-m msp430x2101} \
-%{mmcu=msp430x2111:-m msp430x2111} \
-%{mmcu=msp430x2121:-m msp430x2121} \
-%{mmcu=msp430x2131:-m msp430x2131} \
-%{mmcu=msp430x2112:-m msp430x2112} \
-%{mmcu=msp430x2122:-m msp430x2122} \
-%{mmcu=msp430x2132:-m msp430x2132} \
-%{mmcu=msp430x2232:-m msp430x2232} \
-%{mmcu=msp430x2252:-m msp430x2252} \
-%{mmcu=msp430x2272:-m msp430x2272} \
-%{mmcu=msp430x2234:-m msp430x2234} \
-%{mmcu=msp430x2254:-m msp430x2254} \
-%{mmcu=msp430x2274:-m msp430x2274} \
-%{mmcu=msp430x233:-m msp430x233} \
-%{mmcu=msp430x235:-m msp430x235} \
-%{mmcu=msp430x2330:-m msp430x2330} \
-%{mmcu=msp430x2350:-m msp430x2350} \
-%{mmcu=msp430x2370:-m msp430x2370} \
-%{mmcu=msp430x247:-m msp430x247} \
-%{mmcu=msp430x248:-m msp430x248} \
-%{mmcu=msp430x249:-m msp430x249} \
-%{mmcu=msp430x2410:-m msp430x2410} \
-%{mmcu=msp430x2471:-m msp430x2471} \
-%{mmcu=msp430x2481:-m msp430x2481} \
-%{mmcu=msp430x2491:-m msp430x2491} \
-%{mmcu=msp430x2416:-m msp430x2416} \
-%{mmcu=msp430x2417:-m msp430x2417} \
-%{mmcu=msp430x2418:-m msp430x2418} \
-%{mmcu=msp430x2419:-m msp430x2419} \
-%{mmcu=msp430x2616:-m msp430x2616} \
-%{mmcu=msp430x2617:-m msp430x2617} \
-%{mmcu=msp430x2618:-m msp430x2618} \
-%{mmcu=msp430x2619:-m msp430x2619} \
-%{mmcu=msp430x311:-m msp430x311} \
-%{mmcu=msp430x312:-m msp430x312} \
-%{mmcu=msp430x313:-m msp430x313} \
-%{mmcu=msp430x314:-m msp430x314} \
-%{mmcu=msp430x315:-m msp430x315} \
-%{mmcu=msp430x323:-m msp430x323} \
-%{mmcu=msp430x325:-m msp430x325} \
-%{mmcu=msp430x336:-m msp430x336} \
-%{mmcu=msp430x337:-m msp430x337} \
-%{mmcu=msp430x412:-m msp430x412} \
-%{mmcu=msp430x413:-m msp430x413} \
-%{mmcu=msp430x415:-m msp430x415} \
-%{mmcu=msp430x417:-m msp430x417} \
-%{mmcu=msp430x423:-m msp430x423} \
-%{mmcu=msp430x425:-m msp430x425} \
-%{mmcu=msp430x427:-m msp430x427} \
-%{mmcu=msp430x4250:-m msp430x4250} \
-%{mmcu=msp430x4260:-m msp430x4260} \
-%{mmcu=msp430x4270:-m msp430x4270} \
-%{mmcu=msp430xG4250:-m msp430xG4250} \
-%{mmcu=msp430xG4260:-m msp430xG4260} \
-%{mmcu=msp430xG4270:-m msp430xG4270} \
-%{mmcu=msp430xE423:-m msp430xE423} \
-%{mmcu=msp430xE425:-m msp430xE425} \
-%{mmcu=msp430xE427:-m msp430xE427} \
-%{mmcu=msp430xE4232:-m msp430xE4232} \
-%{mmcu=msp430xE4242:-m msp430xE4242} \
-%{mmcu=msp430xE4252:-m msp430xE4252} \
-%{mmcu=msp430xE4272:-m msp430xE4272} \
-%{mmcu=msp430xW423:-m msp430xW423} \
-%{mmcu=msp430xW425:-m msp430xW425} \
-%{mmcu=msp430xW427:-m msp430xW427} \
-%{mmcu=msp430xG437:-m msp430xG437} \
-%{mmcu=msp430xG438:-m msp430xG438} \
-%{mmcu=msp430xG439:-m msp430xG439} \
-%{mmcu=msp430x435:-m msp430x435} \
-%{mmcu=msp430x436:-m msp430x436} \
-%{mmcu=msp430x437:-m msp430x437} \
-%{mmcu=msp430x447:-m msp430x447} \
-%{mmcu=msp430x448:-m msp430x448} \
-%{mmcu=msp430x449:-m msp430x449} \
-%{mmcu=msp430xG4616:-m msp430xG4616} \
-%{mmcu=msp430xG4617:-m msp430xG4617} \
-%{mmcu=msp430xG4618:-m msp430xG4618} \
-%{mmcu=msp430xG4619:-m msp430xG4619} \
-%{mmcu=msp430x4783:-m msp430x4783} \
-%{mmcu=msp430x4784:-m msp430x4784} \
-%{mmcu=msp430x4793:-m msp430x4793} \
-%{mmcu=msp430x4794:-m msp430x4794} \
-%{mmcu=msp430x47166:-m msp430x47166} \
-%{mmcu=msp430x47176:-m msp430x47176} \
-%{mmcu=msp430x47186:-m msp430x47186} \
-%{mmcu=msp430x47196:-m msp430x47196} \
-%{mmcu=msp430x47167:-m msp430x47167} \
-%{mmcu=msp430x47177:-m msp430x47177} \
-%{mmcu=msp430x47187:-m msp430x47187} \
-%{mmcu=msp430x47197:-m msp430x47197} \
-%{mmcu=msp430x5418:-m msp430x5418} \
-%{mmcu=msp430x5419:-m msp430x5419} \
-%{mmcu=msp430x5435:-m msp430x5435} \
-%{mmcu=msp430x5436:-m msp430x5436} \
-%{mmcu=msp430x5437:-m msp430x5437} \
-%{mmcu=msp430x5438:-m msp430x5438} \
-"
-*/
-
 /* A C string constant that tells the GNU CC driver program options to
    pass to the linker.  It can also specify how to translate options
    you give to GNU CC into options for GNU CC to pass to the linker.
@@ -3545,6 +3401,8 @@
 
 #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
 #define DWARF2_DEBUGGING_INFO 1
+#define DWARF2_ADDR_SIZE    2
+
 #define OBJECT_FORMAT_ELF
 
 #define DBX_REGISTER_NUMBER(r) (r)


------------------------------------------------------------------------------
Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM)
software. With Adobe AIR, Ajax developers can use existing skills and code to
build responsive, highly engaging applications that combine the power of local
resources and data with the reach of the web. Download the Adobe AIR SDK and
Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com