public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [2/2][PATCH,ARM]Generate UAL assembly code for Thumb-1 target
@ 2014-10-21 11:20 Terry Guo
  2014-11-04  8:22 ` Ramana Radhakrishnan
  0 siblings, 1 reply; 5+ messages in thread
From: Terry Guo @ 2014-10-21 11:20 UTC (permalink / raw)
  To: gcc-patches; +Cc: Ramana Radhakrishnan

[-- Attachment #1: Type: text/plain, Size: 666 bytes --]

Hi there,

Attached patch intends to enable GCC generate UAL format code for Thumb1
target. Tested with regression test and no regressions. Is it OK to trunk?

BR,
Terry

2014-10-21  Terry Guo  <terry.guo@arm.com>

           * config/arm/arm.c (arm_output_mi_thunk): Use UAL for Thumb1
target.
           * config/arm/thumb1.md: Likewise.

gcc/testsuite
2014-10-21  Terry Guo  <terry.guo@arm.com>

            * gcc.target/arm/anddi_notdi-1.c: Match with UAL format.
            * gcc.target/arm/pr40956.c: Likewise.
            * gcc.target/arm/thumb1-Os-mult.c: Likewise.
             * gcc.target/arm/thumb1-load-64bit-constant-3.c: Likewise.

[-- Attachment #2: update-thumb1-pattern-v1.txt --]
[-- Type: text/plain, Size: 15270 bytes --]

diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 9ccf73c..dc73244 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -28615,12 +28615,14 @@ arm_output_mi_thunk (FILE *file, tree thunk ATTRIBUTE_UNUSED,
 	  fputs ("\tldr\tr3, ", file);
 	  assemble_name (file, label);
 	  fputs ("+4\n", file);
-	  asm_fprintf (file, "\t%s\t%r, %r, r3\n",
+	  asm_fprintf (file, "\t%ss\t%r, %r, r3\n",
 		       mi_op, this_regno, this_regno);
 	}
       else if (mi_delta != 0)
 	{
-	  asm_fprintf (file, "\t%s\t%r, %r, #%d\n",
+	  /* Thumb1 unified syntax requires s suffix in instruction name when
+	     one of the operands is immediate.  */
+	  asm_fprintf (file, "\t%ss\t%r, %r, #%d\n",
 		       mi_op, this_regno, this_regno,
 		       mi_delta);
 	}
diff --git a/gcc/config/arm/thumb1.md b/gcc/config/arm/thumb1.md
index 020d83b..8a2abe9 100644
--- a/gcc/config/arm/thumb1.md
+++ b/gcc/config/arm/thumb1.md
@@ -29,7 +29,7 @@
    (clobber (reg:CC CC_REGNUM))
   ]
   "TARGET_THUMB1"
-  "add\\t%Q0, %Q0, %Q2\;adc\\t%R0, %R0, %R2"
+  "adds\\t%Q0, %Q0, %Q2\;adcs\\t%R0, %R0, %R2"
   [(set_attr "length" "4")
    (set_attr "type" "multiple")]
 )
@@ -42,9 +42,9 @@
   "*
    static const char * const asms[] =
    {
-     \"add\\t%0, %0, %2\",
-     \"sub\\t%0, %0, #%n2\",
-     \"add\\t%0, %1, %2\",
+     \"adds\\t%0, %0, %2\",
+     \"subs\\t%0, %0, #%n2\",
+     \"adds\\t%0, %1, %2\",
      \"add\\t%0, %0, %2\",
      \"add\\t%0, %0, %2\",
      \"add\\t%0, %1, %2\",
@@ -56,7 +56,7 @@
    if ((which_alternative == 2 || which_alternative == 6)
        && CONST_INT_P (operands[2])
        && INTVAL (operands[2]) < 0)
-     return \"sub\\t%0, %1, #%n2\";
+     return (which_alternative == 2) ? \"subs\\t%0, %1, #%n2\" : \"sub\\t%0, %1, #%n2\";
    return asms[which_alternative];
   "
   "&& reload_completed && CONST_INT_P (operands[2])
@@ -105,7 +105,7 @@
 		  (match_operand:DI 2 "register_operand"  "l")))
    (clobber (reg:CC CC_REGNUM))]
   "TARGET_THUMB1"
-  "sub\\t%Q0, %Q0, %Q2\;sbc\\t%R0, %R0, %R2"
+  "subs\\t%Q0, %Q0, %Q2\;sbcs\\t%R0, %R0, %R2"
   [(set_attr "length" "4")
    (set_attr "type" "multiple")]
 )
@@ -115,7 +115,7 @@
 	(minus:SI (match_operand:SI 1 "register_operand" "l")
 		  (match_operand:SI 2 "reg_or_int_operand" "lPd")))]
   "TARGET_THUMB1"
-  "sub\\t%0, %1, %2"
+  "subs\\t%0, %1, %2"
   [(set_attr "length" "2")
    (set_attr "conds" "set")
    (set_attr "type" "alus_sreg")]
@@ -133,9 +133,9 @@
  "TARGET_THUMB1 && !arm_arch6"
   "*
   if (which_alternative < 2)
-    return \"mov\\t%0, %1\;mul\\t%0, %2\";
+    return \"mov\\t%0, %1\;muls\\t%0, %2\";
   else
-    return \"mul\\t%0, %2\";
+    return \"muls\\t%0, %2\";
   "
   [(set_attr "length" "4,4,2")
    (set_attr "type" "muls")]
@@ -147,9 +147,9 @@
 		 (match_operand:SI 2 "register_operand" "l,0,0")))]
   "TARGET_THUMB1 && arm_arch6"
   "@
-   mul\\t%0, %2
-   mul\\t%0, %1
-   mul\\t%0, %1"
+   muls\\t%0, %2
+   muls\\t%0, %1
+   muls\\t%0, %1"
   [(set_attr "length" "2")
    (set_attr "type" "muls")]
 )
@@ -159,7 +159,7 @@
 	(and:SI (match_operand:SI 1 "register_operand" "%0")
 		(match_operand:SI 2 "register_operand" "l")))]
   "TARGET_THUMB1"
-  "and\\t%0, %2"
+  "ands\\t%0, %2"
   [(set_attr "length" "2")
    (set_attr "type"  "logic_imm")
    (set_attr "conds" "set")])
@@ -202,7 +202,7 @@
 	(and:SI (not:SI (match_operand:SI 1 "register_operand" "l"))
 		(match_operand:SI         2 "register_operand" "0")))]
   "TARGET_THUMB1"
-  "bic\\t%0, %1"
+  "bics\\t%0, %1"
   [(set_attr "length" "2")
    (set_attr "conds" "set")
    (set_attr "type" "logics_reg")]
@@ -213,7 +213,7 @@
 	(ior:SI (match_operand:SI 1 "register_operand" "%0")
 		(match_operand:SI 2 "register_operand" "l")))]
   "TARGET_THUMB1"
-  "orr\\t%0, %2"
+  "orrs\\t%0, %2"
   [(set_attr "length" "2")
    (set_attr "conds" "set")
    (set_attr "type" "logics_reg")])
@@ -223,7 +223,7 @@
 	(xor:SI (match_operand:SI 1 "register_operand" "%0")
 		(match_operand:SI 2 "register_operand" "l")))]
   "TARGET_THUMB1"
-  "eor\\t%0, %2"
+  "eors\\t%0, %2"
   [(set_attr "length" "2")
    (set_attr "conds" "set")
    (set_attr "type" "logics_reg")]
@@ -234,7 +234,7 @@
 	(ashift:SI (match_operand:SI 1 "register_operand" "l,0")
 		   (match_operand:SI 2 "nonmemory_operand" "N,l")))]
   "TARGET_THUMB1"
-  "lsl\\t%0, %1, %2"
+  "lsls\\t%0, %1, %2"
   [(set_attr "length" "2")
    (set_attr "type" "shift_imm,shift_reg")
    (set_attr "conds" "set")])
@@ -244,7 +244,7 @@
 	(ashiftrt:SI (match_operand:SI 1 "register_operand" "l,0")
 		     (match_operand:SI 2 "nonmemory_operand" "N,l")))]
   "TARGET_THUMB1"
-  "asr\\t%0, %1, %2"
+  "asrs\\t%0, %1, %2"
   [(set_attr "length" "2")
    (set_attr "type" "shift_imm,shift_reg")
    (set_attr "conds" "set")])
@@ -254,7 +254,7 @@
 	(lshiftrt:SI (match_operand:SI 1 "register_operand" "l,0")
 		     (match_operand:SI 2 "nonmemory_operand" "N,l")))]
   "TARGET_THUMB1"
-  "lsr\\t%0, %1, %2"
+  "lsrs\\t%0, %1, %2"
   [(set_attr "length" "2")
    (set_attr "type" "shift_imm,shift_reg")
    (set_attr "conds" "set")])
@@ -264,7 +264,7 @@
 	(rotatert:SI (match_operand:SI 1 "register_operand" "0")
 		     (match_operand:SI 2 "register_operand" "l")))]
   "TARGET_THUMB1"
-  "ror\\t%0, %0, %2"
+  "rors\\t%0, %0, %2"
   [(set_attr "type" "shift_reg")
    (set_attr "length" "2")]
 )
@@ -274,7 +274,7 @@
 	(neg:DI (match_operand:DI 1 "register_operand" "l")))
    (clobber (reg:CC CC_REGNUM))]
   "TARGET_THUMB1"
-  "mov\\t%R0, #0\;neg\\t%Q0, %Q1\;sbc\\t%R0, %R1"
+  "movs\\t%R0, #0\;rsbs\\t%Q0, %Q1, #0\;sbcs\\t%R0, %R1"
   [(set_attr "length" "6")
    (set_attr "type" "multiple")]
 )
@@ -283,7 +283,7 @@
   [(set (match_operand:SI         0 "register_operand" "=l")
 	(neg:SI (match_operand:SI 1 "register_operand" "l")))]
   "TARGET_THUMB1"
-  "neg\\t%0, %1"
+  "rsbs\\t%0, %1, #0"
   [(set_attr "length" "2")
    (set_attr "type" "alu_imm")]
 )
@@ -322,7 +322,7 @@
   [(set (match_operand:SI         0 "register_operand" "=l")
 	(not:SI (match_operand:SI 1 "register_operand"  "l")))]
   "TARGET_THUMB1"
-  "mvn\\t%0, %1"
+  "mvns\\t%0, %1"
   [(set_attr "length" "2")
    (set_attr "type" "mvn_reg")]
 )
@@ -456,7 +456,7 @@
       ops[3] = ops[0];
     else
       ops[3] = operands[2];
-    output_asm_insn (\"mov\\t%3, %2\;ldrsh\\t%0, [%1, %3]\", ops);
+    output_asm_insn (\"movs\\t%3, %2\;ldrsh\\t%0, [%1, %3]\", ops);
     return \"\";
   }"
   [(set_attr_alternative "length"
@@ -586,10 +586,10 @@
 	return \"add\\t%0,  %1,  #0\;add\\t%H0, %H1, #0\";
       return   \"add\\t%H0, %H1, #0\;add\\t%0,  %1,  #0\";
     case 1:
-      return \"mov\\t%Q0, %1\;mov\\t%R0, #0\";
+      return \"movs\\t%Q0, %1\;movs\\t%R0, #0\";
     case 2:
       operands[1] = GEN_INT (- INTVAL (operands[1]));
-      return \"mov\\t%Q0, %1\;neg\\t%Q0, %Q0\;asr\\t%R0, %Q0, #31\";
+      return \"movs\\t%Q0, %1\;rsbs\\t%Q0, %Q0, #0\;asrs\\t%R0, %Q0, #31\";
     case 3:
       return \"ldmia\\t%1, {%0, %H0}\";
     case 4:
@@ -619,8 +619,8 @@
    && (   register_operand (operands[0], SImode)
        || register_operand (operands[1], SImode))"
   "@
-   mov	%0, %1
-   mov	%0, %1
+   movs	%0, %1
+   movs	%0, %1
    #
    #
    ldmia\\t%1, {%0}
@@ -715,11 +715,11 @@
   "*
   switch (which_alternative)
     {
-    case 0: return \"add	%0, %1, #0\";
+    case 0: return \"adds	%0, %1, #0\";
     case 2: return \"strh	%1, %0\";
     case 3: return \"mov	%0, %1\";
     case 4: return \"mov	%0, %1\";
-    case 5: return \"mov	%0, %1\";
+    case 5: return \"movs	%0, %1\";
     default: gcc_unreachable ();
     case 1:
       /* The stack pointer can end up being taken as an index register.
@@ -767,12 +767,12 @@
    && (   register_operand (operands[0], QImode)
        || register_operand (operands[1], QImode))"
   "@
-   add\\t%0, %1, #0
+   adds\\t%0, %1, #0
    ldrb\\t%0, %1
    strb\\t%1, %0
    mov\\t%0, %1
    mov\\t%0, %1
-   mov\\t%0, %1"
+   movs\\t%0, %1"
   [(set_attr "length" "2")
    (set_attr "type" "alu_imm,load1,store1,mov_reg,mov_imm,mov_imm")
    (set_attr "pool_range" "*,32,*,*,*,*")
@@ -819,7 +819,7 @@
    && (   register_operand (operands[0], SFmode)
        || register_operand (operands[1], SFmode))"
   "@
-   add\\t%0, %1, #0
+   adds\\t%0, %1, #0
    ldmia\\t%1, {%0}
    stmia\\t%0, {%1}
    ldr\\t%0, %1
@@ -848,8 +848,8 @@
     default:
     case 0:
       if (REGNO (operands[1]) == REGNO (operands[0]) + 1)
-	return \"add\\t%0, %1, #0\;add\\t%H0, %H1, #0\";
-      return \"add\\t%H0, %H1, #0\;add\\t%0, %1, #0\";
+	return \"adds\\t%0, %1, #0\;adds\\t%H0, %H1, #0\";
+      return \"adds\\t%H0, %H1, #0\;adds\\t%0, %1, #0\";
     case 1:
       return \"ldmia\\t%1, {%0, %H0}\";
     case 2:
@@ -1013,7 +1013,7 @@
    (clobber (match_scratch:SI 0 "=l,l"))]
   "TARGET_THUMB1"
   "*
-  output_asm_insn (\"add\\t%0, %1, #%n2\", operands);
+  output_asm_insn (\"adds\\t%0, %1, #%n2\", operands);
 
   switch (get_attr_length (insn))
     {
@@ -1095,7 +1095,7 @@
   op[1] = operands[1];
   op[2] = GEN_INT (32 - 1 - INTVAL (operands[2]));
 
-  output_asm_insn (\"lsl\\t%0, %1, %2\", op);
+  output_asm_insn (\"lsls\\t%0, %1, %2\", op);
   switch (get_attr_length (insn))
     {
     case 4:  return \"b%d0\\t%l3\";
@@ -1140,7 +1140,7 @@
   op[1] = operands[1];
   op[2] = GEN_INT (32 - INTVAL (operands[2]));
 
-  output_asm_insn (\"lsl\\t%0, %1, %2\", op);
+  output_asm_insn (\"lsls\\t%0, %1, %2\", op);
   switch (get_attr_length (insn))
     {
     case 4:  return \"b%d0\\t%l3\";
@@ -1224,20 +1224,20 @@
      cond[1] = operands[4];
 
      if (which_alternative == 0)
-       output_asm_insn (\"sub\\t%0, %2, #1\", operands);
+       output_asm_insn (\"subs\\t%0, %2, #1\", operands);
      else if (which_alternative == 1)
        {
 	 /* We must provide an alternative for a hi reg because reload
 	    cannot handle output reloads on a jump instruction, but we
 	    can't subtract into that.  Fortunately a mov from lo to hi
 	    does not clobber the condition codes.  */
-	 output_asm_insn (\"sub\\t%1, %2, #1\", operands);
+	 output_asm_insn (\"subs\\t%1, %2, #1\", operands);
 	 output_asm_insn (\"mov\\t%0, %1\", operands);
        }
      else
        {
 	 /* Similarly, but the target is memory.  */
-	 output_asm_insn (\"sub\\t%1, %2, #1\", operands);
+	 output_asm_insn (\"subs\\t%1, %2, #1\", operands);
 	 output_asm_insn (\"str\\t%1, %0\", operands);
        }
 
@@ -1336,9 +1336,9 @@
      cond[2] = operands[3];
 
      if (CONST_INT_P (cond[2]) && INTVAL (cond[2]) < 0)
-       output_asm_insn (\"sub\\t%0, %1, #%n2\", cond);
+       output_asm_insn (\"subs\\t%0, %1, #%n2\", cond);
      else
-       output_asm_insn (\"add\\t%0, %1, %2\", cond);
+       output_asm_insn (\"adds\\t%0, %1, %2\", cond);
 
      if (which_alternative >= 2
 	 && which_alternative < 4)
@@ -1418,13 +1418,13 @@
 	 break;
        case 2:
 	 if (INTVAL (operands[2]) < 0)
-	   output_asm_insn (\"sub\t%0, %1, %2\", operands);
+	   output_asm_insn (\"subs\t%0, %1, %2\", operands);
 	 else
 	   output_asm_insn (\"add\t%0, %1, %2\", operands);
 	 break;
        case 3:
 	 if (INTVAL (operands[2]) < 0)
-	   output_asm_insn (\"sub\t%0, %0, %2\", operands);
+	   output_asm_insn (\"subs\t%0, %0, %2\", operands);
 	 else
 	   output_asm_insn (\"add\t%0, %0, %2\", operands);
 	 break;
@@ -1465,7 +1465,7 @@
 		      (const_int 0)))
    (clobber (match_scratch:SI 1 "=l"))]
   "TARGET_THUMB1"
-  "orr\\t%1, %Q0, %R0"
+  "orrs\\t%1, %Q0, %R0"
   [(set_attr "conds" "set")
    (set_attr "length" "2")
    (set_attr "type" "logics_reg")]
@@ -1498,8 +1498,8 @@
    (clobber (match_operand:SI 2 "s_register_operand" "=X,l"))]
   "TARGET_THUMB1"
   "@
-   neg\\t%0, %1\;adc\\t%0, %0, %1
-   neg\\t%2, %1\;adc\\t%0, %1, %2"
+   rsbs\\t%0, %1, #0\;adcs\\t%0, %0, %1
+   rsbs\\t%2, %1, #0\;adcs\\t%0, %1, %2"
   [(set_attr "length" "4")
    (set_attr "type" "multiple")]
 )
@@ -1510,7 +1510,7 @@
 	       (const_int 0)))
    (clobber (match_operand:SI 2 "s_register_operand" "=l"))]
   "TARGET_THUMB1"
-  "sub\\t%2, %1, #1\;sbc\\t%0, %1, %2"
+  "subs\\t%2, %1, #1\;sbcs\\t%0, %1, %2"
   [(set_attr "length" "4")]
 )
 
@@ -1520,7 +1520,7 @@
         (neg:SI (ltu:SI (match_operand:SI 1 "s_register_operand" "l,*h")
 			(match_operand:SI 2 "thumb1_cmp_operand" "lI*h,*r"))))]
   "TARGET_THUMB1"
-  "cmp\\t%1, %2\;sbc\\t%0, %0, %0"
+  "cmp\\t%1, %2\;sbcs\\t%0, %0, %0"
   [(set_attr "length" "4")
    (set_attr "type" "multiple")]
 )
@@ -1548,7 +1548,7 @@
 		 (geu:SI (match_operand:SI 3 "s_register_operand" "l")
 			 (match_operand:SI 4 "thumb1_cmp_operand" "lI"))))]
   "TARGET_THUMB1"
-  "cmp\\t%3, %4\;adc\\t%0, %1, %2"
+  "cmp\\t%3, %4\;adcs\\t%0, %1, %2"
   [(set_attr "length" "4")
    (set_attr "type" "multiple")]
 )
diff --git a/gcc/testsuite/gcc.target/arm/anddi_notdi-1.c b/gcc/testsuite/gcc.target/arm/anddi_notdi-1.c
index cfb33fc..d9489d3 100644
--- a/gcc/testsuite/gcc.target/arm/anddi_notdi-1.c
+++ b/gcc/testsuite/gcc.target/arm/anddi_notdi-1.c
@@ -60,6 +60,7 @@ int main ()
   return 0;
 }
 
-/* { dg-final { scan-assembler-times "bic\t" 6 } } */
+/* { dg-final { scan-assembler-times "bics\t" 6 { target arm_thumb1 } } } */
+/* { dg-final { scan-assembler-times "bic\t" 6 { target { ! arm_thumb1 } } } } */
 
 /* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/pr40956.c b/gcc/testsuite/gcc.target/arm/pr40956.c
index 167cdc6..4fefa49 100644
--- a/gcc/testsuite/gcc.target/arm/pr40956.c
+++ b/gcc/testsuite/gcc.target/arm/pr40956.c
@@ -1,7 +1,8 @@
 /* { dg-options "-Os -fpic" }  */
 /* { dg-require-effective-target fpic } */
 /* Make sure the constant "0" is loaded into register only once.  */
-/* { dg-final { scan-assembler-times "mov\[\\t \]*r., #0" 1 } } */
+/* { dg-final { scan-assembler-times "movs\[\\t \]*r., #0" 1 { target arm_thumb1 } } } */
+/* { dg-final { scan-assembler-times "mov\[\\t \]*r., #0" 1 { target { ! arm_thumb1 } } } } */
 
 int foo(int p, int* q)
 {
diff --git a/gcc/testsuite/gcc.target/arm/thumb1-Os-mult.c b/gcc/testsuite/gcc.target/arm/thumb1-Os-mult.c
index 31b8bd6..08d735c 100644
--- a/gcc/testsuite/gcc.target/arm/thumb1-Os-mult.c
+++ b/gcc/testsuite/gcc.target/arm/thumb1-Os-mult.c
@@ -9,4 +9,4 @@ mymul3 (int x)
   return x * 0x555;
 }
 
-/* { dg-final { scan-assembler "mul\[\\t \]*r.,\[\\t \]*r." } } */
+/* { dg-final { scan-assembler "muls\[\\t \]*r.,\[\\t \]*r." } } */
diff --git a/gcc/testsuite/gcc.target/arm/thumb1-load-64bit-constant-3.c b/gcc/testsuite/gcc.target/arm/thumb1-load-64bit-constant-3.c
index cf4d0be..2e434fa 100644
--- a/gcc/testsuite/gcc.target/arm/thumb1-load-64bit-constant-3.c
+++ b/gcc/testsuite/gcc.target/arm/thumb1-load-64bit-constant-3.c
@@ -10,5 +10,5 @@ foo (int len)
 }
 
 /* { dg-final { scan-assembler-not "ldr" } } */
-/* { dg-final { scan-assembler-times "neg" 1 } } */
+/* { dg-final { scan-assembler-times "negs" 1 } } */
 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [2/2][PATCH,ARM]Generate UAL assembly code for Thumb-1 target
  2014-10-21 11:20 [2/2][PATCH,ARM]Generate UAL assembly code for Thumb-1 target Terry Guo
@ 2014-11-04  8:22 ` Ramana Radhakrishnan
  2014-11-07  9:27   ` Christian Bruel
  0 siblings, 1 reply; 5+ messages in thread
From: Ramana Radhakrishnan @ 2014-11-04  8:22 UTC (permalink / raw)
  To: Terry Guo; +Cc: gcc-patches, Ramana Radhakrishnan

On Tue, Oct 21, 2014 at 12:19 PM, Terry Guo <terry.guo@arm.com> wrote:
> Hi there,
>
> Attached patch intends to enable GCC generate UAL format code for Thumb1
> target. Tested with regression test and no regressions. Is it OK to trunk?

This is OK -  Please don't commit it until we have sorted out patch
1/2 with the options. I'd encourage a follow-up patch to switch ARM
state also to UAL :) ...

Ramana

>
> BR,
> Terry
>
> 2014-10-21  Terry Guo  <terry.guo@arm.com>
>
>            * config/arm/arm.c (arm_output_mi_thunk): Use UAL for Thumb1
> target.
>            * config/arm/thumb1.md: Likewise.
>
> gcc/testsuite
> 2014-10-21  Terry Guo  <terry.guo@arm.com>
>
>             * gcc.target/arm/anddi_notdi-1.c: Match with UAL format.
>             * gcc.target/arm/pr40956.c: Likewise.
>             * gcc.target/arm/thumb1-Os-mult.c: Likewise.
>              * gcc.target/arm/thumb1-load-64bit-constant-3.c: Likewise.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [2/2][PATCH,ARM]Generate UAL assembly code for Thumb-1 target
  2014-11-04  8:22 ` Ramana Radhakrishnan
@ 2014-11-07  9:27   ` Christian Bruel
  2014-11-07 10:00     ` Terry Guo
  2014-11-11  9:23     ` Terry Guo
  0 siblings, 2 replies; 5+ messages in thread
From: Christian Bruel @ 2014-11-07  9:27 UTC (permalink / raw)
  To: terry Guo; +Cc: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 308 bytes --]

hi,

the ARM bootstrap seems to fail for libgcc2.c on the thumb multilib for 
libgcc2: muldi3 -mthumb -O2  -g

/tmp/ccYrycUw.s: Assembler messages:
/tmp/ccYrycUw.s:69: Error: MOV Rd, Rs with two low registers is not 
permitted on this architecture -- `mov r6,r7'

preprocessed attached.

Thanks

Christian



[-- Attachment #2: muldi3.i --]
[-- Type: text/plain, Size: 56616 bytes --]

typedef int ptrdiff_t;
typedef unsigned int size_t;
typedef unsigned int wchar_t;
typedef struct {
  long long __max_align_ll __attribute__((__aligned__(__alignof__(long long))));
  long double __max_align_ld __attribute__((__aligned__(__alignof__(long double))));
} max_align_t;
extern void *malloc (size_t);
extern void free (void *);
extern int atexit (void (*)(void));
extern void abort (void) __attribute__ ((__noreturn__));
extern size_t strlen (const char *);
extern void *memcpy (void *, const void *, size_t);
extern void *memset (void *, int, size_t);
typedef unsigned int hashval_t;
typedef hashval_t (*htab_hash) (const void *);
typedef int (*htab_eq) (const void *, const void *);
typedef void (*htab_del) (void *);
typedef int (*htab_trav) (void **, void *);
typedef void *(*htab_alloc) (size_t, size_t);
typedef void (*htab_free) (void *);
typedef void *(*htab_alloc_with_arg) (void *, size_t, size_t);
typedef void (*htab_free_with_arg) (void *, void *);
struct htab {
  htab_hash hash_f;
  htab_eq eq_f;
  htab_del del_f;
  void ** entries;
  size_t size;
  size_t n_elements;
  size_t n_deleted;
  unsigned int searches;
  unsigned int collisions;
  htab_alloc alloc_f;
  htab_free free_f;
  void * alloc_arg;
  htab_alloc_with_arg alloc_with_arg_f;
  htab_free_with_arg free_with_arg_f;
  unsigned int size_prime_index;
};
typedef struct htab *htab_t;
enum insert_option {NO_INSERT, INSERT};
extern htab_t htab_create_alloc (size_t, htab_hash,
                                    htab_eq, htab_del,
                                    htab_alloc, htab_free);
extern htab_t htab_create_alloc_ex (size_t, htab_hash,
                                      htab_eq, htab_del,
                                      void *, htab_alloc_with_arg,
                                      htab_free_with_arg);
extern htab_t htab_create_typed_alloc (size_t, htab_hash, htab_eq, htab_del,
     htab_alloc, htab_alloc, htab_free);
extern htab_t htab_create (size_t, htab_hash, htab_eq, htab_del);
extern htab_t htab_try_create (size_t, htab_hash, htab_eq, htab_del);
extern void htab_set_functions_ex (htab_t, htab_hash,
                                       htab_eq, htab_del,
                                       void *, htab_alloc_with_arg,
                                       htab_free_with_arg);
extern void htab_delete (htab_t);
extern void htab_empty (htab_t);
extern void * htab_find (htab_t, const void *);
extern void ** htab_find_slot (htab_t, const void *, enum insert_option);
extern void * htab_find_with_hash (htab_t, const void *, hashval_t);
extern void ** htab_find_slot_with_hash (htab_t, const void *,
       hashval_t, enum insert_option);
extern void htab_clear_slot (htab_t, void **);
extern void htab_remove_elt (htab_t, void *);
extern void htab_remove_elt_with_hash (htab_t, void *, hashval_t);
extern void htab_traverse (htab_t, htab_trav, void *);
extern void htab_traverse_noresize (htab_t, htab_trav, void *);
extern size_t htab_size (htab_t);
extern size_t htab_elements (htab_t);
extern double htab_collisions (htab_t);
extern htab_hash htab_hash_pointer;
extern htab_eq htab_eq_pointer;
extern hashval_t htab_hash_string (const void *);
extern hashval_t iterative_hash (const void *, size_t, hashval_t);
extern int filename_cmp (const char *s1, const char *s2);
extern int filename_ncmp (const char *s1, const char *s2,
     size_t n);
extern hashval_t filename_hash (const void *s);
extern int filename_eq (const void *s1, const void *s2);
struct _dont_use_rtx_here_;
struct _dont_use_rtvec_here_;
struct _dont_use_rtx_insn_here_;
union _dont_use_tree_here_;
enum function_class {
  function_c94,
  function_c99_misc,
  function_c99_math_complex,
  function_sincos,
  function_c11_misc
};
enum memmodel
{
  MEMMODEL_RELAXED = 0,
  MEMMODEL_CONSUME = 1,
  MEMMODEL_ACQUIRE = 2,
  MEMMODEL_RELEASE = 3,
  MEMMODEL_ACQ_REL = 4,
  MEMMODEL_SEQ_CST = 5,
  MEMMODEL_LAST = 6
};
typedef void (*gt_pointer_operator) (void *, void *);
typedef unsigned char uchar;
enum debug_info_type
{
  NO_DEBUG,
  DBX_DEBUG,
  SDB_DEBUG,
  DWARF2_DEBUG,
  XCOFF_DEBUG,
  VMS_DEBUG,
  VMS_AND_DWARF2_DEBUG
};
enum debug_info_levels
{
  DINFO_LEVEL_NONE,
  DINFO_LEVEL_TERSE,
  DINFO_LEVEL_NORMAL,
  DINFO_LEVEL_VERBOSE
};
enum debug_info_usage
{
  DINFO_USAGE_DFN,
  DINFO_USAGE_DIR_USE,
  DINFO_USAGE_IND_USE,
  DINFO_USAGE_NUM_ENUMS
};
enum debug_struct_file
{
  DINFO_STRUCT_FILE_NONE,
  DINFO_STRUCT_FILE_BASE,
  DINFO_STRUCT_FILE_SYS,
  DINFO_STRUCT_FILE_ANY
};
enum symbol_visibility
{
  VISIBILITY_DEFAULT,
  VISIBILITY_PROTECTED,
  VISIBILITY_HIDDEN,
  VISIBILITY_INTERNAL
};
enum ivar_visibility
{
  IVAR_VISIBILITY_PRIVATE,
  IVAR_VISIBILITY_PROTECTED,
  IVAR_VISIBILITY_PUBLIC,
  IVAR_VISIBILITY_PACKAGE
};
enum stack_reuse_level
{
  SR_NONE,
  SR_NAMED_VARS,
  SR_ALL
};
enum ira_algorithm
{
  IRA_ALGORITHM_CB,
  IRA_ALGORITHM_PRIORITY
};
enum ira_region
{
  IRA_REGION_ONE,
  IRA_REGION_ALL,
  IRA_REGION_MIXED,
  IRA_REGION_AUTODETECT
};
enum excess_precision
{
  EXCESS_PRECISION_DEFAULT,
  EXCESS_PRECISION_FAST,
  EXCESS_PRECISION_STANDARD
};
enum stack_check_type
{
  NO_STACK_CHECK = 0,
  GENERIC_STACK_CHECK,
  STATIC_BUILTIN_STACK_CHECK,
  FULL_BUILTIN_STACK_CHECK
};
enum warn_strict_overflow_code
{
  WARN_STRICT_OVERFLOW_ALL = 1,
  WARN_STRICT_OVERFLOW_CONDITIONAL = 2,
  WARN_STRICT_OVERFLOW_COMPARISON = 3,
  WARN_STRICT_OVERFLOW_MISC = 4,
  WARN_STRICT_OVERFLOW_MAGNITUDE = 5
};
enum fp_contract_mode {
  FP_CONTRACT_OFF = 0,
  FP_CONTRACT_ON = 1,
  FP_CONTRACT_FAST = 2
};
enum vect_cost_model {
  VECT_COST_MODEL_UNLIMITED = 0,
  VECT_COST_MODEL_CHEAP = 1,
  VECT_COST_MODEL_DYNAMIC = 2,
  VECT_COST_MODEL_DEFAULT = 3
};
enum sanitize_code {
  SANITIZE_ADDRESS = 1 << 0,
  SANITIZE_USER_ADDRESS = 1 << 1,
  SANITIZE_KERNEL_ADDRESS = 1 << 2,
  SANITIZE_THREAD = 1 << 3,
  SANITIZE_LEAK = 1 << 4,
  SANITIZE_SHIFT = 1 << 5,
  SANITIZE_DIVIDE = 1 << 6,
  SANITIZE_UNREACHABLE = 1 << 7,
  SANITIZE_VLA = 1 << 8,
  SANITIZE_NULL = 1 << 9,
  SANITIZE_RETURN = 1 << 10,
  SANITIZE_SI_OVERFLOW = 1 << 11,
  SANITIZE_BOOL = 1 << 12,
  SANITIZE_ENUM = 1 << 13,
  SANITIZE_FLOAT_DIVIDE = 1 << 14,
  SANITIZE_FLOAT_CAST = 1 << 15,
  SANITIZE_BOUNDS = 1UL << 16,
  SANITIZE_ALIGNMENT = 1UL << 17,
  SANITIZE_NONNULL_ATTRIBUTE = 1UL << 18,
  SANITIZE_RETURNS_NONNULL_ATTRIBUTE = 1UL << 19,
  SANITIZE_OBJECT_SIZE = 1UL << 20,
  SANITIZE_UNDEFINED = SANITIZE_SHIFT | SANITIZE_DIVIDE | SANITIZE_UNREACHABLE
         | SANITIZE_VLA | SANITIZE_NULL | SANITIZE_RETURN
         | SANITIZE_SI_OVERFLOW | SANITIZE_BOOL | SANITIZE_ENUM
         | SANITIZE_BOUNDS | SANITIZE_ALIGNMENT
         | SANITIZE_NONNULL_ATTRIBUTE
         | SANITIZE_RETURNS_NONNULL_ATTRIBUTE
         | SANITIZE_OBJECT_SIZE,
  SANITIZE_NONDEFAULT = SANITIZE_FLOAT_DIVIDE | SANITIZE_FLOAT_CAST
};
enum vtv_priority {
  VTV_NO_PRIORITY = 0,
  VTV_STANDARD_PRIORITY = 1,
  VTV_PREINIT_PRIORITY = 2
};
enum lto_partition_model {
  LTO_PARTITION_NONE = 0,
  LTO_PARTITION_ONE = 1,
  LTO_PARTITION_BALANCED = 2,
  LTO_PARTITION_1TO1 = 3,
  LTO_PARTITION_MAX = 4
};
enum fgraphite_generator {
  FGRAPHITE_CODE_GEN_ISL = 0,
  FGRAPHITE_CODE_GEN_CLOOG = 1
};
enum processor_type
{
arm2,
arm250,
arm3,
arm6,
arm60,
arm600,
arm610,
arm620,
arm7,
arm7d,
arm7di,
arm70,
arm700,
arm700i,
arm710,
arm720,
arm710c,
arm7100,
arm7500,
arm7500fe,
arm7m,
arm7dm,
arm7dmi,
arm8,
arm810,
strongarm,
strongarm110,
strongarm1100,
strongarm1110,
fa526,
fa626,
arm7tdmi,
arm7tdmis,
arm710t,
arm720t,
arm740t,
arm9,
arm9tdmi,
arm920,
arm920t,
arm922t,
arm940t,
ep9312,
arm10tdmi,
arm1020t,
arm9e,
arm946es,
arm966es,
arm968es,
arm10e,
arm1020e,
arm1022e,
xscale,
iwmmxt,
iwmmxt2,
fa606te,
fa626te,
fmp626,
fa726te,
arm926ejs,
arm1026ejs,
arm1136js,
arm1136jfs,
arm1176jzs,
arm1176jzfs,
mpcorenovfp,
mpcore,
arm1156t2s,
arm1156t2fs,
cortexm1,
cortexm0,
cortexm0plus,
cortexm1smallmultiply,
cortexm0smallmultiply,
cortexm0plussmallmultiply,
genericv7a,
cortexa5,
cortexa7,
cortexa8,
cortexa9,
cortexa12,
cortexa15,
cortexr4,
cortexr4f,
cortexr5,
cortexr7,
cortexm7,
cortexm4,
cortexm3,
marvell_pj4,
cortexa15cortexa7,
cortexa53,
cortexa57,
cortexa57cortexa53,
  arm_none
};
enum arm_fp16_format_type
{
  ARM_FP16_FORMAT_NONE = 0,
  ARM_FP16_FORMAT_IEEE = 1,
  ARM_FP16_FORMAT_ALTERNATIVE = 2
};
enum arm_abi_type
{
  ARM_ABI_APCS,
  ARM_ABI_ATPCS,
  ARM_ABI_AAPCS,
  ARM_ABI_IWMMXT,
  ARM_ABI_AAPCS_LINUX
};
enum float_abi_type
{
  ARM_FLOAT_ABI_SOFT,
  ARM_FLOAT_ABI_SOFTFP,
  ARM_FLOAT_ABI_HARD
};
enum arm_tp_type {
  TP_AUTO,
  TP_SOFT,
  TP_CP15
};
enum arm_tls_type {
  TLS_GNU,
  TLS_GNU2
};
enum opt_code
{
  OPT____ = 0,
  OPT__help = 32,
  OPT__help_ = 33,
  OPT__no_sysroot_suffix = 60,
  OPT__output_pch_ = 66,
  OPT__param = 68,
  OPT__sysroot_ = 101,
  OPT__target_help = 102,
  OPT__version = 112,
  OPT_A = 115,
  OPT_B = 116,
  OPT_C = 117,
  OPT_CC = 118,
  OPT_D = 120,
  OPT_E = 121,
  OPT_F = 122,
  OPT_H = 123,
  OPT_I = 124,
  OPT_J = 125,
  OPT_L = 126,
  OPT_M = 127,
  OPT_MD = 128,
  OPT_MD_ = 129,
  OPT_MF = 130,
  OPT_MG = 131,
  OPT_MM = 132,
  OPT_MMD = 133,
  OPT_MMD_ = 134,
  OPT_MP = 135,
  OPT_MQ = 136,
  OPT_MT = 137,
  OPT_N = 138,
  OPT_O = 139,
  OPT_Ofast = 140,
  OPT_Og = 141,
  OPT_Os = 142,
  OPT_P = 143,
  OPT_Q = 144,
  OPT_Qn = 145,
  OPT_Qy = 146,
  OPT_R = 147,
  OPT_S = 148,
  OPT_T = 149,
  OPT_Tbss = 150,
  OPT_Tbss_ = 151,
  OPT_Tdata = 152,
  OPT_Tdata_ = 153,
  OPT_Ttext = 154,
  OPT_Ttext_ = 155,
  OPT_U = 156,
  OPT_Wa_ = 158,
  OPT_Wabi = 159,
  OPT_Wabi_tag = 160,
  OPT_Wabi_ = 161,
  OPT_Waddress = 162,
  OPT_Waggregate_return = 163,
  OPT_Waggressive_loop_optimizations = 164,
  OPT_Waliasing = 165,
  OPT_Walign_commons = 166,
  OPT_Wall = 167,
  OPT_Wall_deprecation = 168,
  OPT_Wall_javadoc = 169,
  OPT_Wampersand = 170,
  OPT_Warray_bounds = 171,
  OPT_Warray_temporaries = 172,
  OPT_Wassert_identifier = 173,
  OPT_Wassign_intercept = 174,
  OPT_Wattributes = 175,
  OPT_Wbad_function_cast = 176,
  OPT_Wbool_compare = 177,
  OPT_Wboxing = 178,
  OPT_Wbuiltin_macro_redefined = 179,
  OPT_Wc___compat = 180,
  OPT_Wc__0x_compat = 181,
  OPT_Wc_binding_type = 183,
  OPT_Wc90_c99_compat = 184,
  OPT_Wc99_c11_compat = 185,
  OPT_Wcast_align = 186,
  OPT_Wcast_qual = 187,
  OPT_Wchar_concat = 188,
  OPT_Wchar_subscripts = 189,
  OPT_Wcharacter_truncation = 190,
  OPT_Wchkp = 191,
  OPT_Wclobbered = 192,
  OPT_Wcomment = 193,
  OPT_Wcompare_reals = 195,
  OPT_Wcondition_assign = 196,
  OPT_Wconditionally_supported = 197,
  OPT_Wconstructor_name = 198,
  OPT_Wconversion = 199,
  OPT_Wconversion_extra = 200,
  OPT_Wconversion_null = 201,
  OPT_Wcoverage_mismatch = 202,
  OPT_Wcpp = 203,
  OPT_Wctor_dtor_privacy = 204,
  OPT_Wdate_time = 205,
  OPT_Wdeclaration_after_statement = 206,
  OPT_Wdelete_incomplete = 207,
  OPT_Wdelete_non_virtual_dtor = 208,
  OPT_Wdep_ann = 209,
  OPT_Wdeprecated = 210,
  OPT_Wdeprecated_declarations = 211,
  OPT_Wdesignated_init = 212,
  OPT_Wdisabled_optimization = 213,
  OPT_Wdiscarded_qualifiers = 214,
  OPT_Wdiscouraged = 215,
  OPT_Wdiv_by_zero = 216,
  OPT_Wdouble_promotion = 217,
  OPT_Weffc__ = 218,
  OPT_Wempty_block = 219,
  OPT_Wempty_body = 220,
  OPT_Wendif_labels = 221,
  OPT_Wenum_compare = 222,
  OPT_Wenum_identifier = 223,
  OPT_Wenum_switch = 224,
  OPT_Werror = 225,
  OPT_Werror_ = 227,
  OPT_Wextra = 228,
  OPT_Wextraneous_semicolon = 229,
  OPT_Wfallthrough = 230,
  OPT_Wfatal_errors = 231,
  OPT_Wfield_hiding = 232,
  OPT_Wfinal_bound = 233,
  OPT_Wfinally = 234,
  OPT_Wfloat_conversion = 235,
  OPT_Wfloat_equal = 236,
  OPT_Wforbidden = 237,
  OPT_Wformat_contains_nul = 239,
  OPT_Wformat_extra_args = 240,
  OPT_Wformat_nonliteral = 241,
  OPT_Wformat_security = 242,
  OPT_Wformat_signedness = 243,
  OPT_Wformat_y2k = 244,
  OPT_Wformat_zero_length = 245,
  OPT_Wformat_ = 246,
  OPT_Wframe_larger_than_ = 247,
  OPT_Wfree_nonheap_object = 248,
  OPT_Wfunction_elimination = 249,
  OPT_Whiding = 250,
  OPT_Wignored_qualifiers = 251,
  OPT_Wimplicit = 252,
  OPT_Wimplicit_function_declaration = 253,
  OPT_Wimplicit_int = 254,
  OPT_Wimplicit_interface = 255,
  OPT_Wimplicit_procedure = 256,
  OPT_Wincompatible_pointer_types = 258,
  OPT_Windirect_static = 259,
  OPT_Winherited_variadic_ctor = 260,
  OPT_Winit_self = 261,
  OPT_Winline = 262,
  OPT_Wint_conversion = 263,
  OPT_Wint_to_pointer_cast = 264,
  OPT_Wintf_annotation = 265,
  OPT_Wintf_non_inherited = 266,
  OPT_Wintrinsic_shadow = 267,
  OPT_Wintrinsics_std = 268,
  OPT_Winvalid_memory_model = 269,
  OPT_Winvalid_offsetof = 270,
  OPT_Winvalid_pch = 271,
  OPT_Wjavadoc = 272,
  OPT_Wjump_misses_init = 273,
  OPT_Wl_ = 274,
  OPT_Wlarger_than_ = 276,
  OPT_Wline_truncation = 277,
  OPT_Wliteral_suffix = 278,
  OPT_Wlocal_hiding = 279,
  OPT_Wlogical_not_parentheses = 280,
  OPT_Wlogical_op = 281,
  OPT_Wlong_long = 282,
  OPT_Wmain = 283,
  OPT_Wmasked_catch_block = 284,
  OPT_Wmaybe_uninitialized = 285,
  OPT_Wmemset_transposed_args = 286,
  OPT_Wmissing_braces = 287,
  OPT_Wmissing_declarations = 288,
  OPT_Wmissing_field_initializers = 289,
  OPT_Wmissing_include_dirs = 291,
  OPT_Wmissing_parameter_type = 293,
  OPT_Wmissing_prototypes = 294,
  OPT_Wmultichar = 296,
  OPT_Wnarrowing = 297,
  OPT_Wnested_externs = 298,
  OPT_Wnls = 299,
  OPT_Wno_effect_assign = 300,
  OPT_Wnoexcept = 301,
  OPT_Wnon_template_friend = 302,
  OPT_Wnon_virtual_dtor = 303,
  OPT_Wnonnull = 304,
  OPT_Wnormalized_ = 306,
  OPT_Wnull = 307,
  OPT_Wodr = 308,
  OPT_Wold_style_cast = 309,
  OPT_Wold_style_declaration = 310,
  OPT_Wold_style_definition = 311,
  OPT_Wopenmp_simd = 312,
  OPT_Wout_of_date = 313,
  OPT_Wover_ann = 314,
  OPT_Woverflow = 315,
  OPT_Woverlength_strings = 316,
  OPT_Woverloaded_virtual = 317,
  OPT_Woverride_init = 318,
  OPT_Wp_ = 319,
  OPT_Wpacked = 320,
  OPT_Wpacked_bitfield_compat = 321,
  OPT_Wpadded = 322,
  OPT_Wparam_assign = 323,
  OPT_Wparentheses = 324,
  OPT_Wpedantic = 325,
  OPT_Wpkg_default_method = 326,
  OPT_Wpmf_conversions = 327,
  OPT_Wpointer_arith = 328,
  OPT_Wpointer_sign = 329,
  OPT_Wpointer_to_int_cast = 330,
  OPT_Wpragmas = 331,
  OPT_Wproperty_assign_default = 332,
  OPT_Wprotocol = 333,
  OPT_Wpsabi = 334,
  OPT_Wraw = 335,
  OPT_Wreal_q_constant = 336,
  OPT_Wrealloc_lhs = 337,
  OPT_Wrealloc_lhs_all = 338,
  OPT_Wredundant_decls = 339,
  OPT_Wredundant_modifiers = 340,
  OPT_Wreorder = 341,
  OPT_Wreturn_local_addr = 342,
  OPT_Wreturn_type = 343,
  OPT_Wselector = 344,
  OPT_Wsequence_point = 345,
  OPT_Wserial = 346,
  OPT_Wshadow = 347,
  OPT_Wshadow_ivar = 348,
  OPT_Wsign_compare = 349,
  OPT_Wsign_conversion = 350,
  OPT_Wsign_promo = 351,
  OPT_Wsizeof_array_argument = 352,
  OPT_Wsizeof_pointer_memaccess = 353,
  OPT_Wspecial_param_hiding = 354,
  OPT_Wstack_protector = 355,
  OPT_Wstack_usage_ = 356,
  OPT_Wstatic_access = 357,
  OPT_Wstatic_receiver = 358,
  OPT_Wstrict_aliasing = 359,
  OPT_Wstrict_aliasing_ = 360,
  OPT_Wstrict_null_sentinel = 361,
  OPT_Wstrict_overflow = 362,
  OPT_Wstrict_overflow_ = 363,
  OPT_Wstrict_prototypes = 364,
  OPT_Wstrict_selector_match = 365,
  OPT_Wsuggest_attribute_const = 366,
  OPT_Wsuggest_attribute_format = 367,
  OPT_Wsuggest_attribute_noreturn = 368,
  OPT_Wsuggest_attribute_pure = 369,
  OPT_Wsuggest_final_methods = 370,
  OPT_Wsuggest_final_types = 371,
  OPT_Wsuppress = 372,
  OPT_Wsurprising = 373,
  OPT_Wswitch = 374,
  OPT_Wswitch_bool = 375,
  OPT_Wswitch_default = 376,
  OPT_Wswitch_enum = 377,
  OPT_Wsync_nand = 378,
  OPT_Wsynth = 379,
  OPT_Wsynthetic_access = 380,
  OPT_Wsystem_headers = 381,
  OPT_Wtabs = 382,
  OPT_Wtarget_lifetime = 383,
  OPT_Wtasks = 384,
  OPT_Wtraditional = 385,
  OPT_Wtraditional_conversion = 386,
  OPT_Wtrampolines = 387,
  OPT_Wtrigraphs = 388,
  OPT_Wtype_hiding = 389,
  OPT_Wtype_limits = 390,
  OPT_Wuncheck = 391,
  OPT_Wundeclared_selector = 392,
  OPT_Wundef = 393,
  OPT_Wunderflow = 394,
  OPT_Wuninitialized = 395,
  OPT_Wunknown_pragmas = 396,
  OPT_Wunnecessary_else = 397,
  OPT_Wunqualified_field = 398,
  OPT_Wunsafe_loop_optimizations = 400,
  OPT_Wunsuffixed_float_constants = 401,
  OPT_Wunused = 402,
  OPT_Wunused_argument = 403,
  OPT_Wunused_but_set_parameter = 404,
  OPT_Wunused_but_set_variable = 405,
  OPT_Wunused_dummy_argument = 406,
  OPT_Wunused_function = 407,
  OPT_Wunused_import = 408,
  OPT_Wunused_label = 409,
  OPT_Wunused_local = 410,
  OPT_Wunused_local_typedefs = 411,
  OPT_Wunused_macros = 412,
  OPT_Wunused_parameter = 413,
  OPT_Wunused_private = 414,
  OPT_Wunused_result = 415,
  OPT_Wunused_thrown = 416,
  OPT_Wunused_value = 417,
  OPT_Wunused_variable = 418,
  OPT_Wuse_without_only = 419,
  OPT_Wuseless_cast = 420,
  OPT_Wuseless_type_check = 421,
  OPT_Wvarargs = 422,
  OPT_Wvarargs_cast = 423,
  OPT_Wvariadic_macros = 424,
  OPT_Wvector_operation_performance = 425,
  OPT_Wvirtual_move_assign = 426,
  OPT_Wvla = 427,
  OPT_Wvolatile_register_var = 428,
  OPT_Wwarning_token = 429,
  OPT_Wwrite_strings = 430,
  OPT_Wzero_as_null_pointer_constant = 431,
  OPT_Wzerotrip = 432,
  OPT_Xassembler = 433,
  OPT_Xlinker = 434,
  OPT_Xpreprocessor = 435,
  OPT_Z = 436,
  OPT_ansi = 437,
  OPT_aux_info = 438,
  OPT_auxbase = 440,
  OPT_auxbase_strip = 441,
  OPT_c = 443,
  OPT_coverage = 445,
  OPT_cpp = 446,
  OPT_cpp_ = 447,
  OPT_d = 448,
  OPT_dumpbase = 449,
  OPT_dumpdir = 450,
  OPT_dumpmachine = 451,
  OPT_dumpspecs = 452,
  OPT_dumpversion = 453,
  OPT_e = 454,
  OPT_export_dynamic = 456,
  OPT_extdirs = 457,
  OPT_fPIC = 459,
  OPT_fPIE = 460,
  OPT_fRTS_ = 461,
  OPT_fabi_compat_version_ = 462,
  OPT_fabi_version_ = 463,
  OPT_faccess_control = 464,
  OPT_fada_spec_parent_ = 465,
  OPT_faggressive_function_elimination = 466,
  OPT_faggressive_loop_optimizations = 467,
  OPT_falign_commons = 468,
  OPT_falign_functions = 469,
  OPT_falign_functions_ = 470,
  OPT_falign_jumps = 471,
  OPT_falign_jumps_ = 472,
  OPT_falign_labels = 473,
  OPT_falign_labels_ = 474,
  OPT_falign_loops = 475,
  OPT_falign_loops_ = 476,
  OPT_fall_intrinsics = 477,
  OPT_fallow_leading_underscore = 479,
  OPT_fallow_parameterless_variadic_functions = 480,
  OPT_fasan_shadow_offset_ = 486,
  OPT_fasm = 487,
  OPT_fassert = 488,
  OPT_fassociative_math = 489,
  OPT_fassume_compiled = 490,
  OPT_fassume_compiled_ = 491,
  OPT_fasynchronous_unwind_tables = 492,
  OPT_fauto_inc_dec = 493,
  OPT_fauto_profile = 494,
  OPT_fauto_profile_ = 495,
  OPT_fautomatic = 496,
  OPT_faux_classpath = 497,
  OPT_fbackslash = 498,
  OPT_fbacktrace = 499,
  OPT_fblas_matmul_limit_ = 500,
  OPT_fbootclasspath_ = 501,
  OPT_fbootstrap_classes = 502,
  OPT_fbounds_check = 503,
  OPT_fbranch_count_reg = 504,
  OPT_fbranch_probabilities = 505,
  OPT_fbranch_target_load_optimize = 506,
  OPT_fbranch_target_load_optimize2 = 507,
  OPT_fbtr_bb_exclusive = 508,
  OPT_fbuilding_libgcc = 509,
  OPT_fbuiltin = 510,
  OPT_fbuiltin_ = 511,
  OPT_fcall_saved_ = 512,
  OPT_fcall_used_ = 513,
  OPT_fcaller_saves = 514,
  OPT_fcanonical_system_headers = 515,
  OPT_fcheck_array_temporaries = 516,
  OPT_fcheck_data_deps = 517,
  OPT_fcheck_new = 518,
  OPT_fcheck_pointer_bounds = 519,
  OPT_fcheck_references = 520,
  OPT_fcheck_ = 521,
  OPT_fchkp_check_incomplete_type = 522,
  OPT_fchkp_check_read = 523,
  OPT_fchkp_check_write = 524,
  OPT_fchkp_first_field_has_own_bounds = 525,
  OPT_fchkp_instrument_calls = 526,
  OPT_fchkp_instrument_marked_only = 527,
  OPT_fchkp_narrow_bounds = 528,
  OPT_fchkp_narrow_to_innermost_array = 529,
  OPT_fchkp_optimize = 530,
  OPT_fchkp_store_bounds = 531,
  OPT_fchkp_treat_zero_dynamic_size_as_infinite = 532,
  OPT_fchkp_use_fast_string_functions = 533,
  OPT_fchkp_use_nochk_string_functions = 534,
  OPT_fchkp_use_static_bounds = 535,
  OPT_fchkp_use_static_const_bounds = 536,
  OPT_fchkp_zero_input_bounds_for_main = 537,
  OPT_fcilkplus = 538,
  OPT_fclasspath_ = 539,
  OPT_fcoarray_ = 540,
  OPT_fcombine_stack_adjustments = 541,
  OPT_fcommon = 542,
  OPT_fcompare_debug = 543,
  OPT_fcompare_debug_second = 544,
  OPT_fcompare_debug_ = 545,
  OPT_fcompare_elim = 546,
  OPT_fcompile_resource_ = 547,
  OPT_fcond_mismatch = 548,
  OPT_fconserve_space = 549,
  OPT_fconserve_stack = 550,
  OPT_fconstant_string_class_ = 551,
  OPT_fconstexpr_depth_ = 552,
  OPT_fconvert_big_endian = 553,
  OPT_fconvert_little_endian = 554,
  OPT_fconvert_native = 555,
  OPT_fconvert_swap = 556,
  OPT_fcprop_registers = 557,
  OPT_fcray_pointer = 558,
  OPT_fcrossjumping = 559,
  OPT_fcse_follow_jumps = 560,
  OPT_fcx_fortran_rules = 562,
  OPT_fcx_limited_range = 563,
  OPT_fd_lines_as_code = 564,
  OPT_fd_lines_as_comments = 565,
  OPT_fdata_sections = 566,
  OPT_fdbg_cnt_list = 567,
  OPT_fdbg_cnt_ = 568,
  OPT_fdce = 569,
  OPT_fdebug_cpp = 570,
  OPT_fdebug_prefix_map_ = 571,
  OPT_fdebug_types_section = 572,
  OPT_fdeclone_ctor_dtor = 573,
  OPT_fdeduce_init_list = 574,
  OPT_fdefault_double_8 = 575,
  OPT_fdefault_integer_8 = 577,
  OPT_fdefault_real_8 = 578,
  OPT_fdefer_pop = 579,
  OPT_fdelayed_branch = 580,
  OPT_fdelete_dead_exceptions = 581,
  OPT_fdelete_null_pointer_checks = 582,
  OPT_fdevirtualize = 583,
  OPT_fdevirtualize_speculatively = 584,
  OPT_fdiagnostics_color_ = 586,
  OPT_fdiagnostics_show_caret = 587,
  OPT_fdiagnostics_show_location_ = 588,
  OPT_fdiagnostics_show_option = 589,
  OPT_fdirectives_only = 590,
  OPT_fdisable_ = 591,
  OPT_fdisable_assertions = 592,
  OPT_fdisable_assertions_ = 593,
  OPT_fdollar_ok = 594,
  OPT_fdollars_in_identifiers = 595,
  OPT_fdse = 596,
  OPT_fdump_ = 597,
  OPT_fdump_ada_spec = 598,
  OPT_fdump_ada_spec_slim = 599,
  OPT_fdump_final_insns = 601,
  OPT_fdump_final_insns_ = 602,
  OPT_fdump_fortran_optimized = 603,
  OPT_fdump_fortran_original = 604,
  OPT_fdump_go_spec_ = 605,
  OPT_fdump_noaddr = 606,
  OPT_fdump_parse_tree = 607,
  OPT_fdump_passes = 608,
  OPT_fdump_unnumbered = 609,
  OPT_fdump_unnumbered_links = 610,
  OPT_fdwarf2_cfi_asm = 611,
  OPT_fearly_inlining = 612,
  OPT_felide_constructors = 613,
  OPT_feliminate_dwarf2_dups = 614,
  OPT_feliminate_unused_debug_symbols = 615,
  OPT_feliminate_unused_debug_types = 616,
  OPT_femit_class_debug_always = 617,
  OPT_femit_class_file = 618,
  OPT_femit_class_files = 619,
  OPT_femit_struct_debug_baseonly = 620,
  OPT_femit_struct_debug_detailed_ = 621,
  OPT_femit_struct_debug_reduced = 622,
  OPT_fenable_ = 623,
  OPT_fenable_assertions = 624,
  OPT_fenable_assertions_ = 625,
  OPT_fencoding_ = 626,
  OPT_fenforce_eh_specs = 627,
  OPT_fexceptions = 629,
  OPT_fexcess_precision_ = 630,
  OPT_fexec_charset_ = 631,
  OPT_fexpensive_optimizations = 632,
  OPT_fext_numeric_literals = 633,
  OPT_fextdirs_ = 634,
  OPT_fextended_identifiers = 635,
  OPT_fextern_tls_init = 636,
  OPT_fexternal_blas = 637,
  OPT_ff2c = 639,
  OPT_ffast_math = 640,
  OPT_ffat_lto_objects = 641,
  OPT_ffilelist_file = 642,
  OPT_ffinite_math_only = 643,
  OPT_ffixed_ = 644,
  OPT_ffixed_form = 645,
  OPT_ffixed_line_length_ = 646,
  OPT_ffixed_line_length_none = 647,
  OPT_ffloat_store = 648,
  OPT_ffor_scope = 649,
  OPT_fforce_classes_archive_check = 651,
  OPT_fforward_propagate = 652,
  OPT_ffp_contract_ = 653,
  OPT_ffpe_summary_ = 654,
  OPT_ffpe_trap_ = 655,
  OPT_ffree_form = 656,
  OPT_ffree_line_length_ = 657,
  OPT_ffree_line_length_none = 658,
  OPT_ffreestanding = 659,
  OPT_ffriend_injection = 660,
  OPT_ffrontend_optimize = 661,
  OPT_ffunction_cse = 662,
  OPT_ffunction_sections = 663,
  OPT_fgcse = 664,
  OPT_fgcse_after_reload = 665,
  OPT_fgcse_las = 666,
  OPT_fgcse_lm = 667,
  OPT_fgcse_sm = 668,
  OPT_fgnu_keywords = 669,
  OPT_fgnu_runtime = 670,
  OPT_fgnu_tm = 671,
  OPT_fgnu_unique = 672,
  OPT_fgnu89_inline = 673,
  OPT_fgo_check_divide_overflow = 674,
  OPT_fgo_check_divide_zero = 675,
  OPT_fgo_dump_ = 676,
  OPT_fgo_optimize_ = 677,
  OPT_fgo_pkgpath_ = 678,
  OPT_fgo_prefix_ = 679,
  OPT_fgo_relative_import_path_ = 680,
  OPT_fgraphite = 681,
  OPT_fgraphite_code_generator_ = 682,
  OPT_fgraphite_identity = 683,
  OPT_fguess_branch_probability = 684,
  OPT_fhash_synchronization = 687,
  OPT_fhoist_adjacent_loads = 690,
  OPT_fhosted = 692,
  OPT_fident = 694,
  OPT_fif_conversion = 695,
  OPT_fif_conversion2 = 696,
  OPT_fimplement_inlines = 697,
  OPT_fimplicit_inline_templates = 698,
  OPT_fimplicit_none = 699,
  OPT_fimplicit_templates = 700,
  OPT_findirect_classes = 701,
  OPT_findirect_dispatch = 702,
  OPT_findirect_inlining = 703,
  OPT_finhibit_size_directive = 704,
  OPT_finit_character_ = 705,
  OPT_finit_integer_ = 706,
  OPT_finit_local_zero = 707,
  OPT_finit_logical_ = 708,
  OPT_finit_real_ = 709,
  OPT_finline = 710,
  OPT_finline_atomics = 711,
  OPT_finline_functions = 712,
  OPT_finline_functions_called_once = 713,
  OPT_finline_limit_ = 715,
  OPT_finline_small_functions = 716,
  OPT_finput_charset_ = 717,
  OPT_finstrument_functions = 718,
  OPT_finstrument_functions_exclude_file_list_ = 719,
  OPT_finstrument_functions_exclude_function_list_ = 720,
  OPT_finteger_4_integer_8 = 721,
  OPT_fintrinsic_modules_path = 722,
  OPT_fintrinsic_modules_path_ = 723,
  OPT_fipa_cp = 724,
  OPT_fipa_cp_clone = 725,
  OPT_fipa_icf = 726,
  OPT_fipa_icf_functions = 727,
  OPT_fipa_icf_variables = 728,
  OPT_fipa_profile = 730,
  OPT_fipa_pta = 731,
  OPT_fipa_pure_const = 732,
  OPT_fipa_reference = 733,
  OPT_fipa_sra = 734,
  OPT_fira_algorithm_ = 736,
  OPT_fira_hoist_pressure = 737,
  OPT_fira_loop_pressure = 738,
  OPT_fira_region_ = 739,
  OPT_fira_share_save_slots = 740,
  OPT_fira_share_spill_slots = 741,
  OPT_fira_verbose_ = 742,
  OPT_fisolate_erroneous_paths_attribute = 743,
  OPT_fisolate_erroneous_paths_dereference = 744,
  OPT_fivar_visibility_ = 745,
  OPT_fivopts = 746,
  OPT_fjni = 747,
  OPT_fjump_tables = 748,
  OPT_fkeep_inline_dllexport = 749,
  OPT_fkeep_inline_functions = 750,
  OPT_fkeep_static_consts = 751,
  OPT_flax_vector_conversions = 753,
  OPT_fleading_underscore = 754,
  OPT_flive_range_shrinkage = 755,
  OPT_flocal_ivars = 756,
  OPT_floop_block = 757,
  OPT_floop_interchange = 759,
  OPT_floop_nest_optimize = 760,
  OPT_floop_parallelize_all = 762,
  OPT_floop_strip_mine = 763,
  OPT_flto = 764,
  OPT_flto_compression_level_ = 765,
  OPT_flto_odr_type_merging = 766,
  OPT_flto_partition_ = 767,
  OPT_flto_report = 768,
  OPT_flto_report_wpa = 769,
  OPT_flto_ = 770,
  OPT_fltrans = 771,
  OPT_fltrans_output_list_ = 772,
  OPT_fmain_ = 773,
  OPT_fmath_errno = 774,
  OPT_fmax_array_constructor_ = 775,
  OPT_fmax_errors_ = 776,
  OPT_fmax_identifier_length_ = 777,
  OPT_fmax_stack_var_size_ = 778,
  OPT_fmax_subrecord_length_ = 779,
  OPT_fmem_report = 780,
  OPT_fmem_report_wpa = 781,
  OPT_fmerge_all_constants = 782,
  OPT_fmerge_constants = 783,
  OPT_fmerge_debug_strings = 784,
  OPT_fmessage_length_ = 785,
  OPT_fmodule_private = 786,
  OPT_fmodulo_sched = 787,
  OPT_fmodulo_sched_allow_regmoves = 788,
  OPT_fmove_loop_invariants = 789,
  OPT_fms_extensions = 790,
  OPT_fnext_runtime = 796,
  OPT_fnil_receivers = 797,
  OPT_fnon_call_exceptions = 799,
  OPT_fnonansi_builtins = 800,
  OPT_fnothrow_opt = 802,
  OPT_fobjc_abi_version_ = 803,
  OPT_fobjc_call_cxx_cdtors = 804,
  OPT_fobjc_direct_dispatch = 805,
  OPT_fobjc_exceptions = 806,
  OPT_fobjc_gc = 807,
  OPT_fobjc_nilcheck = 808,
  OPT_fobjc_sjlj_exceptions = 809,
  OPT_fobjc_std_objc1 = 810,
  OPT_fomit_frame_pointer = 811,
  OPT_fopenmp = 812,
  OPT_fopenmp_simd = 813,
  OPT_foperator_names = 814,
  OPT_fopt_info = 815,
  OPT_fopt_info_ = 816,
  OPT_foptimize_sibling_calls = 818,
  OPT_foptimize_static_class_initialization = 819,
  OPT_foptimize_strlen = 820,
  OPT_foutput_class_dir_ = 822,
  OPT_fpack_derived = 823,
  OPT_fpack_struct = 824,
  OPT_fpack_struct_ = 825,
  OPT_fpartial_inlining = 826,
  OPT_fpcc_struct_return = 827,
  OPT_fpch_deps = 828,
  OPT_fpch_preprocess = 829,
  OPT_fpeel_loops = 830,
  OPT_fpeephole = 831,
  OPT_fpeephole2 = 832,
  OPT_fpermissive = 833,
  OPT_fpic = 834,
  OPT_fpie = 835,
  OPT_fplan9_extensions = 836,
  OPT_fplugin_arg_ = 837,
  OPT_fplugin_ = 838,
  OPT_fpost_ipa_mem_report = 839,
  OPT_fpre_ipa_mem_report = 840,
  OPT_fpredictive_commoning = 841,
  OPT_fprefetch_loop_arrays = 842,
  OPT_fpreprocessed = 843,
  OPT_fpretty_templates = 844,
  OPT_fprofile = 845,
  OPT_fprofile_arcs = 846,
  OPT_fprofile_correction = 847,
  OPT_fprofile_dir_ = 848,
  OPT_fprofile_generate = 849,
  OPT_fprofile_generate_ = 850,
  OPT_fprofile_reorder_functions = 851,
  OPT_fprofile_report = 852,
  OPT_fprofile_use = 853,
  OPT_fprofile_use_ = 854,
  OPT_fprofile_values = 855,
  OPT_fprotect_parens = 856,
  OPT_frandom_seed = 857,
  OPT_frandom_seed_ = 858,
  OPT_frange_check = 859,
  OPT_freal_4_real_10 = 860,
  OPT_freal_4_real_16 = 861,
  OPT_freal_4_real_8 = 862,
  OPT_freal_8_real_10 = 863,
  OPT_freal_8_real_16 = 864,
  OPT_freal_8_real_4 = 865,
  OPT_frealloc_lhs = 866,
  OPT_freciprocal_math = 867,
  OPT_frecord_gcc_switches = 868,
  OPT_frecord_marker_4 = 869,
  OPT_frecord_marker_8 = 870,
  OPT_frecursive = 871,
  OPT_freduced_reflection = 872,
  OPT_free = 873,
  OPT_freg_struct_return = 874,
  OPT_frename_registers = 876,
  OPT_freorder_blocks = 877,
  OPT_freorder_blocks_and_partition = 878,
  OPT_freorder_functions = 879,
  OPT_frepack_arrays = 880,
  OPT_freplace_objc_classes = 881,
  OPT_frepo = 882,
  OPT_freport_bug = 883,
  OPT_frequire_return_statement = 884,
  OPT_frerun_cse_after_loop = 885,
  OPT_freschedule_modulo_scheduled_loops = 887,
  OPT_fresolution_ = 888,
  OPT_frounding_math = 889,
  OPT_frtti = 890,
  OPT_fsanitize_recover = 891,
  OPT_fsanitize_recover_ = 892,
  OPT_fsanitize_undefined_trap_on_error = 893,
  OPT_fsanitize_ = 894,
  OPT_fsaw_java_file = 895,
  OPT_fsched_critical_path_heuristic = 896,
  OPT_fsched_dep_count_heuristic = 897,
  OPT_fsched_group_heuristic = 898,
  OPT_fsched_interblock = 899,
  OPT_fsched_last_insn_heuristic = 900,
  OPT_fsched_pressure = 901,
  OPT_fsched_rank_heuristic = 902,
  OPT_fsched_spec = 903,
  OPT_fsched_spec_insn_heuristic = 904,
  OPT_fsched_spec_load = 905,
  OPT_fsched_spec_load_dangerous = 906,
  OPT_fsched_stalled_insns = 907,
  OPT_fsched_stalled_insns_dep = 908,
  OPT_fsched_stalled_insns_dep_ = 909,
  OPT_fsched_stalled_insns_ = 910,
  OPT_fsched_verbose_ = 911,
  OPT_fsched2_use_superblocks = 912,
  OPT_fschedule_insns = 914,
  OPT_fschedule_insns2 = 915,
  OPT_fsecond_underscore = 916,
  OPT_fsection_anchors = 917,
  OPT_fsel_sched_pipelining = 919,
  OPT_fsel_sched_pipelining_outer_loops = 920,
  OPT_fsel_sched_reschedule_pipelined = 921,
  OPT_fselective_scheduling = 922,
  OPT_fselective_scheduling2 = 923,
  OPT_fsemantic_interposition = 924,
  OPT_fshort_double = 925,
  OPT_fshort_enums = 926,
  OPT_fshort_wchar = 927,
  OPT_fshow_column = 928,
  OPT_fshrink_wrap = 929,
  OPT_fsign_zero = 930,
  OPT_fsignaling_nans = 931,
  OPT_fsigned_bitfields = 932,
  OPT_fsigned_char = 933,
  OPT_fsigned_zeros = 934,
  OPT_fsimd_cost_model_ = 935,
  OPT_fsingle_precision_constant = 936,
  OPT_fsource_filename_ = 937,
  OPT_fsource_ = 938,
  OPT_fsplit_ivs_in_unroller = 939,
  OPT_fsplit_stack = 940,
  OPT_fsplit_wide_types = 941,
  OPT_fssa_phiopt = 943,
  OPT_fstack_arrays = 944,
  OPT_fstack_check_ = 946,
  OPT_fstack_limit = 947,
  OPT_fstack_limit_register_ = 948,
  OPT_fstack_limit_symbol_ = 949,
  OPT_fstack_protector = 950,
  OPT_fstack_protector_all = 951,
  OPT_fstack_protector_strong = 952,
  OPT_fstack_reuse_ = 953,
  OPT_fstack_usage = 954,
  OPT_fstats = 955,
  OPT_fstore_check = 956,
  OPT_fstrict_aliasing = 958,
  OPT_fstrict_enums = 959,
  OPT_fstrict_overflow = 960,
  OPT_fstrict_volatile_bitfields = 962,
  OPT_fsync_libcalls = 963,
  OPT_fsyntax_only = 964,
  OPT_ftabstop_ = 965,
  OPT_ftarget_ = 967,
  OPT_ftemplate_backtrace_limit_ = 968,
  OPT_ftemplate_depth_ = 970,
  OPT_ftest_coverage = 971,
  OPT_fthread_jumps = 973,
  OPT_fthreadsafe_statics = 974,
  OPT_ftime_report = 975,
  OPT_ftls_model_ = 976,
  OPT_ftoplevel_reorder = 977,
  OPT_ftracer = 978,
  OPT_ftrack_macro_expansion = 979,
  OPT_ftrack_macro_expansion_ = 980,
  OPT_ftrapping_math = 981,
  OPT_ftrapv = 982,
  OPT_ftree_bit_ccp = 983,
  OPT_ftree_builtin_call_dce = 984,
  OPT_ftree_ccp = 985,
  OPT_ftree_ch = 986,
  OPT_ftree_coalesce_inlined_vars = 987,
  OPT_ftree_coalesce_vars = 988,
  OPT_ftree_copy_prop = 989,
  OPT_ftree_copyrename = 990,
  OPT_ftree_cselim = 991,
  OPT_ftree_dce = 992,
  OPT_ftree_dominator_opts = 993,
  OPT_ftree_dse = 994,
  OPT_ftree_forwprop = 995,
  OPT_ftree_fre = 996,
  OPT_ftree_loop_distribute_patterns = 997,
  OPT_ftree_loop_distribution = 998,
  OPT_ftree_loop_if_convert = 999,
  OPT_ftree_loop_if_convert_stores = 1000,
  OPT_ftree_loop_im = 1001,
  OPT_ftree_loop_ivcanon = 1002,
  OPT_ftree_loop_optimize = 1004,
  OPT_ftree_loop_vectorize = 1005,
  OPT_ftree_lrs = 1006,
  OPT_ftree_parallelize_loops_ = 1007,
  OPT_ftree_partial_pre = 1008,
  OPT_ftree_phiprop = 1009,
  OPT_ftree_pre = 1010,
  OPT_ftree_pta = 1011,
  OPT_ftree_reassoc = 1012,
  OPT_ftree_scev_cprop = 1014,
  OPT_ftree_sink = 1015,
  OPT_ftree_slp_vectorize = 1016,
  OPT_ftree_slsr = 1017,
  OPT_ftree_sra = 1018,
  OPT_ftree_switch_conversion = 1021,
  OPT_ftree_tail_merge = 1022,
  OPT_ftree_ter = 1023,
  OPT_ftree_vectorize = 1025,
  OPT_ftree_vrp = 1027,
  OPT_funderscoring = 1028,
  OPT_funit_at_a_time = 1029,
  OPT_funroll_all_loops = 1030,
  OPT_funroll_loops = 1031,
  OPT_funsafe_loop_optimizations = 1032,
  OPT_funsafe_math_optimizations = 1033,
  OPT_funsigned_bitfields = 1034,
  OPT_funsigned_char = 1035,
  OPT_funswitch_loops = 1036,
  OPT_funwind_tables = 1037,
  OPT_fuse_atomic_builtins = 1038,
  OPT_fuse_boehm_gc = 1039,
  OPT_fuse_caller_save = 1040,
  OPT_fuse_cxa_atexit = 1041,
  OPT_fuse_cxa_get_exception_ptr = 1042,
  OPT_fuse_divide_subroutine = 1043,
  OPT_fuse_ld_bfd = 1044,
  OPT_fuse_ld_gold = 1045,
  OPT_fuse_linker_plugin = 1046,
  OPT_fvar_tracking = 1047,
  OPT_fvar_tracking_assignments = 1048,
  OPT_fvar_tracking_assignments_toggle = 1049,
  OPT_fvar_tracking_uninit = 1050,
  OPT_fvariable_expansion_in_unroller = 1051,
  OPT_fvect_cost_model_ = 1053,
  OPT_fverbose_asm = 1054,
  OPT_fvisibility_inlines_hidden = 1056,
  OPT_fvisibility_ms_compat = 1057,
  OPT_fvisibility_ = 1058,
  OPT_fvpt = 1059,
  OPT_fvtable_verify_ = 1062,
  OPT_fvtv_counts = 1063,
  OPT_fvtv_debug = 1064,
  OPT_fweak = 1065,
  OPT_fweb = 1066,
  OPT_fwhole_program = 1068,
  OPT_fwide_exec_charset_ = 1069,
  OPT_fworking_directory = 1070,
  OPT_fwpa = 1071,
  OPT_fwpa_ = 1072,
  OPT_fwrapv = 1073,
  OPT_fzero_initialized_in_bss = 1076,
  OPT_fzero_link = 1077,
  OPT_g = 1078,
  OPT_gant = 1079,
  OPT_gcoff = 1080,
  OPT_gdwarf = 1081,
  OPT_gdwarf_ = 1082,
  OPT_gen_decls = 1083,
  OPT_ggdb = 1084,
  OPT_ggnu_pubnames = 1085,
  OPT_gnat = 1086,
  OPT_gnatO = 1087,
  OPT_gno_pubnames = 1088,
  OPT_gno_record_gcc_switches = 1089,
  OPT_gno_split_dwarf = 1090,
  OPT_gno_strict_dwarf = 1091,
  OPT_gpubnames = 1092,
  OPT_grecord_gcc_switches = 1093,
  OPT_gsplit_dwarf = 1094,
  OPT_gstabs = 1095,
  OPT_gstabs_ = 1096,
  OPT_gstrict_dwarf = 1097,
  OPT_gtoggle = 1098,
  OPT_gvms = 1099,
  OPT_gxcoff = 1100,
  OPT_gxcoff_ = 1101,
  OPT_gz = 1102,
  OPT_gz_ = 1103,
  OPT_h = 1104,
  OPT_idirafter = 1105,
  OPT_imacros = 1106,
  OPT_imultiarch = 1107,
  OPT_imultilib = 1108,
  OPT_include = 1109,
  OPT_iplugindir_ = 1110,
  OPT_iprefix = 1111,
  OPT_iquote = 1112,
  OPT_isysroot = 1113,
  OPT_isystem = 1114,
  OPT_iwithprefix = 1115,
  OPT_iwithprefixbefore = 1116,
  OPT_k8 = 1117,
  OPT_l = 1118,
  OPT_lang_asm = 1119,
  OPT_mabi_ = 1120,
  OPT_mabort_on_noreturn = 1121,
  OPT_mapcs = 1122,
  OPT_mapcs_float = 1123,
  OPT_mapcs_frame = 1124,
  OPT_mapcs_reentrant = 1125,
  OPT_mapcs_stack_check = 1126,
  OPT_march_ = 1127,
  OPT_marm = 1128,
  OPT_masm_syntax_unified = 1129,
  OPT_mbig_endian = 1130,
  OPT_mcallee_super_interworking = 1131,
  OPT_mcaller_super_interworking = 1132,
  OPT_mcpu_ = 1133,
  OPT_mfix_cortex_m3_ldrd = 1134,
  OPT_mfloat_abi_ = 1135,
  OPT_mfp16_format_ = 1136,
  OPT_mfpu_ = 1137,
  OPT_mlittle_endian = 1139,
  OPT_mlong_calls = 1140,
  OPT_mlra = 1141,
  OPT_mneon_for_64bits = 1142,
  OPT_mnew_generic_costs = 1143,
  OPT_mold_rtx_costs = 1144,
  OPT_mpic_data_is_text_relative = 1145,
  OPT_mpic_register_ = 1146,
  OPT_mpoke_function_name = 1147,
  OPT_mrestrict_it = 1148,
  OPT_msched_prolog = 1149,
  OPT_msingle_pic_base = 1150,
  OPT_mslow_flash_data = 1151,
  OPT_mstructure_size_boundary_ = 1153,
  OPT_mthumb = 1154,
  OPT_mthumb_interwork = 1155,
  OPT_mtls_dialect_ = 1156,
  OPT_mtp_ = 1157,
  OPT_mtpcs_frame = 1158,
  OPT_mtpcs_leaf_frame = 1159,
  OPT_mtune_ = 1160,
  OPT_munaligned_access = 1161,
  OPT_mvectorize_with_neon_double = 1162,
  OPT_mvectorize_with_neon_quad = 1163,
  OPT_mword_relocations = 1164,
  OPT_n = 1165,
  OPT_no_canonical_prefixes = 1166,
  OPT_no_integrated_cpp = 1167,
  OPT_nocpp = 1168,
  OPT_nodefaultlibs = 1169,
  OPT_nostartfiles = 1170,
  OPT_nostdinc = 1171,
  OPT_nostdinc__ = 1172,
  OPT_nostdlib = 1173,
  OPT_o = 1174,
  OPT_p = 1175,
  OPT_pass_exit_codes = 1176,
  OPT_pedantic_errors = 1178,
  OPT_pg = 1179,
  OPT_pie = 1180,
  OPT_pipe = 1181,
  OPT_print_file_name_ = 1182,
  OPT_print_libgcc_file_name = 1183,
  OPT_print_multi_directory = 1184,
  OPT_print_multi_lib = 1185,
  OPT_print_multi_os_directory = 1186,
  OPT_print_multiarch = 1187,
  OPT_print_objc_runtime_info = 1188,
  OPT_print_prog_name_ = 1189,
  OPT_print_search_dirs = 1190,
  OPT_print_sysroot = 1191,
  OPT_print_sysroot_headers_suffix = 1192,
  OPT_quiet = 1193,
  OPT_r = 1194,
  OPT_remap = 1195,
  OPT_s = 1196,
  OPT_s_bc_abi = 1197,
  OPT_save_temps = 1198,
  OPT_save_temps_ = 1199,
  OPT_shared = 1200,
  OPT_shared_libgcc = 1201,
  OPT_specs_ = 1203,
  OPT_static = 1204,
  OPT_static_libasan = 1205,
  OPT_static_libgcc = 1206,
  OPT_static_libgcj = 1207,
  OPT_static_libgfortran = 1208,
  OPT_static_libgo = 1209,
  OPT_static_liblsan = 1210,
  OPT_static_libstdc__ = 1211,
  OPT_static_libtsan = 1212,
  OPT_static_libubsan = 1213,
  OPT_std_c__11 = 1216,
  OPT_std_c__14 = 1217,
  OPT_std_c__1z = 1220,
  OPT_std_c__98 = 1221,
  OPT_std_c11 = 1222,
  OPT_std_c90 = 1225,
  OPT_std_c99 = 1226,
  OPT_std_f2003 = 1228,
  OPT_std_f2008 = 1229,
  OPT_std_f2008ts = 1230,
  OPT_std_f95 = 1231,
  OPT_std_gnu = 1232,
  OPT_std_gnu__11 = 1235,
  OPT_std_gnu__14 = 1236,
  OPT_std_gnu__1z = 1239,
  OPT_std_gnu__98 = 1240,
  OPT_std_gnu11 = 1241,
  OPT_std_gnu90 = 1244,
  OPT_std_gnu99 = 1245,
  OPT_std_iso9899_199409 = 1248,
  OPT_std_legacy = 1252,
  OPT_symbolic = 1253,
  OPT_t = 1254,
  OPT_time = 1255,
  OPT_time_ = 1256,
  OPT_traditional = 1257,
  OPT_traditional_cpp = 1258,
  OPT_trigraphs = 1259,
  OPT_u = 1260,
  OPT_undef = 1261,
  OPT_v = 1262,
  OPT_version = 1263,
  OPT_w = 1264,
  OPT_wrapper = 1265,
  OPT_x = 1266,
  OPT_z = 1267,
  N_OPTS,
  OPT_SPECIAL_unknown,
  OPT_SPECIAL_ignore,
  OPT_SPECIAL_program_name,
  OPT_SPECIAL_input_file
};
enum unspec {
  UNSPEC_PUSH_MULT = 0,
  UNSPEC_PIC_SYM = 1,
  UNSPEC_PIC_BASE = 2,
  UNSPEC_PRLG_STK = 3,
  UNSPEC_REGISTER_USE = 4,
  UNSPEC_CHECK_ARCH = 5,
  UNSPEC_WSHUFH = 6,
  UNSPEC_WACC = 7,
  UNSPEC_TMOVMSK = 8,
  UNSPEC_WSAD = 9,
  UNSPEC_WSADZ = 10,
  UNSPEC_WMACS = 11,
  UNSPEC_WMACU = 12,
  UNSPEC_WMACSZ = 13,
  UNSPEC_WMACUZ = 14,
  UNSPEC_CLRDI = 15,
  UNSPEC_WALIGNI = 16,
  UNSPEC_TLS = 17,
  UNSPEC_PIC_LABEL = 18,
  UNSPEC_PIC_OFFSET = 19,
  UNSPEC_GOTSYM_OFF = 20,
  UNSPEC_THUMB1_CASESI = 21,
  UNSPEC_RBIT = 22,
  UNSPEC_SYMBOL_OFFSET = 23,
  UNSPEC_MEMORY_BARRIER = 24,
  UNSPEC_UNALIGNED_LOAD = 25,
  UNSPEC_UNALIGNED_STORE = 26,
  UNSPEC_PIC_UNIFIED = 27,
  UNSPEC_LL = 28,
  UNSPEC_VRINTZ = 29,
  UNSPEC_VRINTP = 30,
  UNSPEC_VRINTM = 31,
  UNSPEC_VRINTR = 32,
  UNSPEC_VRINTX = 33,
  UNSPEC_VRINTA = 34,
  UNSPEC_WADDC = 35,
  UNSPEC_WABS = 36,
  UNSPEC_WQMULWMR = 37,
  UNSPEC_WQMULMR = 38,
  UNSPEC_WQMULWM = 39,
  UNSPEC_WQMULM = 40,
  UNSPEC_WQMIAxyn = 41,
  UNSPEC_WQMIAxy = 42,
  UNSPEC_TANDC = 43,
  UNSPEC_TORC = 44,
  UNSPEC_TORVSC = 45,
  UNSPEC_TEXTRC = 46,
  UNSPEC_ASHIFT_SIGNED = 47,
  UNSPEC_ASHIFT_UNSIGNED = 48,
  UNSPEC_CRC32B = 49,
  UNSPEC_CRC32H = 50,
  UNSPEC_CRC32W = 51,
  UNSPEC_CRC32CB = 52,
  UNSPEC_CRC32CH = 53,
  UNSPEC_CRC32CW = 54,
  UNSPEC_AESD = 55,
  UNSPEC_AESE = 56,
  UNSPEC_AESIMC = 57,
  UNSPEC_AESMC = 58,
  UNSPEC_SHA1C = 59,
  UNSPEC_SHA1M = 60,
  UNSPEC_SHA1P = 61,
  UNSPEC_SHA1H = 62,
  UNSPEC_SHA1SU0 = 63,
  UNSPEC_SHA1SU1 = 64,
  UNSPEC_SHA256H = 65,
  UNSPEC_SHA256H2 = 66,
  UNSPEC_SHA256SU0 = 67,
  UNSPEC_SHA256SU1 = 68,
  UNSPEC_VMULLP64 = 69,
  UNSPEC_LOAD_COUNT = 70,
  UNSPEC_VABD = 71,
  UNSPEC_VABDL = 72,
  UNSPEC_VADD = 73,
  UNSPEC_VADDHN = 74,
  UNSPEC_VADDL = 75,
  UNSPEC_VADDW = 76,
  UNSPEC_VBSL = 77,
  UNSPEC_VCAGE = 78,
  UNSPEC_VCAGT = 79,
  UNSPEC_VCEQ = 80,
  UNSPEC_VCGE = 81,
  UNSPEC_VCGEU = 82,
  UNSPEC_VCGT = 83,
  UNSPEC_VCGTU = 84,
  UNSPEC_VCLS = 85,
  UNSPEC_VCONCAT = 86,
  UNSPEC_VCVT = 87,
  UNSPEC_VCVT_N = 88,
  UNSPEC_VEXT = 89,
  UNSPEC_VHADD = 90,
  UNSPEC_VHSUB = 91,
  UNSPEC_VLD1 = 92,
  UNSPEC_VLD1_LANE = 93,
  UNSPEC_VLD2 = 94,
  UNSPEC_VLD2_DUP = 95,
  UNSPEC_VLD2_LANE = 96,
  UNSPEC_VLD3 = 97,
  UNSPEC_VLD3A = 98,
  UNSPEC_VLD3B = 99,
  UNSPEC_VLD3_DUP = 100,
  UNSPEC_VLD3_LANE = 101,
  UNSPEC_VLD4 = 102,
  UNSPEC_VLD4A = 103,
  UNSPEC_VLD4B = 104,
  UNSPEC_VLD4_DUP = 105,
  UNSPEC_VLD4_LANE = 106,
  UNSPEC_VMAX = 107,
  UNSPEC_VMIN = 108,
  UNSPEC_VMLA = 109,
  UNSPEC_VMLAL = 110,
  UNSPEC_VMLA_LANE = 111,
  UNSPEC_VMLAL_LANE = 112,
  UNSPEC_VMLS = 113,
  UNSPEC_VMLSL = 114,
  UNSPEC_VMLS_LANE = 115,
  UNSPEC_VMLSL_LANE = 116,
  UNSPEC_VMOVL = 117,
  UNSPEC_VMOVN = 118,
  UNSPEC_VMUL = 119,
  UNSPEC_VMULL = 120,
  UNSPEC_VMUL_LANE = 121,
  UNSPEC_VMULL_LANE = 122,
  UNSPEC_VPADAL = 123,
  UNSPEC_VPADD = 124,
  UNSPEC_VPADDL = 125,
  UNSPEC_VPMAX = 126,
  UNSPEC_VPMIN = 127,
  UNSPEC_VPSMAX = 128,
  UNSPEC_VPSMIN = 129,
  UNSPEC_VPUMAX = 130,
  UNSPEC_VPUMIN = 131,
  UNSPEC_VQABS = 132,
  UNSPEC_VQADD = 133,
  UNSPEC_VQDMLAL = 134,
  UNSPEC_VQDMLAL_LANE = 135,
  UNSPEC_VQDMLSL = 136,
  UNSPEC_VQDMLSL_LANE = 137,
  UNSPEC_VQDMULH = 138,
  UNSPEC_VQDMULH_LANE = 139,
  UNSPEC_VQDMULL = 140,
  UNSPEC_VQDMULL_LANE = 141,
  UNSPEC_VQMOVN = 142,
  UNSPEC_VQMOVUN = 143,
  UNSPEC_VQNEG = 144,
  UNSPEC_VQSHL = 145,
  UNSPEC_VQSHL_N = 146,
  UNSPEC_VQSHLU_N = 147,
  UNSPEC_VQSHRN_N = 148,
  UNSPEC_VQSHRUN_N = 149,
  UNSPEC_VQSUB = 150,
  UNSPEC_VRECPE = 151,
  UNSPEC_VRECPS = 152,
  UNSPEC_VREV16 = 153,
  UNSPEC_VREV32 = 154,
  UNSPEC_VREV64 = 155,
  UNSPEC_VRSQRTE = 156,
  UNSPEC_VRSQRTS = 157,
  UNSPEC_VSHL = 158,
  UNSPEC_VSHLL_N = 159,
  UNSPEC_VSHL_N = 160,
  UNSPEC_VSHR_N = 161,
  UNSPEC_VSHRN_N = 162,
  UNSPEC_VSLI = 163,
  UNSPEC_VSRA_N = 164,
  UNSPEC_VSRI = 165,
  UNSPEC_VST1 = 166,
  UNSPEC_VST1_LANE = 167,
  UNSPEC_VST2 = 168,
  UNSPEC_VST2_LANE = 169,
  UNSPEC_VST3 = 170,
  UNSPEC_VST3A = 171,
  UNSPEC_VST3B = 172,
  UNSPEC_VST3_LANE = 173,
  UNSPEC_VST4 = 174,
  UNSPEC_VST4A = 175,
  UNSPEC_VST4B = 176,
  UNSPEC_VST4_LANE = 177,
  UNSPEC_VSTRUCTDUMMY = 178,
  UNSPEC_VSUB = 179,
  UNSPEC_VSUBHN = 180,
  UNSPEC_VSUBL = 181,
  UNSPEC_VSUBW = 182,
  UNSPEC_VTBL = 183,
  UNSPEC_VTBX = 184,
  UNSPEC_VTRN1 = 185,
  UNSPEC_VTRN2 = 186,
  UNSPEC_VTST = 187,
  UNSPEC_VUZP1 = 188,
  UNSPEC_VUZP2 = 189,
  UNSPEC_VZIP1 = 190,
  UNSPEC_VZIP2 = 191,
  UNSPEC_MISALIGNED_ACCESS = 192,
  UNSPEC_VCLE = 193,
  UNSPEC_VCLT = 194,
  UNSPEC_NVRINTZ = 195,
  UNSPEC_NVRINTP = 196,
  UNSPEC_NVRINTM = 197,
  UNSPEC_NVRINTX = 198,
  UNSPEC_NVRINTA = 199,
  UNSPEC_NVRINTN = 200
};
extern const char *const unspec_strings[];
enum unspecv {
  VUNSPEC_BLOCKAGE = 0,
  VUNSPEC_EPILOGUE = 1,
  VUNSPEC_THUMB1_INTERWORK = 2,
  VUNSPEC_ALIGN = 3,
  VUNSPEC_POOL_END = 4,
  VUNSPEC_POOL_1 = 5,
  VUNSPEC_POOL_2 = 6,
  VUNSPEC_POOL_4 = 7,
  VUNSPEC_POOL_8 = 8,
  VUNSPEC_POOL_16 = 9,
  VUNSPEC_TMRC = 10,
  VUNSPEC_TMCR = 11,
  VUNSPEC_ALIGN8 = 12,
  VUNSPEC_WCMP_EQ = 13,
  VUNSPEC_WCMP_GTU = 14,
  VUNSPEC_WCMP_GT = 15,
  VUNSPEC_EH_RETURN = 16,
  VUNSPEC_ATOMIC_CAS = 17,
  VUNSPEC_ATOMIC_XCHG = 18,
  VUNSPEC_ATOMIC_OP = 19,
  VUNSPEC_LL = 20,
  VUNSPEC_SC = 21,
  VUNSPEC_LAX = 22,
  VUNSPEC_SLX = 23,
  VUNSPEC_LDA = 24,
  VUNSPEC_STL = 25,
  VUNSPEC_GET_FPSCR = 26,
  VUNSPEC_SET_FPSCR = 27
};
extern const char *const unspecv_strings[];
enum machine_mode
{
  VOIDmode,
  BLKmode,
  CCmode,
  CC_NOOVmode,
  CC_Zmode,
  CC_CZmode,
  CC_NCVmode,
  CC_SWPmode,
  CCFPmode,
  CCFPEmode,
  CC_DNEmode,
  CC_DEQmode,
  CC_DLEmode,
  CC_DLTmode,
  CC_DGEmode,
  CC_DGTmode,
  CC_DLEUmode,
  CC_DLTUmode,
  CC_DGEUmode,
  CC_DGTUmode,
  CC_Cmode,
  CC_Nmode,
  BImode,
  QImode,
  HImode,
  SImode,
  DImode,
  TImode,
  EImode,
  OImode,
  CImode,
  XImode,
  QQmode,
  HQmode,
  SQmode,
  DQmode,
  TQmode,
  UQQmode,
  UHQmode,
  USQmode,
  UDQmode,
  UTQmode,
  HAmode,
  SAmode,
  DAmode,
  TAmode,
  UHAmode,
  USAmode,
  UDAmode,
  UTAmode,
  HFmode,
  SFmode,
  DFmode,
  SDmode,
  DDmode,
  TDmode,
  CQImode,
  CHImode,
  CSImode,
  CDImode,
  CTImode,
  CEImode,
  COImode,
  CCImode,
  CXImode,
  HCmode,
  SCmode,
  DCmode,
  V4QImode,
  V2HImode,
  V8QImode,
  V4HImode,
  V2SImode,
  V16QImode,
  V8HImode,
  V4SImode,
  V2DImode,
  V4QQmode,
  V2HQmode,
  V4UQQmode,
  V2UHQmode,
  V2HAmode,
  V2UHAmode,
  V4HFmode,
  V2SFmode,
  V8HFmode,
  V4SFmode,
  V2DFmode,
  MAX_MACHINE_MODE,
  MIN_MODE_RANDOM = VOIDmode,
  MAX_MODE_RANDOM = BLKmode,
  MIN_MODE_CC = CCmode,
  MAX_MODE_CC = CC_Nmode,
  MIN_MODE_INT = QImode,
  MAX_MODE_INT = XImode,
  MIN_MODE_PARTIAL_INT = VOIDmode,
  MAX_MODE_PARTIAL_INT = VOIDmode,
  MIN_MODE_POINTER_BOUNDS = VOIDmode,
  MAX_MODE_POINTER_BOUNDS = VOIDmode,
  MIN_MODE_FRACT = QQmode,
  MAX_MODE_FRACT = TQmode,
  MIN_MODE_UFRACT = UQQmode,
  MAX_MODE_UFRACT = UTQmode,
  MIN_MODE_ACCUM = HAmode,
  MAX_MODE_ACCUM = TAmode,
  MIN_MODE_UACCUM = UHAmode,
  MAX_MODE_UACCUM = UTAmode,
  MIN_MODE_FLOAT = HFmode,
  MAX_MODE_FLOAT = DFmode,
  MIN_MODE_DECIMAL_FLOAT = SDmode,
  MAX_MODE_DECIMAL_FLOAT = TDmode,
  MIN_MODE_COMPLEX_INT = CQImode,
  MAX_MODE_COMPLEX_INT = CXImode,
  MIN_MODE_COMPLEX_FLOAT = HCmode,
  MAX_MODE_COMPLEX_FLOAT = DCmode,
  MIN_MODE_VECTOR_INT = V4QImode,
  MAX_MODE_VECTOR_INT = V2DImode,
  MIN_MODE_VECTOR_FRACT = V4QQmode,
  MAX_MODE_VECTOR_FRACT = V2HQmode,
  MIN_MODE_VECTOR_UFRACT = V4UQQmode,
  MAX_MODE_VECTOR_UFRACT = V2UHQmode,
  MIN_MODE_VECTOR_ACCUM = V2HAmode,
  MAX_MODE_VECTOR_ACCUM = V2HAmode,
  MIN_MODE_VECTOR_UACCUM = V2UHAmode,
  MAX_MODE_VECTOR_UACCUM = V2UHAmode,
  MIN_MODE_VECTOR_FLOAT = V4HFmode,
  MAX_MODE_VECTOR_FLOAT = V2DFmode,
  NUM_MACHINE_MODES = MAX_MACHINE_MODE
};
extern char arm_arch_name[];
enum target_cpus
{
TARGET_CPU_arm2,
TARGET_CPU_arm250,
TARGET_CPU_arm3,
TARGET_CPU_arm6,
TARGET_CPU_arm60,
TARGET_CPU_arm600,
TARGET_CPU_arm610,
TARGET_CPU_arm620,
TARGET_CPU_arm7,
TARGET_CPU_arm7d,
TARGET_CPU_arm7di,
TARGET_CPU_arm70,
TARGET_CPU_arm700,
TARGET_CPU_arm700i,
TARGET_CPU_arm710,
TARGET_CPU_arm720,
TARGET_CPU_arm710c,
TARGET_CPU_arm7100,
TARGET_CPU_arm7500,
TARGET_CPU_arm7500fe,
TARGET_CPU_arm7m,
TARGET_CPU_arm7dm,
TARGET_CPU_arm7dmi,
TARGET_CPU_arm8,
TARGET_CPU_arm810,
TARGET_CPU_strongarm,
TARGET_CPU_strongarm110,
TARGET_CPU_strongarm1100,
TARGET_CPU_strongarm1110,
TARGET_CPU_fa526,
TARGET_CPU_fa626,
TARGET_CPU_arm7tdmi,
TARGET_CPU_arm7tdmis,
TARGET_CPU_arm710t,
TARGET_CPU_arm720t,
TARGET_CPU_arm740t,
TARGET_CPU_arm9,
TARGET_CPU_arm9tdmi,
TARGET_CPU_arm920,
TARGET_CPU_arm920t,
TARGET_CPU_arm922t,
TARGET_CPU_arm940t,
TARGET_CPU_ep9312,
TARGET_CPU_arm10tdmi,
TARGET_CPU_arm1020t,
TARGET_CPU_arm9e,
TARGET_CPU_arm946es,
TARGET_CPU_arm966es,
TARGET_CPU_arm968es,
TARGET_CPU_arm10e,
TARGET_CPU_arm1020e,
TARGET_CPU_arm1022e,
TARGET_CPU_xscale,
TARGET_CPU_iwmmxt,
TARGET_CPU_iwmmxt2,
TARGET_CPU_fa606te,
TARGET_CPU_fa626te,
TARGET_CPU_fmp626,
TARGET_CPU_fa726te,
TARGET_CPU_arm926ejs,
TARGET_CPU_arm1026ejs,
TARGET_CPU_arm1136js,
TARGET_CPU_arm1136jfs,
TARGET_CPU_arm1176jzs,
TARGET_CPU_arm1176jzfs,
TARGET_CPU_mpcorenovfp,
TARGET_CPU_mpcore,
TARGET_CPU_arm1156t2s,
TARGET_CPU_arm1156t2fs,
TARGET_CPU_cortexm1,
TARGET_CPU_cortexm0,
TARGET_CPU_cortexm0plus,
TARGET_CPU_cortexm1smallmultiply,
TARGET_CPU_cortexm0smallmultiply,
TARGET_CPU_cortexm0plussmallmultiply,
TARGET_CPU_genericv7a,
TARGET_CPU_cortexa5,
TARGET_CPU_cortexa7,
TARGET_CPU_cortexa8,
TARGET_CPU_cortexa9,
TARGET_CPU_cortexa12,
TARGET_CPU_cortexa15,
TARGET_CPU_cortexr4,
TARGET_CPU_cortexr4f,
TARGET_CPU_cortexr5,
TARGET_CPU_cortexr7,
TARGET_CPU_cortexm7,
TARGET_CPU_cortexm4,
TARGET_CPU_cortexm3,
TARGET_CPU_marvell_pj4,
TARGET_CPU_cortexa15cortexa7,
TARGET_CPU_cortexa53,
TARGET_CPU_cortexa57,
TARGET_CPU_cortexa57cortexa53,
  TARGET_CPU_generic
};
extern enum processor_type arm_tune;
typedef enum arm_cond_code
{
  ARM_EQ = 0, ARM_NE, ARM_CS, ARM_CC, ARM_MI, ARM_PL, ARM_VS, ARM_VC,
  ARM_HI, ARM_LS, ARM_GE, ARM_LT, ARM_GT, ARM_LE, ARM_AL, ARM_NV
}
arm_cc;
extern arm_cc arm_current_cc;
extern int arm_target_label;
extern int arm_ccfsm_state;
extern struct _dont_use_rtx_here_ * arm_target_insn;
extern struct _dont_use_rtx_here_ * pool_vector_label;
extern int return_used_this_function;
extern void (*arm_lang_output_object_attributes_hook)(void);
enum arm_fp_model
{
  ARM_FP_MODEL_UNKNOWN,
  ARM_FP_MODEL_VFP
};
enum vfp_reg_type
{
  VFP_NONE = 0,
  VFP_REG_D16,
  VFP_REG_D32,
  VFP_REG_SINGLE
};
extern const struct arm_fpu_desc
{
  const char *name;
  enum arm_fp_model model;
  int rev;
  enum vfp_reg_type regs;
  int neon;
  int fp16;
  int crypto;
} *arm_fpu_desc;
extern int arm_fpu_attr;
enum base_architecture
{
  BASE_ARCH_0 = 0,
  BASE_ARCH_2 = 2,
  BASE_ARCH_3 = 3,
  BASE_ARCH_3M = 3,
  BASE_ARCH_4 = 4,
  BASE_ARCH_4T = 4,
  BASE_ARCH_5 = 5,
  BASE_ARCH_5E = 5,
  BASE_ARCH_5T = 5,
  BASE_ARCH_5TE = 5,
  BASE_ARCH_5TEJ = 5,
  BASE_ARCH_6 = 6,
  BASE_ARCH_6J = 6,
  BASE_ARCH_6ZK = 6,
  BASE_ARCH_6K = 6,
  BASE_ARCH_6T2 = 6,
  BASE_ARCH_6M = 6,
  BASE_ARCH_6Z = 6,
  BASE_ARCH_7 = 7,
  BASE_ARCH_7A = 7,
  BASE_ARCH_7R = 7,
  BASE_ARCH_7M = 7,
  BASE_ARCH_7EM = 7,
  BASE_ARCH_8A = 8
};
extern enum base_architecture arm_base_arch;
extern int arm_arch3m;
extern int arm_arch4;
extern int arm_arch4t;
extern int arm_arch5;
extern int arm_arch5e;
extern int arm_arch6;
extern int arm_arch6k;
extern int arm_arch6m;
extern int arm_arch7;
extern int arm_arch_notm;
extern int arm_arch7em;
extern int arm_arch8;
extern int arm_ld_sched;
extern int thumb_code;
extern int thumb1_code;
extern int arm_tune_strongarm;
extern int arm_arch_iwmmxt;
extern int arm_arch_iwmmxt2;
extern int arm_arch_xscale;
extern int arm_tune_xscale;
extern int arm_tune_wbuf;
extern int arm_tune_cortex_a9;
extern int arm_cpp_interwork;
extern int arm_arch_thumb2;
extern int arm_arch_arm_hwdiv;
extern int arm_arch_thumb_hwdiv;
extern int prefer_neon_for_64bits;
extern int arm_arch_crc;
extern int arm_regs_in_sequence[];
enum reg_class
{
  NO_REGS,
  LO_REGS,
  STACK_REG,
  BASE_REGS,
  HI_REGS,
  CALLER_SAVE_REGS,
  GENERAL_REGS,
  CORE_REGS,
  VFP_D0_D7_REGS,
  VFP_LO_REGS,
  VFP_HI_REGS,
  VFP_REGS,
  IWMMXT_REGS,
  IWMMXT_GR_REGS,
  CC_REG,
  VFPCC_REG,
  SFP_REG,
  AFP_REG,
  ALL_REGS,
  LIM_REG_CLASSES
};
typedef struct arm_stack_offsets
{
  int saved_args;
  int frame;
  int saved_regs;
  int soft_frame;
  int locals_base;
  int outgoing_args;
  unsigned int saved_regs_mask;
}
arm_stack_offsets;
extern struct _dont_use_rtx_here_ * thumb_call_via_label[14];
enum arm_pcs
{
  ARM_PCS_AAPCS,
  ARM_PCS_AAPCS_VFP,
  ARM_PCS_AAPCS_IWMMXT,
  ARM_PCS_AAPCS_LOCAL,
  ARM_PCS_ATPCS,
  ARM_PCS_APCS,
  ARM_PCS_UNKNOWN
};
extern enum arm_pcs arm_pcs_default;
enum arm_auto_incmodes
  {
    ARM_POST_INC,
    ARM_PRE_INC,
    ARM_POST_DEC,
    ARM_PRE_DEC
  };
extern unsigned arm_pic_register;
extern int making_const_table;
extern const char *arm_rewrite_mcpu (int argc, const char **argv);
extern const char *host_detect_local_cpu (int argc, const char **argv);
extern int __gcc_bcmp (const unsigned char *, const unsigned char *, size_t);
extern void __clear_cache (char *, char *);
extern void __eprintf (const char *, const char *, unsigned int, const char *)
  __attribute__ ((__noreturn__));
typedef int QItype __attribute__ ((mode (QI)));
typedef unsigned int UQItype __attribute__ ((mode (QI)));
typedef int HItype __attribute__ ((mode (HI)));
typedef unsigned int UHItype __attribute__ ((mode (HI)));
typedef int SItype __attribute__ ((mode (SI)));
typedef unsigned int USItype __attribute__ ((mode (SI)));
typedef int DItype __attribute__ ((mode (DI)));
typedef unsigned int UDItype __attribute__ ((mode (DI)));
typedef float SFtype __attribute__ ((mode (SF)));
typedef _Complex float SCtype __attribute__ ((mode (SC)));
typedef float DFtype __attribute__ ((mode (DF)));
typedef _Complex float DCtype __attribute__ ((mode (DC)));
typedef int cmp_return_type __attribute__((mode (__libgcc_cmp_return__)));
typedef int shift_count_type __attribute__((mode (__libgcc_shift_count__)));
extern DItype __muldi3 (DItype, DItype);
extern DItype __divdi3 (DItype, DItype);
extern UDItype __udivdi3 (UDItype, UDItype);
extern UDItype __umoddi3 (UDItype, UDItype);
extern DItype __moddi3 (DItype, DItype);
extern UDItype __udivmoddi4 (UDItype, UDItype, UDItype *);
extern DItype __negdi2 (DItype);
extern DItype __lshrdi3 (DItype, shift_count_type);
extern DItype __ashldi3 (DItype, shift_count_type);
extern DItype __ashrdi3 (DItype, shift_count_type);
extern USItype __udiv_w_sdiv (USItype *, USItype, USItype, USItype);
extern cmp_return_type __cmpdi2 (DItype, DItype);
extern cmp_return_type __ucmpdi2 (DItype, DItype);
extern SItype __bswapsi2 (SItype);
extern DItype __bswapdi2 (DItype);
extern SItype __absvsi2 (SItype);
extern SItype __addvsi3 (SItype, SItype);
extern SItype __subvsi3 (SItype, SItype);
extern SItype __mulvsi3 (SItype, SItype);
extern SItype __negvsi2 (SItype);
extern DItype __absvdi2 (DItype);
extern DItype __addvdi3 (DItype, DItype);
extern DItype __subvdi3 (DItype, DItype);
extern DItype __mulvdi3 (DItype, DItype);
extern DItype __negvdi2 (DItype);
extern DItype __fixsfdi (SFtype);
extern SFtype __floatdisf (DItype);
extern SFtype __floatundisf (UDItype);
extern USItype __fixunssfsi (SFtype);
extern UDItype __fixunssfdi (SFtype);
extern SFtype __powisf2 (SFtype, int);
extern SCtype __divsc3 (SFtype, SFtype, SFtype, SFtype);
extern SCtype __mulsc3 (SFtype, SFtype, SFtype, SFtype);
extern DItype __fixdfdi (DFtype);
extern DFtype __floatdidf (DItype);
extern DFtype __floatundidf (UDItype);
extern USItype __fixunsdfsi (DFtype);
extern UDItype __fixunsdfdi (DFtype);
extern DFtype __powidf2 (DFtype, int);
extern DCtype __divdc3 (DFtype, DFtype, DFtype, DFtype);
extern DCtype __muldc3 (DFtype, DFtype, DFtype, DFtype);
  struct DWstruct {SItype low, high;};
typedef union
{
  struct DWstruct s;
  DItype ll;
} DWunion;
extern const UQItype __popcount_tab[256];
extern const UQItype __clz_tab[256];
extern const UQItype __clz_tab[256] ;
extern int __clzdi2 (UDItype);
extern int __clzsi2 (USItype);
extern int __ctzsi2 (USItype);
extern int __ctzdi2 (UDItype);
extern int __clrsbsi2 (SItype);
extern int __clrsbdi2 (DItype);
extern int __ffssi2 (USItype);
extern int __ffsdi2 (DItype);
extern int __popcountsi2 (USItype);
extern int __popcountdi2 (UDItype);
extern int __paritysi2 (USItype);
extern int __paritydi2 (UDItype);
extern void __enable_execute_stack (void *);
  typeof (__muldi3) __aeabi_lmul __attribute__((alias ("__" "muldi3")));
DItype
__muldi3 (DItype u, DItype v)
{
  const DWunion uu = {.ll = u};
  const DWunion vv = {.ll = v};
  DWunion w = {.ll = ({DWunion __w; do { USItype __x0, __x1, __x2, __x3; USItype __ul, __vl, __uh, __vh; __ul = ((USItype) (uu.s.low) & (((USItype) 1 << ((4 * (8)) / 2)) - 1)); __uh = ((USItype) (uu.s.low) >> ((4 * (8)) / 2)); __vl = ((USItype) (vv.s.low) & (((USItype) 1 << ((4 * (8)) / 2)) - 1)); __vh = ((USItype) (vv.s.low) >> ((4 * (8)) / 2)); __x0 = (USItype) __ul * __vl; __x1 = (USItype) __ul * __vh; __x2 = (USItype) __uh * __vl; __x3 = (USItype) __uh * __vh; __x1 += ((USItype) (__x0) >> ((4 * (8)) / 2)); __x1 += __x2; if (__x1 < __x2) __x3 += ((USItype) 1 << ((4 * (8)) / 2)); (__w.s.high) = __x3 + ((USItype) (__x1) >> ((4 * (8)) / 2)); (__w.s.low) = ((USItype) (__x1) & (((USItype) 1 << ((4 * (8)) / 2)) - 1)) * ((USItype) 1 << ((4 * (8)) / 2)) + ((USItype) (__x0) & (((USItype) 1 << ((4 * (8)) / 2)) - 1)); } while (0); __w.ll; })};
  w.s.high += ((USItype) uu.s.low * (USItype) vv.s.high
        + (USItype) uu.s.high * (USItype) vv.s.low);
  return w.ll;
}

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [2/2][PATCH,ARM]Generate UAL assembly code for Thumb-1 target
  2014-11-07  9:27   ` Christian Bruel
@ 2014-11-07 10:00     ` Terry Guo
  2014-11-11  9:23     ` Terry Guo
  1 sibling, 0 replies; 5+ messages in thread
From: Terry Guo @ 2014-11-07 10:00 UTC (permalink / raw)
  To: 'Christian Bruel'; +Cc: gcc-patches



> -----Original Message-----
> From: Christian Bruel [mailto:christian.bruel@st.com]
> Sent: Friday, November 07, 2014 5:27 PM
> To: Terry Guo
> Cc: gcc-patches@gcc.gnu.org
> Subject: Re: [2/2][PATCH,ARM]Generate UAL assembly code for Thumb-1
> target
> 
> hi,
> 
> the ARM bootstrap seems to fail for libgcc2.c on the thumb multilib for
> libgcc2: muldi3 -mthumb -O2  -g
> 
> /tmp/ccYrycUw.s: Assembler messages:
> /tmp/ccYrycUw.s:69: Error: MOV Rd, Rs with two low registers is not
> permitted on this architecture -- `mov r6,r7'
> 
> preprocessed attached.
> 
> Thanks
> 
> Christian

Many thanks. I am looking into it now.

BR,
Terry




^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [2/2][PATCH,ARM]Generate UAL assembly code for Thumb-1 target
  2014-11-07  9:27   ` Christian Bruel
  2014-11-07 10:00     ` Terry Guo
@ 2014-11-11  9:23     ` Terry Guo
  1 sibling, 0 replies; 5+ messages in thread
From: Terry Guo @ 2014-11-11  9:23 UTC (permalink / raw)
  To: 'Christian Bruel'; +Cc: gcc-patches



> -----Original Message-----
> From: Terry Guo [mailto:terry.guo@arm.com]
> Sent: Friday, November 07, 2014 6:01 PM
> To: 'Christian Bruel'
> Cc: gcc-patches@gcc.gnu.org
> Subject: RE: [2/2][PATCH,ARM]Generate UAL assembly code for Thumb-1
> target
> 
> 
> 
> > -----Original Message-----
> > From: Christian Bruel [mailto:christian.bruel@st.com]
> > Sent: Friday, November 07, 2014 5:27 PM
> > To: Terry Guo
> > Cc: gcc-patches@gcc.gnu.org
> > Subject: Re: [2/2][PATCH,ARM]Generate UAL assembly code for Thumb-1
> > target
> >
> > hi,
> >
> > the ARM bootstrap seems to fail for libgcc2.c on the thumb multilib
> > for
> > libgcc2: muldi3 -mthumb -O2  -g
> >
> > /tmp/ccYrycUw.s: Assembler messages:
> > /tmp/ccYrycUw.s:69: Error: MOV Rd, Rs with two low registers is not
> > permitted on this architecture -- `mov r6,r7'
> >
> > preprocessed attached.
> >
> > Thanks
> >
> > Christian
> 
> Many thanks. I am looking into it now.
> 
> BR,
> Terry

Fix is committed to trunk at https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=217341.

BR,
Terry



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2014-11-11  9:23 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-10-21 11:20 [2/2][PATCH,ARM]Generate UAL assembly code for Thumb-1 target Terry Guo
2014-11-04  8:22 ` Ramana Radhakrishnan
2014-11-07  9:27   ` Christian Bruel
2014-11-07 10:00     ` Terry Guo
2014-11-11  9:23     ` Terry Guo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).