public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] When cmodel=extreme, add macro support and only support macros.
@ 2024-01-05  3:40 Lulu Cheng
  2024-01-05  3:40 ` [PATCH v2 1/2] LoongArch: Add the macro implementation of mcmodel=extreme Lulu Cheng
  2024-01-05  3:40 ` [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs Lulu Cheng
  0 siblings, 2 replies; 24+ messages in thread
From: Lulu Cheng @ 2024-01-05  3:40 UTC (permalink / raw)
  To: gcc-patches; +Cc: xry111, i, xuchenghua, chenglulu

When cmodel=extreme, since the symbol address is obtained through four instructions,
errors may occur in some cases during linking. Therefore, in order to ensure that
the instructions for obtaining the symbol address are together, macro instructions
are used to obtain the symbol address when cmodel=extreme.

https://github.com/loongson/la-abi-specs/blob/release/laelf.adoc#extreme-code-model

v1 -> v2:
  1. Use the temporarily allocated registers as intermediate registers to implement the extreme macro.
  2. Fixed bugs in v1 test cases.

Lulu Cheng (2):
  LoongArch: Add the macro implementation of mcmodel=extreme.
  LoongArch: When the code model is extreme, the symbol address is
    obtained through macro instructions regardless of the value of
    -mexplicit-relocs.

 gcc/config/loongarch/loongarch.cc             | 39 +++++++++------
 gcc/config/loongarch/loongarch.md             | 50 +++++++++++++++++++
 gcc/config/loongarch/predicates.md            | 14 ++++++
 .../gcc.target/loongarch/attr-model-1.c       |  2 +-
 .../gcc.target/loongarch/attr-model-2.c       |  2 +-
 .../gcc.target/loongarch/attr-model-3.c       |  2 +-
 .../gcc.target/loongarch/attr-model-4.c       |  2 +-
 .../loongarch/func-call-extreme-1.c           |  6 +--
 .../loongarch/func-call-extreme-2.c           |  6 +--
 .../loongarch/func-call-extreme-3.c           |  6 +--
 .../loongarch/func-call-extreme-4.c           |  6 +--
 .../loongarch/func-call-extreme-5.c           |  7 +++
 .../loongarch/func-call-extreme-6.c           |  7 +++
 13 files changed, 118 insertions(+), 31 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/loongarch/func-call-extreme-5.c
 create mode 100644 gcc/testsuite/gcc.target/loongarch/func-call-extreme-6.c

-- 
2.39.3


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

* [PATCH v2 1/2] LoongArch: Add the macro implementation of mcmodel=extreme.
  2024-01-05  3:40 [PATCH v2 0/2] When cmodel=extreme, add macro support and only support macros Lulu Cheng
@ 2024-01-05  3:40 ` Lulu Cheng
  2024-01-05  3:40 ` [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs Lulu Cheng
  1 sibling, 0 replies; 24+ messages in thread
From: Lulu Cheng @ 2024-01-05  3:40 UTC (permalink / raw)
  To: gcc-patches; +Cc: xry111, i, xuchenghua, chenglulu

gcc/ChangeLog:

	* config/loongarch/loongarch.cc (loongarch_symbolic_constant_p):
	Remove the sym+addend form from the SYMBOL_PCREL64 type symbol.
	(loongarch_output_mi_thunk): Add code model extreme support.
	(loongarch_option_override_internal): Supports option combinations
	of -cmodel=extreme and -mexplicit-relocs=none.
	(loongarch_handle_model_attribute): Remove detection code.
	* config/loongarch/loongarch.md (movdi_pcrel64): New templated.
	(movdi_got_disp): Likewise.
	* config/loongarch/predicates.md (symbolic_got_operand): Determine
	whether the symbol type is SYMBOL_GOT_DISP.
	(symbolic_pcrel64_operand): Determine whether the symbol type is
	SYMBOL_PCREL64.

gcc/testsuite/ChangeLog:

	* gcc.target/loongarch/func-call-extreme-5.c: New test.
	* gcc.target/loongarch/func-call-extreme-6.c: New test.
---
 gcc/config/loongarch/loongarch.cc             | 28 +++++------
 gcc/config/loongarch/loongarch.md             | 50 +++++++++++++++++++
 gcc/config/loongarch/predicates.md            | 14 ++++++
 .../loongarch/func-call-extreme-5.c           |  7 +++
 .../loongarch/func-call-extreme-6.c           |  7 +++
 5 files changed, 91 insertions(+), 15 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/loongarch/func-call-extreme-5.c
 create mode 100644 gcc/testsuite/gcc.target/loongarch/func-call-extreme-6.c

diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc
index 28d64135c54..6a3321327ea 100644
--- a/gcc/config/loongarch/loongarch.cc
+++ b/gcc/config/loongarch/loongarch.cc
@@ -1944,10 +1944,10 @@ loongarch_symbolic_constant_p (rtx x, enum loongarch_symbol_type *symbol_type)
     case SYMBOL_TLSGD:
     case SYMBOL_TLSLDM:
     case SYMBOL_PCREL:
-    case SYMBOL_PCREL64:
       /* GAS rejects offsets outside the range [-2^31, 2^31-1].  */
       return sext_hwi (INTVAL (offset), 32) == INTVAL (offset);
 
+    case SYMBOL_PCREL64:
     case SYMBOL_GOT_DISP:
     case SYMBOL_TLS:
       return false;
@@ -7450,12 +7450,22 @@ loongarch_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
      allowed, otherwise load the address into a register first.  */
   if (use_sibcall_p)
     {
-      insn = emit_call_insn (gen_sibcall_internal (fnaddr, const0_rtx));
+      if (TARGET_CMODEL_EXTREME)
+	{
+	  emit_insn (gen_movdi_pcrel64 (temp1, fnaddr, temp2));
+	  insn = emit_call_insn (gen_sibcall_internal (temp1, const0_rtx));
+	}
+      else
+	insn = emit_call_insn (gen_sibcall_internal (fnaddr, const0_rtx));
       SIBLING_CALL_P (insn) = 1;
     }
   else
     {
-      loongarch_emit_move (temp1, fnaddr);
+      if (TARGET_CMODEL_EXTREME)
+	emit_insn (gen_movdi_pcrel64 (temp1, fnaddr, temp2));
+      else
+	loongarch_emit_move (temp1, fnaddr);
+
       emit_jump_insn (gen_indirect_jump (temp1));
     }
 
@@ -7583,10 +7593,6 @@ loongarch_option_override_internal (struct gcc_options *opts,
   switch (la_target.cmodel)
     {
       case CMODEL_EXTREME:
-	if (la_opt_explicit_relocs == EXPLICIT_RELOCS_NONE)
-	  error ("code model %qs is not compatible with %s",
-		 "extreme", "-mexplicit-relocs=none");
-
 	if (opts->x_flag_plt)
 	  {
 	    if (global_options_set.x_flag_plt)
@@ -7951,14 +7957,6 @@ loongarch_handle_model_attribute (tree *node, tree name, tree arg, int,
 	  *no_add_attrs = true;
 	  return NULL_TREE;
 	}
-      if (la_opt_explicit_relocs == EXPLICIT_RELOCS_NONE)
-	{
-	  error_at (DECL_SOURCE_LOCATION (decl),
-		    "%qE attribute is not compatible with %s", name,
-		    "-mexplicit-relocs=none");
-	  *no_add_attrs = true;
-	  return NULL_TREE;
-	}
 
       arg = TREE_VALUE (arg);
       if (TREE_CODE (arg) != STRING_CST)
diff --git a/gcc/config/loongarch/loongarch.md b/gcc/config/loongarch/loongarch.md
index d1f5b94f5d6..c0365dc9e99 100644
--- a/gcc/config/loongarch/loongarch.md
+++ b/gcc/config/loongarch/loongarch.md
@@ -85,6 +85,9 @@ (define_c_enum "unspec" [
 
   UNSPEC_SIBCALL_VALUE_MULTIPLE_INTERNAL_1
   UNSPEC_CALL_VALUE_MULTIPLE_INTERNAL_1
+
+  UNSPEC_MOV_PCREL64
+  UNSPEC_MOV_GOT_DISP
 ])
 
 (define_c_enum "unspecv" [
@@ -2057,6 +2060,25 @@ (define_expand "movdi"
 {
   if (loongarch_legitimize_move (DImode, operands[0], operands[1]))
     DONE;
+
+  enum loongarch_symbol_type symbol_type;
+  if (loongarch_symbolic_constant_p (operands[1], &symbol_type))
+    {
+      if (symbol_type == SYMBOL_PCREL64)
+	{
+	  gcc_assert (can_create_pseudo_p ());
+	  emit_insn (gen_movdi_pcrel64 (operands[0], operands[1],
+					gen_reg_rtx (DImode)));
+	  DONE;
+	}
+      else if (TARGET_CMODEL_EXTREME && symbol_type == SYMBOL_GOT_DISP)
+       {
+	  gcc_assert (can_create_pseudo_p ());
+	  emit_insn (gen_movdi_got_disp (operands[0], operands[1],
+					 gen_reg_rtx (DImode)));
+	  DONE;
+       }
+    }
 })
 
 (define_insn_and_split "*movdi_32bit"
@@ -2097,6 +2119,34 @@ (define_insn_and_split "*movdi_64bit"
   [(set_attr "move_type" "move,const,load,store,mgtf,fpload,mftg,fpstore")
    (set_attr "mode" "DI")])
 
+;; Use two registers to get the local symbol address.
+;; la.local rd, rt, sym
+
+(define_insn "movdi_pcrel64"
+ [(set (match_operand:DI 0 "register_operand" "=r")
+       (match_operand:DI 1 "symbolic_pcrel64_operand"))
+  (unspec:DI [(const_int 0)]
+    UNSPEC_MOV_PCREL64)
+  (clobber (match_operand:DI 2 "register_operand" "=&r"))]
+ "TARGET_64BIT"
+ "la.local\t%0,%2,%1"
+ [(set_attr "mode" "DI")
+  (set_attr "length" "5")])
+
+;; Use two registers to get the global symbol address from the got table.
+;; la.global rd, rt, sym
+
+(define_insn "movdi_got_disp"
+ [(set (match_operand:DI 0 "register_operand" "=r")
+       (match_operand:DI 1 "symbolic_got_operand"))
+  (unspec:DI [(const_int 0)]
+    UNSPEC_MOV_GOT_DISP)
+  (clobber (match_operand:DI 2 "register_operand" "=&r"))]
+ "TARGET_64BIT && TARGET_CMODEL_EXTREME"
+ "la.global\t%0,%2,%1"
+ [(set_attr "mode" "DI")
+  (set_attr "length" "5")])
+
 ;; 32-bit Integer moves
 
 (define_expand "movsi"
diff --git a/gcc/config/loongarch/predicates.md b/gcc/config/loongarch/predicates.md
index ba5336cfb3e..d136dcc1c03 100644
--- a/gcc/config/loongarch/predicates.md
+++ b/gcc/config/loongarch/predicates.md
@@ -592,6 +592,20 @@ (define_predicate "mem_simple_ldst_operand"
 	  || symbolic_pcrel_offset_operand (op, Pmode));
 })
 
+(define_predicate "symbolic_got_operand"
+  (match_code "const,symbol_ref,label_ref")
+{
+  enum loongarch_symbol_type type;
+  return loongarch_symbolic_constant_p (op, &type) && type == SYMBOL_GOT_DISP;
+})
+
+(define_predicate "symbolic_pcrel64_operand"
+  (match_code "const,symbol_ref,label_ref")
+{
+  enum loongarch_symbol_type type;
+  return loongarch_symbolic_constant_p (op, &type) && type == SYMBOL_PCREL64;
+})
+
 (define_predicate "equality_operator"
   (match_code "eq,ne"))
 
diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-5.c b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-5.c
new file mode 100644
index 00000000000..8ecf5bc7525
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-5.c
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-mabi=lp64d -O0 -fpic -fno-plt -mexplicit-relocs=none -mcmodel=extreme" } */
+/* { dg-final { scan-assembler "test:.*la.global.*,\\\$r15,g" } } */
+/* { dg-final { scan-assembler "test1:.*la.global.*,\\\$r15,f" } } */
+/* { dg-final { scan-assembler "test2:.*la.local.*,\\\$r15,l" } } */
+
+#include "func-call-extreme-1.c"
diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-6.c b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-6.c
new file mode 100644
index 00000000000..81830d4d215
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-6.c
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-mabi=lp64d -O0 -fno-pic -fno-plt -mexplicit-relocs=none -mcmodel=extreme" } */
+/* { dg-final { scan-assembler "test:.*la.global.*,\\\$r15,g" } } */
+/* { dg-final { scan-assembler "test1:.*la.local.*,\\\$r15,f" } } */
+/* { dg-final { scan-assembler "test2:.*la.local.*,\\\$r15,l" } } */
+
+#include "func-call-extreme-1.c"
-- 
2.39.3


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

* [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-05  3:40 [PATCH v2 0/2] When cmodel=extreme, add macro support and only support macros Lulu Cheng
  2024-01-05  3:40 ` [PATCH v2 1/2] LoongArch: Add the macro implementation of mcmodel=extreme Lulu Cheng
@ 2024-01-05  3:40 ` Lulu Cheng
  2024-01-05  8:37   ` Xi Ruoyao
  1 sibling, 1 reply; 24+ messages in thread
From: Lulu Cheng @ 2024-01-05  3:40 UTC (permalink / raw)
  To: gcc-patches; +Cc: xry111, i, xuchenghua, chenglulu

Instructions pcalau12i, addi.d, lu32i.d and lu52i.d must be adjancent so that the
linker can infer the PC of pcalau12i to apply relocations to lu32i.d and lu52i.d.
Otherwise, the results would be incorrect if these four instructions are not in
the same 4KiB page.

See the link for details:
https://github.com/loongson/la-abi-specs/blob/release/laelf.adoc#extreme-code-model.

gcc/ChangeLog:

	* config/loongarch/loongarch.cc (loongarch_symbol_extreme_p): Add
	function declaration.
	(loongarch_explicit_relocs_p): Use the macro instruction to get
	the symbol address when loongarch_symbol_extreme_p returns true.

gcc/testsuite/ChangeLog:

	* gcc.target/loongarch/attr-model-1.c: Modify the content of the search
	string in the test case.
	* gcc.target/loongarch/attr-model-2.c: Likewise.
	* gcc.target/loongarch/attr-model-3.c: Likewise.
	* gcc.target/loongarch/attr-model-4.c: Likewise.
	* gcc.target/loongarch/func-call-extreme-1.c: Likewise.
	* gcc.target/loongarch/func-call-extreme-2.c: Likewise.
	* gcc.target/loongarch/func-call-extreme-3.c: Likewise.
	* gcc.target/loongarch/func-call-extreme-4.c: Likewise.
---
 gcc/config/loongarch/loongarch.cc                     | 11 +++++++++++
 gcc/testsuite/gcc.target/loongarch/attr-model-1.c     |  2 +-
 gcc/testsuite/gcc.target/loongarch/attr-model-2.c     |  2 +-
 gcc/testsuite/gcc.target/loongarch/attr-model-3.c     |  2 +-
 gcc/testsuite/gcc.target/loongarch/attr-model-4.c     |  2 +-
 .../gcc.target/loongarch/func-call-extreme-1.c        |  6 +++---
 .../gcc.target/loongarch/func-call-extreme-2.c        |  6 +++---
 .../gcc.target/loongarch/func-call-extreme-3.c        |  6 +++---
 .../gcc.target/loongarch/func-call-extreme-4.c        |  6 +++---
 9 files changed, 27 insertions(+), 16 deletions(-)

diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc
index 6a3321327ea..3b4b28f3bcc 100644
--- a/gcc/config/loongarch/loongarch.cc
+++ b/gcc/config/loongarch/loongarch.cc
@@ -264,6 +264,9 @@ const char *const
 loongarch_fp_conditions[16]= {LARCH_FP_CONDITIONS (STRINGIFY)};
 #undef STRINGIFY
 
+static bool
+loongarch_symbol_extreme_p (enum loongarch_symbol_type type);
+
 /* Size of guard page.  */
 #define STACK_CLASH_PROTECTION_GUARD_SIZE \
   (1 << param_stack_clash_protection_guard_size)
@@ -1963,6 +1966,14 @@ loongarch_symbolic_constant_p (rtx x, enum loongarch_symbol_type *symbol_type)
 bool
 loongarch_explicit_relocs_p (enum loongarch_symbol_type type)
 {
+  /* Instructions pcalau12i, addi.d, lu32i.d and lu52i.d must be adjancent
+     so that the linker can infer the PC of pcalau12i to apply relocations
+     to lu32i.d and lu52i.d.  Otherwise, the results would be incorrect if
+     these four instructions are not in the same 4KiB page.
+     Therefore, macro instructions are used when cmodel=extreme.  */
+  if (loongarch_symbol_extreme_p (type))
+    return false;
+
   if (la_opt_explicit_relocs != EXPLICIT_RELOCS_AUTO)
     return la_opt_explicit_relocs == EXPLICIT_RELOCS_ALWAYS;
 
diff --git a/gcc/testsuite/gcc.target/loongarch/attr-model-1.c b/gcc/testsuite/gcc.target/loongarch/attr-model-1.c
index 916d715b98b..65acb29162c 100644
--- a/gcc/testsuite/gcc.target/loongarch/attr-model-1.c
+++ b/gcc/testsuite/gcc.target/loongarch/attr-model-1.c
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mexplicit-relocs -mcmodel=normal -O2" } */
-/* { dg-final { scan-assembler-times "%pc64_hi12" 2 } } */
+/* { dg-final { scan-assembler-times "la\.local\t\\\$r\[0-9\]+,\\\$r15," 2 } } */
 
 #define ATTR_MODEL_TEST
 #include "attr-model-test.c"
diff --git a/gcc/testsuite/gcc.target/loongarch/attr-model-2.c b/gcc/testsuite/gcc.target/loongarch/attr-model-2.c
index a74c795ac3e..cf0f079e39a 100644
--- a/gcc/testsuite/gcc.target/loongarch/attr-model-2.c
+++ b/gcc/testsuite/gcc.target/loongarch/attr-model-2.c
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mexplicit-relocs -mcmodel=extreme -O2" } */
-/* { dg-final { scan-assembler-times "%pc64_hi12" 3 } } */
+/* { dg-final { scan-assembler-times "la\.local\t\\\$r\[0-9\]+,\\\$r15," 3 } } */
 
 #define ATTR_MODEL_TEST
 #include "attr-model-test.c"
diff --git a/gcc/testsuite/gcc.target/loongarch/attr-model-3.c b/gcc/testsuite/gcc.target/loongarch/attr-model-3.c
index 5622d508678..7c270d462f7 100644
--- a/gcc/testsuite/gcc.target/loongarch/attr-model-3.c
+++ b/gcc/testsuite/gcc.target/loongarch/attr-model-3.c
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mexplicit-relocs=auto -mcmodel=normal -O2" } */
-/* { dg-final { scan-assembler-times "%pc64_hi12" 2 } } */
+/* { dg-final { scan-assembler-times "la\.local\t\\\$r\[0-9\]+,\\\$r15," 2 } } */
 
 #define ATTR_MODEL_TEST
 #include "attr-model-test.c"
diff --git a/gcc/testsuite/gcc.target/loongarch/attr-model-4.c b/gcc/testsuite/gcc.target/loongarch/attr-model-4.c
index 482724bb974..627d630c36d 100644
--- a/gcc/testsuite/gcc.target/loongarch/attr-model-4.c
+++ b/gcc/testsuite/gcc.target/loongarch/attr-model-4.c
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mexplicit-relocs=auto -mcmodel=extreme -O2" } */
-/* { dg-final { scan-assembler-times "%pc64_hi12" 3 } } */
+/* { dg-final { scan-assembler-times "la\.local\t\\\$r\[0-9\]+,\\\$r15," 3 } } */
 
 #define ATTR_MODEL_TEST
 #include "attr-model-test.c"
diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-1.c b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-1.c
index db1e0f85396..46318f3d23f 100644
--- a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-1.c
+++ b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-1.c
@@ -1,8 +1,8 @@
 /* { dg-do compile } */
 /* { dg-options "-mabi=lp64d -O0 -fno-pic -fno-plt -mexplicit-relocs -mcmodel=extreme" } */
-/* { dg-final { scan-assembler "test:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
-/* { dg-final { scan-assembler "test1:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
-/* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
+/* { dg-final { scan-assembler "test:.*la\.global.*,\\\$r15," } } */
+/* { dg-final { scan-assembler "test1:.*la\.local.*,\\\$r15," } } */
+/* { dg-final { scan-assembler "test2:.*la\.local.*,\\\$r15," } } */
 
 extern void g (void);
 void
diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-2.c b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-2.c
index 21bf81ae837..14b6e658ca1 100644
--- a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-2.c
+++ b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-2.c
@@ -1,8 +1,8 @@
 /* { dg-do compile } */
 /* { dg-options "-mabi=lp64d -O0 -fpic -fno-plt -mexplicit-relocs -mcmodel=extreme" } */
-/* { dg-final { scan-assembler "test:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
-/* { dg-final { scan-assembler "test1:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
-/* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
+/* { dg-final { scan-assembler "test:.*la\.global.*,\\\$r15," } } */
+/* { dg-final { scan-assembler "test1:.*la\.global.*,\\\$r15," } } */
+/* { dg-final { scan-assembler "test2:.*la\.local.*,\\\$r15," } } */
 
 extern void g (void);
 void
diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-3.c b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-3.c
index a4da44b4a3d..2ccbd2deb7c 100644
--- a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-3.c
+++ b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-3.c
@@ -1,7 +1,7 @@
 /* { dg-do compile } */
 /* { dg-options "-mabi=lp64d -O0 -fno-pic -fno-plt -mexplicit-relocs=auto -mcmodel=extreme" } */
-/* { dg-final { scan-assembler "test:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
-/* { dg-final { scan-assembler "test1:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
-/* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
+/* { dg-final { scan-assembler "test:.*la\.global.*,\\\$r15," } } */
+/* { dg-final { scan-assembler "test1:.*la\.local.*,\\\$r15," } } */
+/* { dg-final { scan-assembler "test2:.*la\.local.*,\\\$r15," } } */
 
 #include "func-call-extreme-1.c"
diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-4.c b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-4.c
index 16b00f4c5f2..0067024ef7d 100644
--- a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-4.c
+++ b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-4.c
@@ -1,7 +1,7 @@
 /* { dg-do compile } */
 /* { dg-options "-mabi=lp64d -O0 -fpic -fno-plt -mexplicit-relocs=auto -mcmodel=extreme" } */
-/* { dg-final { scan-assembler "test:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
-/* { dg-final { scan-assembler "test1:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
-/* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
+/* { dg-final { scan-assembler "test:.*la\.global.*,\\\$r15," } } */
+/* { dg-final { scan-assembler "test1:.*la\.global.*,\\\$r15," } } */
+/* { dg-final { scan-assembler "test2:.*la\.local.*,\\\$r15," } } */
 
 #include "func-call-extreme-1.c"
-- 
2.39.3


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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-05  3:40 ` [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs Lulu Cheng
@ 2024-01-05  8:37   ` Xi Ruoyao
  2024-01-05  8:51     ` chenglulu
  2024-01-05  9:57     ` chenglulu
  0 siblings, 2 replies; 24+ messages in thread
From: Xi Ruoyao @ 2024-01-05  8:37 UTC (permalink / raw)
  To: Lulu Cheng, gcc-patches; +Cc: i, xuchenghua

On Fri, 2024-01-05 at 11:40 +0800, Lulu Cheng wrote:
>  bool
>  loongarch_explicit_relocs_p (enum loongarch_symbol_type type)
>  {
> +  /* Instructions pcalau12i, addi.d, lu32i.d and lu52i.d must be adjancent
> +     so that the linker can infer the PC of pcalau12i to apply relocations
> +     to lu32i.d and lu52i.d.  Otherwise, the results would be incorrect if
> +     these four instructions are not in the same 4KiB page.
> +     Therefore, macro instructions are used when cmodel=extreme.  */
> +  if (loongarch_symbol_extreme_p (type))
> +    return false;

I think this is a bit of strange.  With -mexplicit-relocs={auto,always}
we should still use explicit relocs, but coding all 4 instructions
altogether as

"pcalau12i.d\t%1,%pc64_hi12(%2)\n\taddi.d\t%0,$r0,%pclo12(%2)\n\tlu32i.d\t%0,%pc64_lo20(%2)\n\tlu52i.d\t%0,%0,%pc64_hi12(%2)"

Give me several hours trying to implement this...

-- 
Xi Ruoyao <xry111@xry111.site>
School of Aerospace Science and Technology, Xidian University

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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-05  8:37   ` Xi Ruoyao
@ 2024-01-05  8:51     ` chenglulu
  2024-01-05  9:57     ` chenglulu
  1 sibling, 0 replies; 24+ messages in thread
From: chenglulu @ 2024-01-05  8:51 UTC (permalink / raw)
  To: Xi Ruoyao, gcc-patches; +Cc: i, xuchenghua


在 2024/1/5 下午4:37, Xi Ruoyao 写道:
> On Fri, 2024-01-05 at 11:40 +0800, Lulu Cheng wrote:
>>   bool
>>   loongarch_explicit_relocs_p (enum loongarch_symbol_type type)
>>   {
>> +  /* Instructions pcalau12i, addi.d, lu32i.d and lu52i.d must be adjancent
>> +     so that the linker can infer the PC of pcalau12i to apply relocations
>> +     to lu32i.d and lu52i.d.  Otherwise, the results would be incorrect if
>> +     these four instructions are not in the same 4KiB page.
>> +     Therefore, macro instructions are used when cmodel=extreme.  */
>> +  if (loongarch_symbol_extreme_p (type))
>> +    return false;
> I think this is a bit of strange.  With -mexplicit-relocs={auto,always}
> we should still use explicit relocs, but coding all 4 instructions
> altogether as
>
> "pcalau12i.d\t%1,%pc64_hi12(%2)\n\taddi.d\t%0,$r0,%pclo12(%2)\n\tlu32i.d\t%0,%pc64_lo20(%2)\n\tlu52i.d\t%0,%0,%pc64_hi12(%2)"
>
> Give me several hours trying to implement this...
>
You mean to take the last add directive out separately?


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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-05  8:37   ` Xi Ruoyao
  2024-01-05  8:51     ` chenglulu
@ 2024-01-05  9:57     ` chenglulu
  2024-01-05 10:25       ` Xi Ruoyao
  1 sibling, 1 reply; 24+ messages in thread
From: chenglulu @ 2024-01-05  9:57 UTC (permalink / raw)
  To: Xi Ruoyao, gcc-patches; +Cc: i, xuchenghua


在 2024/1/5 下午4:37, Xi Ruoyao 写道:
> On Fri, 2024-01-05 at 11:40 +0800, Lulu Cheng wrote:
>>   bool
>>   loongarch_explicit_relocs_p (enum loongarch_symbol_type type)
>>   {
>> +  /* Instructions pcalau12i, addi.d, lu32i.d and lu52i.d must be adjancent
>> +     so that the linker can infer the PC of pcalau12i to apply relocations
>> +     to lu32i.d and lu52i.d.  Otherwise, the results would be incorrect if
>> +     these four instructions are not in the same 4KiB page.
>> +     Therefore, macro instructions are used when cmodel=extreme.  */
>> +  if (loongarch_symbol_extreme_p (type))
>> +    return false;
> I think this is a bit of strange.  With -mexplicit-relocs={auto,always}
> we should still use explicit relocs, but coding all 4 instructions
> altogether as
>
> "pcalau12i.d\t%1,%pc64_hi12(%2)\n\taddi.d\t%0,$r0,%pclo12(%2)\n\tlu32i.d\t%0,%pc64_lo20(%2)\n\tlu52i.d\t%0,%0,%pc64_hi12(%2)"
>
> Give me several hours trying to implement this...
>
I think there is no difference between macros and these instructions put 
together. If implement it in a split form, I think I can try it through 
TARGET_SCHED_MACRO_FUSION_PAIR_P


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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-05  9:57     ` chenglulu
@ 2024-01-05 10:25       ` Xi Ruoyao
  2024-01-05 11:55         ` Xi Ruoyao
  0 siblings, 1 reply; 24+ messages in thread
From: Xi Ruoyao @ 2024-01-05 10:25 UTC (permalink / raw)
  To: chenglulu, gcc-patches; +Cc: i, xuchenghua

On Fri, 2024-01-05 at 17:57 +0800, chenglulu wrote:
> 
> 在 2024/1/5 下午4:37, Xi Ruoyao 写道:
> > On Fri, 2024-01-05 at 11:40 +0800, Lulu Cheng wrote:
> > >   bool
> > >   loongarch_explicit_relocs_p (enum loongarch_symbol_type type)
> > >   {
> > > +  /* Instructions pcalau12i, addi.d, lu32i.d and lu52i.d must be adjancent
> > > +     so that the linker can infer the PC of pcalau12i to apply relocations
> > > +     to lu32i.d and lu52i.d.  Otherwise, the results would be incorrect if
> > > +     these four instructions are not in the same 4KiB page.
> > > +     Therefore, macro instructions are used when cmodel=extreme.  */
> > > +  if (loongarch_symbol_extreme_p (type))
> > > +    return false;
> > I think this is a bit of strange.  With -mexplicit-relocs={auto,always}
> > we should still use explicit relocs, but coding all 4 instructions
> > altogether as
> > 
> > "pcalau12i.d\t%1,%pc64_hi12(%2)\n\taddi.d\t%0,$r0,%pclo12(%2)\n\tlu32i.d\t%0,%pc64_lo20(%2)\n\tlu52i.d\t%0,%0,%pc64_hi12(%2)"
> > 
> > Give me several hours trying to implement this...
> > 
> I think there is no difference between macros and these instructions put 
> together. If implement it in a split form, I think I can try it through 
> TARGET_SCHED_MACRO_FUSION_PAIR_P

There is a difference:

int x;
int t() { return x; }

pcalau12i.d t0, %pc_hi20(x)
addi.d t1, r0, %pc_lo12(x)
lu32i.d t1, %pc64_lo20(x)
lu52i.d t1, t1, %pc64_hi12(x)
ldx.w a0, t0, t1

is slightly better than

pcalau12i.d t0, %pc_hi20(x)
addi.d t1, r0, %pc_lo12(x)
lu32i.d t1, %pc64_lo20(x)
lu52i.d t1, t1, %pc64_hi12(x)
addi.d t0, t0, t1
ld.w a0, t0, 0

And generating macros when -mexplicit-relocs=always can puzzle people
(it says "always" :-\ ).

-- 
Xi Ruoyao <xry111@xry111.site>
School of Aerospace Science and Technology, Xidian University

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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-05 10:25       ` Xi Ruoyao
@ 2024-01-05 11:55         ` Xi Ruoyao
  2024-01-05 12:45           ` chenglulu
  0 siblings, 1 reply; 24+ messages in thread
From: Xi Ruoyao @ 2024-01-05 11:55 UTC (permalink / raw)
  To: chenglulu, gcc-patches; +Cc: i, xuchenghua

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

On Fri, 2024-01-05 at 18:25 +0800, Xi Ruoyao wrote:
> On Fri, 2024-01-05 at 17:57 +0800, chenglulu wrote:
> > 
> > 在 2024/1/5 下午4:37, Xi Ruoyao 写道:
> > > On Fri, 2024-01-05 at 11:40 +0800, Lulu Cheng wrote:
> > > >   bool
> > > >   loongarch_explicit_relocs_p (enum loongarch_symbol_type type)
> > > >   {
> > > > +  /* Instructions pcalau12i, addi.d, lu32i.d and lu52i.d must be adjancent
> > > > +     so that the linker can infer the PC of pcalau12i to apply relocations
> > > > +     to lu32i.d and lu52i.d.  Otherwise, the results would be incorrect if
> > > > +     these four instructions are not in the same 4KiB page.
> > > > +     Therefore, macro instructions are used when cmodel=extreme.  */
> > > > +  if (loongarch_symbol_extreme_p (type))
> > > > +    return false;
> > > I think this is a bit of strange.  With -mexplicit-relocs={auto,always}
> > > we should still use explicit relocs, but coding all 4 instructions
> > > altogether as
> > > 
> > > "pcalau12i.d\t%1,%pc64_hi12(%2)\n\taddi.d\t%0,$r0,%pclo12(%2)\n\tlu32i.d\t%0,%pc64_lo20(%2)\n\tlu52i.d\t%0,%0,%pc64_hi12(%2)"
> > > 
> > > Give me several hours trying to implement this...
> > > 
> > I think there is no difference between macros and these instructions put 
> > together. If implement it in a split form, I think I can try it through 
> > TARGET_SCHED_MACRO_FUSION_PAIR_P

We don't need to split the insn.  We can just add a "large insn"
containing the assembly output we want.

See the attached patch.  Note that TLS LE/LD/GD needs a fix too because
they are basically an variation of GOT addressing.

I've ran some small tests and now trying to bootstrap GCC with -
mcmodel=extreme in BOOT_CFLAGS...

> 
> There is a difference:
> 
> int x;
> int t() { return x; }
> 
> pcalau12i.d t0, %pc_hi20(x)
> addi.d t1, r0, %pc_lo12(x)
> lu32i.d t1, %pc64_lo20(x)
> lu52i.d t1, t1, %pc64_hi12(x)
> ldx.w a0, t0, t1
> 
> is slightly better than
> 
> pcalau12i.d t0, %pc_hi20(x)
> addi.d t1, r0, %pc_lo12(x)
> lu32i.d t1, %pc64_lo20(x)
> lu52i.d t1, t1, %pc64_hi12(x)
> addi.d t0, t0, t1
> ld.w a0, t0, 0
> 
> And generating macros when -mexplicit-relocs=always can puzzle people
> (it says "always" :-\ ).
> 

-- 
Xi Ruoyao <xry111@xry111.site>
School of Aerospace Science and Technology, Xidian University

[-- Attachment #2: 0001-LoongArch-Don-t-split-the-instructions-containing-re.patch --]
[-- Type: text/x-patch, Size: 16189 bytes --]

From f6f75b1fd2dbd30255f127f59d16a2683fa22d58 Mon Sep 17 00:00:00 2001
From: Xi Ruoyao <xry111@xry111.site>
Date: Fri, 5 Jan 2024 18:40:06 +0800
Subject: [PATCH] LoongArch: Don't split the instructions containing relocs for
 extreme code model

The ABI mandates the pcalau12i/addi.d/lu32i.d/lu52i.d instructions for
addressing a symbol to be adjacent.  So model them as "one large
instruction", i.e. define_insn, with two output registers.  The real
address is the sum of these two registers.

The advantage of this approach is the RTL passes can still use ldx/stx
instructions to skip an addi.d instruction.

gcc/ChangeLog:

	* config/loongarch/loongarch.md (unspec): Add
	UNSPEC_LA_PCREL_64_PART1 and UNSPEC_LA_PCREL_64_PART2.
	(la_pcrel64_two_parts): New define_insn.
	* config/loongarch/loongarch.cc (loongarch_tls_symbol): Fix a
	typo in the comment.
	(loongarch_call_tls_get_addr): If TARGET_CMODEL_EXTREME, use
	la_pcrel64_two_parts for addressing the TLS symbol and
	__tls_get_addr.
	(loongarch_legitimize_tls_address): If TARGET_CMODEL_EXTREME,
	address TLS IE symbols with la_pcrel64_two_parts.
	(loongarch_split_symbol): If TARGET_CMODEL_EXTREME, address
	symbols with la_pcrel64_two_parts.

gcc/testsuite/ChangeLog:

	* gcc.target/loongarch/func-call-extreme-1.c (dg-options):
	Use -O2 instead of -O0 to ensure the pcalau12i/addi/lu32i/lu52i
	instruction sequences are not reordered by the compiler.
	(NOIPA): Disallow interprocedural optimizations.
	* gcc.target/loongarch/func-call-extreme-2.c: Remove the content
	duplicated from func-call-extreme-1.c, include it instead.
	(dg-options): Likewise.
	* gcc.target/loongarch/func-call-extreme-3.c (dg-options):
	Likewise.
	* gcc.target/loongarch/func-call-extreme-4.c (dg-options):
	Likewise.
	* gcc.target/loongarch/cmodel-extreme-1.c: New test.
	* gcc.target/loongarch/cmodel-extreme-2.c: New test.
---
 gcc/config/loongarch/loongarch.cc             | 100 +++++++++---------
 gcc/config/loongarch/loongarch.md             |  21 ++++
 .../gcc.target/loongarch/cmodel-extreme-1.c   |  18 ++++
 .../gcc.target/loongarch/cmodel-extreme-2.c   |   7 ++
 .../loongarch/func-call-extreme-1.c           |  14 +--
 .../loongarch/func-call-extreme-2.c           |  29 +----
 .../loongarch/func-call-extreme-3.c           |   2 +-
 .../loongarch/func-call-extreme-4.c           |   2 +-
 8 files changed, 109 insertions(+), 84 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c
 create mode 100644 gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c

diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc
index db83232884f..7c01169b422 100644
--- a/gcc/config/loongarch/loongarch.cc
+++ b/gcc/config/loongarch/loongarch.cc
@@ -2744,7 +2744,7 @@ loongarch_add_offset (rtx temp, rtx reg, HOST_WIDE_INT offset)
   return plus_constant (Pmode, reg, offset);
 }
 
-/* The __tls_get_attr symbol.  */
+/* The __tls_get_addr symbol.  */
 static GTY (()) rtx loongarch_tls_symbol;
 
 /* Load an entry from the GOT for a TLS GD access.  */
@@ -2802,22 +2802,22 @@ loongarch_call_tls_get_addr (rtx sym, enum loongarch_symbol_type type, rtx v0)
 
   if (la_opt_explicit_relocs != EXPLICIT_RELOCS_NONE)
     {
-      /* Split tls symbol to high and low.  */
-      rtx high = gen_rtx_HIGH (Pmode, copy_rtx (loc));
-      high = loongarch_force_temporary (tmp, high);
-
       if (TARGET_CMODEL_EXTREME)
 	{
-	  gcc_assert (TARGET_EXPLICIT_RELOCS);
+	  rtx part1 = gen_reg_rtx (Pmode);
+	  rtx part2 = gen_reg_rtx (Pmode);
 
-	  rtx tmp1 = gen_reg_rtx (Pmode);
-	  emit_insn (gen_tls_low (Pmode, tmp1, gen_rtx_REG (Pmode, 0), loc));
-	  emit_insn (gen_lui_h_lo20 (tmp1, tmp1, loc));
-	  emit_insn (gen_lui_h_hi12 (tmp1, tmp1, loc));
-	  emit_move_insn (a0, gen_rtx_PLUS (Pmode, high, tmp1));
+	  emit_insn (gen_la_pcrel64_two_parts (part1, part2, loc));
+	  emit_move_insn (a0, gen_rtx_PLUS (Pmode, part1, part2));
 	}
       else
-	emit_insn (gen_tls_low (Pmode, a0, high, loc));
+	{
+	  /* Split tls symbol to high and low.  */
+	  rtx high = gen_rtx_HIGH (Pmode, copy_rtx (loc));
+
+	  high = loongarch_force_temporary (tmp, high);
+	  emit_insn (gen_tls_low (Pmode, a0, high, loc));
+	}
     }
   else
     {
@@ -2894,22 +2894,18 @@ loongarch_call_tls_get_addr (rtx sym, enum loongarch_symbol_type type, rtx v0)
 
 	case CMODEL_EXTREME:
 	    {
-	      gcc_assert (TARGET_EXPLICIT_RELOCS);
-
-	      rtx tmp1 = gen_reg_rtx (Pmode);
-	      rtx high = gen_reg_rtx (Pmode);
-
-	      loongarch_emit_move (high,
-				   gen_rtx_HIGH (Pmode, loongarch_tls_symbol));
-	      loongarch_emit_move (tmp1, gen_rtx_LO_SUM (Pmode,
-							 gen_rtx_REG (Pmode, 0),
-							 loongarch_tls_symbol));
-	      emit_insn (gen_lui_h_lo20 (tmp1, tmp1, loongarch_tls_symbol));
-	      emit_insn (gen_lui_h_hi12 (tmp1, tmp1, loongarch_tls_symbol));
+	      gcc_assert (la_opt_explicit_relocs != EXPLICIT_RELOCS_NONE);
+
+	      rtx part1 = gen_reg_rtx (Pmode);
+	      rtx part2 = gen_reg_rtx (Pmode);
+
+	      emit_insn (gen_la_pcrel64_two_parts (part1, part2,
+						   loongarch_tls_symbol));
 	      loongarch_emit_move (dest,
 				   gen_rtx_MEM (Pmode,
 						gen_rtx_PLUS (Pmode,
-							      high, tmp1)));
+							      part1,
+							      part2)));
 	    }
 	  break;
 
@@ -2968,26 +2964,31 @@ loongarch_legitimize_tls_address (rtx loc)
 	  if (la_opt_explicit_relocs != EXPLICIT_RELOCS_NONE)
 	    {
 	      tmp2 = loongarch_unspec_address (loc, SYMBOL_TLS_IE);
-	      tmp3 = gen_reg_rtx (Pmode);
-	      rtx high = gen_rtx_HIGH (Pmode, copy_rtx (tmp2));
-	      high = loongarch_force_temporary (tmp3, high);
 
 	      if (TARGET_CMODEL_EXTREME)
 		{
-		  gcc_assert (TARGET_EXPLICIT_RELOCS);
+		  gcc_assert (la_opt_explicit_relocs
+			      != EXPLICIT_RELOCS_NONE);
 
-		  rtx tmp3 = gen_reg_rtx (Pmode);
-		  emit_insn (gen_tls_low (Pmode, tmp3,
-					  gen_rtx_REG (Pmode, 0), tmp2));
-		  emit_insn (gen_lui_h_lo20 (tmp3, tmp3, tmp2));
-		  emit_insn (gen_lui_h_hi12 (tmp3, tmp3, tmp2));
+		  rtx part1 = gen_reg_rtx (Pmode);
+		  rtx part2 = gen_reg_rtx (Pmode);
+
+		  emit_insn (gen_la_pcrel64_two_parts (part1, part2,
+						       tmp2));
 		  emit_move_insn (tmp1,
 				  gen_rtx_MEM (Pmode,
 					       gen_rtx_PLUS (Pmode,
-							     high, tmp3)));
+							     part1,
+							     part2)));
 		}
 	      else
-		emit_insn (gen_ld_from_got (Pmode, tmp1, high, tmp2));
+		{
+		  tmp3 = gen_reg_rtx (Pmode);
+		  rtx high = gen_rtx_HIGH (Pmode, copy_rtx (tmp2));
+
+		  high = loongarch_force_temporary (tmp3, high);
+		  emit_insn (gen_ld_from_got (Pmode, tmp1, high, tmp2));
+		}
 	    }
 	  else
 	    emit_insn (loongarch_got_load_tls_ie (tmp1, loc));
@@ -3047,7 +3048,8 @@ loongarch_legitimize_tls_address (rtx loc)
 
 	      if (TARGET_CMODEL_EXTREME)
 		{
-		  gcc_assert (TARGET_EXPLICIT_RELOCS);
+		  gcc_assert (la_opt_explicit_relocs
+			      != EXPLICIT_RELOCS_NONE);
 
 		  emit_insn (gen_lui_h_lo20 (tmp1, tmp1, tmp2));
 		  emit_insn (gen_lui_h_hi12 (tmp1, tmp1, tmp2));
@@ -3168,24 +3170,23 @@ loongarch_split_symbol (rtx temp, rtx addr, machine_mode mode, rtx *low_out)
       || !loongarch_split_symbol_type (symbol_type))
     return false;
 
-  rtx high, temp1 = NULL;
+  rtx high;
 
   if (temp == NULL)
     temp = gen_reg_rtx (Pmode);
 
-  /* Get the 12-31 bits of the address.  */
-  high = gen_rtx_HIGH (Pmode, copy_rtx (addr));
-  high = loongarch_force_temporary (temp, high);
-
   if (loongarch_symbol_extreme_p (symbol_type) && can_create_pseudo_p ())
     {
       gcc_assert (la_opt_explicit_relocs != EXPLICIT_RELOCS_NONE);
 
-      temp1 = gen_reg_rtx (Pmode);
-      emit_move_insn (temp1, gen_rtx_LO_SUM (Pmode, gen_rtx_REG (Pmode, 0),
-					     addr));
-      emit_insn (gen_lui_h_lo20 (temp1, temp1, addr));
-      emit_insn (gen_lui_h_hi12 (temp1, temp1, addr));
+      high = gen_reg_rtx (Pmode);
+      emit_insn (gen_la_pcrel64_two_parts (high, temp, addr));
+    }
+  else
+    {
+      /* Get the 12-31 bits of the address.  */
+      high = gen_rtx_HIGH (Pmode, copy_rtx (addr));
+      high = loongarch_force_temporary (temp, high);
     }
 
   if (low_out)
@@ -3194,7 +3195,7 @@ loongarch_split_symbol (rtx temp, rtx addr, machine_mode mode, rtx *low_out)
       case SYMBOL_PCREL64:
 	if (can_create_pseudo_p ())
 	  {
-	    *low_out = gen_rtx_PLUS (Pmode, high, temp1);
+	    *low_out = gen_rtx_PLUS (Pmode, high, temp);
 	    break;
 	  }
 	/* fall through */
@@ -3206,7 +3207,8 @@ loongarch_split_symbol (rtx temp, rtx addr, machine_mode mode, rtx *low_out)
 	/* SYMBOL_GOT_DISP symbols are loaded from the GOT.  */
 	{
 	  if (TARGET_CMODEL_EXTREME && can_create_pseudo_p ())
-	    *low_out = gen_rtx_MEM (Pmode, gen_rtx_PLUS (Pmode, high, temp1));
+	    *low_out = gen_rtx_MEM (Pmode, gen_rtx_PLUS (Pmode, high,
+							 temp));
 	  else
 	    {
 	      rtx low = gen_rtx_LO_SUM (Pmode, high, addr);
diff --git a/gcc/config/loongarch/loongarch.md b/gcc/config/loongarch/loongarch.md
index b20e13eab5a..c52fbd371f5 100644
--- a/gcc/config/loongarch/loongarch.md
+++ b/gcc/config/loongarch/loongarch.md
@@ -85,6 +85,9 @@ (define_c_enum "unspec" [
 
   UNSPEC_SIBCALL_VALUE_MULTIPLE_INTERNAL_1
   UNSPEC_CALL_VALUE_MULTIPLE_INTERNAL_1
+
+  UNSPEC_LA_PCREL_64_PART1
+  UNSPEC_LA_PCREL_64_PART2
 ])
 
 (define_c_enum "unspecv" [
@@ -2097,6 +2100,24 @@ (define_insn_and_split "*movdi_64bit"
   [(set_attr "move_type" "move,const,load,store,mgtf,fpload,mftg,fpstore")
    (set_attr "mode" "DI")])
 
+;; The 64-bit PC-relative part of address loading.
+;; Note that the psABI does not allow splitting it.
+(define_insn "la_pcrel64_two_parts"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+	(unspec:DI [(match_operand:DI 2 "")] UNSPEC_LA_PCREL_64_PART1))
+   (set (match_operand:DI 1 "register_operand" "=r")
+	(unspec:DI [(match_dup 2)] UNSPEC_LA_PCREL_64_PART2))]
+  "TARGET_ABI_LP64 && la_opt_explicit_relocs != EXPLICIT_RELOCS_NONE"
+  {
+    return "pcalau12i\t%0,%r2\n\t"
+	   "addi.d\t%1,$r0,%L2\n\t"
+	   "lu32i.d\t%1,%R2\n\t"
+	   "lu52i.d\t%1,%1,%H2";
+  }
+  [(set_attr "move_type" "move")
+   (set_attr "mode" "DI")
+   (set_attr "length" "16")])
+
 ;; 32-bit Integer moves
 
 (define_expand "movsi"
diff --git a/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c b/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c
new file mode 100644
index 00000000000..564ee4017f7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -fno-plt -mexplicit-relocs=always -fdump-rtl-final" } */
+
+int a;
+extern int b;
+__thread int c __attribute__ ((tls_model ("local-exec")));
+__thread int d __attribute__ ((tls_model ("initial-exec")));
+__thread int e __attribute__ ((tls_model ("local-dynamic")));
+__thread int f __attribute__ ((tls_model ("global-dynamic")));
+
+void
+test (void)
+{
+  a = b + c + d + e + f;
+}
+
+/* a, b, d, e, f, and __tls_get_addr.  */
+/* { dg-final { scan-rtl-dump-times "la_pcrel64_two_parts" 6 "final" } } */
diff --git a/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c b/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c
new file mode 100644
index 00000000000..ce834805f38
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -fno-plt -mexplicit-relocs=auto -fdump-rtl-final" } */
+
+#include "cmodel-extreme-1.c"
+
+/* a, b, d, e, f, and __tls_get_addr.  */
+/* { dg-final { scan-rtl-dump-times "la_pcrel64_two_parts" 6 "final" } } */
diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-1.c b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-1.c
index db1e0f85396..fdb4cf1ff7f 100644
--- a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-1.c
+++ b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-1.c
@@ -1,31 +1,33 @@
 /* { dg-do compile } */
-/* { dg-options "-mabi=lp64d -O0 -fno-pic -fno-plt -mexplicit-relocs -mcmodel=extreme" } */
+/* { dg-options "-mabi=lp64d -O2 -fno-pic -fno-plt -mexplicit-relocs -mcmodel=extreme" } */
 /* { dg-final { scan-assembler "test:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
 /* { dg-final { scan-assembler "test1:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
 /* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
 
+#define NOIPA __attribute__ ((noipa))
+
 extern void g (void);
-void
+NOIPA void
 f (void)
 {}
 
-static void
+NOIPA static void
 l (void)
 {}
 
-void
+NOIPA void
 test (void)
 {
   g ();
 }
 
-void
+NOIPA void
 test1 (void)
 {
   f ();
 }
 
-void
+NOIPA void
 test2 (void)
 {
   l ();
diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-2.c b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-2.c
index 21bf81ae837..dfba3882b97 100644
--- a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-2.c
+++ b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-2.c
@@ -1,32 +1,7 @@
 /* { dg-do compile } */
-/* { dg-options "-mabi=lp64d -O0 -fpic -fno-plt -mexplicit-relocs -mcmodel=extreme" } */
+/* { dg-options "-mabi=lp64d -O2 -fpic -fno-plt -mexplicit-relocs -mcmodel=extreme" } */
 /* { dg-final { scan-assembler "test:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
 /* { dg-final { scan-assembler "test1:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
 /* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
 
-extern void g (void);
-void
-f (void)
-{}
-
-static void
-l (void)
-{}
-
-void
-test (void)
-{
-  g ();
-}
-
-void
-test1 (void)
-{
-  f ();
-}
-
-void
-test2 (void)
-{
-  l ();
-}
+#include "func-call-extreme-1.c"
diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-3.c b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-3.c
index a4da44b4a3d..1f5234f83d1 100644
--- a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-3.c
+++ b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-3.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-mabi=lp64d -O0 -fno-pic -fno-plt -mexplicit-relocs=auto -mcmodel=extreme" } */
+/* { dg-options "-mabi=lp64d -O2 -fno-pic -fno-plt -mexplicit-relocs=auto -mcmodel=extreme" } */
 /* { dg-final { scan-assembler "test:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
 /* { dg-final { scan-assembler "test1:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
 /* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-4.c b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-4.c
index 16b00f4c5f2..c4228500635 100644
--- a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-4.c
+++ b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-4.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-mabi=lp64d -O0 -fpic -fno-plt -mexplicit-relocs=auto -mcmodel=extreme" } */
+/* { dg-options "-mabi=lp64d -O2 -fpic -fno-plt -mexplicit-relocs=auto -mcmodel=extreme" } */
 /* { dg-final { scan-assembler "test:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
 /* { dg-final { scan-assembler "test1:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
 /* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
-- 
2.43.0


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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-05 11:55         ` Xi Ruoyao
@ 2024-01-05 12:45           ` chenglulu
  2024-01-05 14:16             ` Xi Ruoyao
  0 siblings, 1 reply; 24+ messages in thread
From: chenglulu @ 2024-01-05 12:45 UTC (permalink / raw)
  To: Xi Ruoyao, gcc-patches; +Cc: i, xuchenghua


在 2024/1/5 下午7:55, Xi Ruoyao 写道:
> On Fri, 2024-01-05 at 18:25 +0800, Xi Ruoyao wrote:
>> On Fri, 2024-01-05 at 17:57 +0800, chenglulu wrote:
>>> 在 2024/1/5 下午4:37, Xi Ruoyao 写道:
>>>> On Fri, 2024-01-05 at 11:40 +0800, Lulu Cheng wrote:
>>>>>    bool
>>>>>    loongarch_explicit_relocs_p (enum loongarch_symbol_type type)
>>>>>    {
>>>>> +  /* Instructions pcalau12i, addi.d, lu32i.d and lu52i.d must be adjancent
>>>>> +     so that the linker can infer the PC of pcalau12i to apply relocations
>>>>> +     to lu32i.d and lu52i.d.  Otherwise, the results would be incorrect if
>>>>> +     these four instructions are not in the same 4KiB page.
>>>>> +     Therefore, macro instructions are used when cmodel=extreme.  */
>>>>> +  if (loongarch_symbol_extreme_p (type))
>>>>> +    return false;
>>>> I think this is a bit of strange.  With -mexplicit-relocs={auto,always}
>>>> we should still use explicit relocs, but coding all 4 instructions
>>>> altogether as
>>>>
>>>> "pcalau12i.d\t%1,%pc64_hi12(%2)\n\taddi.d\t%0,$r0,%pclo12(%2)\n\tlu32i.d\t%0,%pc64_lo20(%2)\n\tlu52i.d\t%0,%0,%pc64_hi12(%2)"
>>>>
>>>> Give me several hours trying to implement this...
>>>>
>>> I think there is no difference between macros and these instructions put
>>> together. If implement it in a split form, I think I can try it through
>>> TARGET_SCHED_MACRO_FUSION_PAIR_P
> We don't need to split the insn.  We can just add a "large insn"
> containing the assembly output we want.
>
> See the attached patch.  Note that TLS LE/LD/GD needs a fix too because
> they are basically an variation of GOT addressing.
>
> I've ran some small tests and now trying to bootstrap GCC with -
> mcmodel=extreme in BOOT_CFLAGS...
>
>> There is a difference:
>>
>> int x;
>> int t() { return x; }
>>
>> pcalau12i.d t0, %pc_hi20(x)
>> addi.d t1, r0, %pc_lo12(x)
>> lu32i.d t1, %pc64_lo20(x)
>> lu52i.d t1, t1, %pc64_hi12(x)
>> ldx.w a0, t0, t1
>>
>> is slightly better than
>>
>> pcalau12i.d t0, %pc_hi20(x)
>> addi.d t1, r0, %pc_lo12(x)
>> lu32i.d t1, %pc64_lo20(x)
>> lu52i.d t1, t1, %pc64_hi12(x)
>> addi.d t0, t0, t1
>> ld.w a0, t0, 0
>>
>> And generating macros when -mexplicit-relocs=always can puzzle people
>> (it says "always" :-\ ).
>>
Thumbs up! This method is much better than my method, I learned 
something! grateful!
But I still have to test the accuracy.


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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-05 12:45           ` chenglulu
@ 2024-01-05 14:16             ` Xi Ruoyao
  2024-01-12  1:46               ` chenglulu
  0 siblings, 1 reply; 24+ messages in thread
From: Xi Ruoyao @ 2024-01-05 14:16 UTC (permalink / raw)
  To: chenglulu, gcc-patches; +Cc: i, xuchenghua

On Fri, 2024-01-05 at 20:45 +0800, chenglulu wrote:
> 
> 在 2024/1/5 下午7:55, Xi Ruoyao 写道:
> > On Fri, 2024-01-05 at 18:25 +0800, Xi Ruoyao wrote:
> > > On Fri, 2024-01-05 at 17:57 +0800, chenglulu wrote:
> > > > 在 2024/1/5 下午4:37, Xi Ruoyao 写道:
> > > > > On Fri, 2024-01-05 at 11:40 +0800, Lulu Cheng wrote:
> > > > > >    bool
> > > > > >    loongarch_explicit_relocs_p (enum loongarch_symbol_type type)
> > > > > >    {
> > > > > > +  /* Instructions pcalau12i, addi.d, lu32i.d and lu52i.d must be adjancent
> > > > > > +     so that the linker can infer the PC of pcalau12i to apply relocations
> > > > > > +     to lu32i.d and lu52i.d.  Otherwise, the results would be incorrect if
> > > > > > +     these four instructions are not in the same 4KiB page.
> > > > > > +     Therefore, macro instructions are used when cmodel=extreme.  */
> > > > > > +  if (loongarch_symbol_extreme_p (type))
> > > > > > +    return false;
> > > > > I think this is a bit of strange.  With -mexplicit-relocs={auto,always}
> > > > > we should still use explicit relocs, but coding all 4 instructions
> > > > > altogether as
> > > > > 
> > > > > "pcalau12i.d\t%1,%pc64_hi12(%2)\n\taddi.d\t%0,$r0,%pclo12(%2)\n\tlu32i.d\t%0,%pc64_lo20(%2)\n\tlu52i.d\t%0,%0,%pc64_hi12(%2)"
> > > > > 
> > > > > Give me several hours trying to implement this...
> > > > > 
> > > > I think there is no difference between macros and these instructions put
> > > > together. If implement it in a split form, I think I can try it through
> > > > TARGET_SCHED_MACRO_FUSION_PAIR_P
> > We don't need to split the insn.  We can just add a "large insn"
> > containing the assembly output we want.
> > 
> > See the attached patch.  Note that TLS LE/LD/GD needs a fix too because
> > they are basically an variation of GOT addressing.
> > 
> > I've ran some small tests and now trying to bootstrap GCC with -
> > mcmodel=extreme in BOOT_CFLAGS...
> > 
> > > There is a difference:
> > > 
> > > int x;
> > > int t() { return x; }
> > > 
> > > pcalau12i.d t0, %pc_hi20(x)
> > > addi.d t1, r0, %pc_lo12(x)
> > > lu32i.d t1, %pc64_lo20(x)
> > > lu52i.d t1, t1, %pc64_hi12(x)
> > > ldx.w a0, t0, t1
> > > 
> > > is slightly better than
> > > 
> > > pcalau12i.d t0, %pc_hi20(x)
> > > addi.d t1, r0, %pc_lo12(x)
> > > lu32i.d t1, %pc64_lo20(x)
> > > lu52i.d t1, t1, %pc64_hi12(x)
> > > addi.d t0, t0, t1
> > > ld.w a0, t0, 0
> > > 
> > > And generating macros when -mexplicit-relocs=always can puzzle people
> > > (it says "always" :-\ ).
> > > 
> Thumbs up! This method is much better than my method, I learned 
> something! grateful!
> But I still have to test the accuracy.

I found an issue bootstrapping GCC with -mcmodel=extreme in BOOT_CFLAGS:
we need a target hook to tell the generic code
UNSPEC_LA_PCREL_64_PART{1,2} are just a wrapper around symbols, or we'll
see millions lines of messages like

../../gcc/gcc/tree.h:4171:1: note: non-delegitimized UNSPEC
UNSPEC_LA_PCREL_64_PART1 (42) found in variable location

diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc
index 4f89c4af323..410e1b5e693 100644
--- a/gcc/config/loongarch/loongarch.cc
+++ b/gcc/config/loongarch/loongarch.cc
@@ -10868,6 +10868,24 @@ loongarch_asm_code_end (void)
 #undef DUMP_FEATURE
 }
 
+static rtx loongarch_delegitimize_address (rtx op)
+{
+  if (GET_CODE (op) == UNSPEC)
+  {
+    int unspec = XINT (op, 1);
+    switch (unspec)
+      {
+      case UNSPEC_LA_PCREL_64_PART1:
+      case UNSPEC_LA_PCREL_64_PART2:
+	return XVECEXP (op, 0, 0);
+      default:
+	return op;
+      }
+  }
+
+  return op;
+}
+
 /* Initialize the GCC target structure.  */
 #undef TARGET_ASM_ALIGNED_HI_OP
 #define TARGET_ASM_ALIGNED_HI_OP "\t.half\t"
@@ -11129,6 +11147,10 @@ loongarch_asm_code_end (void)
 #define TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT \
   loongarch_builtin_support_vector_misalignment
 
+#undef TARGET_DELEGITIMIZE_ADDRESS
+#define TARGET_DELEGITIMIZE_ADDRESS \
+  loongarch_delegitimize_address
+
 struct gcc_target targetm = TARGET_INITIALIZER;
 
 #include "gt-loongarch.h"

-- 
Xi Ruoyao <xry111@xry111.site>
School of Aerospace Science and Technology, Xidian University

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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-05 14:16             ` Xi Ruoyao
@ 2024-01-12  1:46               ` chenglulu
  2024-01-12 11:42                 ` Xi Ruoyao
  0 siblings, 1 reply; 24+ messages in thread
From: chenglulu @ 2024-01-12  1:46 UTC (permalink / raw)
  To: Xi Ruoyao, gcc-patches; +Cc: i, xuchenghua

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


> I found an issue bootstrapping GCC with -mcmodel=extreme in BOOT_CFLAGS:
> we need a target hook to tell the generic code
> UNSPEC_LA_PCREL_64_PART{1,2} are just a wrapper around symbols, or we'll
> see millions lines of messages like
>
> ../../gcc/gcc/tree.h:4171:1: note: non-delegitimized UNSPEC
> UNSPEC_LA_PCREL_64_PART1 (42) found in variable location
>
I build GCC with -mcmodel=extreme in BOOT_CFLAGS, but I haven't 
reproduced the problem you mentioned.

$../configure --host=loongarch64-linux-gnu 
--target=loongarch64-linux-gnu --build=loongarch64-linux-gnu \

         --with-arch=loongarch64 --with-abi=lp64d --enable-tls 
--enable-languages=c,c++,fortran,lto --enable-plugin \

         --disable-multilib --disable-host-shared --enable-bootstrap 
--enable-checking=release

     $ make BOOT_FLAGS="-mcmodel=extreme"

What did I do wrong?:-(



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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-12  1:46               ` chenglulu
@ 2024-01-12 11:42                 ` Xi Ruoyao
  2024-01-13  7:01                   ` chenglulu
  0 siblings, 1 reply; 24+ messages in thread
From: Xi Ruoyao @ 2024-01-12 11:42 UTC (permalink / raw)
  To: chenglulu, gcc-patches; +Cc: i, xuchenghua

在 2024-01-12星期五的 09:46 +0800,chenglulu写道:

> > I found an issue bootstrapping GCC with -mcmodel=extreme in BOOT_CFLAGS:
> > we need a target hook to tell the generic code
> > UNSPEC_LA_PCREL_64_PART{1,2} are just a wrapper around symbols, or we'll
> > see millions lines of messages like
> > 
> > ../../gcc/gcc/tree.h:4171:1: note: non-delegitimized UNSPEC
> > UNSPEC_LA_PCREL_64_PART1 (42) found in variable location
> 
> I build GCC with -mcmodel=extreme in BOOT_CFLAGS, but I haven't reproduced the problem you mentioned.
> 
>     $ ../configure --host=loongarch64-linux-gnu --target=loongarch64-linux-gnu --build=loongarch64-linux-gnu \
>         --with-arch=loongarch64 --with-abi=lp64d --enable-tls --enable-languages=c,c++,fortran,lto --enable-plugin \
>         --disable-multilib --disable-host-shared --enable-bootstrap --enable-checking=release
>     $ make BOOT_FLAGS="-mcmodel=extreme"
> 
> What did I do wrong?:-(

BOOT_CFLAGS, not BOOT_FLAGS :).

-- 
Xi Ruoyao <xry111@xry111.site>
School of Aerospace Science and Technology, Xidian University

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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-12 11:42                 ` Xi Ruoyao
@ 2024-01-13  7:01                   ` chenglulu
  2024-01-13 13:05                     ` Xi Ruoyao
  0 siblings, 1 reply; 24+ messages in thread
From: chenglulu @ 2024-01-13  7:01 UTC (permalink / raw)
  To: Xi Ruoyao, gcc-patches; +Cc: i, xuchenghua


在 2024/1/12 下午7:42, Xi Ruoyao 写道:
> 在 2024-01-12星期五的 09:46 +0800,chenglulu写道:
>
>>> I found an issue bootstrapping GCC with -mcmodel=extreme in BOOT_CFLAGS:
>>> we need a target hook to tell the generic code
>>> UNSPEC_LA_PCREL_64_PART{1,2} are just a wrapper around symbols, or we'll
>>> see millions lines of messages like
>>>
>>> ../../gcc/gcc/tree.h:4171:1: note: non-delegitimized UNSPEC
>>> UNSPEC_LA_PCREL_64_PART1 (42) found in variable location
>> I build GCC with -mcmodel=extreme in BOOT_CFLAGS, but I haven't reproduced the problem you mentioned.
>>
>>      $ ../configure --host=loongarch64-linux-gnu --target=loongarch64-linux-gnu --build=loongarch64-linux-gnu \
>>          --with-arch=loongarch64 --with-abi=lp64d --enable-tls --enable-languages=c,c++,fortran,lto --enable-plugin \
>>          --disable-multilib --disable-host-shared --enable-bootstrap --enable-checking=release
>>      $ make BOOT_FLAGS="-mcmodel=extreme"
>>
>> What did I do wrong?:-(
> BOOT_CFLAGS, not BOOT_FLAGS :).
>
This is so strange. My compilation here stopped due to syntax problems,

and I still haven't reproduced the information you mentioned about 
UNSPEC_LA_PCREL_64_PART1.



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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-13  7:01                   ` chenglulu
@ 2024-01-13 13:05                     ` Xi Ruoyao
  2024-01-13 14:05                       ` chenglulu
  2024-01-17  9:38                       ` chenglulu
  0 siblings, 2 replies; 24+ messages in thread
From: Xi Ruoyao @ 2024-01-13 13:05 UTC (permalink / raw)
  To: chenglulu, gcc-patches; +Cc: i, xuchenghua

在 2024-01-13星期六的 15:01 +0800,chenglulu写道:
> 
> 在 2024/1/12 下午7:42, Xi Ruoyao 写道:
> > 在 2024-01-12星期五的 09:46 +0800,chenglulu写道:
> > 
> > > > I found an issue bootstrapping GCC with -mcmodel=extreme in BOOT_CFLAGS:
> > > > we need a target hook to tell the generic code
> > > > UNSPEC_LA_PCREL_64_PART{1,2} are just a wrapper around symbols, or we'll
> > > > see millions lines of messages like
> > > > 
> > > > ../../gcc/gcc/tree.h:4171:1: note: non-delegitimized UNSPEC
> > > > UNSPEC_LA_PCREL_64_PART1 (42) found in variable location
> > > I build GCC with -mcmodel=extreme in BOOT_CFLAGS, but I haven't reproduced the problem you mentioned.
> > > 
> > >      $ ../configure --host=loongarch64-linux-gnu --target=loongarch64-linux-gnu --build=loongarch64-linux-gnu \
> > >          --with-arch=loongarch64 --with-abi=lp64d --enable-tls --enable-languages=c,c++,fortran,lto --enable-plugin \
> > >          --disable-multilib --disable-host-shared --enable-bootstrap --enable-checking=release
> > >      $ make BOOT_FLAGS="-mcmodel=extreme"
> > > 
> > > What did I do wrong?:-(
> > BOOT_CFLAGS, not BOOT_FLAGS :).
> > 
> This is so strange. My compilation here stopped due to syntax problems,
> 
> and I still haven't reproduced the information you mentioned about 
> UNSPEC_LA_PCREL_64_PART1.

I used:

../gcc/configure --with-system-zlib --disable-fixincludes \
                 --enable-default-ssp --enable-default-pie \
                 --disable-werror --disable-multilib \
                 --prefix=/home/xry111/gcc-dev

and then

make STAGE1_{C,CXX}FLAGS="-O2 -g" -j8 \
     BOOT_{C,CXX}FLAGS="-O2 -g -mcmodel=extreme" &| tee gcc-build.log

I guess "-g" is needed to reproduce the issue as well as the messages
were produced in dwarf generation.

-- 
Xi Ruoyao <xry111@xry111.site>
School of Aerospace Science and Technology, Xidian University

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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-13 13:05                     ` Xi Ruoyao
@ 2024-01-13 14:05                       ` chenglulu
  2024-01-17  9:38                       ` chenglulu
  1 sibling, 0 replies; 24+ messages in thread
From: chenglulu @ 2024-01-13 14:05 UTC (permalink / raw)
  To: Xi Ruoyao, gcc-patches; +Cc: i, xuchenghua


在 2024/1/13 下午9:05, Xi Ruoyao 写道:
> 在 2024-01-13星期六的 15:01 +0800,chenglulu写道:
>> 在 2024/1/12 下午7:42, Xi Ruoyao 写道:
>>> 在 2024-01-12星期五的 09:46 +0800,chenglulu写道:
>>>
>>>>> I found an issue bootstrapping GCC with -mcmodel=extreme in BOOT_CFLAGS:
>>>>> we need a target hook to tell the generic code
>>>>> UNSPEC_LA_PCREL_64_PART{1,2} are just a wrapper around symbols, or we'll
>>>>> see millions lines of messages like
>>>>>
>>>>> ../../gcc/gcc/tree.h:4171:1: note: non-delegitimized UNSPEC
>>>>> UNSPEC_LA_PCREL_64_PART1 (42) found in variable location
>>>> I build GCC with -mcmodel=extreme in BOOT_CFLAGS, but I haven't reproduced the problem you mentioned.
>>>>
>>>>       $ ../configure --host=loongarch64-linux-gnu --target=loongarch64-linux-gnu --build=loongarch64-linux-gnu \
>>>>           --with-arch=loongarch64 --with-abi=lp64d --enable-tls --enable-languages=c,c++,fortran,lto --enable-plugin \
>>>>           --disable-multilib --disable-host-shared --enable-bootstrap --enable-checking=release
>>>>       $ make BOOT_FLAGS="-mcmodel=extreme"
>>>>
>>>> What did I do wrong?:-(
>>> BOOT_CFLAGS, not BOOT_FLAGS :).
>>>
>> This is so strange. My compilation here stopped due to syntax problems,
>>
>> and I still haven't reproduced the information you mentioned about
>> UNSPEC_LA_PCREL_64_PART1.
> I used:
>
> ../gcc/configure --with-system-zlib --disable-fixincludes \
>                   --enable-default-ssp --enable-default-pie \
>                   --disable-werror --disable-multilib \
>                   --prefix=/home/xry111/gcc-dev
>
> and then
>
> make STAGE1_{C,CXX}FLAGS="-O2 -g" -j8 \
>       BOOT_{C,CXX}FLAGS="-O2 -g -mcmodel=extreme" &| tee gcc-build.log
>
> I guess "-g" is needed to reproduce the issue as well as the messages
> were produced in dwarf generation.

Oh, okay, I'll try this method!:-)

>


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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-13 13:05                     ` Xi Ruoyao
  2024-01-13 14:05                       ` chenglulu
@ 2024-01-17  9:38                       ` chenglulu
  2024-01-17  9:50                         ` Xi Ruoyao
  1 sibling, 1 reply; 24+ messages in thread
From: chenglulu @ 2024-01-17  9:38 UTC (permalink / raw)
  To: Xi Ruoyao, gcc-patches; +Cc: i, xuchenghua

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


在 2024/1/13 下午9:05, Xi Ruoyao 写道:
> 在 2024-01-13星期六的 15:01 +0800,chenglulu写道:
>> 在 2024/1/12 下午7:42, Xi Ruoyao 写道:
>>> 在 2024-01-12星期五的 09:46 +0800,chenglulu写道:
>>>
>>>>> I found an issue bootstrapping GCC with -mcmodel=extreme in BOOT_CFLAGS:
>>>>> we need a target hook to tell the generic code
>>>>> UNSPEC_LA_PCREL_64_PART{1,2} are just a wrapper around symbols, or we'll
>>>>> see millions lines of messages like
>>>>>
>>>>> ../../gcc/gcc/tree.h:4171:1: note: non-delegitimized UNSPEC
>>>>> UNSPEC_LA_PCREL_64_PART1 (42) found in variable location
>>>> I build GCC with -mcmodel=extreme in BOOT_CFLAGS, but I haven't reproduced the problem you mentioned.
>>>>
>>>>       $ ../configure --host=loongarch64-linux-gnu --target=loongarch64-linux-gnu --build=loongarch64-linux-gnu \
>>>>           --with-arch=loongarch64 --with-abi=lp64d --enable-tls --enable-languages=c,c++,fortran,lto --enable-plugin \
>>>>           --disable-multilib --disable-host-shared --enable-bootstrap --enable-checking=release
>>>>       $ make BOOT_FLAGS="-mcmodel=extreme"
>>>>
>>>> What did I do wrong?:-(
>>> BOOT_CFLAGS, not BOOT_FLAGS :).
>>>
>> This is so strange. My compilation here stopped due to syntax problems,
>>
>> and I still haven't reproduced the information you mentioned about
>> UNSPEC_LA_PCREL_64_PART1.
> I used:
>
> ../gcc/configure --with-system-zlib --disable-fixincludes \
>                   --enable-default-ssp --enable-default-pie \
>                   --disable-werror --disable-multilib \
>                   --prefix=/home/xry111/gcc-dev
>
> and then
>
> make STAGE1_{C,CXX}FLAGS="-O2 -g" -j8 \
>       BOOT_{C,CXX}FLAGS="-O2 -g -mcmodel=extreme" &| tee gcc-build.log
>
> I guess "-g" is needed to reproduce the issue as well as the messages
> were produced in dwarf generation.
>
I have reproduced this problem, and it can be solved by adding a hook.

But unfortunately, when using '-mcmodel=extreme -mexplicit-relocs=always'

to test spec2006 403.gcc, an error will occur. Others have not been 
tested yet.

I roughly debugged it, and the problem should be this:

The problem is that the address of the instruction ‘ldx.d $r12, $r25, 
$r6’ is wrong.

Wrong assembly:

    5826         pcalau12i       $r13,%got_pc_hi20(recog_data)
  5827         addi.d  $r12,$r0,%got_pc_lo12(recog_data)
  5828         lu32i.d $r12,%got64_pc_lo20(recog_data)
  5829         lu52i.d $r12,$r12,%got64_pc_hi12(recog_data)
  5830         ldx.d   $r12,$r13,$r12
  5831         ld.b    $r8,$r12,997
  5832         .loc 1 829 18 discriminator 1 view .LVU1527
  5833         ble     $r8,$r0,.L476
  5834         ld.d    $r6,$r3,16
  5835         ld.d    $r9,$r3,88
  5836 .LBB189 = .
  5837         .loc 1 839 24 view .LVU1528
  5838         alsl.d  $r7,$r19,$r19,2
  5839         ldx.d   $r12,$r25,$r6
  5840         addi.d  $r17,$r3,120
  5841 .LBE189 = .
  5842         .loc 1 829 18 discriminator 1 view .LVU1529
  5843         or      $r13,$r0,$r0
  5844         addi.d  $r4,$r12,992

Assembly that works fine using macros:

3040         la.global       $r12,$r13,recog_data
3041         ld.b    $r9,$r12,997
3042         ble     $r9,$r0,.L475
3043         alsl.d  $r5,$r16,$r16,2
3044         la.global       $r15,$r17,recog_data
3045         addi.d  $r4,$r12,992
3046         addi.d  $r18,$r3,48
3047         or      $r13,$r0,$r0

Comparing the assembly, we can see that lines 5844 and 3045 have the 
same function,

but there is a problem with the base address register optimization at 
line 5844.

regrename.c.283r.loop2_init:

(insn 6 497 2741 34 (set (reg:DI 180 [ ivtmp.713D.15724 ])
         (const_int 0 [0])) "regrename.c":829:18 discrim 1 156 
{*movdi_64bit}
(nil))
(insn 2741 6 2744 34 (parallel [
             (set (reg:DI 1502)
                 (unspec:DI [
                         (symbol_ref:DI ("recog_data") [flags 0xc0]  
<var_decl 0x7f8c5ffd66c0 recog_data>)
                     ] UNSPEC_LA_PCREL_64_PART1))
             (set (reg/f:DI 1479)
                 (unspec:DI [
                         (symbol_ref:DI ("recog_data") [flags 0xc0]  
<var_decl 0x7f8c5ffd66c0 recog_data>)
                     ] UNSPEC_LA_PCREL_64_PART2))
         ]) -1
      (expr_list:REG_UNUSED (reg/f:DI 1479)
(nil)))
(insn 2744 2741 2745 34 (set (reg/f:DI 1503)
         (mem:DI (plus:DI (reg/f:DI 1479)
                 (reg:DI 1502)) [0  S8 A8])) 156 {*movdi_64bit}
      (expr_list:REG_EQUAL (symbol_ref:DI ("recog_data") [flags 0xc0]  
<var_decl 0x7f8c5ffd66c0 recog_data>)
(nil)))


Virtual register 1479 will be used in insn 2744, but register 1479 was 
assigned the REG_UNUSED attribute in the previous instruction.

The attached file is the wrong file.
The compilation command is as follows:

$ ./gcc/cc1 -fpreprocessed regrename.i -quiet -dp -dumpbase regrename.c 
-dumpbase-ext .c -mno-relax -mabi=lp64d -march=loongarch64 -mfpu=64 
-msimd=lasx -mcmodel=extreme -mtune=loongarch64 -g3 -O2 
-Wno-int-conversion -Wno-implicit-int -Wno-implicit-function-declaration 
-Wno-incompatible-pointer-types -version -o regrename.s 
-mexplicit-relocs=always -fdump-rtl-all-all


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

# 0 "regrename.c"
# 1 "/home/chenglulu/work/benchmark/cpu2006-v1.1/benchspec/CPU2006/403.gcc/build/build_base_trunk.0000//"
# 0 "<built-in>"
#define __STDC__ 1
# 0 "<built-in>"
#define __STDC_VERSION__ 201710L
# 0 "<built-in>"
#define __STDC_UTF_16__ 1
# 0 "<built-in>"
#define __STDC_UTF_32__ 1
# 0 "<built-in>"
#define __STDC_HOSTED__ 1
# 0 "<built-in>"
#define __GNUC__ 14
# 0 "<built-in>"
#define __GNUC_MINOR__ 0
# 0 "<built-in>"
#define __GNUC_PATCHLEVEL__ 1
# 0 "<built-in>"
#define __VERSION__ "14.0.1 20240115 (experimental)"
# 0 "<built-in>"
#define __ATOMIC_RELAXED 0
# 0 "<built-in>"
#define __ATOMIC_SEQ_CST 5
# 0 "<built-in>"
#define __ATOMIC_ACQUIRE 2
# 0 "<built-in>"
#define __ATOMIC_RELEASE 3
# 0 "<built-in>"
#define __ATOMIC_ACQ_REL 4
# 0 "<built-in>"
#define __ATOMIC_CONSUME 1
# 0 "<built-in>"
#define __OPTIMIZE__ 1
# 0 "<built-in>"
#define __FINITE_MATH_ONLY__ 0
# 0 "<built-in>"
#define _LP64 1
# 0 "<built-in>"
#define __LP64__ 1
# 0 "<built-in>"
#define __SIZEOF_INT__ 4
# 0 "<built-in>"
#define __SIZEOF_LONG__ 8
# 0 "<built-in>"
#define __SIZEOF_LONG_LONG__ 8
# 0 "<built-in>"
#define __SIZEOF_SHORT__ 2
# 0 "<built-in>"
#define __SIZEOF_FLOAT__ 4
# 0 "<built-in>"
#define __SIZEOF_DOUBLE__ 8
# 0 "<built-in>"
#define __SIZEOF_LONG_DOUBLE__ 16
# 0 "<built-in>"
#define __SIZEOF_SIZE_T__ 8
# 0 "<built-in>"
#define __CHAR_BIT__ 8
# 0 "<built-in>"
#define __BIGGEST_ALIGNMENT__ 32
# 0 "<built-in>"
#define __ORDER_LITTLE_ENDIAN__ 1234
# 0 "<built-in>"
#define __ORDER_BIG_ENDIAN__ 4321
# 0 "<built-in>"
#define __ORDER_PDP_ENDIAN__ 3412
# 0 "<built-in>"
#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
# 0 "<built-in>"
#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__
# 0 "<built-in>"
#define __SIZEOF_POINTER__ 8
# 0 "<built-in>"
#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8"
# 0 "<built-in>"
#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE"
# 0 "<built-in>"
#define __SIZE_TYPE__ long unsigned int
# 0 "<built-in>"
#define __PTRDIFF_TYPE__ long int
# 0 "<built-in>"
#define __WCHAR_TYPE__ int
# 0 "<built-in>"
#define __WINT_TYPE__ unsigned int
# 0 "<built-in>"
#define __INTMAX_TYPE__ long int
# 0 "<built-in>"
#define __UINTMAX_TYPE__ long unsigned int
# 0 "<built-in>"
#define __CHAR16_TYPE__ short unsigned int
# 0 "<built-in>"
#define __CHAR32_TYPE__ unsigned int
# 0 "<built-in>"
#define __SIG_ATOMIC_TYPE__ int
# 0 "<built-in>"
#define __INT8_TYPE__ signed char
# 0 "<built-in>"
#define __INT16_TYPE__ short int
# 0 "<built-in>"
#define __INT32_TYPE__ int
# 0 "<built-in>"
#define __INT64_TYPE__ long int
# 0 "<built-in>"
#define __UINT8_TYPE__ unsigned char
# 0 "<built-in>"
#define __UINT16_TYPE__ short unsigned int
# 0 "<built-in>"
#define __UINT32_TYPE__ unsigned int
# 0 "<built-in>"
#define __UINT64_TYPE__ long unsigned int
# 0 "<built-in>"
#define __INT_LEAST8_TYPE__ signed char
# 0 "<built-in>"
#define __INT_LEAST16_TYPE__ short int
# 0 "<built-in>"
#define __INT_LEAST32_TYPE__ int
# 0 "<built-in>"
#define __INT_LEAST64_TYPE__ long int
# 0 "<built-in>"
#define __UINT_LEAST8_TYPE__ unsigned char
# 0 "<built-in>"
#define __UINT_LEAST16_TYPE__ short unsigned int
# 0 "<built-in>"
#define __UINT_LEAST32_TYPE__ unsigned int
# 0 "<built-in>"
#define __UINT_LEAST64_TYPE__ long unsigned int
# 0 "<built-in>"
#define __INT_FAST8_TYPE__ signed char
# 0 "<built-in>"
#define __INT_FAST16_TYPE__ long int
# 0 "<built-in>"
#define __INT_FAST32_TYPE__ long int
# 0 "<built-in>"
#define __INT_FAST64_TYPE__ long int
# 0 "<built-in>"
#define __UINT_FAST8_TYPE__ unsigned char
# 0 "<built-in>"
#define __UINT_FAST16_TYPE__ long unsigned int
# 0 "<built-in>"
#define __UINT_FAST32_TYPE__ long unsigned int
# 0 "<built-in>"
#define __UINT_FAST64_TYPE__ long unsigned int
# 0 "<built-in>"
#define __INTPTR_TYPE__ long int
# 0 "<built-in>"
#define __UINTPTR_TYPE__ long unsigned int
# 0 "<built-in>"
#define __GXX_ABI_VERSION 1019
# 0 "<built-in>"
#define __SCHAR_MAX__ 0x7f
# 0 "<built-in>"
#define __SHRT_MAX__ 0x7fff
# 0 "<built-in>"
#define __INT_MAX__ 0x7fffffff
# 0 "<built-in>"
#define __LONG_MAX__ 0x7fffffffffffffffL
# 0 "<built-in>"
#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL
# 0 "<built-in>"
#define __WCHAR_MAX__ 0x7fffffff
# 0 "<built-in>"
#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1)
# 0 "<built-in>"
#define __WINT_MAX__ 0xffffffffU
# 0 "<built-in>"
#define __WINT_MIN__ 0U
# 0 "<built-in>"
#define __PTRDIFF_MAX__ 0x7fffffffffffffffL
# 0 "<built-in>"
#define __SIZE_MAX__ 0xffffffffffffffffUL
# 0 "<built-in>"
#define __SCHAR_WIDTH__ 8
# 0 "<built-in>"
#define __SHRT_WIDTH__ 16
# 0 "<built-in>"
#define __INT_WIDTH__ 32
# 0 "<built-in>"
#define __LONG_WIDTH__ 64
# 0 "<built-in>"
#define __LONG_LONG_WIDTH__ 64
# 0 "<built-in>"
#define __WCHAR_WIDTH__ 32
# 0 "<built-in>"
#define __WINT_WIDTH__ 32
# 0 "<built-in>"
#define __PTRDIFF_WIDTH__ 64
# 0 "<built-in>"
#define __SIZE_WIDTH__ 64
# 0 "<built-in>"
#define __INTMAX_MAX__ 0x7fffffffffffffffL
# 0 "<built-in>"
#define __INTMAX_C(c) c ## L
# 0 "<built-in>"
#define __UINTMAX_MAX__ 0xffffffffffffffffUL
# 0 "<built-in>"
#define __UINTMAX_C(c) c ## UL
# 0 "<built-in>"
#define __INTMAX_WIDTH__ 64
# 0 "<built-in>"
#define __SIG_ATOMIC_MAX__ 0x7fffffff
# 0 "<built-in>"
#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1)
# 0 "<built-in>"
#define __SIG_ATOMIC_WIDTH__ 32
# 0 "<built-in>"
#define __INT8_MAX__ 0x7f
# 0 "<built-in>"
#define __INT16_MAX__ 0x7fff
# 0 "<built-in>"
#define __INT32_MAX__ 0x7fffffff
# 0 "<built-in>"
#define __INT64_MAX__ 0x7fffffffffffffffL
# 0 "<built-in>"
#define __UINT8_MAX__ 0xff
# 0 "<built-in>"
#define __UINT16_MAX__ 0xffff
# 0 "<built-in>"
#define __UINT32_MAX__ 0xffffffffU
# 0 "<built-in>"
#define __UINT64_MAX__ 0xffffffffffffffffUL
# 0 "<built-in>"
#define __INT_LEAST8_MAX__ 0x7f
# 0 "<built-in>"
#define __INT8_C(c) c
# 0 "<built-in>"
#define __INT_LEAST8_WIDTH__ 8
# 0 "<built-in>"
#define __INT_LEAST16_MAX__ 0x7fff
# 0 "<built-in>"
#define __INT16_C(c) c
# 0 "<built-in>"
#define __INT_LEAST16_WIDTH__ 16
# 0 "<built-in>"
#define __INT_LEAST32_MAX__ 0x7fffffff
# 0 "<built-in>"
#define __INT32_C(c) c
# 0 "<built-in>"
#define __INT_LEAST32_WIDTH__ 32
# 0 "<built-in>"
#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL
# 0 "<built-in>"
#define __INT64_C(c) c ## L
# 0 "<built-in>"
#define __INT_LEAST64_WIDTH__ 64
# 0 "<built-in>"
#define __UINT_LEAST8_MAX__ 0xff
# 0 "<built-in>"
#define __UINT8_C(c) c
# 0 "<built-in>"
#define __UINT_LEAST16_MAX__ 0xffff
# 0 "<built-in>"
#define __UINT16_C(c) c
# 0 "<built-in>"
#define __UINT_LEAST32_MAX__ 0xffffffffU
# 0 "<built-in>"
#define __UINT32_C(c) c ## U
# 0 "<built-in>"
#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL
# 0 "<built-in>"
#define __UINT64_C(c) c ## UL
# 0 "<built-in>"
#define __INT_FAST8_MAX__ 0x7f
# 0 "<built-in>"
#define __INT_FAST8_WIDTH__ 8
# 0 "<built-in>"
#define __INT_FAST16_MAX__ 0x7fffffffffffffffL
# 0 "<built-in>"
#define __INT_FAST16_WIDTH__ 64
# 0 "<built-in>"
#define __INT_FAST32_MAX__ 0x7fffffffffffffffL
# 0 "<built-in>"
#define __INT_FAST32_WIDTH__ 64
# 0 "<built-in>"
#define __INT_FAST64_MAX__ 0x7fffffffffffffffL
# 0 "<built-in>"
#define __INT_FAST64_WIDTH__ 64
# 0 "<built-in>"
#define __UINT_FAST8_MAX__ 0xff
# 0 "<built-in>"
#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL
# 0 "<built-in>"
#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL
# 0 "<built-in>"
#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL
# 0 "<built-in>"
#define __INTPTR_MAX__ 0x7fffffffffffffffL
# 0 "<built-in>"
#define __INTPTR_WIDTH__ 64
# 0 "<built-in>"
#define __UINTPTR_MAX__ 0xffffffffffffffffUL
# 0 "<built-in>"
#define __GCC_IEC_559 2
# 0 "<built-in>"
#define __GCC_IEC_559_COMPLEX 2
# 0 "<built-in>"
#define __FLT_EVAL_METHOD__ 0
# 0 "<built-in>"
#define __FLT_EVAL_METHOD_TS_18661_3__ 0
# 0 "<built-in>"
#define __DEC_EVAL_METHOD__ 2
# 0 "<built-in>"
#define __FLT_RADIX__ 2
# 0 "<built-in>"
#define __FLT_MANT_DIG__ 24
# 0 "<built-in>"
#define __FLT_DIG__ 6
# 0 "<built-in>"
#define __FLT_MIN_EXP__ (-125)
# 0 "<built-in>"
#define __FLT_MIN_10_EXP__ (-37)
# 0 "<built-in>"
#define __FLT_MAX_EXP__ 128
# 0 "<built-in>"
#define __FLT_MAX_10_EXP__ 38
# 0 "<built-in>"
#define __FLT_DECIMAL_DIG__ 9
# 0 "<built-in>"
#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F
# 0 "<built-in>"
#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F
# 0 "<built-in>"
#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F
# 0 "<built-in>"
#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F
# 0 "<built-in>"
#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F
# 0 "<built-in>"
#define __FLT_HAS_DENORM__ 1
# 0 "<built-in>"
#define __FLT_HAS_INFINITY__ 1
# 0 "<built-in>"
#define __FLT_HAS_QUIET_NAN__ 1
# 0 "<built-in>"
#define __FP_FAST_FMAF 1
# 0 "<built-in>"
#define __FLT_IS_IEC_60559__ 1
# 0 "<built-in>"
#define __DBL_MANT_DIG__ 53
# 0 "<built-in>"
#define __DBL_DIG__ 15
# 0 "<built-in>"
#define __DBL_MIN_EXP__ (-1021)
# 0 "<built-in>"
#define __DBL_MIN_10_EXP__ (-307)
# 0 "<built-in>"
#define __DBL_MAX_EXP__ 1024
# 0 "<built-in>"
#define __DBL_MAX_10_EXP__ 308
# 0 "<built-in>"
#define __DBL_DECIMAL_DIG__ 17
# 0 "<built-in>"
#define __DBL_MAX__ ((double)1.79769313486231570814527423731704357e+308L)
# 0 "<built-in>"
#define __DBL_NORM_MAX__ ((double)1.79769313486231570814527423731704357e+308L)
# 0 "<built-in>"
#define __DBL_MIN__ ((double)2.22507385850720138309023271733240406e-308L)
# 0 "<built-in>"
#define __DBL_EPSILON__ ((double)2.22044604925031308084726333618164062e-16L)
# 0 "<built-in>"
#define __DBL_DENORM_MIN__ ((double)4.94065645841246544176568792868221372e-324L)
# 0 "<built-in>"
#define __DBL_HAS_DENORM__ 1
# 0 "<built-in>"
#define __DBL_HAS_INFINITY__ 1
# 0 "<built-in>"
#define __DBL_HAS_QUIET_NAN__ 1
# 0 "<built-in>"
#define __FP_FAST_FMA 1
# 0 "<built-in>"
#define __DBL_IS_IEC_60559__ 1
# 0 "<built-in>"
#define __LDBL_MANT_DIG__ 113
# 0 "<built-in>"
#define __LDBL_DIG__ 33
# 0 "<built-in>"
#define __LDBL_MIN_EXP__ (-16381)
# 0 "<built-in>"
#define __LDBL_MIN_10_EXP__ (-4931)
# 0 "<built-in>"
#define __LDBL_MAX_EXP__ 16384
# 0 "<built-in>"
#define __LDBL_MAX_10_EXP__ 4932
# 0 "<built-in>"
#define __DECIMAL_DIG__ 36
# 0 "<built-in>"
#define __LDBL_DECIMAL_DIG__ 36
# 0 "<built-in>"
#define __LDBL_MAX__ 1.18973149535723176508575932662800702e+4932L
# 0 "<built-in>"
#define __LDBL_NORM_MAX__ 1.18973149535723176508575932662800702e+4932L
# 0 "<built-in>"
#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L
# 0 "<built-in>"
#define __LDBL_EPSILON__ 1.92592994438723585305597794258492732e-34L
# 0 "<built-in>"
#define __LDBL_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966L
# 0 "<built-in>"
#define __LDBL_HAS_DENORM__ 1
# 0 "<built-in>"
#define __LDBL_HAS_INFINITY__ 1
# 0 "<built-in>"
#define __LDBL_HAS_QUIET_NAN__ 1
# 0 "<built-in>"
#define __LDBL_IS_IEC_60559__ 1
# 0 "<built-in>"
#define __FLT32_MANT_DIG__ 24
# 0 "<built-in>"
#define __FLT32_DIG__ 6
# 0 "<built-in>"
#define __FLT32_MIN_EXP__ (-125)
# 0 "<built-in>"
#define __FLT32_MIN_10_EXP__ (-37)
# 0 "<built-in>"
#define __FLT32_MAX_EXP__ 128
# 0 "<built-in>"
#define __FLT32_MAX_10_EXP__ 38
# 0 "<built-in>"
#define __FLT32_DECIMAL_DIG__ 9
# 0 "<built-in>"
#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32
# 0 "<built-in>"
#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32
# 0 "<built-in>"
#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32
# 0 "<built-in>"
#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32
# 0 "<built-in>"
#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32
# 0 "<built-in>"
#define __FLT32_HAS_DENORM__ 1
# 0 "<built-in>"
#define __FLT32_HAS_INFINITY__ 1
# 0 "<built-in>"
#define __FLT32_HAS_QUIET_NAN__ 1
# 0 "<built-in>"
#define __FP_FAST_FMAF32 1
# 0 "<built-in>"
#define __FLT32_IS_IEC_60559__ 1
# 0 "<built-in>"
#define __FLT64_MANT_DIG__ 53
# 0 "<built-in>"
#define __FLT64_DIG__ 15
# 0 "<built-in>"
#define __FLT64_MIN_EXP__ (-1021)
# 0 "<built-in>"
#define __FLT64_MIN_10_EXP__ (-307)
# 0 "<built-in>"
#define __FLT64_MAX_EXP__ 1024
# 0 "<built-in>"
#define __FLT64_MAX_10_EXP__ 308
# 0 "<built-in>"
#define __FLT64_DECIMAL_DIG__ 17
# 0 "<built-in>"
#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64
# 0 "<built-in>"
#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64
# 0 "<built-in>"
#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64
# 0 "<built-in>"
#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64
# 0 "<built-in>"
#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64
# 0 "<built-in>"
#define __FLT64_HAS_DENORM__ 1
# 0 "<built-in>"
#define __FLT64_HAS_INFINITY__ 1
# 0 "<built-in>"
#define __FLT64_HAS_QUIET_NAN__ 1
# 0 "<built-in>"
#define __FP_FAST_FMAF64 1
# 0 "<built-in>"
#define __FLT64_IS_IEC_60559__ 1
# 0 "<built-in>"
#define __FLT128_MANT_DIG__ 113
# 0 "<built-in>"
#define __FLT128_DIG__ 33
# 0 "<built-in>"
#define __FLT128_MIN_EXP__ (-16381)
# 0 "<built-in>"
#define __FLT128_MIN_10_EXP__ (-4931)
# 0 "<built-in>"
#define __FLT128_MAX_EXP__ 16384
# 0 "<built-in>"
#define __FLT128_MAX_10_EXP__ 4932
# 0 "<built-in>"
#define __FLT128_DECIMAL_DIG__ 36
# 0 "<built-in>"
#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128
# 0 "<built-in>"
#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128
# 0 "<built-in>"
#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128
# 0 "<built-in>"
#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128
# 0 "<built-in>"
#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128
# 0 "<built-in>"
#define __FLT128_HAS_DENORM__ 1
# 0 "<built-in>"
#define __FLT128_HAS_INFINITY__ 1
# 0 "<built-in>"
#define __FLT128_HAS_QUIET_NAN__ 1
# 0 "<built-in>"
#define __FLT128_IS_IEC_60559__ 1
# 0 "<built-in>"
#define __FLT32X_MANT_DIG__ 53
# 0 "<built-in>"
#define __FLT32X_DIG__ 15
# 0 "<built-in>"
#define __FLT32X_MIN_EXP__ (-1021)
# 0 "<built-in>"
#define __FLT32X_MIN_10_EXP__ (-307)
# 0 "<built-in>"
#define __FLT32X_MAX_EXP__ 1024
# 0 "<built-in>"
#define __FLT32X_MAX_10_EXP__ 308
# 0 "<built-in>"
#define __FLT32X_DECIMAL_DIG__ 17
# 0 "<built-in>"
#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x
# 0 "<built-in>"
#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x
# 0 "<built-in>"
#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x
# 0 "<built-in>"
#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x
# 0 "<built-in>"
#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x
# 0 "<built-in>"
#define __FLT32X_HAS_DENORM__ 1
# 0 "<built-in>"
#define __FLT32X_HAS_INFINITY__ 1
# 0 "<built-in>"
#define __FLT32X_HAS_QUIET_NAN__ 1
# 0 "<built-in>"
#define __FP_FAST_FMAF32x 1
# 0 "<built-in>"
#define __FLT32X_IS_IEC_60559__ 1
# 0 "<built-in>"
#define __FLT64X_MANT_DIG__ 113
# 0 "<built-in>"
#define __FLT64X_DIG__ 33
# 0 "<built-in>"
#define __FLT64X_MIN_EXP__ (-16381)
# 0 "<built-in>"
#define __FLT64X_MIN_10_EXP__ (-4931)
# 0 "<built-in>"
#define __FLT64X_MAX_EXP__ 16384
# 0 "<built-in>"
#define __FLT64X_MAX_10_EXP__ 4932
# 0 "<built-in>"
#define __FLT64X_DECIMAL_DIG__ 36
# 0 "<built-in>"
#define __FLT64X_MAX__ 1.18973149535723176508575932662800702e+4932F64x
# 0 "<built-in>"
#define __FLT64X_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F64x
# 0 "<built-in>"
#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x
# 0 "<built-in>"
#define __FLT64X_EPSILON__ 1.92592994438723585305597794258492732e-34F64x
# 0 "<built-in>"
#define __FLT64X_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F64x
# 0 "<built-in>"
#define __FLT64X_HAS_DENORM__ 1
# 0 "<built-in>"
#define __FLT64X_HAS_INFINITY__ 1
# 0 "<built-in>"
#define __FLT64X_HAS_QUIET_NAN__ 1
# 0 "<built-in>"
#define __FLT64X_IS_IEC_60559__ 1
# 0 "<built-in>"
#define __SFRACT_FBIT__ 7
# 0 "<built-in>"
#define __SFRACT_IBIT__ 0
# 0 "<built-in>"
#define __SFRACT_MIN__ (-0.5HR-0.5HR)
# 0 "<built-in>"
#define __SFRACT_MAX__ 0X7FP-7HR
# 0 "<built-in>"
#define __SFRACT_EPSILON__ 0x1P-7HR
# 0 "<built-in>"
#define __USFRACT_FBIT__ 8
# 0 "<built-in>"
#define __USFRACT_IBIT__ 0
# 0 "<built-in>"
#define __USFRACT_MIN__ 0.0UHR
# 0 "<built-in>"
#define __USFRACT_MAX__ 0XFFP-8UHR
# 0 "<built-in>"
#define __USFRACT_EPSILON__ 0x1P-8UHR
# 0 "<built-in>"
#define __FRACT_FBIT__ 15
# 0 "<built-in>"
#define __FRACT_IBIT__ 0
# 0 "<built-in>"
#define __FRACT_MIN__ (-0.5R-0.5R)
# 0 "<built-in>"
#define __FRACT_MAX__ 0X7FFFP-15R
# 0 "<built-in>"
#define __FRACT_EPSILON__ 0x1P-15R
# 0 "<built-in>"
#define __UFRACT_FBIT__ 16
# 0 "<built-in>"
#define __UFRACT_IBIT__ 0
# 0 "<built-in>"
#define __UFRACT_MIN__ 0.0UR
# 0 "<built-in>"
#define __UFRACT_MAX__ 0XFFFFP-16UR
# 0 "<built-in>"
#define __UFRACT_EPSILON__ 0x1P-16UR
# 0 "<built-in>"
#define __LFRACT_FBIT__ 31
# 0 "<built-in>"
#define __LFRACT_IBIT__ 0
# 0 "<built-in>"
#define __LFRACT_MIN__ (-0.5LR-0.5LR)
# 0 "<built-in>"
#define __LFRACT_MAX__ 0X7FFFFFFFP-31LR
# 0 "<built-in>"
#define __LFRACT_EPSILON__ 0x1P-31LR
# 0 "<built-in>"
#define __ULFRACT_FBIT__ 32
# 0 "<built-in>"
#define __ULFRACT_IBIT__ 0
# 0 "<built-in>"
#define __ULFRACT_MIN__ 0.0ULR
# 0 "<built-in>"
#define __ULFRACT_MAX__ 0XFFFFFFFFP-32ULR
# 0 "<built-in>"
#define __ULFRACT_EPSILON__ 0x1P-32ULR
# 0 "<built-in>"
#define __LLFRACT_FBIT__ 63
# 0 "<built-in>"
#define __LLFRACT_IBIT__ 0
# 0 "<built-in>"
#define __LLFRACT_MIN__ (-0.5LLR-0.5LLR)
# 0 "<built-in>"
#define __LLFRACT_MAX__ 0X7FFFFFFFFFFFFFFFP-63LLR
# 0 "<built-in>"
#define __LLFRACT_EPSILON__ 0x1P-63LLR
# 0 "<built-in>"
#define __ULLFRACT_FBIT__ 64
# 0 "<built-in>"
#define __ULLFRACT_IBIT__ 0
# 0 "<built-in>"
#define __ULLFRACT_MIN__ 0.0ULLR
# 0 "<built-in>"
#define __ULLFRACT_MAX__ 0XFFFFFFFFFFFFFFFFP-64ULLR
# 0 "<built-in>"
#define __ULLFRACT_EPSILON__ 0x1P-64ULLR
# 0 "<built-in>"
#define __SACCUM_FBIT__ 7
# 0 "<built-in>"
#define __SACCUM_IBIT__ 8
# 0 "<built-in>"
#define __SACCUM_MIN__ (-0X1P7HK-0X1P7HK)
# 0 "<built-in>"
#define __SACCUM_MAX__ 0X7FFFP-7HK
# 0 "<built-in>"
#define __SACCUM_EPSILON__ 0x1P-7HK
# 0 "<built-in>"
#define __USACCUM_FBIT__ 8
# 0 "<built-in>"
#define __USACCUM_IBIT__ 8
# 0 "<built-in>"
#define __USACCUM_MIN__ 0.0UHK
# 0 "<built-in>"
#define __USACCUM_MAX__ 0XFFFFP-8UHK
# 0 "<built-in>"
#define __USACCUM_EPSILON__ 0x1P-8UHK
# 0 "<built-in>"
#define __ACCUM_FBIT__ 15
# 0 "<built-in>"
#define __ACCUM_IBIT__ 16
# 0 "<built-in>"
#define __ACCUM_MIN__ (-0X1P15K-0X1P15K)
# 0 "<built-in>"
#define __ACCUM_MAX__ 0X7FFFFFFFP-15K
# 0 "<built-in>"
#define __ACCUM_EPSILON__ 0x1P-15K
# 0 "<built-in>"
#define __UACCUM_FBIT__ 16
# 0 "<built-in>"
#define __UACCUM_IBIT__ 16
# 0 "<built-in>"
#define __UACCUM_MIN__ 0.0UK
# 0 "<built-in>"
#define __UACCUM_MAX__ 0XFFFFFFFFP-16UK
# 0 "<built-in>"
#define __UACCUM_EPSILON__ 0x1P-16UK
# 0 "<built-in>"
#define __LACCUM_FBIT__ 31
# 0 "<built-in>"
#define __LACCUM_IBIT__ 32
# 0 "<built-in>"
#define __LACCUM_MIN__ (-0X1P31LK-0X1P31LK)
# 0 "<built-in>"
#define __LACCUM_MAX__ 0X7FFFFFFFFFFFFFFFP-31LK
# 0 "<built-in>"
#define __LACCUM_EPSILON__ 0x1P-31LK
# 0 "<built-in>"
#define __ULACCUM_FBIT__ 32
# 0 "<built-in>"
#define __ULACCUM_IBIT__ 32
# 0 "<built-in>"
#define __ULACCUM_MIN__ 0.0ULK
# 0 "<built-in>"
#define __ULACCUM_MAX__ 0XFFFFFFFFFFFFFFFFP-32ULK
# 0 "<built-in>"
#define __ULACCUM_EPSILON__ 0x1P-32ULK
# 0 "<built-in>"
#define __LLACCUM_FBIT__ 63
# 0 "<built-in>"
#define __LLACCUM_IBIT__ 64
# 0 "<built-in>"
#define __LLACCUM_MIN__ (-0X1P63LLK-0X1P63LLK)
# 0 "<built-in>"
#define __LLACCUM_MAX__ 0X7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFP-63LLK
# 0 "<built-in>"
#define __LLACCUM_EPSILON__ 0x1P-63LLK
# 0 "<built-in>"
#define __ULLACCUM_FBIT__ 64
# 0 "<built-in>"
#define __ULLACCUM_IBIT__ 64
# 0 "<built-in>"
#define __ULLACCUM_MIN__ 0.0ULLK
# 0 "<built-in>"
#define __ULLACCUM_MAX__ 0XFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFP-64ULLK
# 0 "<built-in>"
#define __ULLACCUM_EPSILON__ 0x1P-64ULLK
# 0 "<built-in>"
#define __QQ_FBIT__ 7
# 0 "<built-in>"
#define __QQ_IBIT__ 0
# 0 "<built-in>"
#define __HQ_FBIT__ 15
# 0 "<built-in>"
#define __HQ_IBIT__ 0
# 0 "<built-in>"
#define __SQ_FBIT__ 31
# 0 "<built-in>"
#define __SQ_IBIT__ 0
# 0 "<built-in>"
#define __DQ_FBIT__ 63
# 0 "<built-in>"
#define __DQ_IBIT__ 0
# 0 "<built-in>"
#define __TQ_FBIT__ 127
# 0 "<built-in>"
#define __TQ_IBIT__ 0
# 0 "<built-in>"
#define __UQQ_FBIT__ 8
# 0 "<built-in>"
#define __UQQ_IBIT__ 0
# 0 "<built-in>"
#define __UHQ_FBIT__ 16
# 0 "<built-in>"
#define __UHQ_IBIT__ 0
# 0 "<built-in>"
#define __USQ_FBIT__ 32
# 0 "<built-in>"
#define __USQ_IBIT__ 0
# 0 "<built-in>"
#define __UDQ_FBIT__ 64
# 0 "<built-in>"
#define __UDQ_IBIT__ 0
# 0 "<built-in>"
#define __UTQ_FBIT__ 128
# 0 "<built-in>"
#define __UTQ_IBIT__ 0
# 0 "<built-in>"
#define __HA_FBIT__ 7
# 0 "<built-in>"
#define __HA_IBIT__ 8
# 0 "<built-in>"
#define __SA_FBIT__ 15
# 0 "<built-in>"
#define __SA_IBIT__ 16
# 0 "<built-in>"
#define __DA_FBIT__ 31
# 0 "<built-in>"
#define __DA_IBIT__ 32
# 0 "<built-in>"
#define __TA_FBIT__ 63
# 0 "<built-in>"
#define __TA_IBIT__ 64
# 0 "<built-in>"
#define __UHA_FBIT__ 8
# 0 "<built-in>"
#define __UHA_IBIT__ 8
# 0 "<built-in>"
#define __USA_FBIT__ 16
# 0 "<built-in>"
#define __USA_IBIT__ 16
# 0 "<built-in>"
#define __UDA_FBIT__ 32
# 0 "<built-in>"
#define __UDA_IBIT__ 32
# 0 "<built-in>"
#define __UTA_FBIT__ 64
# 0 "<built-in>"
#define __UTA_IBIT__ 64
# 0 "<built-in>"
#define __REGISTER_PREFIX__ $
# 0 "<built-in>"
#define __USER_LABEL_PREFIX__ 
# 0 "<built-in>"
#define __GNUC_STDC_INLINE__ 1
# 0 "<built-in>"
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
# 0 "<built-in>"
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1
# 0 "<built-in>"
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1
# 0 "<built-in>"
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1
# 0 "<built-in>"
#define __GCC_ATOMIC_BOOL_LOCK_FREE 2
# 0 "<built-in>"
#define __GCC_ATOMIC_CHAR_LOCK_FREE 2
# 0 "<built-in>"
#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2
# 0 "<built-in>"
#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2
# 0 "<built-in>"
#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2
# 0 "<built-in>"
#define __GCC_ATOMIC_SHORT_LOCK_FREE 2
# 0 "<built-in>"
#define __GCC_ATOMIC_INT_LOCK_FREE 2
# 0 "<built-in>"
#define __GCC_ATOMIC_LONG_LOCK_FREE 2
# 0 "<built-in>"
#define __GCC_ATOMIC_LLONG_LOCK_FREE 2
# 0 "<built-in>"
#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1
# 0 "<built-in>"
#define __GCC_ATOMIC_POINTER_LOCK_FREE 2
# 0 "<built-in>"
#define __HAVE_SPECULATION_SAFE_VALUE 1
# 0 "<built-in>"
#define __GCC_HAVE_DWARF2_CFI_ASM 1
# 0 "<built-in>"
#define __PRAGMA_REDEFINE_EXTNAME 1
# 0 "<built-in>"
#define __SIZEOF_INT128__ 16
# 0 "<built-in>"
#define __SIZEOF_WCHAR_T__ 4
# 0 "<built-in>"
#define __SIZEOF_WINT_T__ 4
# 0 "<built-in>"
#define __SIZEOF_PTRDIFF_T__ 8
# 0 "<built-in>"
#define __loongarch__ 1
# 0 "<built-in>"
#define _LOONGARCH_ARCH_LOONGARCH64 1
# 0 "<built-in>"
#define _LOONGARCH_ARCH "loongarch64"
# 0 "<built-in>"
#define _LOONGARCH_TUNE_LOONGARCH64 1
# 0 "<built-in>"
#define _LOONGARCH_TUNE "loongarch64"
# 0 "<built-in>"
#define __LOONGARCH_ARCH_LOONGARCH64 1
# 0 "<built-in>"
#define __loongarch_arch "loongarch64"
# 0 "<built-in>"
#define __LOONGARCH_TUNE_LOONGARCH64 1
# 0 "<built-in>"
#define __loongarch_tune "loongarch64"
# 0 "<built-in>"
#define __loongarch_grlen 64
# 0 "<built-in>"
#define __loongarch64 1
# 0 "<built-in>"
#define _ABILP64 3
# 0 "<built-in>"
#define _LOONGARCH_SIM _ABILP64
# 0 "<built-in>"
#define __loongarch_lp64 1
# 0 "<built-in>"
#define __loongarch_double_float 1
# 0 "<built-in>"
#define __loongarch_hard_float 1
# 0 "<built-in>"
#define __loongarch_frlen 64
# 0 "<built-in>"
#define __loongarch_simd 1
# 0 "<built-in>"
#define __loongarch_sx 1
# 0 "<built-in>"
#define __loongarch_asx 1
# 0 "<built-in>"
#define __loongarch_simd_width 256
# 0 "<built-in>"
#define __FLOAT128_TYPE__ 1
# 0 "<built-in>"
#define __builtin_fabsq __builtin_fabsf128
# 0 "<built-in>"
#define __builtin_copysignq __builtin_copysignf128
# 0 "<built-in>"
#define __builtin_nanq __builtin_nanf128
# 0 "<built-in>"
#define __builtin_nansq __builtin_nansf128
# 0 "<built-in>"
#define __builtin_infq __builtin_inff128
# 0 "<built-in>"
#define __builtin_huge_valq __builtin_huge_valf128
# 0 "<built-in>"
#define _LOONGARCH_SZINT 32
# 0 "<built-in>"
#define _LOONGARCH_SZLONG 64
# 0 "<built-in>"
#define _LOONGARCH_SZPTR 64
# 0 "<built-in>"
#define _LOONGARCH_FPSET 32
# 0 "<built-in>"
#define _LOONGARCH_SPFPSET 32
# 0 "<built-in>"
#define __gnu_linux__ 1
# 0 "<built-in>"
#define __linux 1
# 0 "<built-in>"
#define __linux__ 1
# 0 "<built-in>"
#define linux 1
# 0 "<built-in>"
#define __unix 1
# 0 "<built-in>"
#define __unix__ 1
# 0 "<built-in>"
#define unix 1
# 0 "<built-in>"
#define __ELF__ 1
# 0 "<命令行>"
#define SPEC_CPU 1
# 0 "<命令行>"
#define NDEBUG 1
# 0 "<命令行>"
#define SPEC_CPU_LP64 1
# 0 "<命令行>"
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdc-predef.h" 1 3 4
# 19 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdc-predef.h" 3 4
#define _STDC_PREDEF_H 1
# 38 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdc-predef.h" 3 4
#define __STDC_IEC_559__ 1
#define __STDC_IEC_60559_BFP__ 201404L
# 48 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdc-predef.h" 3 4
#define __STDC_IEC_559_COMPLEX__ 1
#define __STDC_IEC_60559_COMPLEX__ 201404L
# 62 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdc-predef.h" 3 4
#define __STDC_ISO_10646__ 201706L
# 0 "<命令行>" 2
# 1 "regrename.c"
# 21 "regrename.c"
#define REG_OK_STRICT 

# 1 "config.h" 1
#define TARGET_CPU_DEFAULT (TARGET_CPU_DEFAULT_athlon_sse)
# 1 "auto-host.h" 1
# 16 "auto-host.h"
#define GETGROUPS_T gid_t





#define HAVE_ALLOCA 1


#define HAVE_ALLOCA_H 1


#define HAVE_STRINGIZE 1
# 61 "auto-host.h"
#define STDC_HEADERS 1
# 74 "auto-host.h"
#define HAVE_GAS_MAX_SKIP_P2ALIGN 1


#define HAVE_GAS_BALIGN_AND_P2ALIGN 1


#define HAVE_GAS_FILDS_FISTS 1







#define PREFIX_INCLUDE_DIR "NONE/include"


#define HAVE___ARGZ_COUNT 1


#define HAVE___ARGZ_NEXT 1


#define HAVE___ARGZ_STRINGIFY 1


#define HAVE_ATOLL 1





#define HAVE_CLOCK 1


#define HAVE_DCGETTEXT 1


#define HAVE_DUP2 1
# 126 "auto-host.h"
#define HAVE_GETCWD 1


#define HAVE_GETEGID 1


#define HAVE_GETEUID 1


#define HAVE_GETGID 1





#define HAVE_GETRLIMIT 1





#define HAVE_GETUID 1


#define HAVE_KILL 1





#define HAVE_MEMPCPY 1


#define HAVE_MUNMAP 1


#define HAVE_NL_LANGINFO 1





#define HAVE_PUTENV 1


#define HAVE_SETENV 1


#define HAVE_SETLOCALE 1


#define HAVE_SETRLIMIT 1


#define HAVE_STPCPY 1


#define HAVE_STRCASECMP 1


#define HAVE_STRCHR 1


#define HAVE_STRDUP 1


#define HAVE_STRSIGNAL 1


#define HAVE_STRTOUL 1


#define HAVE_SYSCONF 1





#define HAVE_TSEARCH 1


#define HAVE_ARGZ_H 1





#define HAVE_FCNTL_H 1


#define HAVE_LANGINFO_H 1


#define HAVE_LIMITS_H 1


#define HAVE_LOCALE_H 1



#define HAVE_MALLOC_H 1



#define HAVE_NL_TYPES_H 1


#define HAVE_STDDEF_H 1


#define HAVE_STDLIB_H 1


#define HAVE_STRING_H 1





#define HAVE_SYS_FILE_H 1
# 254 "auto-host.h"
#define HAVE_SYS_STAT_H 1
# 263 "auto-host.h"
#define HAVE_TIME_H 1
# 309 "auto-host.h"
#define HAVE_VOLATILE 1


#define HAVE_LONG_DOUBLE 1
# 323 "auto-host.h"
#define HAVE_LONG_LONG 1

#define HAVE_UNISTD_H 1
# 338 "auto-host.h"
#define SIZEOF_SHORT 2


#define SIZEOF_INT 4


#define SIZEOF_LONG_LONG 8
#define MAX_LONG_TYPE_SIZE 64



#define SIZEOF_LONG 8
# 367 "auto-host.h"
#define _GNU_SOURCE 1
# 397 "auto-host.h"
#define HAVE_INTTYPES_H 1


#define HAVE_PRINTF_PTR 1
# 412 "auto-host.h"
#define HAVE_ICONV 1


#define ICONV_CONST 


#define HAVE_DECL_GETENV 1


#define HAVE_DECL_ATOL 1


#define HAVE_DECL_SBRK 1


#define HAVE_DECL_ABORT 1


#define HAVE_DECL_ATOF 1


#define HAVE_DECL_GETCWD 1


#define HAVE_DECL_GETWD 1
# 454 "auto-host.h"
#define HAVE_DECL_STRSTR 1


#define HAVE_DECL_ERRNO 1


#define HAVE_DECL_MALLOC 1


#define HAVE_DECL_REALLOC 1


#define HAVE_DECL_CALLOC 1


#define HAVE_DECL_FREE 1


#define HAVE_DECL_BASENAME 1


#define HAVE_DECL_GETOPT 1


#define HAVE_DECL_CLOCK 1


#define HAVE_DECL_GETRLIMIT 1


#define HAVE_DECL_SETRLIMIT 1
# 496 "auto-host.h"
#define HAVE_CLOCK_T 1





#define HAVE_ICONV 1


#define ICONV_CONST 


#define HAVE_LANGINFO_CODESET 1


#define HAVE_LC_MESSAGES 1



#define ENABLE_NLS 1




#define HAVE_GETTEXT 1
# 535 "auto-host.h"
#define HAVE_GAS_SUBSECTION_ORDERING 1


#define HAVE_GAS_WEAK 1


#define HAVE_GAS_HIDDEN 1


#define HAVE_AS_LEB128 1





#define HAVE_GAS_SHF_MERGE 1
# 571 "auto-host.h"
#define HAVE_AS_GOTOFF_IN_DATA 0



#define HAVE_AS_DWARF2_DEBUG_LINE 1


#define HAVE_AS_GDWARF2_DEBUG_FLAG 1


#define HAVE_AS_GSTABS_DEBUG_FLAG 1


#define HAVE_LD_EH_FRAME_HDR 1
# 3 "config.h" 2




struct rtx_def;
typedef struct rtx_def *rtx;
struct rtvec_def;
typedef struct rtvec_def *rtvec;
union tree_node;
typedef union tree_node *tree;
# 1 "ansidecl.h" 1
# 115 "ansidecl.h"
#define _ANSIDECL_H 1
# 136 "ansidecl.h"
#define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__)







#define ANSI_PROTOTYPES 1
#define PTR void *
#define PTRCONST void *const
#define LONG_DOUBLE long double

#define PARAMS(ARGS) ARGS
#define VPARAMS(ARGS) ARGS
#define VA_START(VA_LIST,VAR) va_start(VA_LIST, VAR)





#define VA_OPEN(AP,VAR) { va_list AP; va_start(AP, VAR); { struct Qdmy
#define VA_CLOSE(AP) } va_end(AP); }
#define VA_FIXEDARG(AP,T,N) struct Qdmy

#undef const
#undef volatile
#undef signed
# 225 "ansidecl.h"
#define ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
# 234 "ansidecl.h"
#define ATTRIBUTE_UNUSED_LABEL ATTRIBUTE_UNUSED






#define ATTRIBUTE_UNUSED __attribute__ ((__unused__))



#define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))



#define ATTRIBUTE_PRINTF(m,n) __attribute__ ((__format__ (__printf__, m, n)))
#define ATTRIBUTE_PRINTF_1 ATTRIBUTE_PRINTF(1, 2)
#define ATTRIBUTE_PRINTF_2 ATTRIBUTE_PRINTF(2, 3)
#define ATTRIBUTE_PRINTF_3 ATTRIBUTE_PRINTF(3, 4)
#define ATTRIBUTE_PRINTF_4 ATTRIBUTE_PRINTF(4, 5)
#define ATTRIBUTE_PRINTF_5 ATTRIBUTE_PRINTF(5, 6)
# 14 "config.h" 2
# 1 "biarch64.h" 1
# 24 "biarch64.h"
#define TARGET_64BIT_DEFAULT 
#define TARGET_BI_ARCH 
# 15 "config.h" 2
# 1 "i386.h" 1
# 40 "i386.h"
#define HALF_PIC_P() 0
#define HALF_PIC_NUMBER_PTRS 0
#define HALF_PIC_NUMBER_REFS 0
#define HALF_PIC_ENCODE(DECL) 
#define HALF_PIC_DECLARE(NAME) 
#define HALF_PIC_INIT() error ("half-pic init called on systems that don't support it")
#define HALF_PIC_ADDRESS_P(X) 0
#define HALF_PIC_PTR(X) (X)
#define HALF_PIC_FINISH(STREAM) 




struct processor_costs {
  const int add;
  const int lea;
  const int shift_var;
  const int shift_const;
  const int mult_init;
  const int mult_bit;
  const int divide;
  int movsx;
  int movzx;
  const int large_insn;
  const int move_ratio;

  const int movzbl_load;
  const int int_load[3];


  const int int_store[3];

  const int fp_move;
  const int fp_load[3];

  const int fp_store[3];

  const int mmx_move;
  const int mmx_load[2];

  const int mmx_store[2];

  const int sse_move;
  const int sse_load[3];

  const int sse_store[3];

  const int mmxsse_to_integer;

  const int prefetch_block;
  const int simultaneous_prefetches;

};

extern const struct processor_costs *ix86_cost;



extern int target_flags;
# 109 "i386.h"
#define MASK_80387 0x00000001
#define MASK_RTD 0x00000002
#define MASK_ALIGN_DOUBLE 0x00000004
#define MASK_SVR3_SHLIB 0x00000008
#define MASK_IEEE_FP 0x00000010
#define MASK_FLOAT_RETURNS 0x00000020
#define MASK_NO_FANCY_MATH_387 0x00000040
#define MASK_OMIT_LEAF_FRAME_POINTER 0x080
#define MASK_STACK_PROBE 0x00000100
#define MASK_NO_ALIGN_STROPS 0x00000200
#define MASK_INLINE_ALL_STROPS 0x00000400
#define MASK_NO_PUSH_ARGS 0x00000800
#define MASK_ACCUMULATE_OUTGOING_ARGS 0x00001000
#define MASK_ACCUMULATE_OUTGOING_ARGS_SET 0x00002000
#define MASK_MMX 0x00004000
#define MASK_MMX_SET 0x00008000
#define MASK_SSE 0x00010000
#define MASK_SSE_SET 0x00020000
#define MASK_SSE2 0x00040000
#define MASK_SSE2_SET 0x00080000
#define MASK_3DNOW 0x00100000
#define MASK_3DNOW_SET 0x00200000
#define MASK_3DNOW_A 0x00400000
#define MASK_3DNOW_A_SET 0x00800000
#define MASK_128BIT_LONG_DOUBLE 0x01000000
#define MASK_64BIT 0x02000000

#define MASK_NO_RED_ZONE 0x04000000


#define TARGET_80387 (target_flags & MASK_80387)




#define TARGET_RTD (target_flags & MASK_RTD)




#define TARGET_ALIGN_DOUBLE (target_flags & MASK_ALIGN_DOUBLE)


#define TARGET_PUSH_ARGS (!(target_flags & MASK_NO_PUSH_ARGS))


#define TARGET_ACCUMULATE_OUTGOING_ARGS (target_flags & MASK_ACCUMULATE_OUTGOING_ARGS)




#define TARGET_SVR3_SHLIB (target_flags & MASK_SVR3_SHLIB)




#define TARGET_IEEE_FP (target_flags & MASK_IEEE_FP)




#define TARGET_FLOAT_RETURNS_IN_80387 (target_flags & MASK_FLOAT_RETURNS)




#define TARGET_128BIT_LONG_DOUBLE (target_flags & MASK_128BIT_LONG_DOUBLE)



#define TARGET_NO_FANCY_MATH_387 (target_flags & MASK_NO_FANCY_MATH_387)


#define TARGET_OMIT_LEAF_FRAME_POINTER (target_flags & MASK_OMIT_LEAF_FRAME_POINTER)



#define TARGET_DEBUG_ADDR (ix86_debug_addr_string != 0)


#define TARGET_DEBUG_ARG (ix86_debug_arg_string != 0)



#define TARGET_64BIT (target_flags & MASK_64BIT)
# 202 "i386.h"
#define TARGET_386 (ix86_cpu == PROCESSOR_I386)
#define TARGET_486 (ix86_cpu == PROCESSOR_I486)
#define TARGET_PENTIUM (ix86_cpu == PROCESSOR_PENTIUM)
#define TARGET_PENTIUMPRO (ix86_cpu == PROCESSOR_PENTIUMPRO)
#define TARGET_K6 (ix86_cpu == PROCESSOR_K6)
#define TARGET_ATHLON (ix86_cpu == PROCESSOR_ATHLON)
#define TARGET_PENTIUM4 (ix86_cpu == PROCESSOR_PENTIUM4)

#define CPUMASK (1 << ix86_cpu)
extern const int x86_use_leave, x86_push_memory, x86_zero_extend_with_and;
extern const int x86_use_bit_test, x86_cmove, x86_deep_branch;
extern const int x86_branch_hints, x86_unroll_strlen;
extern const int x86_double_with_add, x86_partial_reg_stall, x86_movx;
extern const int x86_use_loop, x86_use_fiop, x86_use_mov0;
extern const int x86_use_cltd, x86_read_modify_write;
extern const int x86_read_modify, x86_split_long_moves;
extern const int x86_promote_QImode, x86_single_stringop;
extern const int x86_himode_math, x86_qimode_math, x86_promote_qi_regs;
extern const int x86_promote_hi_regs, x86_integer_DFmode_moves;
extern const int x86_add_esp_4, x86_add_esp_8, x86_sub_esp_4, x86_sub_esp_8;
extern const int x86_partial_reg_dependency, x86_memory_mismatch_stall;
extern const int x86_accumulate_outgoing_args, x86_prologue_using_move;
extern const int x86_epilogue_using_move, x86_decompose_lea;
extern const int x86_arch_always_fancy_math_387;
extern int x86_prefetch_sse;

#define TARGET_USE_LEAVE (x86_use_leave & CPUMASK)
#define TARGET_PUSH_MEMORY (x86_push_memory & CPUMASK)
#define TARGET_ZERO_EXTEND_WITH_AND (x86_zero_extend_with_and & CPUMASK)
#define TARGET_USE_BIT_TEST (x86_use_bit_test & CPUMASK)
#define TARGET_UNROLL_STRLEN (x86_unroll_strlen & CPUMASK)


#define TARGET_CMOVE ((x86_cmove & (1 << ix86_arch)) || TARGET_SSE)
#define TARGET_DEEP_BRANCH_PREDICTION (x86_deep_branch & CPUMASK)
#define TARGET_BRANCH_PREDICTION_HINTS (x86_branch_hints & CPUMASK)
#define TARGET_DOUBLE_WITH_ADD (x86_double_with_add & CPUMASK)
#define TARGET_USE_SAHF ((x86_use_sahf & CPUMASK) && !TARGET_64BIT)
#define TARGET_MOVX (x86_movx & CPUMASK)
#define TARGET_PARTIAL_REG_STALL (x86_partial_reg_stall & CPUMASK)
#define TARGET_USE_LOOP (x86_use_loop & CPUMASK)
#define TARGET_USE_FIOP (x86_use_fiop & CPUMASK)
#define TARGET_USE_MOV0 (x86_use_mov0 & CPUMASK)
#define TARGET_USE_CLTD (x86_use_cltd & CPUMASK)
#define TARGET_SPLIT_LONG_MOVES (x86_split_long_moves & CPUMASK)
#define TARGET_READ_MODIFY_WRITE (x86_read_modify_write & CPUMASK)
#define TARGET_READ_MODIFY (x86_read_modify & CPUMASK)
#define TARGET_PROMOTE_QImode (x86_promote_QImode & CPUMASK)
#define TARGET_SINGLE_STRINGOP (x86_single_stringop & CPUMASK)
#define TARGET_QIMODE_MATH (x86_qimode_math & CPUMASK)
#define TARGET_HIMODE_MATH (x86_himode_math & CPUMASK)
#define TARGET_PROMOTE_QI_REGS (x86_promote_qi_regs & CPUMASK)
#define TARGET_PROMOTE_HI_REGS (x86_promote_hi_regs & CPUMASK)
#define TARGET_ADD_ESP_4 (x86_add_esp_4 & CPUMASK)
#define TARGET_ADD_ESP_8 (x86_add_esp_8 & CPUMASK)
#define TARGET_SUB_ESP_4 (x86_sub_esp_4 & CPUMASK)
#define TARGET_SUB_ESP_8 (x86_sub_esp_8 & CPUMASK)
#define TARGET_INTEGER_DFMODE_MOVES (x86_integer_DFmode_moves & CPUMASK)
#define TARGET_PARTIAL_REG_DEPENDENCY (x86_partial_reg_dependency & CPUMASK)
#define TARGET_MEMORY_MISMATCH_STALL (x86_memory_mismatch_stall & CPUMASK)
#define TARGET_PROLOGUE_USING_MOVE (x86_prologue_using_move & CPUMASK)
#define TARGET_EPILOGUE_USING_MOVE (x86_epilogue_using_move & CPUMASK)
#define TARGET_DECOMPOSE_LEA (x86_decompose_lea & CPUMASK)
#define TARGET_PREFETCH_SSE (x86_prefetch_sse)

#define TARGET_STACK_PROBE (target_flags & MASK_STACK_PROBE)

#define TARGET_ALIGN_STRINGOPS (!(target_flags & MASK_NO_ALIGN_STROPS))
#define TARGET_INLINE_ALL_STRINGOPS (target_flags & MASK_INLINE_ALL_STROPS)

#define ASSEMBLER_DIALECT (ix86_asm_dialect)

#define TARGET_SSE ((target_flags & (MASK_SSE | MASK_SSE2)) != 0)
#define TARGET_SSE2 ((target_flags & MASK_SSE2) != 0)
#define TARGET_SSE_MATH ((ix86_fpmath & FPMATH_SSE) != 0)
#define TARGET_MIX_SSE_I387 ((ix86_fpmath & FPMATH_SSE) && (ix86_fpmath & FPMATH_387))

#define TARGET_MMX ((target_flags & MASK_MMX) != 0)
#define TARGET_3DNOW ((target_flags & MASK_3DNOW) != 0)
#define TARGET_3DNOW_A ((target_flags & MASK_3DNOW_A) != 0)

#define TARGET_RED_ZONE (!(target_flags & MASK_NO_RED_ZONE))






#define TARGET_SWITCHES { { "80387", MASK_80387, N_("Use hardware fp") }, { "no-80387", -MASK_80387, N_("Do not use hardware fp") }, { "hard-float", MASK_80387, N_("Use hardware fp") }, { "soft-float", -MASK_80387, N_("Do not use hardware fp") }, { "no-soft-float", MASK_80387, N_("Use hardware fp") }, { "386", 0, "" }, { "486", 0, "" }, { "pentium", 0, "" }, { "pentiumpro", 0, "" }, { "intel-syntax", 0, "" }, { "no-intel-syntax", 0, "" }, { "rtd", MASK_RTD, N_("Alternate calling convention") }, { "no-rtd", -MASK_RTD, N_("Use normal calling convention") }, { "align-double", MASK_ALIGN_DOUBLE, N_("Align some doubles on dword boundary") }, { "no-align-double", -MASK_ALIGN_DOUBLE, N_("Align doubles on word boundary") }, { "svr3-shlib", MASK_SVR3_SHLIB, N_("Uninitialized locals in .bss") }, { "no-svr3-shlib", -MASK_SVR3_SHLIB, N_("Uninitialized locals in .data") }, { "ieee-fp", MASK_IEEE_FP, N_("Use IEEE math for fp comparisons") }, { "no-ieee-fp", -MASK_IEEE_FP, N_("Do not use IEEE math for fp comparisons") }, { "fp-ret-in-387", MASK_FLOAT_RETURNS, N_("Return values of functions in FPU registers") }, { "no-fp-ret-in-387", -MASK_FLOAT_RETURNS , N_("Do not return values of functions in FPU registers")}, { "no-fancy-math-387", MASK_NO_FANCY_MATH_387, N_("Do not generate sin, cos, sqrt for FPU") }, { "fancy-math-387", -MASK_NO_FANCY_MATH_387, N_("Generate sin, cos, sqrt for FPU")}, { "omit-leaf-frame-pointer", MASK_OMIT_LEAF_FRAME_POINTER, N_("Omit the frame pointer in leaf functions") }, { "no-omit-leaf-frame-pointer",-MASK_OMIT_LEAF_FRAME_POINTER, "" }, { "stack-arg-probe", MASK_STACK_PROBE, N_("Enable stack probing") }, { "no-stack-arg-probe", -MASK_STACK_PROBE, "" }, { "windows", 0, 0 }, { "dll", 0, 0 }, { "align-stringops", -MASK_NO_ALIGN_STROPS, N_("Align destination of the string operations") }, { "no-align-stringops", MASK_NO_ALIGN_STROPS, N_("Do not align destination of the string operations") }, { "inline-all-stringops", MASK_INLINE_ALL_STROPS, N_("Inline all known string operations") }, { "no-inline-all-stringops", -MASK_INLINE_ALL_STROPS, N_("Do not inline all known string operations") }, { "push-args", -MASK_NO_PUSH_ARGS, N_("Use push instructions to save outgoing arguments") }, { "no-push-args", MASK_NO_PUSH_ARGS, N_("Do not use push instructions to save outgoing arguments") }, { "accumulate-outgoing-args", (MASK_ACCUMULATE_OUTGOING_ARGS | MASK_ACCUMULATE_OUTGOING_ARGS_SET), N_("Use push instructions to save outgoing arguments") }, { "no-accumulate-outgoing-args",MASK_ACCUMULATE_OUTGOING_ARGS_SET, N_("Do not use push instructions to save outgoing arguments") }, { "mmx", MASK_MMX | MASK_MMX_SET, N_("Support MMX built-in functions") }, { "no-mmx", -MASK_MMX, N_("Do not support MMX built-in functions") }, { "no-mmx", MASK_MMX_SET, "" }, { "3dnow", MASK_3DNOW | MASK_3DNOW_SET, N_("Support 3DNow! built-in functions") }, { "no-3dnow", -MASK_3DNOW, "" }, { "no-3dnow", MASK_3DNOW_SET, N_("Do not support 3DNow! built-in functions") }, { "sse", MASK_SSE | MASK_SSE_SET, N_("Support MMX and SSE built-in functions and code generation") }, { "no-sse", -MASK_SSE, "" }, { "no-sse", MASK_SSE_SET, N_("Do not support MMX and SSE built-in functions and code generation") }, { "sse2", MASK_SSE2 | MASK_SSE2_SET, N_("Support MMX, SSE and SSE2 built-in functions and code generation") }, { "no-sse2", -MASK_SSE2, "" }, { "no-sse2", MASK_SSE2_SET, N_("Do not support MMX, SSE and SSE2 built-in functions and code generation") }, { "128bit-long-double", MASK_128BIT_LONG_DOUBLE, N_("sizeof(long double) is 16") }, { "96bit-long-double", -MASK_128BIT_LONG_DOUBLE, N_("sizeof(long double) is 12") }, { "64", MASK_64BIT, N_("Generate 64bit x86-64 code") }, { "32", -MASK_64BIT, N_("Generate 32bit i386 code") }, { "red-zone", -MASK_NO_RED_ZONE, N_("Use red-zone in the x86-64 code") }, { "no-red-zone", MASK_NO_RED_ZONE, N_("Do not use red-zone in the x86-64 code") }, SUBTARGET_SWITCHES { "", TARGET_DEFAULT, 0 }}
# 387 "i386.h"
#define TARGET_DEFAULT (MASK_64BIT | TARGET_SUBTARGET_DEFAULT)







enum processor_type
{
  PROCESSOR_I386,
  PROCESSOR_I486,
  PROCESSOR_PENTIUM,
  PROCESSOR_PENTIUMPRO,
  PROCESSOR_K6,
  PROCESSOR_ATHLON,
  PROCESSOR_PENTIUM4,
  PROCESSOR_max
};
enum fpmath_unit
{
  FPMATH_387 = 1,
  FPMATH_SSE = 2
};

extern enum processor_type ix86_cpu;
extern enum fpmath_unit ix86_fpmath;

extern int ix86_arch;
# 426 "i386.h"
#define TARGET_OPTIONS { { "cpu=", &ix86_cpu_string, N_("Schedule code for given CPU")}, { "fpmath=", &ix86_fpmath_string, N_("Generate floating point mathematics using given instruction set")}, { "arch=", &ix86_arch_string, N_("Generate code for given CPU")}, { "regparm=", &ix86_regparm_string, N_("Number of registers used to pass integer arguments") }, { "align-loops=", &ix86_align_loops_string, N_("Loop code aligned to this power of 2") }, { "align-jumps=", &ix86_align_jumps_string, N_("Jump targets are aligned to this power of 2") }, { "align-functions=", &ix86_align_funcs_string, N_("Function starts are aligned to this power of 2") }, { "preferred-stack-boundary=", &ix86_preferred_stack_boundary_string, N_("Attempt to keep stack aligned to this power of 2") }, { "branch-cost=", &ix86_branch_cost_string, N_("Branches are this expensive (1-5, arbitrary units)") }, { "cmodel=", &ix86_cmodel_string, N_("Use given x86-64 code model") }, { "debug-arg", &ix86_debug_arg_string, "" }, { "debug-addr", &ix86_debug_addr_string, "" }, { "asm=", &ix86_asm_string, N_("Use given assembler dialect") }, SUBTARGET_OPTIONS }
# 466 "i386.h"
#define OVERRIDE_OPTIONS override_options ()


#define SUBTARGET_SWITCHES 
#define SUBTARGET_OPTIONS 


#define OPTIMIZATION_OPTIONS(LEVEL,SIZE) optimization_options ((LEVEL), (SIZE))





#define CC1_CPU_SPEC "%{!mcpu*: %{m386:-mcpu=i386 %n`-m386' is deprecated. Use `-march=i386' or `-mcpu=i386' instead.\n} %{m486:-mcpu=i486 %n`-m486' is deprecated. Use `-march=i486' or `-mcpu=i486' instead.\n} %{mpentium:-mcpu=pentium %n`-mpentium' is deprecated. Use `-march=pentium' or `-mcpu=pentium' instead.\n} %{mpentiumpro:-mcpu=pentiumpro %n`-mpentiumpro' is deprecated. Use `-march=pentiumpro' or `-mcpu=pentiumpro' instead.\n}} %{mintel-syntax:-masm=intel %n`-mintel-syntax' is deprecated. Use `-masm=intel' instead.\n} %{mno-intel-syntax:-masm=att %n`-mno-intel-syntax' is deprecated. Use `-masm=att' instead.\n}"
# 495 "i386.h"
#define TARGET_CPU_DEFAULT_i386 0
#define TARGET_CPU_DEFAULT_i486 1
#define TARGET_CPU_DEFAULT_pentium 2
#define TARGET_CPU_DEFAULT_pentium_mmx 3
#define TARGET_CPU_DEFAULT_pentiumpro 4
#define TARGET_CPU_DEFAULT_pentium2 5
#define TARGET_CPU_DEFAULT_pentium3 6
#define TARGET_CPU_DEFAULT_pentium4 7
#define TARGET_CPU_DEFAULT_k6 8
#define TARGET_CPU_DEFAULT_k6_2 9
#define TARGET_CPU_DEFAULT_k6_3 10
#define TARGET_CPU_DEFAULT_athlon 11
#define TARGET_CPU_DEFAULT_athlon_sse 12

#define TARGET_CPU_DEFAULT_NAMES {"i386", "i486", "pentium", "pentium-mmx", "pentiumpro", "pentium2", "pentium3", "pentium4", "k6", "k6-2", "k6-3", "athlon", "athlon-4"}
# 550 "i386.h"
#define CPP_CPU_DEFAULT_SPEC "-D__tune_athlon__ -D__tune_athlon_sse__"







#define NO_BUILTIN_SIZE_TYPE 
#define NO_BUILTIN_PTRDIFF_TYPE 



#define CPP_CPU32_SIZE_TYPE_SPEC " -D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int"

#define CPP_CPU64_SIZE_TYPE_SPEC " -D__SIZE_TYPE__=unsigned\\ long\\ int -D__PTRDIFF_TYPE__=long\\ int"






#define CPP_CPU32_SPEC "-Acpu=i386 -Amachine=i386 %{!ansi:%{!std=c*:%{!std=i*:-Di386}}} -D__i386 -D__i386__ %(cpp_cpu32sizet)"



#define CPP_CPU64_SPEC "-Acpu=x86_64 -Amachine=x86_64 -D__x86_64 -D__x86_64__ %(cpp_cpu64sizet)"


#define CPP_CPUCOMMON_SPEC "%{march=i386:%{!mcpu*:-D__tune_i386__ }}%{march=i486:-D__i486 -D__i486__ %{!mcpu*:-D__tune_i486__ }}%{march=pentium|march=i586:-D__i586 -D__i586__ -D__pentium -D__pentium__   %{!mcpu*:-D__tune_i586__ -D__tune_pentium__ }}%{march=pentium-mmx:-D__i586 -D__i586__ -D__pentium -D__pentium__   -D__pentium__mmx__   %{!mcpu*:-D__tune_i586__ -D__tune_pentium__ -D__tune_pentium_mmx__}}%{march=pentiumpro|march=i686:-D__i686 -D__i686__   -D__pentiumpro -D__pentiumpro__   %{!mcpu*:-D__tune_i686__ -D__tune_pentiumpro__ }}%{march=k6:-D__k6 -D__k6__ %{!mcpu*:-D__tune_k6__ }}%{march=k6-2:-D__k6 -D__k6__ -D__k6_2__   %{!mcpu*:-D__tune_k6__ -D__tune_k6_2__ }}%{march=k6-3:-D__k6 -D__k6__ -D__k6_3__   %{!mcpu*:-D__tune_k6__ -D__tune_k6_3__ }}%{march=athlon|march=athlon-tbird:-D__athlon -D__athlon__   %{!mcpu*:-D__tune_athlon__ }}%{march=athlon-4|march=athlon-xp|march=athlon-mp:-D__athlon -D__athlon__   -D__athlon_sse__   %{!mcpu*:-D__tune_athlon__ -D__tune_athlon_sse__ }}%{march=pentium4:-D__pentium4 -D__pentium4__ %{!mcpu*:-D__tune_pentium4__ }}%{m386|mcpu=i386:-D__tune_i386__ }%{m486|mcpu=i486:-D__tune_i486__ }%{mpentium|mcpu=pentium|mcpu=i586|mcpu=pentium-mmx:-D__tune_i586__ -D__tune_pentium__ }%{mpentiumpro|mcpu=pentiumpro|mcpu=i686|cpu=pentium2|cpu=pentium3:-D__tune_i686__ -D__tune_pentiumpro__ }%{mcpu=k6|mcpu=k6-2|mcpu=k6-3:-D__tune_k6__ }%{mcpu=athlon|mcpu=athlon-tbird|mcpu=athlon-4|mcpu=athlon-xp|mcpu=athlon-mp:-D__tune_athlon__ }%{mcpu=athlon-4|mcpu=athlon-xp|mcpu=athlon-mp:-D__tune_athlon_sse__ }%{mcpu=pentium4:-D__tune_pentium4__ }%{march=athlon-xp|march=athlon-mp|march=pentium3|march=pentium4:-D__SSE__ }%{march=pentium-mmx|march=k6|march=k6-2|march=k6-3|march=athlon|march=athlon-tbird|march=athlon-4|march=athlon-xp|march=athlon-mp|march=pentium2|march=pentium3|march=pentium4: -D__MMX__ }%{march=k6-2|march=k6-3|march=athlon|march=athlon-tbird|march=athlon-4|march=athlon-xp|march=athlon-mp: -D__3dNOW__ }%{march=athlon|march=athlon-tbird|march=athlon-4|march=athlon-xp|march=athlon-mp: -D__3dNOW_A__ }%{march=pentium4: -D__SSE2__ }%{!march*:%{!mcpu*:%{!m386:%{!m486:%{!mpentium*:%(cpp_cpu_default)}}}}}"
# 628 "i386.h"
#define CPP_CPU_SPEC "%{m32:%(cpp_cpu32)}%{!m32:%(cpp_cpu64)} %(cpp_cpucommon)"
# 642 "i386.h"
#define CC1_SPEC "%(cc1_cpu) "
# 656 "i386.h"
#define SUBTARGET_EXTRA_SPECS 


#define EXTRA_SPECS { "cpp_cpu_default", CPP_CPU_DEFAULT_SPEC }, { "cpp_cpu", CPP_CPU_SPEC }, { "cpp_cpu32", CPP_CPU32_SPEC }, { "cpp_cpu64", CPP_CPU64_SPEC }, { "cpp_cpu32sizet", CPP_CPU32_SIZE_TYPE_SPEC }, { "cpp_cpu64sizet", CPP_CPU64_SIZE_TYPE_SPEC }, { "cpp_cpucommon", CPP_CPUCOMMON_SPEC }, { "cc1_cpu", CC1_CPU_SPEC }, SUBTARGET_EXTRA_SPECS
# 678 "i386.h"
#define LONG_DOUBLE_TYPE_SIZE (TARGET_128BIT_LONG_DOUBLE ? 128 : 96)
#define MAX_LONG_DOUBLE_TYPE_SIZE 128



#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 96



#define INTEL_EXTENDED_IEEE_FORMAT 1


#define SHORT_TYPE_SIZE 16
#define INT_TYPE_SIZE 32
#define FLOAT_TYPE_SIZE 32
#define LONG_TYPE_SIZE BITS_PER_WORD
#define MAX_WCHAR_TYPE_SIZE 32
#define DOUBLE_TYPE_SIZE 64
#define LONG_LONG_TYPE_SIZE 64


#define MAX_BITS_PER_WORD 64
#define MAX_LONG_TYPE_SIZE 64
# 714 "i386.h"
#define BITS_BIG_ENDIAN 0



#define BYTES_BIG_ENDIAN 0




#define WORDS_BIG_ENDIAN 0


#define BITS_PER_UNIT 8





#define BITS_PER_WORD (TARGET_64BIT ? 64 : 32)


#define UNITS_PER_WORD (TARGET_64BIT ? 8 : 4)
#define MIN_UNITS_PER_WORD 4



#define POINTER_SIZE BITS_PER_WORD


#define PARM_BOUNDARY BITS_PER_WORD


#define STACK_BOUNDARY BITS_PER_WORD



#define PREFERRED_STACK_BOUNDARY ix86_preferred_stack_boundary





#define FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN (ix86_preferred_stack_boundary > STACK_BOUNDARY && !TARGET_64BIT)



#define FUNCTION_BOUNDARY 16



#define EMPTY_FIELD_BOUNDARY BITS_PER_WORD
# 774 "i386.h"
#define BIGGEST_ALIGNMENT 128


#define ALIGN_MODE_128(MODE) ((MODE) == XFmode || (MODE) == TFmode || ((MODE) == TImode) || (MODE) == V4SFmode || (MODE) == V4SImode)
# 791 "i386.h"
#define ADJUST_FIELD_ALIGN(FIELD,COMPUTED) x86_field_alignment (FIELD, COMPUTED)
# 807 "i386.h"
#define CONSTANT_ALIGNMENT(EXP,ALIGN) ix86_constant_alignment ((EXP), (ALIGN))
# 821 "i386.h"
#define DATA_ALIGNMENT(TYPE,ALIGN) ix86_data_alignment ((TYPE), (ALIGN))
# 833 "i386.h"
#define LOCAL_ALIGNMENT(TYPE,ALIGN) ix86_local_alignment ((TYPE), (ALIGN))





#define FUNCTION_ARG_BOUNDARY(MODE,TYPE) ix86_function_arg_boundary ((MODE), (TYPE))




#define STRICT_ALIGNMENT 0




#define PCC_BITFIELD_TYPE_MATTERS 1






#define STACK_REGS 
#define IS_STACK_MODE(MODE) ((MODE) == DFmode || (MODE) == SFmode || (MODE) == XFmode || (MODE) == TFmode)
# 877 "i386.h"
#define FIRST_PSEUDO_REGISTER 53




#define DWARF_FRAME_REGISTERS 17
# 892 "i386.h"
#define FIXED_REGISTERS { 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
# 918 "i386.h"
#define CALL_USED_REGISTERS { 3, 3, 3, 0, 2, 2, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3}
# 941 "i386.h"
#define REG_ALLOC_ORDER { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52 }
# 951 "i386.h"
#define ORDER_REGS_FOR_LOCAL_ALLOC x86_order_regs_for_local_alloc ()



#define CONDITIONAL_REGISTER_USAGE do { int i; for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) { fixed_regs[i] = (fixed_regs[i] & (TARGET_64BIT ? 2 : 1)) != 0; call_used_regs[i] = (call_used_regs[i] & (TARGET_64BIT ? 2 : 1)) != 0; } if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM) { fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; } if (! TARGET_MMX) { int i; for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) if (TEST_HARD_REG_BIT (reg_class_contents[(int)MMX_REGS], i)) fixed_regs[i] = call_used_regs[i] = 1; } if (! TARGET_SSE) { int i; for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) if (TEST_HARD_REG_BIT (reg_class_contents[(int)SSE_REGS], i)) fixed_regs[i] = call_used_regs[i] = 1; } if (! TARGET_80387 && ! TARGET_FLOAT_RETURNS_IN_80387) { int i; HARD_REG_SET x; COPY_HARD_REG_SET (x, reg_class_contents[(int)FLOAT_REGS]); for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) if (TEST_HARD_REG_BIT (x, i)) fixed_regs[i] = call_used_regs[i] = 1; } } while (0)
# 1004 "i386.h"
#define HARD_REGNO_NREGS(REGNO,MODE) (FP_REGNO_P (REGNO) || SSE_REGNO_P (REGNO) || MMX_REGNO_P (REGNO) ? (COMPLEX_MODE_P (MODE) ? 2 : 1) : ((MODE) == TFmode ? (TARGET_64BIT ? 2 : 3) : (MODE) == TCmode ? (TARGET_64BIT ? 4 : 6) : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)))
# 1013 "i386.h"
#define VALID_SSE_REG_MODE(MODE) ((MODE) == TImode || (MODE) == V4SFmode || (MODE) == V4SImode || (MODE) == SFmode || (TARGET_SSE2 && ((MODE) == DFmode || VALID_MMX_REG_MODE (MODE))))




#define VALID_MMX_REG_MODE_3DNOW(MODE) ((MODE) == V2SFmode || (MODE) == SFmode)


#define VALID_MMX_REG_MODE(MODE) ((MODE) == DImode || (MODE) == V8QImode || (MODE) == V4HImode || (MODE) == V2SImode || (MODE) == SImode)



#define VECTOR_MODE_SUPPORTED_P(MODE) (VALID_SSE_REG_MODE (MODE) && TARGET_SSE ? 1 : VALID_MMX_REG_MODE (MODE) && TARGET_MMX ? 1 : VALID_MMX_REG_MODE_3DNOW (MODE) && TARGET_3DNOW ? 1 : 0)




#define VALID_FP_MODE_P(MODE) ((MODE) == SFmode || (MODE) == DFmode || (MODE) == TFmode || (!TARGET_64BIT && (MODE) == XFmode) || (MODE) == SCmode || (MODE) == DCmode || (MODE) == TCmode || (!TARGET_64BIT && (MODE) == XCmode))





#define VALID_INT_MODE_P(MODE) ((MODE) == QImode || (MODE) == HImode || (MODE) == SImode || (MODE) == DImode || (MODE) == CQImode || (MODE) == CHImode || (MODE) == CSImode || (MODE) == CDImode || (TARGET_64BIT && ((MODE) == TImode || (MODE) == CTImode)))
# 1045 "i386.h"
#define HARD_REGNO_MODE_OK(REGNO,MODE) ix86_hard_regno_mode_ok ((REGNO), (MODE))







#define MODES_TIEABLE_P(MODE1,MODE2) ((MODE1) == (MODE2) || (((MODE1) == HImode || (MODE1) == SImode || ((MODE1) == QImode && (TARGET_64BIT || !TARGET_PARTIAL_REG_STALL)) || ((MODE1) == DImode && TARGET_64BIT)) && ((MODE2) == HImode || (MODE2) == SImode || ((MODE1) == QImode && (TARGET_64BIT || !TARGET_PARTIAL_REG_STALL)) || ((MODE2) == DImode && TARGET_64BIT))))
# 1070 "i386.h"
#define HARD_REGNO_CALLER_SAVE_MODE(REGNO,NREGS,MODE) (CC_REGNO_P (REGNO) ? VOIDmode : (MODE) == VOIDmode && (NREGS) != 1 ? VOIDmode : (MODE) == VOIDmode ? choose_hard_reg_mode ((REGNO), (NREGS)) : (MODE) == HImode && !TARGET_PARTIAL_REG_STALL ? SImode : (MODE) == QImode && (REGNO) >= 4 && !TARGET_64BIT ? SImode : (MODE))
# 1085 "i386.h"
#define STACK_POINTER_REGNUM 7


#define HARD_FRAME_POINTER_REGNUM 6


#define FRAME_POINTER_REGNUM 20


#define FIRST_FLOAT_REG 8


#define FIRST_STACK_REG FIRST_FLOAT_REG
#define LAST_STACK_REG (FIRST_FLOAT_REG + 7)

#define FLAGS_REG 17
#define FPSR_REG 18
#define DIRFLAG_REG 19

#define FIRST_SSE_REG (FRAME_POINTER_REGNUM + 1)
#define LAST_SSE_REG (FIRST_SSE_REG + 7)

#define FIRST_MMX_REG (LAST_SSE_REG + 1)
#define LAST_MMX_REG (FIRST_MMX_REG + 7)

#define FIRST_REX_INT_REG (LAST_MMX_REG + 1)
#define LAST_REX_INT_REG (FIRST_REX_INT_REG + 7)

#define FIRST_REX_SSE_REG (LAST_REX_INT_REG + 1)
#define LAST_REX_SSE_REG (FIRST_REX_SSE_REG + 7)





#define FRAME_POINTER_REQUIRED ix86_frame_pointer_required ()




#define SUBTARGET_FRAME_POINTER_REQUIRED 0



#define SETUP_FRAME_ADDRESSES() ix86_setup_frame_addresses ()


#define ARG_POINTER_REGNUM 16




#define STATIC_CHAIN_REGNUM (TARGET_64BIT ? FIRST_REX_INT_REG + 10 - 8 : 2)





#define PIC_OFFSET_TABLE_REGNUM (TARGET_64BIT || !flag_pic ? INVALID_REGNUM : 3)





#define STRUCT_VALUE_INCOMING 0



#define STRUCT_VALUE 0
# 1172 "i386.h"
#define RETURN_IN_MEMORY(TYPE) ix86_return_in_memory (TYPE)
# 1202 "i386.h"
enum reg_class
{
  NO_REGS,
  AREG, DREG, CREG, BREG, SIREG, DIREG,
  AD_REGS,
  Q_REGS,
  NON_Q_REGS,
  INDEX_REGS,
  LEGACY_REGS,
  GENERAL_REGS,
  FP_TOP_REG, FP_SECOND_REG,
  FLOAT_REGS,
  SSE_REGS,
  MMX_REGS,
  FP_TOP_SSE_REGS,
  FP_SECOND_SSE_REGS,
  FLOAT_SSE_REGS,
  FLOAT_INT_REGS,
  INT_SSE_REGS,
  FLOAT_INT_SSE_REGS,
  ALL_REGS, LIM_REG_CLASSES
};

#define N_REG_CLASSES ((int) LIM_REG_CLASSES)

#define INTEGER_CLASS_P(CLASS) reg_class_subset_p ((CLASS), GENERAL_REGS)

#define FLOAT_CLASS_P(CLASS) reg_class_subset_p ((CLASS), FLOAT_REGS)

#define SSE_CLASS_P(CLASS) reg_class_subset_p ((CLASS), SSE_REGS)

#define MMX_CLASS_P(CLASS) reg_class_subset_p ((CLASS), MMX_REGS)

#define MAYBE_INTEGER_CLASS_P(CLASS) reg_classes_intersect_p ((CLASS), GENERAL_REGS)

#define MAYBE_FLOAT_CLASS_P(CLASS) reg_classes_intersect_p ((CLASS), FLOAT_REGS)

#define MAYBE_SSE_CLASS_P(CLASS) reg_classes_intersect_p (SSE_REGS, (CLASS))

#define MAYBE_MMX_CLASS_P(CLASS) reg_classes_intersect_p (MMX_REGS, (CLASS))


#define Q_CLASS_P(CLASS) reg_class_subset_p ((CLASS), Q_REGS)




#define REG_CLASS_NAMES { "NO_REGS", "AREG", "DREG", "CREG", "BREG", "SIREG", "DIREG", "AD_REGS", "Q_REGS", "NON_Q_REGS", "INDEX_REGS", "LEGACY_REGS", "GENERAL_REGS", "FP_TOP_REG", "FP_SECOND_REG", "FLOAT_REGS", "SSE_REGS", "MMX_REGS", "FP_TOP_SSE_REGS", "FP_SECOND_SSE_REGS", "FLOAT_SSE_REGS", "FLOAT_INT_REGS", "INT_SSE_REGS", "FLOAT_INT_SSE_REGS", "ALL_REGS" }
# 1274 "i386.h"
#define REG_CLASS_CONTENTS { { 0x00, 0x0 }, { 0x01, 0x0 }, { 0x02, 0x0 }, { 0x04, 0x0 }, { 0x08, 0x0 }, { 0x10, 0x0 }, { 0x20, 0x0 }, { 0x03, 0x0 }, { 0x0f, 0x0 }, { 0x1100f0, 0x1fe0 }, { 0x7f, 0x1fe0 }, { 0x1100ff, 0x0 }, { 0x1100ff, 0x1fe0 }, { 0x100, 0x0 }, { 0x0200, 0x0 }, { 0xff00, 0x0 }, { 0x1fe00000,0x1fe000 }, { 0xe0000000, 0x1f }, { 0x1fe00100,0x1fe000 }, { 0x1fe00200,0x1fe000 }, { 0x1fe0ff00,0x1fe000 }, { 0x1ffff, 0x1fe0 }, { 0x1fe100ff,0x1fffe0 }, { 0x1fe1ffff,0x1fffe0 }, { 0xffffffff,0x1fffff } }
# 1303 "i386.h"
#define REGNO_REG_CLASS(REGNO) (regclass_map[REGNO])





#define SMALL_REGISTER_CLASSES 1

#define QI_REG_P(X) (REG_P (X) && REGNO (X) < 4)


#define GENERAL_REGNO_P(N) ((N) < 8 || REX_INT_REGNO_P (N))


#define GENERAL_REG_P(X) (REG_P (X) && GENERAL_REGNO_P (REGNO (X)))


#define ANY_QI_REG_P(X) (TARGET_64BIT ? GENERAL_REG_P(X) : QI_REG_P (X))

#define NON_QI_REG_P(X) (REG_P (X) && REGNO (X) >= 4 && REGNO (X) < FIRST_PSEUDO_REGISTER)


#define REX_INT_REGNO_P(N) ((N) >= FIRST_REX_INT_REG && (N) <= LAST_REX_INT_REG)
#define REX_INT_REG_P(X) (REG_P (X) && REX_INT_REGNO_P (REGNO (X)))

#define FP_REG_P(X) (REG_P (X) && FP_REGNO_P (REGNO (X)))
#define FP_REGNO_P(N) ((N) >= FIRST_STACK_REG && (N) <= LAST_STACK_REG)
#define ANY_FP_REG_P(X) (REG_P (X) && ANY_FP_REGNO_P (REGNO (X)))
#define ANY_FP_REGNO_P(N) (FP_REGNO_P (N) || SSE_REGNO_P (N))

#define SSE_REGNO_P(N) (((N) >= FIRST_SSE_REG && (N) <= LAST_SSE_REG) || ((N) >= FIRST_REX_SSE_REG && (N) <= LAST_REX_SSE_REG))



#define SSE_REGNO(N) ((N) < 8 ? FIRST_SSE_REG + (N) : FIRST_REX_SSE_REG + (N) - 8)

#define SSE_REG_P(N) (REG_P (N) && SSE_REGNO_P (REGNO (N)))

#define SSE_FLOAT_MODE_P(MODE) ((TARGET_SSE && (MODE) == SFmode) || (TARGET_SSE2 && (MODE) == DFmode))


#define MMX_REGNO_P(N) ((N) >= FIRST_MMX_REG && (N) <= LAST_MMX_REG)
#define MMX_REG_P(XOP) (REG_P (XOP) && MMX_REGNO_P (REGNO (XOP)))

#define STACK_REG_P(XOP) (REG_P (XOP) && REGNO (XOP) >= FIRST_STACK_REG && REGNO (XOP) <= LAST_STACK_REG)




#define NON_STACK_REG_P(XOP) (REG_P (XOP) && ! STACK_REG_P (XOP))

#define STACK_TOP_P(XOP) (REG_P (XOP) && REGNO (XOP) == FIRST_STACK_REG)

#define CC_REG_P(X) (REG_P (X) && CC_REGNO_P (REGNO (X)))
#define CC_REGNO_P(X) ((X) == FLAGS_REG || (X) == FPSR_REG)



#define CONVERT_HARD_REGISTER_TO_SSA_P(REG_NO) ((REG_NO) == FLAGS_REG || (REG_NO) == ARG_POINTER_REGNUM)




#define INDEX_REG_CLASS INDEX_REGS
#define BASE_REG_CLASS GENERAL_REGS



#define REG_CLASS_FROM_LETTER(C) ((C) == 'r' ? GENERAL_REGS : (C) == 'R' ? LEGACY_REGS : (C) == 'q' ? TARGET_64BIT ? GENERAL_REGS : Q_REGS : (C) == 'Q' ? Q_REGS : (C) == 'f' ? (TARGET_80387 || TARGET_FLOAT_RETURNS_IN_80387 ? FLOAT_REGS : NO_REGS) : (C) == 't' ? (TARGET_80387 || TARGET_FLOAT_RETURNS_IN_80387 ? FP_TOP_REG : NO_REGS) : (C) == 'u' ? (TARGET_80387 || TARGET_FLOAT_RETURNS_IN_80387 ? FP_SECOND_REG : NO_REGS) : (C) == 'a' ? AREG : (C) == 'b' ? BREG : (C) == 'c' ? CREG : (C) == 'd' ? DREG : (C) == 'x' ? TARGET_SSE ? SSE_REGS : NO_REGS : (C) == 'Y' ? TARGET_SSE2? SSE_REGS : NO_REGS : (C) == 'y' ? TARGET_MMX ? MMX_REGS : NO_REGS : (C) == 'A' ? AD_REGS : (C) == 'D' ? DIREG : (C) == 'S' ? SIREG : NO_REGS)
# 1410 "i386.h"
#define CONST_OK_FOR_LETTER_P(VALUE,C) ((C) == 'I' ? (VALUE) >= 0 && (VALUE) <= 31 : (C) == 'J' ? (VALUE) >= 0 && (VALUE) <= 63 : (C) == 'K' ? (VALUE) >= -128 && (VALUE) <= 127 : (C) == 'L' ? (VALUE) == 0xff || (VALUE) == 0xffff : (C) == 'M' ? (VALUE) >= 0 && (VALUE) <= 3 : (C) == 'N' ? (VALUE) >= 0 && (VALUE) <= 255 : 0)
# 1424 "i386.h"
#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE,C) ((C) == 'G' ? standard_80387_constant_p (VALUE) : ((C) == 'H' ? standard_sse_constant_p (VALUE) : 0))
# 1440 "i386.h"
#define EXTRA_CONSTRAINT(VALUE,C) ((C) == 'e' ? x86_64_sign_extended_value (VALUE) : (C) == 'Z' ? x86_64_zero_extended_value (VALUE) : 0)
# 1449 "i386.h"
#define LIMIT_RELOAD_CLASS(MODE,CLASS) ((MODE) == QImode && !TARGET_64BIT && ((CLASS) == ALL_REGS || (CLASS) == GENERAL_REGS || (CLASS) == LEGACY_REGS || (CLASS) == INDEX_REGS) ? Q_REGS : (CLASS))
# 1468 "i386.h"
#define PREFERRED_RELOAD_CLASS(X,CLASS) ix86_preferred_reload_class ((X), (CLASS))




#define SECONDARY_MEMORY_NEEDED(CLASS1,CLASS2,MODE) ix86_secondary_memory_needed ((CLASS1), (CLASS2), (MODE), 1)






#define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS,MODE,OUT) (((CLASS) == GENERAL_REGS || (CLASS) == LEGACY_REGS || (CLASS) == INDEX_REGS) && !TARGET_64BIT && (MODE) == QImode ? Q_REGS : NO_REGS)
# 1492 "i386.h"
#define CLASS_MAX_NREGS(CLASS,MODE) (!MAYBE_INTEGER_CLASS_P (CLASS) ? (COMPLEX_MODE_P (MODE) ? 2 : 1) : ((GET_MODE_SIZE ((MODE) == TFmode ? XFmode : (MODE)) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
# 1514 "i386.h"
#define CLASS_LIKELY_SPILLED_P(CLASS) (((CLASS) == AREG) || ((CLASS) == DREG) || ((CLASS) == CREG) || ((CLASS) == BREG) || ((CLASS) == AD_REGS) || ((CLASS) == SIREG) || ((CLASS) == DIREG))
# 1529 "i386.h"
#define MD_ASM_CLOBBERS(CLOBBERS) do { (CLOBBERS) = tree_cons (NULL_TREE, build_string (5, "flags"), (CLOBBERS)); (CLOBBERS) = tree_cons (NULL_TREE, build_string (4, "fpsr"), (CLOBBERS)); (CLOBBERS) = tree_cons (NULL_TREE, build_string (7, "dirflag"), (CLOBBERS)); } while (0)
# 1543 "i386.h"
#define STACK_GROWS_DOWNWARD 





#define FRAME_GROWS_DOWNWARD 





#define STARTING_FRAME_OFFSET 0
# 1566 "i386.h"
#define PUSH_ROUNDING(BYTES) (TARGET_64BIT ? (((BYTES) + 7) & (-8)) : (((BYTES) + 1) & (-2)))
# 1577 "i386.h"
#define ACCUMULATE_OUTGOING_ARGS TARGET_ACCUMULATE_OUTGOING_ARGS




#define PUSH_ARGS (TARGET_PUSH_ARGS && !ACCUMULATE_OUTGOING_ARGS)


#define FIRST_PARM_OFFSET(FNDECL) 0
# 1596 "i386.h"
#define REG_PARM_STACK_SPACE(FNDECL) 0






#define MUST_PASS_IN_STACK(MODE,TYPE) ((TYPE) != 0 && (TREE_CODE (TYPE_SIZE (TYPE)) != INTEGER_CST || TREE_ADDRESSABLE (TYPE) || ((MODE) == TImode) || ((MODE) == BLKmode && ! ((TYPE) != 0 && TREE_CODE (TYPE_SIZE (TYPE)) == INTEGER_CST && 0 == (int_size_in_bytes (TYPE) % (PARM_BOUNDARY / BITS_PER_UNIT))) && (FUNCTION_ARG_PADDING (MODE, TYPE) == (BYTES_BIG_ENDIAN ? upward : downward)))))
# 1633 "i386.h"
#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) ix86_return_pops_args ((FUNDECL), (FUNTYPE), (SIZE))






#define FUNCTION_VALUE(VALTYPE,FUNC) ix86_function_value (VALTYPE)


#define FUNCTION_VALUE_REGNO_P(N) ix86_function_value_regno_p (N)





#define LIBCALL_VALUE(MODE) ix86_libcall_value (MODE)






#define APPLY_RESULT_SIZE (8+108)


#define FUNCTION_ARG_REGNO_P(N) ix86_function_arg_regno_p (N)







typedef struct ix86_args {
  int words;
  int nregs;
  int regno;
  int sse_words;
  int sse_nregs;
  int sse_regno;
  int maybe_vaarg;
} CUMULATIVE_ARGS;





#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) init_cumulative_args (&(CUM), (FNTYPE), (LIBNAME))






#define FUNCTION_ARG_ADVANCE(CUM,MODE,TYPE,NAMED) function_arg_advance (&(CUM), (MODE), (TYPE), (NAMED))
# 1704 "i386.h"
#define FUNCTION_ARG(CUM,MODE,TYPE,NAMED) function_arg (&(CUM), (MODE), (TYPE), (NAMED))






#define FUNCTION_ARG_PARTIAL_NREGS(CUM,MODE,TYPE,NAMED) 0






#define FUNCTION_OK_FOR_SIBCALL(DECL) ((DECL) && (! flag_pic || ! TREE_PUBLIC (DECL)) && (! TARGET_FLOAT_RETURNS_IN_80387 || ! FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (TREE_TYPE (DECL)))) || FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (TREE_TYPE (cfun->decl))))))
# 1739 "i386.h"
#define SETUP_INCOMING_VARARGS(CUM,MODE,TYPE,PRETEND_SIZE,NO_RTL) ix86_setup_incoming_varargs (&(CUM), (MODE), (TYPE), &(PRETEND_SIZE), (NO_RTL))




#define BUILD_VA_LIST_TYPE(VALIST) ((VALIST) = ix86_build_va_list ())



#define EXPAND_BUILTIN_VA_START(STDARG,VALIST,NEXTARG) ix86_va_start ((STDARG), (VALIST), (NEXTARG))



#define EXPAND_BUILTIN_VA_ARG(VALIST,TYPE) ix86_va_arg ((VALIST), (TYPE))





#undef ASM_FILE_END
#define ASM_FILE_END(FILE) ix86_asm_file_end (FILE)




#define FUNCTION_PROFILER(FILE,LABELNO) do { if (flag_pic) { fprintf ((FILE), "\tleal\t%sP%d@GOTOFF(%%ebx),%%edx\n", LPREFIX, (LABELNO)); fprintf ((FILE), "\tcall\t*_mcount@GOT(%%ebx)\n"); } else { fprintf ((FILE), "\tmovl\t$%sP%d,%%edx\n", LPREFIX, (LABELNO)); fprintf ((FILE), "\tcall\t_mcount\n"); } } while (0)
# 1787 "i386.h"
#define EXIT_IGNORE_STACK 1
# 1801 "i386.h"
#define TRAMPOLINE_SIZE (TARGET_64BIT ? 23 : 10)





#define INITIALIZE_TRAMPOLINE(TRAMP,FNADDR,CXT) x86_initialize_trampoline ((TRAMP), (FNADDR), (CXT))
# 1823 "i386.h"
#define ELIMINABLE_REGS {{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, { ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}, { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, { FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}}
# 1834 "i386.h"
#define CAN_ELIMINATE(FROM,TO) ((TO) == STACK_POINTER_REGNUM ? ! frame_pointer_needed : 1)





#define INITIAL_ELIMINATION_OFFSET(FROM,TO,OFFSET) ((OFFSET) = ix86_initial_elimination_offset ((FROM), (TO)))
# 1859 "i386.h"
#define REGNO_OK_FOR_INDEX_P(REGNO) ((REGNO) < STACK_POINTER_REGNUM || (REGNO >= FIRST_REX_INT_REG && (REGNO) <= LAST_REX_INT_REG) || ((unsigned) reg_renumber[(REGNO)] >= FIRST_REX_INT_REG && (unsigned) reg_renumber[(REGNO)] <= LAST_REX_INT_REG) || (unsigned) reg_renumber[(REGNO)] < STACK_POINTER_REGNUM)







#define REGNO_OK_FOR_BASE_P(REGNO) ((REGNO) <= STACK_POINTER_REGNUM || (REGNO) == ARG_POINTER_REGNUM || (REGNO) == FRAME_POINTER_REGNUM || (REGNO >= FIRST_REX_INT_REG && (REGNO) <= LAST_REX_INT_REG) || ((unsigned) reg_renumber[(REGNO)] >= FIRST_REX_INT_REG && (unsigned) reg_renumber[(REGNO)] <= LAST_REX_INT_REG) || (unsigned) reg_renumber[(REGNO)] <= STACK_POINTER_REGNUM)
# 1877 "i386.h"
#define REGNO_OK_FOR_SIREG_P(REGNO) ((REGNO) == 4 || reg_renumber[(REGNO)] == 4)

#define REGNO_OK_FOR_DIREG_P(REGNO) ((REGNO) == 5 || reg_renumber[(REGNO)] == 5)
# 1897 "i386.h"
#define REG_OK_FOR_INDEX_NONSTRICT_P(X) (REGNO (X) < STACK_POINTER_REGNUM || (REGNO (X) >= FIRST_REX_INT_REG && REGNO (X) <= LAST_REX_INT_REG) || REGNO (X) >= FIRST_PSEUDO_REGISTER)





#define REG_OK_FOR_BASE_NONSTRICT_P(X) (REGNO (X) <= STACK_POINTER_REGNUM || REGNO (X) == ARG_POINTER_REGNUM || REGNO (X) == FRAME_POINTER_REGNUM || (REGNO (X) >= FIRST_REX_INT_REG && REGNO (X) <= LAST_REX_INT_REG) || REGNO (X) >= FIRST_PSEUDO_REGISTER)
# 1912 "i386.h"
#define REG_OK_FOR_INDEX_STRICT_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
#define REG_OK_FOR_BASE_STRICT_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))






#define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_INDEX_STRICT_P (X)
#define REG_OK_FOR_BASE_P(X) REG_OK_FOR_BASE_STRICT_P (X)
# 1935 "i386.h"
#define MAX_REGS_PER_ADDRESS 2

#define CONSTANT_ADDRESS_P(X) (GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST || GET_CODE (X) == CONST_DOUBLE)







#define LEGITIMATE_CONSTANT_P(X) 1


#define GO_IF_LEGITIMATE_ADDRESS(MODE,X,ADDR) do { if (legitimate_address_p ((MODE), (X), 1)) goto ADDR; } while (0)
# 1972 "i386.h"
#define FIND_BASE_TERM(X) ix86_find_base_term (X)
# 1995 "i386.h"
#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) do { (X) = legitimize_address ((X), (OLDX), (MODE)); if (memory_address_p ((MODE), (X))) goto WIN; } while (0)






#define REWRITE_ADDRESS(X) rewrite_address (X)





#define LEGITIMATE_PIC_OPERAND_P(X) (! SYMBOLIC_CONST (X) || legitimate_pic_address_disp_p (X))



#define SYMBOLIC_CONST(X) (GET_CODE (X) == SYMBOL_REF || GET_CODE (X) == LABEL_REF || (GET_CODE (X) == CONST && symbolic_reference_mentioned_p (X)))
# 2021 "i386.h"
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) do { if (GET_CODE (ADDR) == POST_INC || GET_CODE (ADDR) == POST_DEC) goto LABEL; } while (0)







enum ix86_builtins
{
  IX86_BUILTIN_ADDPS,
  IX86_BUILTIN_ADDSS,
  IX86_BUILTIN_DIVPS,
  IX86_BUILTIN_DIVSS,
  IX86_BUILTIN_MULPS,
  IX86_BUILTIN_MULSS,
  IX86_BUILTIN_SUBPS,
  IX86_BUILTIN_SUBSS,

  IX86_BUILTIN_CMPEQPS,
  IX86_BUILTIN_CMPLTPS,
  IX86_BUILTIN_CMPLEPS,
  IX86_BUILTIN_CMPGTPS,
  IX86_BUILTIN_CMPGEPS,
  IX86_BUILTIN_CMPNEQPS,
  IX86_BUILTIN_CMPNLTPS,
  IX86_BUILTIN_CMPNLEPS,
  IX86_BUILTIN_CMPNGTPS,
  IX86_BUILTIN_CMPNGEPS,
  IX86_BUILTIN_CMPORDPS,
  IX86_BUILTIN_CMPUNORDPS,
  IX86_BUILTIN_CMPNEPS,
  IX86_BUILTIN_CMPEQSS,
  IX86_BUILTIN_CMPLTSS,
  IX86_BUILTIN_CMPLESS,
  IX86_BUILTIN_CMPGTSS,
  IX86_BUILTIN_CMPGESS,
  IX86_BUILTIN_CMPNEQSS,
  IX86_BUILTIN_CMPNLTSS,
  IX86_BUILTIN_CMPNLESS,
  IX86_BUILTIN_CMPNGTSS,
  IX86_BUILTIN_CMPNGESS,
  IX86_BUILTIN_CMPORDSS,
  IX86_BUILTIN_CMPUNORDSS,
  IX86_BUILTIN_CMPNESS,

  IX86_BUILTIN_COMIEQSS,
  IX86_BUILTIN_COMILTSS,
  IX86_BUILTIN_COMILESS,
  IX86_BUILTIN_COMIGTSS,
  IX86_BUILTIN_COMIGESS,
  IX86_BUILTIN_COMINEQSS,
  IX86_BUILTIN_UCOMIEQSS,
  IX86_BUILTIN_UCOMILTSS,
  IX86_BUILTIN_UCOMILESS,
  IX86_BUILTIN_UCOMIGTSS,
  IX86_BUILTIN_UCOMIGESS,
  IX86_BUILTIN_UCOMINEQSS,

  IX86_BUILTIN_CVTPI2PS,
  IX86_BUILTIN_CVTPS2PI,
  IX86_BUILTIN_CVTSI2SS,
  IX86_BUILTIN_CVTSS2SI,
  IX86_BUILTIN_CVTTPS2PI,
  IX86_BUILTIN_CVTTSS2SI,

  IX86_BUILTIN_MAXPS,
  IX86_BUILTIN_MAXSS,
  IX86_BUILTIN_MINPS,
  IX86_BUILTIN_MINSS,

  IX86_BUILTIN_LOADAPS,
  IX86_BUILTIN_LOADUPS,
  IX86_BUILTIN_STOREAPS,
  IX86_BUILTIN_STOREUPS,
  IX86_BUILTIN_LOADSS,
  IX86_BUILTIN_STORESS,
  IX86_BUILTIN_MOVSS,

  IX86_BUILTIN_MOVHLPS,
  IX86_BUILTIN_MOVLHPS,
  IX86_BUILTIN_LOADHPS,
  IX86_BUILTIN_LOADLPS,
  IX86_BUILTIN_STOREHPS,
  IX86_BUILTIN_STORELPS,

  IX86_BUILTIN_MASKMOVQ,
  IX86_BUILTIN_MOVMSKPS,
  IX86_BUILTIN_PMOVMSKB,

  IX86_BUILTIN_MOVNTPS,
  IX86_BUILTIN_MOVNTQ,

  IX86_BUILTIN_PACKSSWB,
  IX86_BUILTIN_PACKSSDW,
  IX86_BUILTIN_PACKUSWB,

  IX86_BUILTIN_PADDB,
  IX86_BUILTIN_PADDW,
  IX86_BUILTIN_PADDD,
  IX86_BUILTIN_PADDSB,
  IX86_BUILTIN_PADDSW,
  IX86_BUILTIN_PADDUSB,
  IX86_BUILTIN_PADDUSW,
  IX86_BUILTIN_PSUBB,
  IX86_BUILTIN_PSUBW,
  IX86_BUILTIN_PSUBD,
  IX86_BUILTIN_PSUBSB,
  IX86_BUILTIN_PSUBSW,
  IX86_BUILTIN_PSUBUSB,
  IX86_BUILTIN_PSUBUSW,

  IX86_BUILTIN_PAND,
  IX86_BUILTIN_PANDN,
  IX86_BUILTIN_POR,
  IX86_BUILTIN_PXOR,

  IX86_BUILTIN_PAVGB,
  IX86_BUILTIN_PAVGW,

  IX86_BUILTIN_PCMPEQB,
  IX86_BUILTIN_PCMPEQW,
  IX86_BUILTIN_PCMPEQD,
  IX86_BUILTIN_PCMPGTB,
  IX86_BUILTIN_PCMPGTW,
  IX86_BUILTIN_PCMPGTD,

  IX86_BUILTIN_PEXTRW,
  IX86_BUILTIN_PINSRW,

  IX86_BUILTIN_PMADDWD,

  IX86_BUILTIN_PMAXSW,
  IX86_BUILTIN_PMAXUB,
  IX86_BUILTIN_PMINSW,
  IX86_BUILTIN_PMINUB,

  IX86_BUILTIN_PMULHUW,
  IX86_BUILTIN_PMULHW,
  IX86_BUILTIN_PMULLW,

  IX86_BUILTIN_PSADBW,
  IX86_BUILTIN_PSHUFW,

  IX86_BUILTIN_PSLLW,
  IX86_BUILTIN_PSLLD,
  IX86_BUILTIN_PSLLQ,
  IX86_BUILTIN_PSRAW,
  IX86_BUILTIN_PSRAD,
  IX86_BUILTIN_PSRLW,
  IX86_BUILTIN_PSRLD,
  IX86_BUILTIN_PSRLQ,
  IX86_BUILTIN_PSLLWI,
  IX86_BUILTIN_PSLLDI,
  IX86_BUILTIN_PSLLQI,
  IX86_BUILTIN_PSRAWI,
  IX86_BUILTIN_PSRADI,
  IX86_BUILTIN_PSRLWI,
  IX86_BUILTIN_PSRLDI,
  IX86_BUILTIN_PSRLQI,

  IX86_BUILTIN_PUNPCKHBW,
  IX86_BUILTIN_PUNPCKHWD,
  IX86_BUILTIN_PUNPCKHDQ,
  IX86_BUILTIN_PUNPCKLBW,
  IX86_BUILTIN_PUNPCKLWD,
  IX86_BUILTIN_PUNPCKLDQ,

  IX86_BUILTIN_SHUFPS,

  IX86_BUILTIN_RCPPS,
  IX86_BUILTIN_RCPSS,
  IX86_BUILTIN_RSQRTPS,
  IX86_BUILTIN_RSQRTSS,
  IX86_BUILTIN_SQRTPS,
  IX86_BUILTIN_SQRTSS,

  IX86_BUILTIN_UNPCKHPS,
  IX86_BUILTIN_UNPCKLPS,

  IX86_BUILTIN_ANDPS,
  IX86_BUILTIN_ANDNPS,
  IX86_BUILTIN_ORPS,
  IX86_BUILTIN_XORPS,

  IX86_BUILTIN_EMMS,
  IX86_BUILTIN_LDMXCSR,
  IX86_BUILTIN_STMXCSR,
  IX86_BUILTIN_SFENCE,


  IX86_BUILTIN_FEMMS,
  IX86_BUILTIN_PAVGUSB,
  IX86_BUILTIN_PF2ID,
  IX86_BUILTIN_PFACC,
  IX86_BUILTIN_PFADD,
  IX86_BUILTIN_PFCMPEQ,
  IX86_BUILTIN_PFCMPGE,
  IX86_BUILTIN_PFCMPGT,
  IX86_BUILTIN_PFMAX,
  IX86_BUILTIN_PFMIN,
  IX86_BUILTIN_PFMUL,
  IX86_BUILTIN_PFRCP,
  IX86_BUILTIN_PFRCPIT1,
  IX86_BUILTIN_PFRCPIT2,
  IX86_BUILTIN_PFRSQIT1,
  IX86_BUILTIN_PFRSQRT,
  IX86_BUILTIN_PFSUB,
  IX86_BUILTIN_PFSUBR,
  IX86_BUILTIN_PI2FD,
  IX86_BUILTIN_PMULHRW,


  IX86_BUILTIN_PF2IW,
  IX86_BUILTIN_PFNACC,
  IX86_BUILTIN_PFPNACC,
  IX86_BUILTIN_PI2FW,
  IX86_BUILTIN_PSWAPDSI,
  IX86_BUILTIN_PSWAPDSF,

  IX86_BUILTIN_SSE_ZERO,
  IX86_BUILTIN_MMX_ZERO,

  IX86_BUILTIN_MAX
};
# 2254 "i386.h"
#define ENCODE_SECTION_INFO(DECL) do { if (flag_pic) { rtx rtl = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' ? TREE_CST_RTL (DECL) : DECL_RTL (DECL)); if (GET_CODE (rtl) == MEM) { if (TARGET_DEBUG_ADDR && TREE_CODE_CLASS (TREE_CODE (DECL)) == 'd') { fprintf (stderr, "Encode %s, public = %d\n", IDENTIFIER_POINTER (DECL_NAME (DECL)), TREE_PUBLIC (DECL)); } SYMBOL_REF_FLAG (XEXP (rtl, 0)) = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' || ! TREE_PUBLIC (DECL)); } } } while (0)
# 2285 "i386.h"
#define FINALIZE_PIC (current_function_uses_pic_offset_table |= current_function_profile)
# 2294 "i386.h"
#define REGPARM_MAX (TARGET_64BIT ? 6 : 3)

#define SSE_REGPARM_MAX (TARGET_64BIT ? 8 : 0)




#define CASE_VECTOR_MODE (!TARGET_64BIT || flag_pic ? SImode : DImode)
# 2310 "i386.h"
#define DEFAULT_SIGNED_CHAR 1


#define PREFETCH_BLOCK ix86_cost->prefetch_block


#define SIMULTANEOUS_PREFETCHES ix86_cost->simultaneous_prefetches



#define MOVE_MAX 16




#define MOVE_MAX_PIECES (TARGET_64BIT ? 8 : 4)
# 2334 "i386.h"
#define MOVE_RATIO (optimize_size ? 3 : ix86_cost->move_ratio)
# 2345 "i386.h"
#define TRULY_NOOP_TRUNCATION(OUTPREC,INPREC) 1




#define STORE_FLAG_VALUE 1




#define PROMOTE_PROTOTYPES (!TARGET_64BIT)
# 2365 "i386.h"
#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) do { if (((MODE) == HImode && TARGET_PROMOTE_HI_REGS) || ((MODE) == QImode && TARGET_PROMOTE_QI_REGS)) (MODE) = SImode; } while (0)
# 2375 "i386.h"
#define Pmode (TARGET_64BIT ? DImode : SImode)




#define FUNCTION_MODE QImode
# 2395 "i386.h"
#define CONST_COSTS(RTX,CODE,OUTER_CODE) case CONST_INT: case CONST: case LABEL_REF: case SYMBOL_REF: if (TARGET_64BIT && !x86_64_sign_extended_value (RTX)) return 3; if (TARGET_64BIT && !x86_64_zero_extended_value (RTX)) return 2; return flag_pic && SYMBOLIC_CONST (RTX) ? 1 : 0; case CONST_DOUBLE: { int code; if (GET_MODE (RTX) == VOIDmode) return 0; code = standard_80387_constant_p (RTX); return code == 1 ? 1 : code == 2 ? 2 : 3; }
# 2419 "i386.h"
#define TOPLEVEL_COSTS_N_INSNS(N) do { total = COSTS_N_INSNS (N); goto egress_rtx_costs; } while (0)
# 2432 "i386.h"
#define RTX_COSTS(X,CODE,OUTER_CODE) case ZERO_EXTEND: if (TARGET_64BIT && GET_MODE (X) == DImode && GET_MODE (XEXP (X, 0)) == SImode) { total = 1; goto egress_rtx_costs; } else TOPLEVEL_COSTS_N_INSNS (TARGET_ZERO_EXTEND_WITH_AND ? ix86_cost->add : ix86_cost->movzx); break; case SIGN_EXTEND: TOPLEVEL_COSTS_N_INSNS (ix86_cost->movsx); break; case ASHIFT: if (GET_CODE (XEXP (X, 1)) == CONST_INT && (GET_MODE (XEXP (X, 0)) != DImode || TARGET_64BIT)) { HOST_WIDE_INT value = INTVAL (XEXP (X, 1)); if (value == 1) TOPLEVEL_COSTS_N_INSNS (ix86_cost->add); if ((value == 2 || value == 3) && !TARGET_DECOMPOSE_LEA && ix86_cost->lea <= ix86_cost->shift_const) TOPLEVEL_COSTS_N_INSNS (ix86_cost->lea); } case ROTATE: case ASHIFTRT: case LSHIFTRT: case ROTATERT: if (!TARGET_64BIT && GET_MODE (XEXP (X, 0)) == DImode) { if (GET_CODE (XEXP (X, 1)) == CONST_INT) { if (INTVAL (XEXP (X, 1)) > 32) TOPLEVEL_COSTS_N_INSNS(ix86_cost->shift_const + 2); else TOPLEVEL_COSTS_N_INSNS(ix86_cost->shift_const * 2); } else { if (GET_CODE (XEXP (X, 1)) == AND) TOPLEVEL_COSTS_N_INSNS(ix86_cost->shift_var * 2); else TOPLEVEL_COSTS_N_INSNS(ix86_cost->shift_var * 6 + 2); } } else { if (GET_CODE (XEXP (X, 1)) == CONST_INT) TOPLEVEL_COSTS_N_INSNS (ix86_cost->shift_const); else TOPLEVEL_COSTS_N_INSNS (ix86_cost->shift_var); } break; case MULT: if (GET_CODE (XEXP (X, 1)) == CONST_INT) { unsigned HOST_WIDE_INT value = INTVAL (XEXP (X, 1)); int nbits = 0; while (value != 0) { nbits++; value >>= 1; } TOPLEVEL_COSTS_N_INSNS (ix86_cost->mult_init + nbits * ix86_cost->mult_bit); } else TOPLEVEL_COSTS_N_INSNS (ix86_cost->mult_init + 7 * ix86_cost->mult_bit); case DIV: case UDIV: case MOD: case UMOD: TOPLEVEL_COSTS_N_INSNS (ix86_cost->divide); case PLUS: if (!TARGET_DECOMPOSE_LEA && INTEGRAL_MODE_P (GET_MODE (X)) && GET_MODE_BITSIZE (GET_MODE (X)) <= GET_MODE_BITSIZE (Pmode)) { if (GET_CODE (XEXP (X, 0)) == PLUS && GET_CODE (XEXP (XEXP (X, 0), 0)) == MULT && GET_CODE (XEXP (XEXP (XEXP (X, 0), 0), 1)) == CONST_INT && CONSTANT_P (XEXP (X, 1))) { HOST_WIDE_INT val = INTVAL (XEXP (XEXP (XEXP (X, 0), 0), 1)); if (val == 2 || val == 4 || val == 8) { return (COSTS_N_INSNS (ix86_cost->lea) + rtx_cost (XEXP (XEXP (X, 0), 1), (OUTER_CODE)) + rtx_cost (XEXP (XEXP (XEXP (X, 0), 0), 0), (OUTER_CODE)) + rtx_cost (XEXP (X, 1), (OUTER_CODE))); } } else if (GET_CODE (XEXP (X, 0)) == MULT && GET_CODE (XEXP (XEXP (X, 0), 1)) == CONST_INT) { HOST_WIDE_INT val = INTVAL (XEXP (XEXP (X, 0), 1)); if (val == 2 || val == 4 || val == 8) { return (COSTS_N_INSNS (ix86_cost->lea) + rtx_cost (XEXP (XEXP (X, 0), 0), (OUTER_CODE)) + rtx_cost (XEXP (X, 1), (OUTER_CODE))); } } else if (GET_CODE (XEXP (X, 0)) == PLUS) { return (COSTS_N_INSNS (ix86_cost->lea) + rtx_cost (XEXP (XEXP (X, 0), 0), (OUTER_CODE)) + rtx_cost (XEXP (XEXP (X, 0), 1), (OUTER_CODE)) + rtx_cost (XEXP (X, 1), (OUTER_CODE))); } } case AND: case IOR: case XOR: case MINUS: if (!TARGET_64BIT && GET_MODE (X) == DImode) return (COSTS_N_INSNS (ix86_cost->add) * 2 + (rtx_cost (XEXP (X, 0), (OUTER_CODE)) << (GET_MODE (XEXP (X, 0)) != DImode)) + (rtx_cost (XEXP (X, 1), (OUTER_CODE)) << (GET_MODE (XEXP (X, 1)) != DImode))); case NEG: case NOT: if (!TARGET_64BIT && GET_MODE (X) == DImode) TOPLEVEL_COSTS_N_INSNS (ix86_cost->add * 2); TOPLEVEL_COSTS_N_INSNS (ix86_cost->add); egress_rtx_costs: break;
# 2628 "i386.h"
#define ADDRESS_COST(RTX) ix86_address_cost (RTX)
# 2640 "i386.h"
#define REGISTER_MOVE_COST(MODE,CLASS1,CLASS2) ix86_register_move_cost ((MODE), (CLASS1), (CLASS2))
# 2651 "i386.h"
#define MEMORY_MOVE_COST(MODE,CLASS,IN) ix86_memory_move_cost ((MODE), (CLASS), (IN))





#define BRANCH_COST ix86_branch_cost
# 2673 "i386.h"
#define SLOW_BYTE_ACCESS 0


#define SLOW_SHORT_ACCESS 0
# 2704 "i386.h"
#define NO_FUNCTION_CSE 





#define NO_RECURSIVE_FUNCTION_CSE 
# 2732 "i386.h"
#define EXTRA_CC_MODES CC (CCGCmode, "CCGC") CC (CCGOCmode, "CCGOC") CC (CCNOmode, "CCNO") CC (CCZmode, "CCZ") CC (CCFPmode, "CCFP") CC (CCFPUmode, "CCFPU")
# 2749 "i386.h"
#define SELECT_CC_MODE(OP,X,Y) ix86_cc_mode ((OP), (X), (Y))




#define REVERSIBLE_CC_MODE(MODE) 1



#define REVERSE_CONDITION(CODE,MODE) ((MODE) != CCFPmode && (MODE) != CCFPUmode ? reverse_condition (CODE) : reverse_condition_maybe_unordered (CODE))
# 2775 "i386.h"
#undef HI_REGISTER_NAMES
#define HI_REGISTER_NAMES {"ax","dx","cx","bx","si","di","bp","sp", "st","st(1)","st(2)","st(3)","st(4)","st(5)","st(6)","st(7)","", "flags","fpsr", "dirflag", "frame", "xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7", "mm0", "mm1", "mm2", "mm3", "mm4", "mm5", "mm6", "mm7" , "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15"}
# 2785 "i386.h"
#define REGISTER_NAMES HI_REGISTER_NAMES



#define ADDITIONAL_REGISTER_NAMES { { "eax", 0 }, { "edx", 1 }, { "ecx", 2 }, { "ebx", 3 }, { "esi", 4 }, { "edi", 5 }, { "ebp", 6 }, { "esp", 7 }, { "rax", 0 }, { "rdx", 1 }, { "rcx", 2 }, { "rbx", 3 }, { "rsi", 4 }, { "rdi", 5 }, { "rbp", 6 }, { "rsp", 7 }, { "al", 0 }, { "dl", 1 }, { "cl", 2 }, { "bl", 3 }, { "ah", 0 }, { "dh", 1 }, { "ch", 2 }, { "bh", 3 }, { "mm0", 8}, { "mm1", 9}, { "mm2", 10}, { "mm3", 11}, { "mm4", 12}, { "mm5", 13}, { "mm6", 14}, { "mm7", 15} }
# 2804 "i386.h"
#define QI_REGISTER_NAMES {"al", "dl", "cl", "bl", "sil", "dil", "bpl", "spl",}





#define QI_HIGH_REGISTER_NAMES {"ah", "dh", "ch", "bh", }




#define DBX_REGISTER_NUMBER(N) (TARGET_64BIT ? dbx64_register_map[(N)] : dbx_register_map[(N)])


extern int const dbx_register_map[53];
extern int const dbx64_register_map[53];
extern int const svr4_dbx_register_map[53];


#define INCOMING_RETURN_ADDR_RTX gen_rtx_MEM (VOIDmode, gen_rtx_REG (VOIDmode, STACK_POINTER_REGNUM))



#define RETURN_ADDR_RTX(COUNT,FRAME) ((COUNT) == 0 ? gen_rtx_MEM (Pmode, plus_constant (arg_pointer_rtx, -UNITS_PER_WORD)) : gen_rtx_MEM (Pmode, plus_constant (FRAME, UNITS_PER_WORD)))





#define DWARF_FRAME_RETURN_COLUMN (TARGET_64BIT ? 16 : 8)


#define INCOMING_FRAME_SP_OFFSET UNITS_PER_WORD


#define EH_RETURN_DATA_REGNO(N) ((N) < 2 ? (N) : INVALID_REGNUM)
#define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, 2)
# 2851 "i386.h"
#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) (flag_pic ? ((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4 : DW_EH_PE_absptr)







#define ASM_OUTPUT_LABEL(FILE,NAME) (assemble_name ((FILE), (NAME)), fputs (":\n", (FILE)))






#define ASM_FORMAT_PRIVATE_NAME(OUTPUT,NAME,LABELNO) ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO)))






#define ASM_OUTPUT_REG_PUSH(FILE,REGNO) asm_fprintf ((FILE), "\tpush{l}\t%%e%s\n", reg_names[(REGNO)])





#define ASM_OUTPUT_REG_POP(FILE,REGNO) asm_fprintf ((FILE), "\tpop{l}\t%%e%s\n", reg_names[(REGNO)])




#define ASM_OUTPUT_ADDR_VEC_ELT(FILE,VALUE) ix86_output_addr_vec_elt ((FILE), (VALUE))




#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE,BODY,VALUE,REL) ix86_output_addr_diff_elt ((FILE), (VALUE), (REL))





#define JUMP_TABLES_IN_TEXT_SECTION (!TARGET_64BIT && flag_pic && !HAVE_AS_GOTOFF_IN_DATA)





#define ASM_OUTPUT_DWARF_ADDR_CONST(FILE,X) i386_dwarf_output_addr_const ((FILE), (X))




#define ASM_SIMPLIFY_DWARF_ADDR(X) i386_simplify_dwarf_addr (X)





#define CRT_CALL_STATIC_FUNCTION(SECTION_OP,FUNC) asm (SECTION_OP "\n\t" "call " USER_LABEL_PREFIX #FUNC "\n" TEXT_SECTION_ASM_OP);
# 2922 "i386.h"
#define PRINT_OPERAND_PUNCT_VALID_P(CODE) ((CODE) == '*' || (CODE) == '+')
# 2933 "i386.h"
#define PRINT_REG(X,CODE,FILE) print_reg ((X), (CODE), (FILE))


#define PRINT_OPERAND(FILE,X,CODE) print_operand ((FILE), (X), (CODE))


#define PRINT_OPERAND_ADDRESS(FILE,ADDR) print_operand_address ((FILE), (ADDR))







#define DEBUG_PRINT_REG(X,CODE,FILE) do { static const char * const hi_name[] = HI_REGISTER_NAMES; static const char * const qi_name[] = QI_REGISTER_NAMES; fprintf ((FILE), "%d ", REGNO (X)); if (REGNO (X) == FLAGS_REG) { fputs ("flags", (FILE)); break; } if (REGNO (X) == DIRFLAG_REG) { fputs ("dirflag", (FILE)); break; } if (REGNO (X) == FPSR_REG) { fputs ("fpsr", (FILE)); break; } if (REGNO (X) == ARG_POINTER_REGNUM) { fputs ("argp", (FILE)); break; } if (REGNO (X) == FRAME_POINTER_REGNUM) { fputs ("frame", (FILE)); break; } if (STACK_TOP_P (X)) { fputs ("st(0)", (FILE)); break; } if (FP_REG_P (X)) { fputs (hi_name[REGNO(X)], (FILE)); break; } if (REX_INT_REG_P (X)) { switch (GET_MODE_SIZE (GET_MODE (X))) { default: case 8: fprintf ((FILE), "r%i", REGNO (X) - FIRST_REX_INT_REG + 8); break; case 4: fprintf ((FILE), "r%id", REGNO (X) - FIRST_REX_INT_REG + 8); break; case 2: fprintf ((FILE), "r%iw", REGNO (X) - FIRST_REX_INT_REG + 8); break; case 1: fprintf ((FILE), "r%ib", REGNO (X) - FIRST_REX_INT_REG + 8); break; } break; } switch (GET_MODE_SIZE (GET_MODE (X))) { case 8: fputs ("r", (FILE)); fputs (hi_name[REGNO (X)], (FILE)); break; default: fputs ("e", (FILE)); case 2: fputs (hi_name[REGNO (X)], (FILE)); break; case 1: fputs (qi_name[REGNO (X)], (FILE)); break; } } while (0)
# 3009 "i386.h"
#define ASM_OPERAND_LETTER '#'
#define RET return ""
#define AT_SP(MODE) (gen_rtx_MEM ((MODE), stack_pointer_rtx))



#define PREDICATE_CODES {"x86_64_immediate_operand", {CONST_INT, SUBREG, REG, SYMBOL_REF, LABEL_REF, CONST}}, {"x86_64_nonmemory_operand", {CONST_INT, SUBREG, REG, SYMBOL_REF, LABEL_REF, CONST}}, {"x86_64_movabs_operand", {CONST_INT, SUBREG, REG, SYMBOL_REF, LABEL_REF, CONST}}, {"x86_64_szext_nonmemory_operand", {CONST_INT, SUBREG, REG, SYMBOL_REF, LABEL_REF, CONST}}, {"x86_64_general_operand", {CONST_INT, SUBREG, REG, MEM, SYMBOL_REF, LABEL_REF, CONST}}, {"x86_64_szext_general_operand", {CONST_INT, SUBREG, REG, MEM, SYMBOL_REF, LABEL_REF, CONST}}, {"x86_64_zext_immediate_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, LABEL_REF}}, {"shiftdi_operand", {SUBREG, REG, MEM}}, {"const_int_1_operand", {CONST_INT}}, {"const_int_1_31_operand", {CONST_INT}}, {"symbolic_operand", {SYMBOL_REF, LABEL_REF, CONST}}, {"aligned_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, LABEL_REF, SUBREG, REG, MEM}}, {"pic_symbolic_operand", {CONST}}, {"call_insn_operand", {REG, SUBREG, MEM, SYMBOL_REF}}, {"constant_call_address_operand", {SYMBOL_REF, CONST}}, {"const0_operand", {CONST_INT, CONST_DOUBLE}}, {"const1_operand", {CONST_INT}}, {"const248_operand", {CONST_INT}}, {"incdec_operand", {CONST_INT}}, {"mmx_reg_operand", {REG}}, {"reg_no_sp_operand", {SUBREG, REG}}, {"general_no_elim_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, LABEL_REF, SUBREG, REG, MEM}}, {"nonmemory_no_elim_operand", {CONST_INT, REG, SUBREG}}, {"q_regs_operand", {SUBREG, REG}}, {"non_q_regs_operand", {SUBREG, REG}}, {"fcmov_comparison_operator", {EQ, NE, LTU, GTU, LEU, GEU, UNORDERED, ORDERED, LT, UNLT, GT, UNGT, LE, UNLE, GE, UNGE, LTGT, UNEQ}}, {"sse_comparison_operator", {EQ, LT, LE, UNORDERED, NE, UNGE, UNGT, ORDERED, UNEQ, UNLT, UNLE, LTGT, GE, GT }}, {"ix86_comparison_operator", {EQ, NE, LE, LT, GE, GT, LEU, LTU, GEU, GTU, UNORDERED, ORDERED, UNLE, UNLT, UNGE, UNGT, LTGT, UNEQ }}, {"cmp_fp_expander_operand", {CONST_DOUBLE, SUBREG, REG, MEM}}, {"ext_register_operand", {SUBREG, REG}}, {"binary_fp_operator", {PLUS, MINUS, MULT, DIV}}, {"mult_operator", {MULT}}, {"div_operator", {DIV}}, {"arith_or_logical_operator", {PLUS, MULT, AND, IOR, XOR, SMIN, SMAX, UMIN, UMAX, COMPARE, MINUS, DIV, MOD, UDIV, UMOD, ASHIFT, ROTATE, ASHIFTRT, LSHIFTRT, ROTATERT}}, {"promotable_binary_operator", {PLUS, MULT, AND, IOR, XOR, ASHIFT}}, {"memory_displacement_operand", {MEM}}, {"cmpsi_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, LABEL_REF, SUBREG, REG, MEM, AND}}, {"long_memory_operand", {MEM}},
# 3077 "i386.h"
#define SPECIAL_MODE_PREDICATES "ext_register_operand",
# 3092 "i386.h"
enum cmodel {
  CM_32,
  CM_SMALL,
  CM_KERNEL,
  CM_MEDIUM,
  CM_LARGE,
  CM_SMALL_PIC
};


#define RED_ZONE_SIZE 128

#define RED_ZONE_RESERVE 8
extern const char *ix86_debug_arg_string, *ix86_debug_addr_string;

enum asm_dialect {
  ASM_ATT,
  ASM_INTEL
};
extern const char *ix86_asm_string;
extern enum asm_dialect ix86_asm_dialect;

extern const char *ix86_cmodel_string;
extern enum cmodel ix86_cmodel;


extern const char *ix86_cpu_string;
extern const char *ix86_arch_string;
extern const char *ix86_fpmath_string;
extern const char *ix86_regparm_string;
extern const char *ix86_align_loops_string;
extern const char *ix86_align_jumps_string;
extern const char *ix86_align_funcs_string;
extern const char *ix86_preferred_stack_boundary_string;
extern const char *ix86_branch_cost_string;
extern int ix86_regparm;
extern int ix86_preferred_stack_boundary;
extern int ix86_branch_cost;
extern enum reg_class const regclass_map[53];
extern rtx ix86_compare_op0;
extern rtx ix86_compare_op1;
# 3149 "i386.h"
enum fp_cw_mode {FP_CW_STORED, FP_CW_UNINITIALIZED, FP_CW_ANY};




#define OPTIMIZE_MODE_SWITCHING(ENTITY) 1
# 3164 "i386.h"
#define NUM_MODES_FOR_MODE_SWITCHING { FP_CW_ANY }







#define MODE_NEEDED(ENTITY,I) (GET_CODE (I) == CALL_INSN || (GET_CODE (I) == INSN && (asm_noperands (PATTERN (I)) >= 0 || GET_CODE (PATTERN (I)) == ASM_INPUT)) ? FP_CW_UNINITIALIZED : recog_memoized (I) < 0 || get_attr_type (I) != TYPE_FISTP ? FP_CW_ANY : FP_CW_STORED)
# 3184 "i386.h"
#define MODE_PRIORITY_TO_MODE(ENTITY,N) (N)





#define EMIT_MODE_SET(ENTITY,MODE,HARD_REGS_LIVE) ((MODE) == FP_CW_STORED ? emit_i387_cw_initialization (assign_386_stack_local (HImode, 1), assign_386_stack_local (HImode, 2)), 0 : 0)
# 3202 "i386.h"
#define HARD_REGNO_RENAME_OK(SRC,TARGET) ((SRC) < FIRST_STACK_REG || (SRC) > LAST_STACK_REG)
# 16 "config.h" 2
# 1 "att.h" 1
# 22 "att.h"
# 1 "unix.h" 1
# 25 "unix.h"
#define DEFAULT_ASSEMBLER_DIALECT 0





#define SHIFT_DOUBLE_OMITS_COUNT 1





#define ASM_COMMENT_START "/"




#define ASM_APP_ON "/APP\n"




#define ASM_APP_OFF "/NO_APP\n"



#define TEXT_SECTION_ASM_OP "\t.text"



#define DATA_SECTION_ASM_OP "\t.data"



#define BSS_SECTION_ASM_OP "\t.bss"




#define ASM_GLOBALIZE_LABEL(FILE,NAME) (fputs (".globl ", FILE), assemble_name (FILE, NAME), fputs ("\n", FILE))





#define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS)



#define VALUE_REGNO(MODE) (GET_MODE_CLASS (MODE) == MODE_FLOAT && TARGET_FLOAT_RETURNS_IN_80387 ? FIRST_FLOAT_REG : (MODE) == TImode || VECTOR_MODE_P (MODE) ? FIRST_SSE_REG : 0)







#define ASM_OUTPUT_MI_THUNK(FILE,THUNK_FNDECL,DELTA,FUNCTION) x86_output_mi_thunk (FILE, DELTA, FUNCTION);
# 23 "att.h" 2

#define TARGET_VERSION fprintf (stderr, " (80386, ATT syntax)");




#define LPREFIX ".L"



#define ASM_SHORT "\t.value\t"
#define ASM_LONG "\t.long\t"
#define ASM_QUAD "\t.quad\t"



#define ASM_OUTPUT_ASCII(FILE,PTR,SIZE) do { size_t i = 0, limit = (SIZE); while (i < limit) { if (i%10 == 0) { if (i!=0) fprintf ((FILE), "\n"); fputs ("\t.byte\t", (FILE)); } else fprintf ((FILE), ","); fprintf ((FILE), "0x%x", ((PTR)[i++] & 0377)) ;} fprintf ((FILE), "\n"); } while (0)
# 52 "att.h"
#undef ASM_FILE_START
#define ASM_FILE_START(FILE) do { output_file_directive (FILE, main_input_filename); if (ix86_asm_dialect == ASM_INTEL) fputs ("\t.intel_syntax\n", FILE); } while (0)







#undef ASM_FILE_START_1
#define ASM_FILE_START_1(FILE) fprintf (FILE, "\t.optim\n")





#define ASM_OUTPUT_ALIGN(FILE,LOG) if ((LOG)!=0) fprintf ((FILE), "\t.align %d\n", 1<<(LOG))





#define ASM_OUTPUT_SKIP(FILE,SIZE) fprintf ((FILE), "\t.set .,.+%u\n", (SIZE))




#define ASM_NO_SKIP_IN_TEXT 1




#undef LOCAL_LABEL_PREFIX
#define LOCAL_LABEL_PREFIX "."






#undef ASM_GENERATE_INTERNAL_LABEL
#define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) sprintf ((BUF), "%s%s%ld", LOCAL_LABEL_PREFIX, (PREFIX), (long)(NUMBER))





#undef ASM_OUTPUT_INTERNAL_LABEL
#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) fprintf (FILE, "%s%s%d:\n", LOCAL_LABEL_PREFIX, PREFIX, NUM)




#undef USER_LABEL_PREFIX
#define USER_LABEL_PREFIX ""
# 17 "config.h" 2
# 1 "dbxelf.h" 1
# 26 "dbxelf.h"
#define GCC_DBX_ELF_H 



#undef DBX_DEBUGGING_INFO
#define DBX_DEBUGGING_INFO 






#undef DBX_BLOCKS_FUNCTION_RELATIVE
#define DBX_BLOCKS_FUNCTION_RELATIVE 1



#undef DBX_FUNCTION_FIRST
#define DBX_FUNCTION_FIRST 



#undef DBX_USE_BINCL
#define DBX_USE_BINCL 




#define DBX_CONTIN_LENGTH 0





#undef ASM_OUTPUT_SOURCE_LINE
#define ASM_OUTPUT_SOURCE_LINE(FILE,LINE) do { static int sym_lineno = 1; char temp[256]; ASM_GENERATE_INTERNAL_LABEL (temp, "LM", sym_lineno); fprintf (FILE, "\t.stabn 68,0,%d,", LINE); assemble_name (FILE, temp); putc ('-', FILE); assemble_name (FILE, XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0)); putc ('\n', FILE); ASM_OUTPUT_INTERNAL_LABEL (FILE, "LM", sym_lineno); sym_lineno += 1; } while (0)
# 82 "dbxelf.h"
#undef DBX_OUTPUT_MAIN_SOURCE_FILE_END
#define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE,FILENAME) asm_fprintf (FILE, "\t.text\n\t.stabs \"\",%d,0,0,%LLetext\n%LLetext:\n", N_SO)
# 18 "config.h" 2
# 1 "elfos.h" 1
# 27 "elfos.h"
#define USING_ELFOS_H 






#undef USER_LABEL_PREFIX
#define USER_LABEL_PREFIX ""






#define MAX_OFILE_ALIGNMENT (32768 * 8)




#define NO_DOLLAR_IN_LABEL 



#define PCC_BITFIELD_TYPE_MATTERS 1



#define TARGET_MEM_FUNCTIONS 



#define HANDLE_SYSV_PRAGMA 




#define DWARF_DEBUGGING_INFO 1





#define DWARF2_DEBUGGING_INFO 1







#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG



#define OBJECT_FORMAT_ELF 




#define ASM_OUTPUT_IDENT(FILE,NAME) fprintf (FILE, "%s\"%s\"\n", IDENT_ASM_OP, NAME);


#define IDENT_ASM_OP "\t.ident\t"

#undef SET_ASM_OP
#define SET_ASM_OP "\t.set\t"
# 102 "elfos.h"
#undef ASM_FILE_START
#define ASM_FILE_START(FILE) output_file_directive ((FILE), main_input_filename)





#define SKIP_ASM_OP "\t.zero\t"

#undef ASM_OUTPUT_SKIP
#define ASM_OUTPUT_SKIP(FILE,SIZE) fprintf (FILE, "%s%u\n", SKIP_ASM_OP, (SIZE))
# 121 "elfos.h"
#undef ASM_OUTPUT_INTERNAL_LABEL
#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) do { fprintf (FILE, ".%s%u:\n", PREFIX, (unsigned) (NUM)); } while (0)
# 137 "elfos.h"
#undef ASM_GENERATE_INTERNAL_LABEL
#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) do { sprintf (LABEL, "*.%s%u", PREFIX, (unsigned) (NUM)); } while (0)
# 153 "elfos.h"
#undef ALIGN_ASM_OP
#define ALIGN_ASM_OP "\t.align\t"


#define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE,PREFIX,NUM,TABLE) ASM_OUTPUT_ALIGN ((FILE), 2);



#undef ASM_OUTPUT_CASE_LABEL
#define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,JUMPTABLE) do { ASM_OUTPUT_BEFORE_CASE_LABEL (FILE, PREFIX, NUM, JUMPTABLE) ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM); } while (0)
# 174 "elfos.h"
#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE,FUN) ASM_GLOBALIZE_LABEL (FILE, XSTR (FUN, 0))







#define COMMON_ASM_OP "\t.comm\t"

#undef ASM_OUTPUT_ALIGNED_COMMON
#define ASM_OUTPUT_ALIGNED_COMMON(FILE,NAME,SIZE,ALIGN) do { fprintf ((FILE), "%s", COMMON_ASM_OP); assemble_name ((FILE), (NAME)); fprintf ((FILE), ",%u,%u\n", (SIZE), (ALIGN) / BITS_PER_UNIT); } while (0)
# 199 "elfos.h"
#define LOCAL_ASM_OP "\t.local\t"

#undef ASM_OUTPUT_ALIGNED_LOCAL
#define ASM_OUTPUT_ALIGNED_LOCAL(FILE,NAME,SIZE,ALIGN) do { fprintf ((FILE), "%s", LOCAL_ASM_OP); assemble_name ((FILE), (NAME)); fprintf ((FILE), "\n"); ASM_OUTPUT_ALIGNED_COMMON (FILE, NAME, SIZE, ALIGN); } while (0)
# 216 "elfos.h"
#undef ASCII_DATA_ASM_OP
#define ASCII_DATA_ASM_OP "\t.ascii\t"
# 227 "elfos.h"
#define USE_CONST_SECTION 1

#define CONST_SECTION_ASM_OP "\t.section\t.rodata"







#define INIT_SECTION_ASM_OP "\t.section\t.init"
#define FINI_SECTION_ASM_OP "\t.section\t.fini"



#define ASM_SECTION_START_OP "\t.subsection\t-1"


#define ASM_OUTPUT_SECTION_START(FILE) fprintf ((FILE), "%s\n", ASM_SECTION_START_OP)
# 255 "elfos.h"
#undef EXTRA_SECTIONS
#define EXTRA_SECTIONS in_const





#undef EXTRA_SECTION_FUNCTIONS
#define EXTRA_SECTION_FUNCTIONS CONST_SECTION_FUNCTION


#define READONLY_DATA_SECTION() const_section ()

#define CONST_SECTION_FUNCTION void const_section () { if (!USE_CONST_SECTION) text_section (); else if (in_section != in_const) { fprintf (asm_out_file, "%s\n", CONST_SECTION_ASM_OP); in_section = in_const; } }
# 281 "elfos.h"
#define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)

#define UNIQUE_SECTION(DECL,RELOC) do { int len; int sec; const char *name; char *string; const char *prefix; static const char *const prefixes[4][2] = { { ".text.", ".gnu.linkonce.t." }, { ".rodata.", ".gnu.linkonce.r." }, { ".data.", ".gnu.linkonce.d." }, { ".bss.", ".gnu.linkonce.b." } }; if (TREE_CODE (DECL) == FUNCTION_DECL) sec = 0; else if (DECL_INITIAL (DECL) == 0 || DECL_INITIAL (DECL) == error_mark_node) sec = 3; else if (DECL_READONLY_SECTION (DECL, RELOC)) sec = 1; else sec = 2; name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL)); STRIP_NAME_ENCODING (name, name); prefix = prefixes[sec][DECL_ONE_ONLY(DECL)]; len = strlen (name) + strlen (prefix); string = alloca (len + 1); sprintf (string, "%s%s", prefix, name); DECL_SECTION_NAME (DECL) = build_string (len, string); } while (0)
# 323 "elfos.h"
#define TARGET_ASM_NAMED_SECTION default_elf_asm_named_section
# 333 "elfos.h"
#undef SELECT_RTX_SECTION
#define SELECT_RTX_SECTION(MODE,RTX,ALIGN) mergeable_constant_section ((MODE), (ALIGN), 0)
# 358 "elfos.h"
#undef SELECT_SECTION
#define SELECT_SECTION(DECL,RELOC,ALIGN) { if (TREE_CODE (DECL) == STRING_CST) { if (! flag_writable_strings) mergeable_string_section ((DECL), (ALIGN), 0); else data_section (); } else if (TREE_CODE (DECL) == VAR_DECL) { if (!TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) || !DECL_INITIAL (DECL) || (DECL_INITIAL (DECL) != error_mark_node && !TREE_CONSTANT (DECL_INITIAL (DECL)))) { if (flag_pic && ((RELOC) & 2)) named_section (NULL_TREE, ".data.rel", RELOC); else if (flag_pic && (RELOC)) named_section (NULL_TREE, ".data.rel.local", RELOC); else data_section (); } else if (flag_pic && ((RELOC) & 2)) named_section (NULL_TREE, ".data.rel.ro", RELOC); else if (flag_pic && (RELOC)) named_section (NULL_TREE, ".data.rel.ro.local", RELOC); else if (flag_merge_constants < 2) const_section (); else if (TREE_CODE (DECL_INITIAL (DECL)) == STRING_CST) mergeable_string_section (DECL_INITIAL (DECL), (ALIGN), 0); else mergeable_constant_section (DECL_MODE (DECL), (ALIGN), 0); } else if (TREE_CODE (DECL) == CONSTRUCTOR) { if ((flag_pic && RELOC) || TREE_SIDE_EFFECTS (DECL) || ! TREE_CONSTANT (DECL)) data_section (); else const_section (); } else const_section (); }
# 417 "elfos.h"
#define TYPE_ASM_OP "\t.type\t"
#define SIZE_ASM_OP "\t.size\t"



#define ASM_WEAKEN_LABEL(FILE,NAME) do { fputs ("\t.weak\t", (FILE)); assemble_name ((FILE), (NAME)); fputc ('\n', (FILE)); } while (0)
# 437 "elfos.h"
#define TYPE_OPERAND_FMT "@%s"






#define ASM_DECLARE_RESULT(FILE,RESULT) 
# 457 "elfos.h"
#define ASM_DECLARE_FUNCTION_NAME(FILE,NAME,DECL) do { fprintf (FILE, "%s", TYPE_ASM_OP); assemble_name (FILE, NAME); putc (',', FILE); fprintf (FILE, TYPE_OPERAND_FMT, "function"); putc ('\n', FILE); ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); ASM_OUTPUT_LABEL(FILE, NAME); } while (0)
# 474 "elfos.h"
#define ASM_DECLARE_OBJECT_NAME(FILE,NAME,DECL) do { fprintf (FILE, "%s", TYPE_ASM_OP); assemble_name (FILE, NAME); putc (',', FILE); fprintf (FILE, TYPE_OPERAND_FMT, "object"); putc ('\n', FILE); size_directive_output = 0; if (!flag_inhibit_size_directive && (DECL) && DECL_SIZE (DECL)) { size_directive_output = 1; fprintf (FILE, "%s", SIZE_ASM_OP); assemble_name (FILE, NAME); putc (',', FILE); fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, int_size_in_bytes (TREE_TYPE (DECL))); fputc ('\n', FILE); } ASM_OUTPUT_LABEL (FILE, NAME); } while (0)
# 507 "elfos.h"
#define ASM_FINISH_DECLARE_OBJECT(FILE,DECL,TOP_LEVEL,AT_END) do { const char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); if (!flag_inhibit_size_directive && DECL_SIZE (DECL) && ! AT_END && TOP_LEVEL && DECL_INITIAL (DECL) == error_mark_node && !size_directive_output) { size_directive_output = 1; fprintf (FILE, "%s", SIZE_ASM_OP); assemble_name (FILE, name); putc (',', FILE); fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, int_size_in_bytes (TREE_TYPE (DECL))); fputc ('\n', FILE); } } while (0)
# 531 "elfos.h"
#define ASM_DECLARE_FUNCTION_SIZE(FILE,FNAME,DECL) 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)); putc ('\n', FILE); } } while (0)
# 570 "elfos.h"
#define ESCAPES "\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1"
# 592 "elfos.h"
#define STRING_LIMIT ((unsigned) 256)

#define STRING_ASM_OP "\t.string\t"
# 603 "elfos.h"
#define ASM_OUTPUT_LIMITED_STRING(FILE,STR) do { register const unsigned char *_limited_str = (const unsigned char *) (STR); register unsigned ch; fprintf ((FILE), "%s\"", STRING_ASM_OP); for (; (ch = *_limited_str); _limited_str++) { register int escape; switch (escape = ESCAPES[ch]) { case 0: putc (ch, (FILE)); break; case 1: fprintf ((FILE), "\\%03o", ch); break; default: putc ('\\', (FILE)); putc (escape, (FILE)); break; } } fprintf ((FILE), "\"\n"); } while (0)
# 642 "elfos.h"
#undef ASM_OUTPUT_ASCII
#define ASM_OUTPUT_ASCII(FILE,STR,LENGTH) do { register const unsigned char *_ascii_bytes = (const unsigned char *) (STR); register const unsigned char *limit = _ascii_bytes + (LENGTH); register unsigned bytes_in_chunk = 0; for (; _ascii_bytes < limit; _ascii_bytes++) { register const unsigned char *p; if (bytes_in_chunk >= 60) { fprintf ((FILE), "\"\n"); bytes_in_chunk = 0; } for (p = _ascii_bytes; p < limit && *p != '\0'; p++) continue; if (p < limit && (p - _ascii_bytes) <= (long)STRING_LIMIT) { if (bytes_in_chunk > 0) { fprintf ((FILE), "\"\n"); bytes_in_chunk = 0; } ASM_OUTPUT_LIMITED_STRING ((FILE), _ascii_bytes); _ascii_bytes = p; } else { register int escape; register unsigned ch; if (bytes_in_chunk == 0) fprintf ((FILE), "%s\"", ASCII_DATA_ASM_OP); switch (escape = ESCAPES[ch = *_ascii_bytes]) { case 0: putc (ch, (FILE)); bytes_in_chunk++; break; case 1: fprintf ((FILE), "\\%03o", ch); bytes_in_chunk += 4; break; default: putc ('\\', (FILE)); putc (escape, (FILE)); bytes_in_chunk += 2; break; } } } if (bytes_in_chunk > 0) fprintf ((FILE), "\"\n"); } while (0)
# 19 "config.h" 2
# 1 "svr4.h" 1
# 39 "svr4.h"
#define USING_SVR4_H 
# 48 "svr4.h"
#define SWITCH_TAKES_ARG(CHAR) (DEFAULT_SWITCH_TAKES_ARG (CHAR) || (CHAR) == 'h' || (CHAR) == 'x' || (CHAR) == 'z')
# 57 "svr4.h"
#define WORD_SWITCH_TAKES_ARG(STR) (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) && strcmp (STR, "Tdata") && strcmp (STR, "Ttext") && strcmp (STR, "Tbss"))
# 66 "svr4.h"
#undef CPP_PREDEFINES
# 84 "svr4.h"
#undef ASM_SPEC
#define ASM_SPEC "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}"
# 96 "svr4.h"
#undef ASM_FINAL_SPEC
#define ASM_FINAL_SPEC "%|"





#undef MD_EXEC_PREFIX
#define MD_EXEC_PREFIX "/usr/ccs/bin/"






#undef MD_STARTFILE_PREFIX
#define MD_STARTFILE_PREFIX "/usr/ccs/lib/"





#undef LIB_SPEC
#define LIB_SPEC "%{!shared:%{!symbolic:-lc}}"







#undef ENDFILE_SPEC
#define ENDFILE_SPEC "crtend.o%s %{pg:gcrtn.o%s}%{!pg:crtn.o%s}"
# 153 "svr4.h"
#undef LINK_SPEC
# 164 "svr4.h"
#define LINK_SPEC "%{h*} %{v:-V} 		   %{b} 		   %{static:-dn -Bstatic} 		   %{shared:-G -dy -z text} 		   %{symbolic:-Bsymbolic -G -dy -z text} 		   %{G:-G} 		   %{YP,*} 		   %{!YP,*:%{p:-Y P,/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} 		    %{!p:-Y P,/usr/ccs/lib:/usr/lib}} 		   %{Qy:} %{!Qn:-Qy}"
# 187 "svr4.h"
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "%{!shared: 			 %{!symbolic: 			  %{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}}}}			%{pg:gcrti.o%s}%{!pg:crti.o%s} 			%{ansi:values-Xc.o%s} 			%{!ansi: 			 %{traditional:values-Xt.o%s} 			 %{!traditional:values-Xa.o%s}}  			crtbegin.o%s"
# 200 "svr4.h"
#define SCCS_DIRECTIVE 
# 211 "svr4.h"
#undef DBX_REGISTER_NUMBER




#undef SIZE_TYPE
#define SIZE_TYPE "unsigned int"

#undef PTRDIFF_TYPE
#define PTRDIFF_TYPE "int"

#undef WCHAR_TYPE
#define WCHAR_TYPE "long int"

#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE_SIZE BITS_PER_WORD





#define TARGET_HAS_F_SETLKW 
# 20 "config.h" 2
# 1 "linux.h" 1
# 24 "linux.h"
#define LINUX_DEFAULT_ELF 



#undef ASM_FILE_START
#define ASM_FILE_START(FILE) do { output_file_directive (FILE, main_input_filename); if (ix86_asm_dialect == ASM_INTEL) fputs ("\t.intel_syntax\n", FILE); } while (0)






#undef TARGET_VERSION
#define TARGET_VERSION fprintf (stderr, " (i386 Linux/ELF)");



#undef DEFAULT_PCC_STRUCT_RETURN
#define DEFAULT_PCC_STRUCT_RETURN 1

#undef ASM_COMMENT_START
#define ASM_COMMENT_START "#"

#undef DBX_REGISTER_NUMBER
#define DBX_REGISTER_NUMBER(n) (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n])






#define NO_PROFILE_COUNTERS 

#undef FUNCTION_PROFILER
#define FUNCTION_PROFILER(FILE,LABELNO) { if (flag_pic) fprintf (FILE, "\tcall\t*mcount@GOT(%%ebx)\n"); else fprintf (FILE, "\tcall\tmcount\n"); }
# 72 "linux.h"
#undef TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER
#define TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER false

#undef SIZE_TYPE
#define SIZE_TYPE "unsigned int"

#undef PTRDIFF_TYPE
#define PTRDIFF_TYPE "int"

#undef WCHAR_TYPE
#define WCHAR_TYPE "long int"

#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE_SIZE BITS_PER_WORD

#undef CPP_PREDEFINES
#define CPP_PREDEFINES "-D__ELF__ -Dunix -D__gnu_linux__ -Dlinux -Asystem=posix"

#undef CPP_SPEC



#define CPP_SPEC "%(cpp_cpu) %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"


#undef CC1_SPEC
#define CC1_SPEC "%(cc1_cpu) %{profile:-p}"
# 116 "linux.h"
#undef LINK_SPEC
# 136 "linux.h"
#define LINK_SPEC "-m elf_i386 %{shared:-shared}   %{!shared:     %{!ibcs:       %{!static: 	%{rdynamic:-export-dynamic} 	%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} 	%{static:-static}}}"
# 150 "linux.h"
#define ASM_OUTPUT_ALIGNED_BSS(FILE,DECL,NAME,SIZE,ALIGN) asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
# 160 "linux.h"
#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) do { if ((LOG) != 0) { if ((MAX_SKIP) == 0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); } } while (0)
# 189 "linux.h"
#define ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX(FILE,ENCODING,SIZE,ADDR,DONE) do { if ((SIZE) == 4 && ((ENCODING) & 0x70) == DW_EH_PE_datarel) { fputs (ASM_LONG, FILE); assemble_name (FILE, XSTR (ADDR, 0)); fputs (((ENCODING) & DW_EH_PE_indirect ? "@GOT" : "@GOTOFF"), FILE); goto DONE; } } while (0)
# 209 "linux.h"
#define CRT_GET_RFIB_DATA(BASE) __asm__ ("call\t.LPR%=\n" ".LPR%=:\n\t" "popl\t%0\n\t" "addl\t$_GLOBAL_OFFSET_TABLE_+[.-.LPR%=],%0" : "=d"(BASE))
# 228 "linux.h"
#define MD_FALLBACK_FRAME_STATE_FOR(CONTEXT,FS,SUCCESS) do { unsigned char *pc_ = (CONTEXT)->ra; struct sigcontext *sc_; long new_cfa_; if (*(unsigned short *)(pc_+0) == 0xb858 && *(unsigned int *)(pc_+2) == 119 && *(unsigned short *)(pc_+6) == 0x80cd) sc_ = (CONTEXT)->cfa + 4; else if (*(unsigned char *)(pc_+0) == 0xb8 && *(unsigned int *)(pc_+1) == 173 && *(unsigned short *)(pc_+5) == 0x80cd) { struct rt_sigframe { int sig; struct siginfo *pinfo; void *puc; struct siginfo info; struct ucontext uc; } *rt_ = (CONTEXT)->cfa; sc_ = (struct sigcontext *) &rt_->uc.uc_mcontext; } else break; new_cfa_ = sc_->esp; (FS)->cfa_how = CFA_REG_OFFSET; (FS)->cfa_reg = 4; (FS)->cfa_offset = new_cfa_ - (long) (CONTEXT)->cfa; (FS)->regs.reg[0].how = REG_SAVED_OFFSET; (FS)->regs.reg[0].loc.offset = (long)&sc_->eax - new_cfa_; (FS)->regs.reg[3].how = REG_SAVED_OFFSET; (FS)->regs.reg[3].loc.offset = (long)&sc_->ebx - new_cfa_; (FS)->regs.reg[1].how = REG_SAVED_OFFSET; (FS)->regs.reg[1].loc.offset = (long)&sc_->ecx - new_cfa_; (FS)->regs.reg[2].how = REG_SAVED_OFFSET; (FS)->regs.reg[2].loc.offset = (long)&sc_->edx - new_cfa_; (FS)->regs.reg[6].how = REG_SAVED_OFFSET; (FS)->regs.reg[6].loc.offset = (long)&sc_->esi - new_cfa_; (FS)->regs.reg[7].how = REG_SAVED_OFFSET; (FS)->regs.reg[7].loc.offset = (long)&sc_->edi - new_cfa_; (FS)->regs.reg[5].how = REG_SAVED_OFFSET; (FS)->regs.reg[5].loc.offset = (long)&sc_->ebp - new_cfa_; (FS)->regs.reg[8].how = REG_SAVED_OFFSET; (FS)->regs.reg[8].loc.offset = (long)&sc_->eip - new_cfa_; (FS)->retaddr_column = 8; goto SUCCESS; } while (0)
# 21 "config.h" 2
# 1 "x86-64.h" 1
# 22 "x86-64.h"
#undef ASM_COMMENT_START
#define ASM_COMMENT_START "#"

#undef DBX_REGISTER_NUMBER
#define DBX_REGISTER_NUMBER(n) (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n])



#define NO_PROFILE_COUNTERS 

#undef FUNCTION_PROFILER
#define FUNCTION_PROFILER(FILE,LABELNO) { if (TARGET_64BIT && flag_pic) fprintf (FILE, "\tcall\t*mcount@PLT\n"); else if (flag_pic) fprintf (FILE, "\tcall\t*mcount@GOT(%%ebx)\n"); else fprintf (FILE, "\tcall\tmcount\n"); }
# 43 "x86-64.h"
#undef SIZE_TYPE
#define SIZE_TYPE (TARGET_64BIT ? "long unsigned int" : "unsigned int")

#undef PTRDIFF_TYPE
#define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int")

#undef WCHAR_TYPE
#define WCHAR_TYPE "int"

#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE_SIZE 32

#undef CC1_SPEC
#define CC1_SPEC "%(cc1_cpu) %{profile:-p}"

#undef ASM_SPEC
#define ASM_SPEC "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*}  %{Wa,*:%*} %{m32:--32}"







#define ASM_OUTPUT_ALIGNED_BSS(FILE,DECL,NAME,SIZE,ALIGN) asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
# 76 "x86-64.h"
#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) do { if ((LOG) != 0) { if ((MAX_SKIP) == 0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); } } while (0)
# 88 "x86-64.h"
#undef DWARF2_DEBUGGING_INFO
#undef DWARF_DEBUGGING_INFO
#define DWARF2_DEBUGGING_INFO 
#define DWARF2_UNWIND_INFO 1

#undef HAVE_AS_DWARF2_DEBUG_LINE
#define HAVE_AS_DWARF2_DEBUG_LINE 

#undef PREFERRED_DEBUGGING_TYPE
#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
# 22 "config.h" 2
# 1 "linux64.h" 1
# 22 "linux64.h"
#define LINUX_DEFAULT_ELF 

#undef TARGET_VERSION
#define TARGET_VERSION fprintf (stderr, " (x86-64 Linux/ELF)");

#undef CPP_PREDEFINES
#define CPP_PREDEFINES "-D__ELF__ -Dunix -D__gnu_linux__ -Dlinux -Asystem(posix)"

#undef CPP_SPEC
#define CPP_SPEC "%(cpp_cpu) %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT} %{!m32:-D__LONG_MAX__=9223372036854775807L}"
# 41 "linux64.h"
#undef LINK_SPEC
#define LINK_SPEC "%{!m32:-m elf_x86_64 -Y P,/usr/lib64} %{m32:-m elf_i386}   %{shared:-shared}   %{!shared:     %{!static:       %{rdynamic:-export-dynamic}       %{m32:%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}}       %{!m32:%{!dynamic-linker:-dynamic-linker /lib64/ld-linux-x86-64.so.2}}}     %{static:-static}}"
# 51 "linux64.h"
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "%{m32:%{!shared:        %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s}        %{!p:%{profile:gcrt1.o%s} %{!profile:crt1.o%s}}}}      crti.o%s %{static:crtbeginT.o%s}     %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}}    %{!m32:%{!shared:        %{pg:/usr/lib64/gcrt1.o%s} %{!pg:%{p:/usr/lib64/gcrt1.o%s}        %{!p:%{profile:/usr/lib64/gcrt1.o%s} %{!profile:/usr/lib64/crt1.o%s}}}}     /usr/lib64/crti.o%s %{static:crtbeginT.o%s}      %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}}"
# 64 "linux64.h"
#undef ENDFILE_SPEC
#define ENDFILE_SPEC "  %{m32:%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s}   %{!m32:%{!shared:crtend.o%s} %{shared:crtendS.o%s} /usr/lib64/crtn.o%s}"



#define MULTILIB_DEFAULTS { "m64" }
# 140 "linux64.h"
#undef MD_FALLBACK_FRAME_STATE_FOR
#define MD_FALLBACK_FRAME_STATE_FOR(CONTEXT,FS,SUCCESS) do { unsigned char *pc_ = (CONTEXT)->ra; struct sigcontext *sc_; long new_cfa_; if (*(unsigned short *)(pc_+0) == 0xb858 && *(unsigned int *)(pc_+2) == 119 && *(unsigned short *)(pc_+6) == 0x80cd) sc_ = (CONTEXT)->cfa + 4; else if (*(unsigned char *)(pc_+0) == 0xb8 && *(unsigned int *)(pc_+1) == 173 && *(unsigned short *)(pc_+5) == 0x80cd) { struct rt_sigframe { int sig; struct siginfo *pinfo; void *puc; struct siginfo info; struct ucontext uc; } *rt_ = (CONTEXT)->cfa; sc_ = (struct sigcontext *) &rt_->uc.uc_mcontext; } else break; new_cfa_ = sc_->esp; (FS)->cfa_how = CFA_REG_OFFSET; (FS)->cfa_reg = 4; (FS)->cfa_offset = new_cfa_ - (long) (CONTEXT)->cfa; (FS)->regs.reg[0].how = REG_SAVED_OFFSET; (FS)->regs.reg[0].loc.offset = (long)&sc_->eax - new_cfa_; (FS)->regs.reg[3].how = REG_SAVED_OFFSET; (FS)->regs.reg[3].loc.offset = (long)&sc_->ebx - new_cfa_; (FS)->regs.reg[1].how = REG_SAVED_OFFSET; (FS)->regs.reg[1].loc.offset = (long)&sc_->ecx - new_cfa_; (FS)->regs.reg[2].how = REG_SAVED_OFFSET; (FS)->regs.reg[2].loc.offset = (long)&sc_->edx - new_cfa_; (FS)->regs.reg[6].how = REG_SAVED_OFFSET; (FS)->regs.reg[6].loc.offset = (long)&sc_->esi - new_cfa_; (FS)->regs.reg[7].how = REG_SAVED_OFFSET; (FS)->regs.reg[7].loc.offset = (long)&sc_->edi - new_cfa_; (FS)->regs.reg[5].how = REG_SAVED_OFFSET; (FS)->regs.reg[5].loc.offset = (long)&sc_->ebp - new_cfa_; (FS)->regs.reg[8].how = REG_SAVED_OFFSET; (FS)->regs.reg[8].loc.offset = (long)&sc_->eip - new_cfa_; (FS)->retaddr_column = 8; goto SUCCESS; } while (0)
# 23 "config.h" 2
# 1 "defaults.h" 1
# 24 "defaults.h"
#define GCC_DEFAULTS_H 



#define TARGET_BELL 007
#define TARGET_BS 010
#define TARGET_TAB 011
#define TARGET_NEWLINE 012
#define TARGET_VT 013
#define TARGET_FF 014
#define TARGET_CR 015
#define TARGET_ESC 033
# 57 "defaults.h"
#define ASM_STABD_OP "\t.stabd\t"
# 73 "defaults.h"
#define ASM_OUTPUT_ALTERNATE_LABEL_NAME(FILE,INSN) do { ASM_OUTPUT_LABEL(FILE,LABEL_ALTERNATE_NAME (INSN)); } while (0)
# 120 "defaults.h"
#define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) do { fprintf ((FILE), "%s", SET_ASM_OP); assemble_name (FILE, LABEL1); fprintf (FILE, ","); assemble_name (FILE, LABEL2); fprintf (FILE, "\n"); } while (0)
# 133 "defaults.h"
#define ASM_OUTPUT_LABELREF(FILE,NAME) asm_fprintf ((FILE), "%U%s", (NAME))







#define ASM_OUTPUT_DEBUG_LABEL(FILE,PREFIX,NUM) ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM)






#define ASM_OUTPUT_WEAK_ALIAS(STREAM,NAME,VALUE) do { ASM_WEAKEN_LABEL (STREAM, NAME); if (VALUE) ASM_OUTPUT_DEF (STREAM, NAME, VALUE); } while (0)
# 162 "defaults.h"
#define SUPPORTS_WEAK 1
# 171 "defaults.h"
#define SUPPORTS_ONE_ONLY 1
# 187 "defaults.h"
#define TARGET_ATTRIBUTE_WEAK __attribute__ ((weak))
# 196 "defaults.h"
#define SUPPORTS_INIT_PRIORITY 1






#define LINK_ELIMINATE_DUPLICATE_LDIRECTORIES 0
# 216 "defaults.h"
#define EH_FRAME_SECTION_NAME ".eh_frame"
# 225 "defaults.h"
#define JCR_SECTION_NAME ".jcr"
# 258 "defaults.h"
#define DWARF2_GENERATE_TEXT_SECTION_LABEL 1
# 285 "defaults.h"
#define CHAR_TYPE_SIZE BITS_PER_UNIT




#define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
# 314 "defaults.h"
#define WCHAR_UNSIGNED 0
# 342 "defaults.h"
#define GCOV_TYPE_SIZE LONG_LONG_TYPE_SIZE







#define CPLUSPLUS_CPP_SPEC CPP_SPEC
# 380 "defaults.h"
#define TARGET_VTABLE_USES_DESCRIPTORS 0
# 396 "defaults.h"
#define TARGET_PTRMEMFUNC_VBIT_LOCATION (FUNCTION_BOUNDARY >= 2 * BITS_PER_UNIT ? ptrmemfunc_vbit_in_pfn : ptrmemfunc_vbit_in_delta)
# 409 "defaults.h"
#define DEFAULT_GDB_EXTENSIONS 1
# 455 "defaults.h"
#define FUNCTION_ARG_REG_LITTLE_ENDIAN 0






#define MODE_BASE_REG_CLASS(MODE) BASE_REG_CLASS





#define DEFAULT_USE_CXA_ATEXIT 0
# 24 "config.h" 2

#define POSIX 


# 1 "insn-constants.h" 1




#define GCC_INSN_CONSTANTS_H 
# 29 "config.h" 2
# 1 "insn-flags.h" 1




#define GCC_INSN_FLAGS_H 

#define HAVE_cmpdi_ccno_1_rex64 (TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode))
#define HAVE_cmpdi_1_insn_rex64 (TARGET_64BIT && ix86_match_ccmode (insn, CCmode))
#define HAVE_cmpqi_ext_3_insn (!TARGET_64BIT && ix86_match_ccmode (insn, CCmode))
#define HAVE_cmpqi_ext_3_insn_rex64 (TARGET_64BIT && ix86_match_ccmode (insn, CCmode))
#define HAVE_x86_fnstsw_1 (TARGET_80387)
#define HAVE_x86_sahf_1 (!TARGET_64BIT)
#define HAVE_popsi1 (!TARGET_64BIT)
#define HAVE_movsi_insv_1 (!TARGET_64BIT)
#define HAVE_pushdi2_rex64 (TARGET_64BIT)
#define HAVE_popdi1 (TARGET_64BIT)
#define HAVE_swapxf 1
#define HAVE_swaptf 1
#define HAVE_zero_extendhisi2_and (TARGET_ZERO_EXTEND_WITH_AND && !optimize_size)
#define HAVE_zero_extendsidi2_32 (!TARGET_64BIT)
#define HAVE_zero_extendsidi2_rex64 (TARGET_64BIT)
#define HAVE_zero_extendhidi2 (TARGET_64BIT)
#define HAVE_zero_extendqidi2 (TARGET_64BIT)
#define HAVE_extendsidi2_rex64 (TARGET_64BIT)
#define HAVE_extendhidi2 (TARGET_64BIT)
#define HAVE_extendqidi2 (TARGET_64BIT)
#define HAVE_extendhisi2 1
#define HAVE_extendqihi2 1
#define HAVE_extendqisi2 1
#define HAVE_truncdfsf2_3 (TARGET_80387)
#define HAVE_truncdfsf2_sse_only (!TARGET_80387 && TARGET_SSE2)
#define HAVE_fix_truncdi_nomemory (TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) && (!SSE_FLOAT_MODE_P (GET_MODE (operands[1])) || !TARGET_64BIT))

#define HAVE_fix_truncdi_memory (TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) && (!SSE_FLOAT_MODE_P (GET_MODE (operands[1])) || !TARGET_64BIT))

#define HAVE_fix_truncsfdi_sse (TARGET_64BIT && TARGET_SSE)
#define HAVE_fix_truncdfdi_sse (TARGET_64BIT && TARGET_SSE2)
#define HAVE_fix_truncsi_nomemory (TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) && !SSE_FLOAT_MODE_P (GET_MODE (operands[1])))

#define HAVE_fix_truncsi_memory (TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) && !SSE_FLOAT_MODE_P (GET_MODE (operands[1])))

#define HAVE_fix_truncsfsi_sse (TARGET_SSE)
#define HAVE_fix_truncdfsi_sse (TARGET_SSE2)
#define HAVE_fix_trunchi_nomemory (TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) && !SSE_FLOAT_MODE_P (GET_MODE (operands[1])))

#define HAVE_fix_trunchi_memory (TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) && !SSE_FLOAT_MODE_P (GET_MODE (operands[1])))

#define HAVE_x86_fnstcw_1 (TARGET_80387)
#define HAVE_x86_fldcw_1 (TARGET_80387)
#define HAVE_floathisf2 (TARGET_80387 && !TARGET_SSE)
#define HAVE_floathidf2 (TARGET_80387 && !TARGET_SSE2)
#define HAVE_floathixf2 (!TARGET_64BIT && TARGET_80387)
#define HAVE_floathitf2 (TARGET_80387)
#define HAVE_floatsixf2 (!TARGET_64BIT && TARGET_80387)
#define HAVE_floatsitf2 (TARGET_80387)
#define HAVE_floatdixf2 (!TARGET_64BIT && TARGET_80387)
#define HAVE_floatditf2 (TARGET_80387)
#define HAVE_addqi3_cc (ix86_binary_operator_ok (PLUS, QImode, operands))
#define HAVE_addsi_1_zext (TARGET_64BIT && ix86_binary_operator_ok (PLUS, SImode, operands))
#define HAVE_addqi_ext_1 (!TARGET_64BIT)
#define HAVE_subdi3_carry_rex64 (TARGET_64BIT && ix86_binary_operator_ok (MINUS, DImode, operands))
#define HAVE_subsi3_carry (ix86_binary_operator_ok (MINUS, SImode, operands))
#define HAVE_subsi3_carry_zext (TARGET_64BIT && ix86_binary_operator_ok (MINUS, SImode, operands))
#define HAVE_divqi3 (TARGET_QIMODE_MATH)
#define HAVE_udivqi3 (TARGET_QIMODE_MATH)
#define HAVE_divmodhi4 (TARGET_HIMODE_MATH)
#define HAVE_udivmoddi4 (TARGET_64BIT)
#define HAVE_udivmodsi4 1
#define HAVE_testsi_1 (ix86_match_ccmode (insn, CCNOmode))
#define HAVE_andqi_ext_0 ((unsigned HOST_WIDE_INT)INTVAL (operands[2]) <= 0xff)
#define HAVE_negsf2_memory (ix86_unary_operator_ok (NEG, SFmode, operands))
#define HAVE_negsf2_ifs (TARGET_SSE && (reload_in_progress || reload_completed || (register_operand (operands[0], VOIDmode) && register_operand (operands[1], VOIDmode))))



#define HAVE_negdf2_memory (ix86_unary_operator_ok (NEG, DFmode, operands))
#define HAVE_negdf2_ifs (!TARGET_64BIT && TARGET_SSE2 && (reload_in_progress || reload_completed || (register_operand (operands[0], VOIDmode) && register_operand (operands[1], VOIDmode))))



#define HAVE_abssf2_memory (ix86_unary_operator_ok (ABS, SFmode, operands))
#define HAVE_abssf2_ifs (TARGET_SSE && (reload_in_progress || reload_completed || (register_operand (operands[0], VOIDmode) && register_operand (operands[1], VOIDmode))))



#define HAVE_absdf2_memory (ix86_unary_operator_ok (ABS, DFmode, operands))
#define HAVE_absdf2_ifs (!TARGET_64BIT && TARGET_SSE2 && (reload_in_progress || reload_completed || (register_operand (operands[0], VOIDmode) && register_operand (operands[1], VOIDmode))))



#define HAVE_ashldi3_1 (!TARGET_64BIT && TARGET_CMOVE)
#define HAVE_x86_shld_1 1
#define HAVE_ashrdi3_63_rex64 (TARGET_64BIT && INTVAL (operands[2]) == 63 && (TARGET_USE_CLTD || optimize_size) && ix86_binary_operator_ok (ASHIFTRT, DImode, operands))

#define HAVE_ashrdi3_1 (!TARGET_64BIT && TARGET_CMOVE)
#define HAVE_x86_shrd_1 1
#define HAVE_ashrsi3_31 (INTVAL (operands[2]) == 31 && (TARGET_USE_CLTD || optimize_size) && ix86_binary_operator_ok (ASHIFTRT, SImode, operands))

#define HAVE_lshrdi3_1 (!TARGET_64BIT && TARGET_CMOVE)
#define HAVE_setcc_2 1
#define HAVE_jump 1
#define HAVE_doloop_end_internal (!TARGET_64BIT && TARGET_USE_LOOP)
#define HAVE_blockage 1
#define HAVE_return_internal (reload_completed)
#define HAVE_return_pop_internal (reload_completed)
#define HAVE_return_indirect_internal (reload_completed)
#define HAVE_nop 1
#define HAVE_prologue_set_got (!TARGET_64BIT)
#define HAVE_prologue_get_pc (!TARGET_64BIT)
#define HAVE_eh_return_si (!TARGET_64BIT)
#define HAVE_eh_return_di (TARGET_64BIT)
#define HAVE_leave (!TARGET_64BIT)
#define HAVE_leave_rex64 (TARGET_64BIT)
#define HAVE_ffssi_1 1
#define HAVE_sqrtsf2_1 (! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && (TARGET_SSE_MATH && TARGET_MIX_SSE_I387))

#define HAVE_sqrtsf2_1_sse_only (TARGET_SSE_MATH && (!TARGET_80387 || !TARGET_MIX_SSE_I387))
#define HAVE_sqrtsf2_i387 (! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && !TARGET_SSE_MATH)

#define HAVE_sqrtdf2_1 (! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && (TARGET_SSE2 && TARGET_SSE_MATH && TARGET_MIX_SSE_I387))

#define HAVE_sqrtdf2_1_sse_only (TARGET_SSE2 && TARGET_SSE_MATH && (!TARGET_80387 || !TARGET_MIX_SSE_I387))
#define HAVE_sqrtdf2_i387 (! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && (!TARGET_SSE2 || !TARGET_SSE_MATH))

#define HAVE_sqrtxf2 (!TARGET_64BIT && TARGET_80387 && !TARGET_NO_FANCY_MATH_387 && (TARGET_IEEE_FP || flag_unsafe_math_optimizations) )

#define HAVE_sqrttf2 (! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && (TARGET_IEEE_FP || flag_unsafe_math_optimizations) )

#define HAVE_sindf2 (! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && flag_unsafe_math_optimizations)

#define HAVE_sinsf2 (! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && flag_unsafe_math_optimizations)

#define HAVE_sinxf2 (!TARGET_64BIT && TARGET_80387 && !TARGET_NO_FANCY_MATH_387 && flag_unsafe_math_optimizations)

#define HAVE_sintf2 (! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && flag_unsafe_math_optimizations)

#define HAVE_cosdf2 (! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && flag_unsafe_math_optimizations)

#define HAVE_cossf2 (! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && flag_unsafe_math_optimizations)

#define HAVE_cosxf2 (! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && flag_unsafe_math_optimizations)

#define HAVE_costf2 (! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && flag_unsafe_math_optimizations)

#define HAVE_cld 1
#define HAVE_strmovdi_rex_1 (TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size))
#define HAVE_strmovsi_1 (!TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size))
#define HAVE_strmovsi_rex_1 (TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size))
#define HAVE_strmovhi_1 (!TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size))
#define HAVE_strmovhi_rex_1 (TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size))
#define HAVE_strmovqi_1 (!TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size))
#define HAVE_strmovqi_rex_1 (TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size))
#define HAVE_rep_movdi_rex64 (TARGET_64BIT)
#define HAVE_rep_movsi (!TARGET_64BIT)
#define HAVE_rep_movsi_rex64 (TARGET_64BIT)
#define HAVE_rep_movqi (!TARGET_64BIT)
#define HAVE_rep_movqi_rex64 (TARGET_64BIT)
#define HAVE_strsetdi_rex_1 (TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size))
#define HAVE_strsetsi_1 (!TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size))
#define HAVE_strsetsi_rex_1 (TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size))
#define HAVE_strsethi_1 (!TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size))
#define HAVE_strsethi_rex_1 (TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size))
#define HAVE_strsetqi_1 (!TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size))
#define HAVE_strsetqi_rex_1 (TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size))
#define HAVE_rep_stosdi_rex64 (TARGET_64BIT)
#define HAVE_rep_stossi (!TARGET_64BIT)
#define HAVE_rep_stossi_rex64 (TARGET_64BIT)
#define HAVE_rep_stosqi (!TARGET_64BIT)
#define HAVE_rep_stosqi_rex64 (TARGET_64BIT)
#define HAVE_cmpstrqi_nz_1 (!TARGET_64BIT)
#define HAVE_cmpstrqi_nz_rex_1 (TARGET_64BIT)
#define HAVE_cmpstrqi_1 (!TARGET_64BIT)
#define HAVE_cmpstrqi_rex_1 (TARGET_64BIT)
#define HAVE_strlenqi_1 (!TARGET_64BIT)
#define HAVE_strlenqi_rex_1 (TARGET_64BIT)
#define HAVE_x86_movdicc_0_m1_rex64 (TARGET_64BIT)
#define HAVE_x86_movsicc_0_m1 1
#define HAVE_pro_epilogue_adjust_stack_rex64 (TARGET_64BIT)
#define HAVE_sse_movsfcc (TARGET_SSE && (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM) && (!TARGET_IEEE_FP || (GET_CODE (operands[1]) != EQ && GET_CODE (operands[1]) != NE)))



#define HAVE_sse_movsfcc_eq (TARGET_SSE && (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM))

#define HAVE_sse_movdfcc (TARGET_SSE2 && (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM) && (!TARGET_IEEE_FP || (GET_CODE (operands[1]) != EQ && GET_CODE (operands[1]) != NE)))



#define HAVE_sse_movdfcc_eq (TARGET_SSE && (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM))

#define HAVE_allocate_stack_worker_1 (!TARGET_64BIT && TARGET_STACK_PROBE)
#define HAVE_allocate_stack_worker_rex64 (TARGET_64BIT && TARGET_STACK_PROBE)
#define HAVE_trap 1
#define HAVE_movv4sf_internal (TARGET_SSE)
#define HAVE_movv4si_internal (TARGET_SSE)
#define HAVE_movv8qi_internal (TARGET_MMX)
#define HAVE_movv4hi_internal (TARGET_MMX)
#define HAVE_movv2si_internal (TARGET_MMX)
#define HAVE_movv2sf_internal (TARGET_3DNOW)
#define HAVE_movti_internal (TARGET_SSE && !TARGET_64BIT)
#define HAVE_sse_movaps (TARGET_SSE)
#define HAVE_sse_movups (TARGET_SSE)
#define HAVE_sse_movmskps (TARGET_SSE)
#define HAVE_mmx_pmovmskb (TARGET_SSE || TARGET_3DNOW_A)
#define HAVE_mmx_maskmovq ((TARGET_SSE || TARGET_3DNOW_A) && !TARGET_64BIT)
#define HAVE_mmx_maskmovq_rex ((TARGET_SSE || TARGET_3DNOW_A) && TARGET_64BIT)
#define HAVE_sse_movntv4sf (TARGET_SSE)
#define HAVE_sse_movntdi (TARGET_SSE || TARGET_3DNOW_A)
#define HAVE_sse_movhlps (TARGET_SSE)
#define HAVE_sse_movlhps (TARGET_SSE)
#define HAVE_sse_movhps (TARGET_SSE && (GET_CODE (operands[1]) == MEM || GET_CODE (operands[2]) == MEM))

#define HAVE_sse_movlps (TARGET_SSE && (GET_CODE (operands[1]) == MEM || GET_CODE (operands[2]) == MEM))

#define HAVE_sse_loadss (TARGET_SSE)
#define HAVE_sse_movss (TARGET_SSE)
#define HAVE_sse_storess (TARGET_SSE)
#define HAVE_sse_shufps (TARGET_SSE)
#define HAVE_addv4sf3 (TARGET_SSE)
#define HAVE_vmaddv4sf3 (TARGET_SSE)
#define HAVE_subv4sf3 (TARGET_SSE)
#define HAVE_vmsubv4sf3 (TARGET_SSE)
#define HAVE_mulv4sf3 (TARGET_SSE)
#define HAVE_vmmulv4sf3 (TARGET_SSE)
#define HAVE_divv4sf3 (TARGET_SSE)
#define HAVE_vmdivv4sf3 (TARGET_SSE)
#define HAVE_rcpv4sf2 (TARGET_SSE)
#define HAVE_vmrcpv4sf2 (TARGET_SSE)
#define HAVE_rsqrtv4sf2 (TARGET_SSE)
#define HAVE_vmrsqrtv4sf2 (TARGET_SSE)
#define HAVE_sqrtv4sf2 (TARGET_SSE)
#define HAVE_vmsqrtv4sf2 (TARGET_SSE)
#define HAVE_sse_andti3 (TARGET_SSE && !TARGET_SSE2 && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM))

#define HAVE_sse_nandti3 (TARGET_SSE && !TARGET_SSE2)
#define HAVE_sse_iorti3 (TARGET_SSE && !TARGET_SSE2 && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM))

#define HAVE_sse_xorti3 (TARGET_SSE && !TARGET_SSE2 && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM))

#define HAVE_sse_clrv4sf (TARGET_SSE)
#define HAVE_maskcmpv4sf3 (TARGET_SSE)
#define HAVE_maskncmpv4sf3 (TARGET_SSE)
#define HAVE_vmmaskcmpv4sf3 (TARGET_SSE)
#define HAVE_vmmaskncmpv4sf3 (TARGET_SSE)
#define HAVE_sse_comi (TARGET_SSE)
#define HAVE_sse_ucomi (TARGET_SSE)
#define HAVE_sse_unpckhps (TARGET_SSE)
#define HAVE_sse_unpcklps (TARGET_SSE)
#define HAVE_smaxv4sf3 (TARGET_SSE)
#define HAVE_vmsmaxv4sf3 (TARGET_SSE)
#define HAVE_sminv4sf3 (TARGET_SSE)
#define HAVE_vmsminv4sf3 (TARGET_SSE)
#define HAVE_cvtpi2ps (TARGET_SSE)
#define HAVE_cvtps2pi (TARGET_SSE)
#define HAVE_cvttps2pi (TARGET_SSE)
#define HAVE_cvtsi2ss (TARGET_SSE)
#define HAVE_cvtss2si (TARGET_SSE)
#define HAVE_cvttss2si (TARGET_SSE)
#define HAVE_addv8qi3 (TARGET_MMX)
#define HAVE_addv4hi3 (TARGET_MMX)
#define HAVE_addv2si3 (TARGET_MMX)
#define HAVE_ssaddv8qi3 (TARGET_MMX)
#define HAVE_ssaddv4hi3 (TARGET_MMX)
#define HAVE_usaddv8qi3 (TARGET_MMX)
#define HAVE_usaddv4hi3 (TARGET_MMX)
#define HAVE_subv8qi3 (TARGET_MMX)
#define HAVE_subv4hi3 (TARGET_MMX)
#define HAVE_subv2si3 (TARGET_MMX)
#define HAVE_sssubv8qi3 (TARGET_MMX)
#define HAVE_sssubv4hi3 (TARGET_MMX)
#define HAVE_ussubv8qi3 (TARGET_MMX)
#define HAVE_ussubv4hi3 (TARGET_MMX)
#define HAVE_mulv4hi3 (TARGET_MMX)
#define HAVE_smulv4hi3_highpart (TARGET_MMX)
#define HAVE_umulv4hi3_highpart (TARGET_SSE || TARGET_3DNOW_A)
#define HAVE_mmx_pmaddwd (TARGET_MMX)
#define HAVE_mmx_iordi3 (TARGET_MMX)
#define HAVE_mmx_xordi3 (TARGET_MMX)
#define HAVE_mmx_clrdi (TARGET_MMX)
#define HAVE_mmx_anddi3 (TARGET_MMX)
#define HAVE_mmx_nanddi3 (TARGET_MMX)
#define HAVE_mmx_uavgv8qi3 (TARGET_SSE || TARGET_3DNOW_A)
#define HAVE_mmx_uavgv4hi3 (TARGET_SSE || TARGET_3DNOW_A)
#define HAVE_mmx_psadbw (TARGET_SSE || TARGET_3DNOW_A)
#define HAVE_mmx_pinsrw (TARGET_SSE || TARGET_3DNOW_A)
#define HAVE_mmx_pextrw (TARGET_SSE || TARGET_3DNOW_A)
#define HAVE_mmx_pshufw (TARGET_SSE || TARGET_3DNOW_A)
#define HAVE_eqv8qi3 (TARGET_MMX)
#define HAVE_eqv4hi3 (TARGET_MMX)
#define HAVE_eqv2si3 (TARGET_MMX)
#define HAVE_gtv8qi3 (TARGET_MMX)
#define HAVE_gtv4hi3 (TARGET_MMX)
#define HAVE_gtv2si3 (TARGET_MMX)
#define HAVE_umaxv8qi3 (TARGET_SSE || TARGET_3DNOW_A)
#define HAVE_smaxv4hi3 (TARGET_SSE || TARGET_3DNOW_A)
#define HAVE_uminv8qi3 (TARGET_SSE || TARGET_3DNOW_A)
#define HAVE_sminv4hi3 (TARGET_SSE || TARGET_3DNOW_A)
#define HAVE_ashrv4hi3 (TARGET_MMX)
#define HAVE_ashrv2si3 (TARGET_MMX)
#define HAVE_lshrv4hi3 (TARGET_MMX)
#define HAVE_lshrv2si3 (TARGET_MMX)
#define HAVE_mmx_lshrdi3 (TARGET_MMX)
#define HAVE_ashlv4hi3 (TARGET_MMX)
#define HAVE_ashlv2si3 (TARGET_MMX)
#define HAVE_mmx_ashldi3 (TARGET_MMX)
#define HAVE_mmx_packsswb (TARGET_MMX)
#define HAVE_mmx_packssdw (TARGET_MMX)
#define HAVE_mmx_packuswb (TARGET_MMX)
#define HAVE_mmx_punpckhbw (TARGET_MMX)
#define HAVE_mmx_punpckhwd (TARGET_MMX)
#define HAVE_mmx_punpckhdq (TARGET_MMX)
#define HAVE_mmx_punpcklbw (TARGET_MMX)
#define HAVE_mmx_punpcklwd (TARGET_MMX)
#define HAVE_mmx_punpckldq (TARGET_MMX)
#define HAVE_emms (TARGET_MMX)
#define HAVE_ldmxcsr (TARGET_MMX)
#define HAVE_stmxcsr (TARGET_MMX)
#define HAVE_addv2sf3 (TARGET_3DNOW)
#define HAVE_subv2sf3 (TARGET_3DNOW)
#define HAVE_subrv2sf3 (TARGET_3DNOW)
#define HAVE_gtv2sf3 (TARGET_3DNOW)
#define HAVE_gev2sf3 (TARGET_3DNOW)
#define HAVE_eqv2sf3 (TARGET_3DNOW)
#define HAVE_pfmaxv2sf3 (TARGET_3DNOW)
#define HAVE_pfminv2sf3 (TARGET_3DNOW)
#define HAVE_mulv2sf3 (TARGET_3DNOW)
#define HAVE_femms (TARGET_3DNOW)
#define HAVE_pf2id (TARGET_3DNOW)
#define HAVE_pf2iw (TARGET_3DNOW_A)
#define HAVE_pfacc (TARGET_3DNOW)
#define HAVE_pfnacc (TARGET_3DNOW_A)
#define HAVE_pfpnacc (TARGET_3DNOW_A)
#define HAVE_pi2fw (TARGET_3DNOW_A)
#define HAVE_floatv2si2 (TARGET_3DNOW)
#define HAVE_pavgusb (TARGET_3DNOW)
#define HAVE_pfrcpv2sf2 (TARGET_3DNOW)
#define HAVE_pfrcpit1v2sf3 (TARGET_3DNOW)
#define HAVE_pfrcpit2v2sf3 (TARGET_3DNOW)
#define HAVE_pfrsqrtv2sf2 (TARGET_3DNOW)
#define HAVE_pfrsqit1v2sf3 (TARGET_3DNOW)
#define HAVE_pmulhrwv4hi3 (TARGET_3DNOW)
#define HAVE_pswapdv2si2 (TARGET_3DNOW_A)
#define HAVE_pswapdv2sf2 (TARGET_3DNOW_A)
#define HAVE_cmpdi 1
#define HAVE_cmpsi 1
#define HAVE_cmphi 1
#define HAVE_cmpqi (TARGET_QIMODE_MATH)
#define HAVE_cmpdi_1_rex64 (TARGET_64BIT)
#define HAVE_cmpsi_1 1
#define HAVE_cmpqi_ext_3 1
#define HAVE_cmpxf (!TARGET_64BIT && TARGET_80387)
#define HAVE_cmptf (TARGET_80387)
#define HAVE_cmpdf (TARGET_80387 || TARGET_SSE2)
#define HAVE_cmpsf (TARGET_80387 || TARGET_SSE)
#define HAVE_movsi 1
#define HAVE_movhi 1
#define HAVE_movstricthi (! TARGET_PARTIAL_REG_STALL || optimize_size)
#define HAVE_movqi 1
#define HAVE_reload_outqi 1
#define HAVE_movstrictqi (! TARGET_PARTIAL_REG_STALL)
#define HAVE_movdi 1
#define HAVE_movsf 1
#define HAVE_movdf 1
#define HAVE_movxf (!TARGET_64BIT)
#define HAVE_movtf 1
#define HAVE_zero_extendhisi2 1
#define HAVE_zero_extendqihi2 1
#define HAVE_zero_extendqisi2 1
#define HAVE_zero_extendsidi2 1
#define HAVE_extendsidi2 1
#define HAVE_extendsfdf2 (TARGET_80387 || TARGET_SSE2)
#define HAVE_extendsfxf2 (!TARGET_64BIT && TARGET_80387)
#define HAVE_extendsftf2 (TARGET_80387)
#define HAVE_extenddfxf2 (!TARGET_64BIT && TARGET_80387)
#define HAVE_extenddftf2 (TARGET_80387)
#define HAVE_truncdfsf2 (TARGET_80387 || TARGET_SSE2)
#define HAVE_truncxfsf2 (!TARGET_64BIT && TARGET_80387)
#define HAVE_trunctfsf2 (TARGET_80387)
#define HAVE_truncxfdf2 (!TARGET_64BIT && TARGET_80387)
#define HAVE_trunctfdf2 (TARGET_80387)
#define HAVE_fix_truncxfdi2 (!TARGET_64BIT && TARGET_80387)
#define HAVE_fix_trunctfdi2 (TARGET_80387)
#define HAVE_fix_truncdfdi2 (TARGET_80387 || (TARGET_SSE2 && TARGET_64BIT))
#define HAVE_fix_truncsfdi2 (TARGET_80387 || (TARGET_SSE && TARGET_64BIT))
#define HAVE_fix_truncxfsi2 (!TARGET_64BIT && TARGET_80387)
#define HAVE_fix_trunctfsi2 (TARGET_80387)
#define HAVE_fix_truncdfsi2 (TARGET_80387 || TARGET_SSE2)
#define HAVE_fix_truncsfsi2 (TARGET_80387 || TARGET_SSE)
#define HAVE_fix_truncxfhi2 (!TARGET_64BIT && TARGET_80387)
#define HAVE_fix_trunctfhi2 (TARGET_80387)
#define HAVE_fix_truncdfhi2 (TARGET_80387 && !TARGET_SSE2)
#define HAVE_fix_truncsfhi2 (TARGET_80387 && !TARGET_SSE)
#define HAVE_floatsisf2 (TARGET_SSE || TARGET_80387)
#define HAVE_floatdisf2 ((TARGET_64BIT && TARGET_SSE) || TARGET_80387)
#define HAVE_floatsidf2 (TARGET_80387 || TARGET_SSE2)
#define HAVE_floatdidf2 ((TARGET_64BIT && TARGET_SSE2) || TARGET_80387)
#define HAVE_adddi3 1
#define HAVE_addsi3 1
#define HAVE_addhi3 (TARGET_HIMODE_MATH)
#define HAVE_addqi3 (TARGET_QIMODE_MATH)
#define HAVE_addxf3 (!TARGET_64BIT && TARGET_80387)
#define HAVE_addtf3 (TARGET_80387)
#define HAVE_adddf3 (TARGET_80387 || (TARGET_SSE2 && TARGET_SSE_MATH))
#define HAVE_addsf3 (TARGET_80387 || TARGET_SSE_MATH)
#define HAVE_subdi3 1
#define HAVE_subsi3 1
#define HAVE_subhi3 (TARGET_HIMODE_MATH)
#define HAVE_subqi3 (TARGET_QIMODE_MATH)
#define HAVE_subxf3 (!TARGET_64BIT && TARGET_80387)
#define HAVE_subtf3 (TARGET_80387)
#define HAVE_subdf3 (TARGET_80387 || (TARGET_SSE2 && TARGET_SSE_MATH))
#define HAVE_subsf3 (TARGET_80387 || TARGET_SSE_MATH)
#define HAVE_muldi3 (TARGET_64BIT)
#define HAVE_mulsi3 1
#define HAVE_mulhi3 (TARGET_HIMODE_MATH)
#define HAVE_mulqi3 (TARGET_QIMODE_MATH)
#define HAVE_umulqihi3 (TARGET_QIMODE_MATH)
#define HAVE_mulqihi3 (TARGET_QIMODE_MATH)
#define HAVE_umulditi3 (TARGET_64BIT)
#define HAVE_umulsidi3 (!TARGET_64BIT)
#define HAVE_mulditi3 (TARGET_64BIT)
#define HAVE_mulsidi3 (!TARGET_64BIT)
#define HAVE_umuldi3_highpart (TARGET_64BIT)
#define HAVE_umulsi3_highpart 1
#define HAVE_smuldi3_highpart (TARGET_64BIT)
#define HAVE_smulsi3_highpart 1
#define HAVE_mulxf3 (!TARGET_64BIT && TARGET_80387)
#define HAVE_multf3 (TARGET_80387)
#define HAVE_muldf3 (TARGET_80387 || (TARGET_SSE2 && TARGET_SSE_MATH))
#define HAVE_mulsf3 (TARGET_80387 || TARGET_SSE_MATH)
#define HAVE_divxf3 (!TARGET_64BIT && TARGET_80387)
#define HAVE_divtf3 (TARGET_80387)
#define HAVE_divdf3 (TARGET_80387 || (TARGET_SSE2 && TARGET_SSE_MATH))
#define HAVE_divsf3 (TARGET_80387 || TARGET_SSE_MATH)
#define HAVE_divmoddi4 (TARGET_64BIT)
#define HAVE_divmodsi4 1
#define HAVE_udivmodhi4 (TARGET_HIMODE_MATH)
#define HAVE_testsi_ccno_1 1
#define HAVE_testqi_ccz_1 1
#define HAVE_testqi_ext_ccno_0 1
#define HAVE_anddi3 (TARGET_64BIT)
#define HAVE_andsi3 1
#define HAVE_andhi3 (TARGET_HIMODE_MATH)
#define HAVE_andqi3 (TARGET_QIMODE_MATH)
#define HAVE_iordi3 (TARGET_64BIT)
#define HAVE_iorsi3 1
#define HAVE_iorhi3 (TARGET_HIMODE_MATH)
#define HAVE_iorqi3 (TARGET_QIMODE_MATH)
#define HAVE_xordi3 (TARGET_64BIT)
#define HAVE_xorsi3 1
#define HAVE_xorhi3 (TARGET_HIMODE_MATH)
#define HAVE_xorqi3 (TARGET_QIMODE_MATH)
#define HAVE_xorqi_cc_ext_1 1
#define HAVE_negdi2 1
#define HAVE_negsi2 1
#define HAVE_neghi2 (TARGET_HIMODE_MATH)
#define HAVE_negqi2 (TARGET_QIMODE_MATH)
#define HAVE_negsf2 (TARGET_80387)
#define HAVE_negdf2 (TARGET_80387)
#define HAVE_negxf2 (!TARGET_64BIT && TARGET_80387)
#define HAVE_negtf2 (TARGET_80387)
#define HAVE_abssf2 (TARGET_80387)
#define HAVE_absdf2 (TARGET_80387)
#define HAVE_absxf2 (!TARGET_64BIT && TARGET_80387)
#define HAVE_abstf2 (TARGET_80387)
#define HAVE_one_cmpldi2 (TARGET_64BIT)
#define HAVE_one_cmplsi2 1
#define HAVE_one_cmplhi2 (TARGET_HIMODE_MATH)
#define HAVE_one_cmplqi2 (TARGET_QIMODE_MATH)
#define HAVE_ashldi3 1
#define HAVE_x86_shift_adj_1 (TARGET_CMOVE)
#define HAVE_x86_shift_adj_2 1
#define HAVE_ashlsi3 1
#define HAVE_ashlhi3 (TARGET_HIMODE_MATH)
#define HAVE_ashlqi3 (TARGET_QIMODE_MATH)
#define HAVE_ashrdi3 1
#define HAVE_x86_shift_adj_3 1
#define HAVE_ashrsi3 1
#define HAVE_ashrhi3 (TARGET_HIMODE_MATH)
#define HAVE_ashrqi3 (TARGET_QIMODE_MATH)
#define HAVE_lshrdi3 1
#define HAVE_lshrsi3 1
#define HAVE_lshrhi3 (TARGET_HIMODE_MATH)
#define HAVE_lshrqi3 (TARGET_QIMODE_MATH)
#define HAVE_rotldi3 (TARGET_64BIT)
#define HAVE_rotlsi3 1
#define HAVE_rotlhi3 (TARGET_HIMODE_MATH)
#define HAVE_rotlqi3 (TARGET_QIMODE_MATH)
#define HAVE_rotrdi3 (TARGET_64BIT)
#define HAVE_rotrsi3 1
#define HAVE_rotrhi3 (TARGET_HIMODE_MATH)
#define HAVE_rotrqi3 (TARGET_QIMODE_MATH)
#define HAVE_extv 1
#define HAVE_extzv 1
#define HAVE_insv 1
#define HAVE_seq 1
#define HAVE_sne 1
#define HAVE_sgt 1
#define HAVE_sgtu 1
#define HAVE_slt 1
#define HAVE_sltu 1
#define HAVE_sge 1
#define HAVE_sgeu 1
#define HAVE_sle 1
#define HAVE_sleu 1
#define HAVE_sunordered (TARGET_80387 || TARGET_SSE)
#define HAVE_sordered (TARGET_80387)
#define HAVE_suneq (TARGET_80387 || TARGET_SSE)
#define HAVE_sunge (TARGET_80387 || TARGET_SSE)
#define HAVE_sungt (TARGET_80387 || TARGET_SSE)
#define HAVE_sunle (TARGET_80387 || TARGET_SSE)
#define HAVE_sunlt (TARGET_80387 || TARGET_SSE)
#define HAVE_sltgt (TARGET_80387 || TARGET_SSE)
#define HAVE_beq 1
#define HAVE_bne 1
#define HAVE_bgt 1
#define HAVE_bgtu 1
#define HAVE_blt 1
#define HAVE_bltu 1
#define HAVE_bge 1
#define HAVE_bgeu 1
#define HAVE_ble 1
#define HAVE_bleu 1
#define HAVE_bunordered (TARGET_80387 || TARGET_SSE)
#define HAVE_bordered (TARGET_80387 || TARGET_SSE)
#define HAVE_buneq (TARGET_80387 || TARGET_SSE)
#define HAVE_bunge (TARGET_80387 || TARGET_SSE)
#define HAVE_bungt (TARGET_80387 || TARGET_SSE)
#define HAVE_bunle (TARGET_80387 || TARGET_SSE)
#define HAVE_bunlt (TARGET_80387 || TARGET_SSE)
#define HAVE_bltgt (TARGET_80387 || TARGET_SSE)
#define HAVE_indirect_jump 1
#define HAVE_tablejump 1
#define HAVE_doloop_end (!TARGET_64BIT && TARGET_USE_LOOP)
#define HAVE_call_pop (!TARGET_64BIT)
#define HAVE_call 1
#define HAVE_call_exp 1
#define HAVE_call_value_pop (!TARGET_64BIT)
#define HAVE_call_value 1
#define HAVE_call_value_exp 1
#define HAVE_untyped_call 1
#define HAVE_return (ix86_can_use_return_insn_p ())
#define HAVE_prologue 1
#define HAVE_epilogue 1
#define HAVE_sibcall_epilogue 1
#define HAVE_eh_return 1
#define HAVE_ffssi2 1
#define HAVE_sqrtsf2 ((! TARGET_NO_FANCY_MATH_387 && TARGET_80387) || TARGET_SSE_MATH)
#define HAVE_sqrtdf2 ((! TARGET_NO_FANCY_MATH_387 && TARGET_80387) || (TARGET_SSE2 && TARGET_SSE_MATH))

#define HAVE_movstrsi 1
#define HAVE_movstrdi (TARGET_64BIT)
#define HAVE_strmovdi_rex64 (TARGET_64BIT)
#define HAVE_strmovsi 1
#define HAVE_strmovsi_rex64 (TARGET_64BIT)
#define HAVE_strmovhi 1
#define HAVE_strmovhi_rex64 (TARGET_64BIT)
#define HAVE_strmovqi 1
#define HAVE_strmovqi_rex64 (TARGET_64BIT)
#define HAVE_clrstrsi 1
#define HAVE_clrstrdi (TARGET_64BIT)
#define HAVE_strsetdi_rex64 (TARGET_64BIT)
#define HAVE_strsetsi 1
#define HAVE_strsetsi_rex64 (TARGET_64BIT)
#define HAVE_strsethi 1
#define HAVE_strsethi_rex64 (TARGET_64BIT)
#define HAVE_strsetqi 1
#define HAVE_strsetqi_rex64 (TARGET_64BIT)
#define HAVE_cmpstrsi 1
#define HAVE_cmpintqi 1
#define HAVE_strlensi 1
#define HAVE_strlendi 1
#define HAVE_movdicc (TARGET_64BIT)
#define HAVE_movsicc 1
#define HAVE_movhicc (TARGET_CMOVE && TARGET_HIMODE_MATH)
#define HAVE_movsfcc (TARGET_CMOVE)
#define HAVE_movdfcc (TARGET_CMOVE)
#define HAVE_movxfcc (!TARGET_64BIT && TARGET_CMOVE)
#define HAVE_movtfcc (TARGET_CMOVE)
#define HAVE_minsf3 (TARGET_SSE)
#define HAVE_mindf3 (TARGET_SSE2 && TARGET_SSE_MATH)
#define HAVE_maxsf3 (TARGET_SSE)
#define HAVE_maxdf3 (TARGET_SSE2 && TARGET_SSE_MATH)
#define HAVE_pro_epilogue_adjust_stack 1
#define HAVE_allocate_stack_worker (TARGET_STACK_PROBE)
#define HAVE_allocate_stack (TARGET_STACK_PROBE)
#define HAVE_builtin_setjmp_receiver (!TARGET_64BIT && flag_pic)
#define HAVE_conditional_trap 1
#define HAVE_movti (TARGET_SSE || TARGET_64BIT)
#define HAVE_movv4sf (TARGET_SSE)
#define HAVE_movv4si (TARGET_MMX)
#define HAVE_movv2si (TARGET_MMX)
#define HAVE_movv4hi (TARGET_MMX)
#define HAVE_movv8qi (TARGET_MMX)
#define HAVE_movv2sf (TARGET_3DNOW)
#define HAVE_sfence (TARGET_SSE || TARGET_3DNOW_A)
#define HAVE_sse_prologue_save (TARGET_64BIT)
#define HAVE_prefetch (TARGET_PREFETCH_SSE || TARGET_3DNOW)
struct rtx_def;
extern struct rtx_def *gen_cmpdi_ccno_1_rex64 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cmpdi_1_insn_rex64 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cmpqi_ext_3_insn (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cmpqi_ext_3_insn_rex64 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_x86_fnstsw_1 (struct rtx_def *);
extern struct rtx_def *gen_x86_sahf_1 (struct rtx_def *);
extern struct rtx_def *gen_popsi1 (struct rtx_def *);
extern struct rtx_def *gen_movsi_insv_1 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_pushdi2_rex64 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_popdi1 (struct rtx_def *);
extern struct rtx_def *gen_swapxf (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_swaptf (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_zero_extendhisi2_and (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_zero_extendsidi2_32 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_zero_extendsidi2_rex64 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_zero_extendhidi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_zero_extendqidi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_extendsidi2_rex64 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_extendhidi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_extendqidi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_extendhisi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_extendqihi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_extendqisi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_truncdfsf2_3 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_truncdfsf2_sse_only (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_truncdi_nomemory (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_truncdi_memory (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_truncsfdi_sse (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_truncdfdi_sse (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_truncsi_nomemory (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_truncsi_memory (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_truncsfsi_sse (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_truncdfsi_sse (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_trunchi_nomemory (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_trunchi_memory (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_x86_fnstcw_1 (struct rtx_def *);
extern struct rtx_def *gen_x86_fldcw_1 (struct rtx_def *);
extern struct rtx_def *gen_floathisf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_floathidf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_floathixf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_floathitf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_floatsixf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_floatsitf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_floatdixf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_floatditf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_addqi3_cc (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_addsi_1_zext (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_addqi_ext_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_subdi3_carry_rex64 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_subsi3_carry (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_subsi3_carry_zext (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_divqi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_udivqi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_divmodhi4 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_udivmoddi4 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_udivmodsi4 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_testsi_1 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_andqi_ext_0 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_negsf2_memory (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_negsf2_ifs (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_negdf2_memory (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_negdf2_ifs (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_abssf2_memory (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_abssf2_ifs (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_absdf2_memory (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_absdf2_ifs (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ashldi3_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_x86_shld_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ashrdi3_63_rex64 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ashrdi3_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_x86_shrd_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ashrsi3_31 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_lshrdi3_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_setcc_2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_jump (struct rtx_def *);
extern struct rtx_def *gen_doloop_end_internal (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_blockage (void);
extern struct rtx_def *gen_return_internal (void);
extern struct rtx_def *gen_return_pop_internal (struct rtx_def *);
extern struct rtx_def *gen_return_indirect_internal (struct rtx_def *);
extern struct rtx_def *gen_nop (void);
extern struct rtx_def *gen_prologue_set_got (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_prologue_get_pc (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_eh_return_si (struct rtx_def *);
extern struct rtx_def *gen_eh_return_di (struct rtx_def *);
extern struct rtx_def *gen_leave (void);
extern struct rtx_def *gen_leave_rex64 (void);
extern struct rtx_def *gen_ffssi_1 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sqrtsf2_1 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sqrtsf2_1_sse_only (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sqrtsf2_i387 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sqrtdf2_1 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sqrtdf2_1_sse_only (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sqrtdf2_i387 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sqrtxf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sqrttf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sindf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sinsf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sinxf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sintf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cosdf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cossf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cosxf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_costf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cld (void);
extern struct rtx_def *gen_strmovdi_rex_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strmovsi_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strmovsi_rex_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strmovhi_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strmovhi_rex_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strmovqi_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strmovqi_rex_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_rep_movdi_rex64 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_rep_movsi (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_rep_movsi_rex64 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_rep_movqi (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_rep_movqi_rex64 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strsetdi_rex_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strsetsi_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strsetsi_rex_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strsethi_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strsethi_rex_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strsetqi_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strsetqi_rex_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_rep_stosdi_rex64 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_rep_stossi (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_rep_stossi_rex64 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_rep_stosqi (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_rep_stosqi_rex64 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cmpstrqi_nz_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cmpstrqi_nz_rex_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cmpstrqi_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cmpstrqi_rex_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strlenqi_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strlenqi_rex_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_x86_movdicc_0_m1_rex64 (struct rtx_def *);
extern struct rtx_def *gen_x86_movsicc_0_m1 (struct rtx_def *);
extern struct rtx_def *gen_pro_epilogue_adjust_stack_rex64 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_movsfcc (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_movsfcc_eq (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_movdfcc (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_movdfcc_eq (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_allocate_stack_worker_1 (struct rtx_def *);
extern struct rtx_def *gen_allocate_stack_worker_rex64 (struct rtx_def *);
extern struct rtx_def *gen_trap (void);
extern struct rtx_def *gen_movv4sf_internal (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movv4si_internal (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movv8qi_internal (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movv4hi_internal (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movv2si_internal (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movv2sf_internal (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movti_internal (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_movaps (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_movups (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_movmskps (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_pmovmskb (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_maskmovq (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_maskmovq_rex (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_movntv4sf (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_movntdi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_movhlps (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_movlhps (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_movhps (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_movlps (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_loadss (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_movss (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_storess (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_shufps (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_addv4sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_vmaddv4sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_subv4sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_vmsubv4sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mulv4sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_vmmulv4sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_divv4sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_vmdivv4sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_rcpv4sf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_vmrcpv4sf2 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_rsqrtv4sf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_vmrsqrtv4sf2 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sqrtv4sf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_vmsqrtv4sf2 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_andti3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_nandti3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_iorti3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_xorti3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_clrv4sf (struct rtx_def *);
extern struct rtx_def *gen_maskcmpv4sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_maskncmpv4sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_vmmaskcmpv4sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_vmmaskncmpv4sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_comi (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_ucomi (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_unpckhps (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sse_unpcklps (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_smaxv4sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_vmsmaxv4sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sminv4sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_vmsminv4sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cvtpi2ps (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cvtps2pi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cvttps2pi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cvtsi2ss (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cvtss2si (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cvttss2si (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_addv8qi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_addv4hi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_addv2si3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ssaddv8qi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ssaddv4hi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_usaddv8qi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_usaddv4hi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_subv8qi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_subv4hi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_subv2si3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sssubv8qi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sssubv4hi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ussubv8qi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ussubv4hi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mulv4hi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_smulv4hi3_highpart (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_umulv4hi3_highpart (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_pmaddwd (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_iordi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_xordi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_clrdi (struct rtx_def *);
extern struct rtx_def *gen_mmx_anddi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_nanddi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_uavgv8qi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_uavgv4hi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_psadbw (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_pinsrw (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_pextrw (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_pshufw (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_eqv8qi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_eqv4hi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_eqv2si3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_gtv8qi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_gtv4hi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_gtv2si3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_umaxv8qi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_smaxv4hi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_uminv8qi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sminv4hi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ashrv4hi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ashrv2si3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_lshrv4hi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_lshrv2si3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_lshrdi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ashlv4hi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ashlv2si3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_ashldi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_packsswb (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_packssdw (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_packuswb (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_punpckhbw (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_punpckhwd (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_punpckhdq (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_punpcklbw (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_punpcklwd (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mmx_punpckldq (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_emms (void);
extern struct rtx_def *gen_ldmxcsr (struct rtx_def *);
extern struct rtx_def *gen_stmxcsr (struct rtx_def *);
extern struct rtx_def *gen_addv2sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_subv2sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_subrv2sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_gtv2sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_gev2sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_eqv2sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_pfmaxv2sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_pfminv2sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mulv2sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_femms (void);
extern struct rtx_def *gen_pf2id (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_pf2iw (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_pfacc (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_pfnacc (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_pfpnacc (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_pi2fw (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_floatv2si2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_pavgusb (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_pfrcpv2sf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_pfrcpit1v2sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_pfrcpit2v2sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_pfrsqrtv2sf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_pfrsqit1v2sf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_pmulhrwv4hi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_pswapdv2si2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_pswapdv2sf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cmpdi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cmpsi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cmphi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cmpqi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cmpdi_1_rex64 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cmpsi_1 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cmpqi_ext_3 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cmpxf (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cmptf (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cmpdf (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cmpsf (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movsi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movhi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movstricthi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movqi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_reload_outqi (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movstrictqi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movdi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movsf (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movdf (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movxf (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movtf (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_zero_extendhisi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_zero_extendqihi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_zero_extendqisi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_zero_extendsidi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_extendsidi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_extendsfdf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_extendsfxf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_extendsftf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_extenddfxf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_extenddftf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_truncdfsf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_truncxfsf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_trunctfsf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_truncxfdf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_trunctfdf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_truncxfdi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_trunctfdi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_truncdfdi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_truncsfdi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_truncxfsi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_trunctfsi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_truncdfsi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_truncsfsi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_truncxfhi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_trunctfhi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_truncdfhi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_fix_truncsfhi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_floatsisf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_floatdisf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_floatsidf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_floatdidf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_adddi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_addsi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_addhi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_addqi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_addxf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_addtf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_adddf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_addsf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_subdi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_subsi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_subhi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_subqi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_subxf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_subtf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_subdf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_subsf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_muldi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mulsi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mulhi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mulqi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_umulqihi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mulqihi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_umulditi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_umulsidi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mulditi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mulsidi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_umuldi3_highpart (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_umulsi3_highpart (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_smuldi3_highpart (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_smulsi3_highpart (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mulxf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_multf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_muldf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mulsf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_divxf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_divtf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_divdf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_divsf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_divmoddi4 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_divmodsi4 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_udivmodhi4 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_testsi_ccno_1 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_testqi_ccz_1 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_testqi_ext_ccno_0 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_anddi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_andsi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_andhi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_andqi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_iordi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_iorsi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_iorhi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_iorqi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_xordi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_xorsi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_xorhi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_xorqi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_xorqi_cc_ext_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_negdi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_negsi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_neghi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_negqi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_negsf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_negdf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_negxf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_negtf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_abssf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_absdf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_absxf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_abstf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_one_cmpldi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_one_cmplsi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_one_cmplhi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_one_cmplqi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ashldi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_x86_shift_adj_1 (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_x86_shift_adj_2 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ashlsi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ashlhi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ashlqi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ashrdi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_x86_shift_adj_3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ashrsi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ashrhi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ashrqi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_lshrdi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_lshrsi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_lshrhi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_lshrqi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_rotldi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_rotlsi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_rotlhi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_rotlqi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_rotrdi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_rotrsi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_rotrhi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_rotrqi3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_extv (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_extzv (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_insv (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_seq (struct rtx_def *);
extern struct rtx_def *gen_sne (struct rtx_def *);
extern struct rtx_def *gen_sgt (struct rtx_def *);
extern struct rtx_def *gen_sgtu (struct rtx_def *);
extern struct rtx_def *gen_slt (struct rtx_def *);
extern struct rtx_def *gen_sltu (struct rtx_def *);
extern struct rtx_def *gen_sge (struct rtx_def *);
extern struct rtx_def *gen_sgeu (struct rtx_def *);
extern struct rtx_def *gen_sle (struct rtx_def *);
extern struct rtx_def *gen_sleu (struct rtx_def *);
extern struct rtx_def *gen_sunordered (struct rtx_def *);
extern struct rtx_def *gen_sordered (struct rtx_def *);
extern struct rtx_def *gen_suneq (struct rtx_def *);
extern struct rtx_def *gen_sunge (struct rtx_def *);
extern struct rtx_def *gen_sungt (struct rtx_def *);
extern struct rtx_def *gen_sunle (struct rtx_def *);
extern struct rtx_def *gen_sunlt (struct rtx_def *);
extern struct rtx_def *gen_sltgt (struct rtx_def *);
extern struct rtx_def *gen_beq (struct rtx_def *);
extern struct rtx_def *gen_bne (struct rtx_def *);
extern struct rtx_def *gen_bgt (struct rtx_def *);
extern struct rtx_def *gen_bgtu (struct rtx_def *);
extern struct rtx_def *gen_blt (struct rtx_def *);
extern struct rtx_def *gen_bltu (struct rtx_def *);
extern struct rtx_def *gen_bge (struct rtx_def *);
extern struct rtx_def *gen_bgeu (struct rtx_def *);
extern struct rtx_def *gen_ble (struct rtx_def *);
extern struct rtx_def *gen_bleu (struct rtx_def *);
extern struct rtx_def *gen_bunordered (struct rtx_def *);
extern struct rtx_def *gen_bordered (struct rtx_def *);
extern struct rtx_def *gen_buneq (struct rtx_def *);
extern struct rtx_def *gen_bunge (struct rtx_def *);
extern struct rtx_def *gen_bungt (struct rtx_def *);
extern struct rtx_def *gen_bunle (struct rtx_def *);
extern struct rtx_def *gen_bunlt (struct rtx_def *);
extern struct rtx_def *gen_bltgt (struct rtx_def *);
extern struct rtx_def *gen_indirect_jump (struct rtx_def *);
extern struct rtx_def *gen_tablejump (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_doloop_end (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
#define GEN_CALL_POP(A,B,C,D) gen_call_pop ((A), (B), (C), (D))
extern struct rtx_def *gen_call_pop (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
#define GEN_CALL(A,B,C,D) gen_call ((A), (B), (C))
extern struct rtx_def *gen_call (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_call_exp (struct rtx_def *, struct rtx_def *);
#define GEN_CALL_VALUE_POP(A,B,C,D,E) gen_call_value_pop ((A), (B), (C), (D), (E))
extern struct rtx_def *gen_call_value_pop (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
#define GEN_CALL_VALUE(A,B,C,D,E) gen_call_value ((A), (B), (C), (D))
extern struct rtx_def *gen_call_value (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_call_value_exp (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_untyped_call (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_return (void);
extern struct rtx_def *gen_prologue (void);
extern struct rtx_def *gen_epilogue (void);
extern struct rtx_def *gen_sibcall_epilogue (void);
extern struct rtx_def *gen_eh_return (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_ffssi2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sqrtsf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sqrtdf2 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movstrsi (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movstrdi (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strmovdi_rex64 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strmovsi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strmovsi_rex64 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strmovhi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strmovhi_rex64 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strmovqi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strmovqi_rex64 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_clrstrsi (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_clrstrdi (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strsetdi_rex64 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strsetsi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strsetsi_rex64 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strsethi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strsethi_rex64 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strsetqi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strsetqi_rex64 (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cmpstrsi (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_cmpintqi (struct rtx_def *);
extern struct rtx_def *gen_strlensi (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_strlendi (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movdicc (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movsicc (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movhicc (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movsfcc (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movdfcc (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movxfcc (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movtfcc (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_minsf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_mindf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_maxsf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_maxdf3 (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_pro_epilogue_adjust_stack (struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_allocate_stack_worker (struct rtx_def *);
extern struct rtx_def *gen_allocate_stack (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_builtin_setjmp_receiver (struct rtx_def *);
extern struct rtx_def *gen_conditional_trap (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movti (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movv4sf (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movv4si (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movv2si (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movv4hi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movv8qi (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_movv2sf (struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_sfence (void);
extern struct rtx_def *gen_sse_prologue_save (struct rtx_def *, struct rtx_def *, struct rtx_def *, struct rtx_def *);
extern struct rtx_def *gen_prefetch (struct rtx_def *, struct rtx_def *, struct rtx_def *);
# 30 "config.h" 2
# 24 "regrename.c" 2
# 1 "system.h" 1
# 24 "system.h"
#define GCC_SYSTEM_H 




#define GCCBUGURL "<URL:http://www.spec.org/>"



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stdarg.h" 1 3 4
# 31 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stdarg.h" 3 4
#define _STDARG_H 
#define _ANSI_STDARG_H_ 

#undef __need___va_list




#define __GNUC_VA_LIST 

# 40 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 50 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stdarg.h" 3 4
#define va_start(v,l) __builtin_va_start(v,l)

#define va_end(v) __builtin_va_end(v)
#define va_arg(v,l) __builtin_va_arg(v,l)


#define va_copy(d,s) __builtin_va_copy(d,s)

#define __va_copy(d,s) __builtin_va_copy(d,s)
# 103 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stdarg.h" 3 4
typedef __gnuc_va_list va_list;





#define _VA_LIST_ 


#define _VA_LIST 


#define _VA_LIST_DEFINED 


#define _VA_LIST_T_H 


#define __va_list__ 
# 34 "system.h" 2
# 47 "system.h"
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 1 3 4
# 39 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#define _STDDEF_H 
#define _STDDEF_H_ 

#define _ANSI_STDDEF_H 
# 132 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#define _PTRDIFF_T 
#define _T_PTRDIFF_ 
#define _T_PTRDIFF 
#define __PTRDIFF_T 
#define _PTRDIFF_T_ 
#define _BSD_PTRDIFF_T_ 
#define ___int_ptrdiff_t_h 
#define _GCC_PTRDIFF_T 
#define _PTRDIFF_T_DECLARED 
#define __DEFINED_ptrdiff_t 



typedef long int ptrdiff_t;
# 158 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_ptrdiff_t
# 185 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#define __size_t__ 
#define __SIZE_T__ 
#define _SIZE_T 
#define _SYS_SIZE_T_H 
#define _T_SIZE_ 
#define _T_SIZE 
#define __SIZE_T 
#define _SIZE_T_ 
#define _BSD_SIZE_T_ 
#define _SIZE_T_DEFINED_ 
#define _SIZE_T_DEFINED 
#define _BSD_SIZE_T_DEFINED_ 
#define _SIZE_T_DECLARED 
#define __DEFINED_size_t 
#define ___int_size_t_h 
#define _GCC_SIZE_T 
#define _SIZET_ 






#define __size_t 





typedef long unsigned int size_t;
# 237 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_size_t
# 267 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#define __wchar_t__ 
#define __WCHAR_T__ 
#define _WCHAR_T 
#define _T_WCHAR_ 
#define _T_WCHAR 
#define __WCHAR_T 
#define _WCHAR_T_ 
#define _BSD_WCHAR_T_ 
#define _WCHAR_T_DEFINED_ 
#define _WCHAR_T_DEFINED 
#define _WCHAR_T_H 
#define ___int_wchar_t_h 
#define __INT_WCHAR_T_H 
#define _GCC_WCHAR_T 
#define _WCHAR_T_DECLARED 
#define __DEFINED_wchar_t 
# 295 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef _BSD_WCHAR_T_
# 329 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
typedef int wchar_t;
# 349 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_wchar_t
# 399 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef NULL




#define NULL ((void *)0)





#undef __need_NULL




#undef offsetof
#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)




#define _GCC_MAX_ALIGN_T 



typedef struct {
  long long __max_align_ll __attribute__((__aligned__(__alignof__(long long))));
  long double __max_align_ld __attribute__((__aligned__(__alignof__(long double))));
# 436 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
} max_align_t;
# 48 "system.h" 2


# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 1 3 4
# 24 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
#define _STDIO_H 1

#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION 
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/libc-header-start.h" 1 3 4
# 31 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION

# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features.h" 1 3 4
# 19 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features.h" 3 4
#define _FEATURES_H 1
# 127 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features.h" 3 4
#undef __USE_ISOC11
#undef __USE_ISOC99
#undef __USE_ISOC95
#undef __USE_ISOCXX11
#undef __USE_POSIX
#undef __USE_POSIX2
#undef __USE_POSIX199309
#undef __USE_POSIX199506
#undef __USE_XOPEN
#undef __USE_XOPEN_EXTENDED
#undef __USE_UNIX98
#undef __USE_XOPEN2K
#undef __USE_XOPEN2KXSI
#undef __USE_XOPEN2K8
#undef __USE_XOPEN2K8XSI
#undef __USE_LARGEFILE
#undef __USE_LARGEFILE64
#undef __USE_FILE_OFFSET64
#undef __USE_MISC
#undef __USE_ATFILE
#undef __USE_DYNAMIC_STACK_SIZE
#undef __USE_GNU
#undef __USE_FORTIFY_LEVEL
#undef __KERNEL_STRICT_NAMES
#undef __GLIBC_USE_ISOC2X
#undef __GLIBC_USE_DEPRECATED_GETS
#undef __GLIBC_USE_DEPRECATED_SCANF
#undef __GLIBC_USE_C2X_STRTOL




#define __KERNEL_STRICT_NAMES 
# 170 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features.h" 3 4
#define __GNUC_PREREQ(maj,min) ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
# 184 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features.h" 3 4
#define __glibc_clang_prereq(maj,min) 0



#define __GLIBC_USE(F) __GLIBC_USE_ ## F
# 203 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features.h" 3 4
#undef _ISOC95_SOURCE
#define _ISOC95_SOURCE 1
#undef _ISOC99_SOURCE
#define _ISOC99_SOURCE 1
#undef _ISOC11_SOURCE
#define _ISOC11_SOURCE 1
#undef _ISOC2X_SOURCE
#define _ISOC2X_SOURCE 1
#undef _POSIX_SOURCE
#define _POSIX_SOURCE 1
#undef _POSIX_C_SOURCE
#define _POSIX_C_SOURCE 200809L
#undef _XOPEN_SOURCE
#define _XOPEN_SOURCE 700
#undef _XOPEN_SOURCE_EXTENDED
#define _XOPEN_SOURCE_EXTENDED 1
#undef _LARGEFILE64_SOURCE
#define _LARGEFILE64_SOURCE 1
#undef _DEFAULT_SOURCE
#define _DEFAULT_SOURCE 1
#undef _ATFILE_SOURCE
#define _ATFILE_SOURCE 1
#undef _DYNAMIC_STACK_SIZE_SOURCE
#define _DYNAMIC_STACK_SIZE_SOURCE 1
# 237 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features.h" 3 4
#undef _DEFAULT_SOURCE
#define _DEFAULT_SOURCE 1





#define __GLIBC_USE_ISOC2X 1







#define __USE_ISOC11 1






#define __USE_ISOC99 1






#define __USE_ISOC95 1
# 289 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features.h" 3 4
#undef _POSIX_SOURCE
#define _POSIX_SOURCE 1
#undef _POSIX_C_SOURCE
#define _POSIX_C_SOURCE 200809L
# 327 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features.h" 3 4
#define __USE_POSIX 1



#define __USE_POSIX2 1



#define __USE_POSIX199309 1



#define __USE_POSIX199506 1



#define __USE_XOPEN2K 1
#undef __USE_ISOC95
#define __USE_ISOC95 1
#undef __USE_ISOC99
#define __USE_ISOC99 1



#define __USE_XOPEN2K8 1
#undef _ATFILE_SOURCE
#define _ATFILE_SOURCE 1



#define __USE_XOPEN 1

#define __USE_XOPEN_EXTENDED 1
#define __USE_UNIX98 1
#undef _LARGEFILE_SOURCE
#define _LARGEFILE_SOURCE 1


#define __USE_XOPEN2K8 1
#define __USE_XOPEN2K8XSI 1

#define __USE_XOPEN2K 1
#define __USE_XOPEN2KXSI 1
#undef __USE_ISOC95
#define __USE_ISOC95 1
#undef __USE_ISOC99
#define __USE_ISOC99 1
# 383 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features.h" 3 4
#define __USE_LARGEFILE 1



#define __USE_LARGEFILE64 1






# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features-time64.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features-time64.h" 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/wordsize.h" 1 3 4
# 18 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
#define __WORDSIZE_TIME64_COMPAT32 0
# 21 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features-time64.h" 2 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/timesize.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/timesize.h" 3 4
#define __TIMESIZE 64
# 22 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features-time64.h" 2 3 4
# 395 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features.h" 2 3 4


#define __USE_MISC 1



#define __USE_ATFILE 1



#define __USE_DYNAMIC_STACK_SIZE 1



#define __USE_GNU 1
# 434 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features.h" 3 4
#define __USE_FORTIFY_LEVEL 0







#define __GLIBC_USE_DEPRECATED_GETS 0
# 465 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features.h" 3 4
#define __GLIBC_USE_DEPRECATED_SCANF 0
# 474 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features.h" 3 4
#define __GLIBC_USE_C2X_STRTOL 1
# 489 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features.h" 3 4
#undef __GNU_LIBRARY__
#define __GNU_LIBRARY__ 6



#define __GLIBC__ 2
#define __GLIBC_MINOR__ 38

#define __GLIBC_PREREQ(maj,min) ((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min))





# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define _SYS_CDEFS_H 1
# 35 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#undef __P
#undef __PMT
# 45 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __glibc_has_attribute(attr) __has_attribute (attr)




#define __glibc_has_builtin(name) __has_builtin (name)




#define __glibc_has_extension(ext) __has_extension (ext)
# 65 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __LEAF , __leaf__
#define __LEAF_ATTR __attribute__ ((__leaf__))
# 79 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __THROW __attribute__ ((__nothrow__ __LEAF))
#define __THROWNL __attribute__ ((__nothrow__))
#define __NTH(fct) __attribute__ ((__nothrow__ __LEAF)) fct
#define __NTHNL(fct) __attribute__ ((__nothrow__)) fct
# 102 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __COLD __attribute__ ((__cold__))
# 125 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __P(args) args
#define __PMT(args) args




#define __CONCAT(x,y) x ## y
#define __STRING(x) #x


#define __ptr_t void *







#define __BEGIN_DECLS 
#define __END_DECLS 




#define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1)
#define __bos0(ptr) __builtin_object_size (ptr, 0)







#define __glibc_objsize0(__o) __bos0 (__o)
#define __glibc_objsize(__o) __bos (__o)
# 212 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __warnattr(msg) __attribute__((__warning__ (msg)))
#define __errordecl(name,msg) extern void name (void) __attribute__((__error__ (msg)))
# 225 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __flexarr []
#define __glibc_c99_flexarr_available 1
# 256 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __REDIRECT(name,proto,alias) name proto __asm__ (__ASMNAME (#alias))






#define __REDIRECT_NTH(name,proto,alias) name proto __asm__ (__ASMNAME (#alias)) __THROW

#define __REDIRECT_NTHNL(name,proto,alias) name proto __asm__ (__ASMNAME (#alias)) __THROWNL


#define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname)
#define __ASMNAME2(prefix,cname) __STRING (prefix) cname


#define __REDIRECT_FORTIFY __REDIRECT



#define __REDIRECT_FORTIFY_NTH __REDIRECT_NTH
# 298 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_malloc__ __attribute__ ((__malloc__))







#define __attribute_alloc_size__(params) __attribute__ ((__alloc_size__ params))
# 315 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_alloc_align__(param) __attribute__ ((__alloc_align__ param))
# 325 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_pure__ __attribute__ ((__pure__))






#define __attribute_const__ __attribute__ ((__const__))





#define __attribute_maybe_unused__ __attribute__ ((__unused__))
# 347 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_used__ __attribute__ ((__used__))
#define __attribute_noinline__ __attribute__ ((__noinline__))







#define __attribute_deprecated__ __attribute__ ((__deprecated__))
# 366 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_deprecated_msg__(msg) __attribute__ ((__deprecated__ (msg)))
# 379 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x)))
# 389 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_format_strfmon__(a,b) __attribute__ ((__format__ (__strfmon__, a, b)))
# 401 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_nonnull__(params) __attribute__ ((__nonnull__ params))





#define __nonnull(params) __attribute_nonnull__ (params)






#define __returns_nonnull __attribute__ ((__returns_nonnull__))
# 423 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_warn_unused_result__ __attribute__ ((__warn_unused_result__))
# 432 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __wur 







#undef __always_inline
#define __always_inline __inline __attribute__ ((__always_inline__))
# 450 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_artificial__ __attribute__ ((__artificial__))
# 468 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
#define __extern_always_inline extern __always_inline __attribute__ ((__gnu_inline__))
# 478 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __fortify_function __extern_always_inline __attribute_artificial__





#define __va_arg_pack() __builtin_va_arg_pack ()
#define __va_arg_pack_len() __builtin_va_arg_pack_len ()
# 512 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __restrict_arr __restrict
# 527 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __glibc_unlikely(cond) __builtin_expect ((cond), 0)
#define __glibc_likely(cond) __builtin_expect ((cond), 1)
# 549 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_nonstring__ __attribute__ ((__nonstring__))





#undef __attribute_copy__



#define __attribute_copy__(arg) __attribute__ ((__copy__ (arg)))
# 576 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/wordsize.h" 1 3 4
# 18 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
#define __WORDSIZE_TIME64_COMPAT32 0
# 577 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 2 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/long-double.h" 1 3 4
# 21 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/long-double.h" 3 4
#define __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI 0
# 578 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 2 3 4
# 634 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __LDBL_REDIR1(name,proto,alias) name proto
#define __LDBL_REDIR(name,proto) name proto
#define __LDBL_REDIR1_NTH(name,proto,alias) name proto __THROW
#define __LDBL_REDIR_NTH(name,proto) name proto __THROW
#define __LDBL_REDIR2_DECL(name) 
#define __LDBL_REDIR_DECL(name) 

#define __REDIRECT_LDBL(name,proto,alias) __REDIRECT (name, proto, alias)
#define __REDIRECT_NTH_LDBL(name,proto,alias) __REDIRECT_NTH (name, proto, alias)
# 653 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __glibc_macro_warning1(message) _Pragma (#message)
#define __glibc_macro_warning(message) __glibc_macro_warning1 (GCC warning message)
# 672 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __HAVE_GENERIC_SELECTION 1
# 683 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __attr_access(x) __attribute__ ((__access__ x))







#define __fortified_attr_access(a,o,s) __attr_access ((a, o, s))


#define __attr_access_none(argno) __attribute__ ((__access__ (__none__, argno)))
# 707 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __attr_dealloc(dealloc,argno) __attribute__ ((__malloc__ (dealloc, argno)))

#define __attr_dealloc_free __attr_dealloc (__builtin_free, 1)
# 718 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_returns_twice__ __attribute__ ((__returns_twice__))
# 504 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features.h" 2 3 4
# 519 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features.h" 3 4
#define __USE_EXTERN_INLINES 1







# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/gnu/stubs.h" 1 3 4




# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/wordsize.h" 1 3 4
# 18 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
#define __WORDSIZE_TIME64_COMPAT32 0
# 6 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/gnu/stubs.h" 2 3 4





# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/gnu/stubs-lp64d.h" 1 3 4
# 10 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/gnu/stubs-lp64d.h" 3 4
#define __stub___compat_bdflush 
#define __stub___compat_create_module 
#define __stub___compat_get_kernel_syms 
#define __stub___compat_query_module 
#define __stub___compat_uselib 
#define __stub_chflags 
#define __stub_fchflags 
#define __stub_gtty 
#define __stub_revoke 
#define __stub_setlogin 
#define __stub_sigreturn 
#define __stub_stty 
# 12 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/gnu/stubs.h" 2 3 4
# 528 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/features.h" 2 3 4
# 34 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/libc-header-start.h" 2 3 4



#undef __GLIBC_USE_LIB_EXT2


#define __GLIBC_USE_LIB_EXT2 1
# 67 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_BFP_EXT

#define __GLIBC_USE_IEC_60559_BFP_EXT 1



#undef __GLIBC_USE_IEC_60559_BFP_EXT_C2X

#define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 1



#undef __GLIBC_USE_IEC_60559_EXT

#define __GLIBC_USE_IEC_60559_EXT 1
# 90 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_FUNCS_EXT

#define __GLIBC_USE_IEC_60559_FUNCS_EXT 1



#undef __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X

#define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 1






#undef __GLIBC_USE_IEC_60559_TYPES_EXT

#define __GLIBC_USE_IEC_60559_TYPES_EXT 1
# 28 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 2 3 4



#define __need_size_t 
#define __need_NULL 
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 1 3 4
# 158 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_ptrdiff_t
# 237 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_size_t
# 349 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_wchar_t
# 399 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef NULL




#define NULL ((void *)0)





#undef __need_NULL




#undef offsetof
#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
# 34 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 2 3 4

#define __need___va_list 


# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types.h" 1 3 4
# 24 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types.h" 3 4
#define _BITS_TYPES_H 1


# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/wordsize.h" 1 3 4
# 18 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
#define __WORDSIZE_TIME64_COMPAT32 0
# 28 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types.h" 2 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/timesize.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/timesize.h" 3 4
#define __TIMESIZE 64
# 29 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types.h" 2 3 4


typedef unsigned char __u_char;
typedef unsigned short int __u_short;
typedef unsigned int __u_int;
typedef unsigned long int __u_long;


typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;

typedef signed long int __int64_t;
typedef unsigned long int __uint64_t;






typedef __int8_t __int_least8_t;
typedef __uint8_t __uint_least8_t;
typedef __int16_t __int_least16_t;
typedef __uint16_t __uint_least16_t;
typedef __int32_t __int_least32_t;
typedef __uint32_t __uint_least32_t;
typedef __int64_t __int_least64_t;
typedef __uint64_t __uint_least64_t;



typedef long int __quad_t;
typedef unsigned long int __u_quad_t;







typedef long int __intmax_t;
typedef unsigned long int __uintmax_t;
# 109 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types.h" 3 4
#define __S16_TYPE short int
#define __U16_TYPE unsigned short int
#define __S32_TYPE int
#define __U32_TYPE unsigned int
#define __SLONGWORD_TYPE long int
#define __ULONGWORD_TYPE unsigned long int
# 128 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types.h" 3 4
#define __SQUAD_TYPE long int
#define __UQUAD_TYPE unsigned long int
#define __SWORD_TYPE long int
#define __UWORD_TYPE unsigned long int
#define __SLONG32_TYPE int
#define __ULONG32_TYPE unsigned int
#define __S64_TYPE long int
#define __U64_TYPE unsigned long int

#define __STD_TYPE typedef



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/typesizes.h" 1 3 4
# 24 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/typesizes.h" 3 4
#define _BITS_TYPESIZES_H 1
# 40 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/typesizes.h" 3 4
#define __INO_T_TYPE __ULONGWORD_TYPE
#define __OFF_T_TYPE __SLONGWORD_TYPE
#define __RLIM_T_TYPE __ULONGWORD_TYPE
#define __BLKCNT_T_TYPE __SLONGWORD_TYPE
#define __FSBLKCNT_T_TYPE __ULONGWORD_TYPE
#define __FSFILCNT_T_TYPE __ULONGWORD_TYPE
#define __TIME_T_TYPE __SLONGWORD_TYPE
#define __SUSECONDS_T_TYPE __SLONGWORD_TYPE


#define __DEV_T_TYPE __UQUAD_TYPE
#define __UID_T_TYPE __U32_TYPE
#define __GID_T_TYPE __U32_TYPE
#define __INO64_T_TYPE __UQUAD_TYPE
#define __MODE_T_TYPE __U32_TYPE
#define __NLINK_T_TYPE __U32_TYPE
#define __OFF64_T_TYPE __SQUAD_TYPE
#define __PID_T_TYPE __S32_TYPE
#define __RLIM64_T_TYPE __UQUAD_TYPE
#define __BLKCNT64_T_TYPE __SQUAD_TYPE
#define __FSBLKCNT64_T_TYPE __UQUAD_TYPE
#define __FSFILCNT64_T_TYPE __UQUAD_TYPE
#define __FSWORD_T_TYPE __SWORD_TYPE
#define __ID_T_TYPE __U32_TYPE
#define __CLOCK_T_TYPE __SLONGWORD_TYPE
#define __USECONDS_T_TYPE __U32_TYPE
#define __SUSECONDS64_T_TYPE __SQUAD_TYPE
#define __DADDR_T_TYPE __S32_TYPE
#define __KEY_T_TYPE __S32_TYPE
#define __CLOCKID_T_TYPE __S32_TYPE
#define __TIMER_T_TYPE void *
#define __BLKSIZE_T_TYPE __S32_TYPE
#define __FSID_T_TYPE struct { int __val[2]; }
#define __SSIZE_T_TYPE __SWORD_TYPE
#define __SYSCALL_SLONG_TYPE __SLONGWORD_TYPE
#define __SYSCALL_ULONG_TYPE __ULONGWORD_TYPE
#define __CPU_MASK_TYPE __ULONGWORD_TYPE





#define __OFF_T_MATCHES_OFF64_T 1


#define __INO_T_MATCHES_INO64_T 1


#define __RLIM_T_MATCHES_RLIM64_T 1


#define __STATFS_MATCHES_STATFS64 1


#define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 (__WORDSIZE == 64)
# 104 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/typesizes.h" 3 4
#define __FD_SETSIZE 1024
# 142 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types.h" 2 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/time64.h" 1 3 4
# 24 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/time64.h" 3 4
#define _BITS_TIME64_H 1





#define __TIME64_T_TYPE __TIME_T_TYPE
# 143 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types.h" 2 3 4


typedef unsigned long int __dev_t;
typedef unsigned int __uid_t;
typedef unsigned int __gid_t;
typedef unsigned long int __ino_t;
typedef unsigned long int __ino64_t;
typedef unsigned int __mode_t;
typedef unsigned int __nlink_t;
typedef long int __off_t;
typedef long int __off64_t;
typedef int __pid_t;
typedef struct { int __val[2]; } __fsid_t;
typedef long int __clock_t;
typedef unsigned long int __rlim_t;
typedef unsigned long int __rlim64_t;
typedef unsigned int __id_t;
typedef long int __time_t;
typedef unsigned int __useconds_t;
typedef long int __suseconds_t;
typedef long int __suseconds64_t;

typedef int __daddr_t;
typedef int __key_t;


typedef int __clockid_t;


typedef void * __timer_t;


typedef int __blksize_t;




typedef long int __blkcnt_t;
typedef long int __blkcnt64_t;


typedef unsigned long int __fsblkcnt_t;
typedef unsigned long int __fsblkcnt64_t;


typedef unsigned long int __fsfilcnt_t;
typedef unsigned long int __fsfilcnt64_t;


typedef long int __fsword_t;

typedef long int __ssize_t;


typedef long int __syscall_slong_t;

typedef unsigned long int __syscall_ulong_t;



typedef __off64_t __loff_t;
typedef char *__caddr_t;


typedef long int __intptr_t;


typedef unsigned int __socklen_t;




typedef int __sig_atomic_t;
# 226 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types.h" 3 4
#undef __STD_TYPE
# 39 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 2 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/__fpos_t.h" 1 3 4

#define _____fpos_t_defined 1


# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/__mbstate_t.h" 1 3 4

#define ____mbstate_t_defined 1
# 13 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/__mbstate_t.h" 3 4
typedef struct
{
  int __count;
  union
  {
    unsigned int __wch;
    char __wchb[4];
  } __value;
} __mbstate_t;
# 6 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/__fpos_t.h" 2 3 4




typedef struct _G_fpos_t
{
  __off_t __pos;
  __mbstate_t __state;
} __fpos_t;
# 40 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 2 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/__fpos64_t.h" 1 3 4

#define _____fpos64_t_defined 1







typedef struct _G_fpos64_t
{
  __off64_t __pos;
  __mbstate_t __state;
} __fpos64_t;
# 41 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 2 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/__FILE.h" 1 3 4

#define ____FILE_defined 1

struct _IO_FILE;
typedef struct _IO_FILE __FILE;
# 42 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 2 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/FILE.h" 1 3 4

#define __FILE_defined 1

struct _IO_FILE;


typedef struct _IO_FILE FILE;
# 43 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 2 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/struct_FILE.h" 1 3 4
# 19 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/struct_FILE.h" 3 4
#define __struct_FILE_defined 1
# 35 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/struct_FILE.h" 3 4
struct _IO_FILE;
struct _IO_marker;
struct _IO_codecvt;
struct _IO_wide_data;




typedef void _IO_lock_t;





struct _IO_FILE
{
  int _flags;


  char *_IO_read_ptr;
  char *_IO_read_end;
  char *_IO_read_base;
  char *_IO_write_base;
  char *_IO_write_ptr;
  char *_IO_write_end;
  char *_IO_buf_base;
  char *_IO_buf_end;


  char *_IO_save_base;
  char *_IO_backup_base;
  char *_IO_save_end;

  struct _IO_marker *_markers;

  struct _IO_FILE *_chain;

  int _fileno;
  int _flags2;
  __off_t _old_offset;


  unsigned short _cur_column;
  signed char _vtable_offset;
  char _shortbuf[1];

  _IO_lock_t *_lock;







  __off64_t _offset;

  struct _IO_codecvt *_codecvt;
  struct _IO_wide_data *_wide_data;
  struct _IO_FILE *_freeres_list;
  void *_freeres_buf;
  size_t __pad5;
  int _mode;

  char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
};


#define __getc_unlocked_body(_fp) (__glibc_unlikely ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end) ? __uflow (_fp) : *(unsigned char *) (_fp)->_IO_read_ptr++)



#define __putc_unlocked_body(_ch,_fp) (__glibc_unlikely ((_fp)->_IO_write_ptr >= (_fp)->_IO_write_end) ? __overflow (_fp, (unsigned char) (_ch)) : (unsigned char) (*(_fp)->_IO_write_ptr++ = (_ch)))




#define _IO_EOF_SEEN 0x0010
#define __feof_unlocked_body(_fp) (((_fp)->_flags & _IO_EOF_SEEN) != 0)

#define _IO_ERR_SEEN 0x0020
#define __ferror_unlocked_body(_fp) (((_fp)->_flags & _IO_ERR_SEEN) != 0)

#define _IO_USER_LOCK 0x8000
# 44 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 2 3 4


# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/cookie_io_functions_t.h" 1 3 4
# 19 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/cookie_io_functions_t.h" 3 4
#define __cookie_io_functions_t_defined 1







typedef __ssize_t cookie_read_function_t (void *__cookie, char *__buf,
                                          size_t __nbytes);







typedef __ssize_t cookie_write_function_t (void *__cookie, const char *__buf,
                                           size_t __nbytes);







typedef int cookie_seek_function_t (void *__cookie, __off64_t *__pos, int __w);


typedef int cookie_close_function_t (void *__cookie);






typedef struct _IO_cookie_io_functions_t
{
  cookie_read_function_t *read;
  cookie_write_function_t *write;
  cookie_seek_function_t *seek;
  cookie_close_function_t *close;
} cookie_io_functions_t;
# 47 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 2 3 4
# 63 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
typedef __off_t off_t;



#define __off_t_defined 


typedef __off64_t off64_t;
#define __off64_t_defined 





typedef __ssize_t ssize_t;
#define __ssize_t_defined 





typedef __fpos_t fpos_t;




typedef __fpos64_t fpos64_t;



#define _IOFBF 0
#define _IOLBF 1
#define _IONBF 2



#define BUFSIZ 8192




#define EOF (-1)




#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2

#define SEEK_DATA 3
#define SEEK_HOLE 4





#define P_tmpdir "/tmp"


#define L_tmpnam 20
#define TMP_MAX 238328



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/stdio_lim.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/stdio_lim.h" 3 4
#define _BITS_STDIO_LIM_H 1





#define FILENAME_MAX 4096
# 129 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 2 3 4


#define L_ctermid 9

#define L_cuserid 9



#undef FOPEN_MAX
#define FOPEN_MAX 16




#define _PRINTF_NAN_LEN_MAX 4




extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;

#define stdin stdin
#define stdout stdout
#define stderr stderr


extern int remove (const char *__filename) __attribute__ ((__nothrow__ , __leaf__));

extern int rename (const char *__old, const char *__new) __attribute__ ((__nothrow__ , __leaf__));



extern int renameat (int __oldfd, const char *__old, int __newfd,
       const char *__new) __attribute__ ((__nothrow__ , __leaf__));




#define RENAME_NOREPLACE (1 << 0)
#define RENAME_EXCHANGE (1 << 1)
#define RENAME_WHITEOUT (1 << 2)



extern int renameat2 (int __oldfd, const char *__old, int __newfd,
        const char *__new, unsigned int __flags) __attribute__ ((__nothrow__ , __leaf__));






extern int fclose (FILE *__stream) __attribute__ ((__nonnull__ (1)));

#undef __attr_dealloc_fclose
#define __attr_dealloc_fclose __attr_dealloc (fclose, 1)






extern FILE *tmpfile (void)
  __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) ;
# 205 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern FILE *tmpfile64 (void)
   __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) ;



extern char *tmpnam (char[20]) __attribute__ ((__nothrow__ , __leaf__)) ;




extern char *tmpnam_r (char __s[20]) __attribute__ ((__nothrow__ , __leaf__)) ;
# 227 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern char *tempnam (const char *__dir, const char *__pfx)
   __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (__builtin_free, 1)));






extern int fflush (FILE *__stream);
# 244 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern int fflush_unlocked (FILE *__stream);
# 254 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern int fcloseall (void);
# 263 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern FILE *fopen (const char *__restrict __filename,
      const char *__restrict __modes)
  __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) ;




extern FILE *freopen (const char *__restrict __filename,
        const char *__restrict __modes,
        FILE *__restrict __stream) __attribute__ ((__nonnull__ (3)));
# 288 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern FILE *fopen64 (const char *__restrict __filename,
        const char *__restrict __modes)
  __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) ;
extern FILE *freopen64 (const char *__restrict __filename,
   const char *__restrict __modes,
   FILE *__restrict __stream) __attribute__ ((__nonnull__ (3)));




extern FILE *fdopen (int __fd, const char *__modes) __attribute__ ((__nothrow__ , __leaf__))
  __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) ;





extern FILE *fopencookie (void *__restrict __magic_cookie,
     const char *__restrict __modes,
     cookie_io_functions_t __io_funcs) __attribute__ ((__nothrow__ , __leaf__))
  __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) ;




extern FILE *fmemopen (void *__s, size_t __len, const char *__modes)
  __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) ;




extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __attribute__ ((__nothrow__ , __leaf__))
  __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) ;
# 333 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__));



extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
      int __modes, size_t __n) __attribute__ ((__nothrow__ , __leaf__));




extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
         size_t __size) __attribute__ ((__nothrow__ , __leaf__));


extern void setlinebuf (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));







extern int fprintf (FILE *__restrict __stream,
      const char *__restrict __format, ...);




extern int printf (const char *__restrict __format, ...);

extern int sprintf (char *__restrict __s,
      const char *__restrict __format, ...) __attribute__ ((__nothrow__));





extern int vfprintf (FILE *__restrict __s, const char *__restrict __format,
       __gnuc_va_list __arg);




extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg);

extern int vsprintf (char *__restrict __s, const char *__restrict __format,
       __gnuc_va_list __arg) __attribute__ ((__nothrow__));



extern int snprintf (char *__restrict __s, size_t __maxlen,
       const char *__restrict __format, ...)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 4)));

extern int vsnprintf (char *__restrict __s, size_t __maxlen,
        const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 0)));





extern int vasprintf (char **__restrict __ptr, const char *__restrict __f,
        __gnuc_va_list __arg)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 0))) ;
extern int __asprintf (char **__restrict __ptr,
         const char *__restrict __fmt, ...)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 3))) ;
extern int asprintf (char **__restrict __ptr,
       const char *__restrict __fmt, ...)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 3))) ;




extern int vdprintf (int __fd, const char *__restrict __fmt,
       __gnuc_va_list __arg)
     __attribute__ ((__format__ (__printf__, 2, 0)));
extern int dprintf (int __fd, const char *__restrict __fmt, ...)
     __attribute__ ((__format__ (__printf__, 2, 3)));







extern int fscanf (FILE *__restrict __stream,
     const char *__restrict __format, ...) ;




extern int scanf (const char *__restrict __format, ...) ;

extern int sscanf (const char *__restrict __s,
     const char *__restrict __format, ...) __attribute__ ((__nothrow__ , __leaf__));





# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/floatn.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/floatn.h" 3 4
#define _BITS_FLOATN_H 


# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/long-double.h" 1 3 4
# 21 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/long-double.h" 3 4
#define __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI 0
# 24 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/floatn.h" 2 3 4





#define __HAVE_FLOAT128 1
# 40 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/floatn.h" 3 4
#define __HAVE_DISTINCT_FLOAT128 0




#define __HAVE_FLOAT64X __HAVE_FLOAT128





#define __HAVE_FLOAT64X_LONG_DOUBLE __HAVE_FLOAT128
# 62 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/floatn.h" 3 4
#define __f128(x) x ##f128
# 71 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/floatn.h" 3 4
#define __CFLOAT128 _Complex _Float128
# 95 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/floatn.h" 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/floatn-common.h" 1 3 4
# 21 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/floatn-common.h" 3 4
#define _BITS_FLOATN_COMMON_H 


# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/long-double.h" 1 3 4
# 21 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/long-double.h" 3 4
#define __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI 0
# 25 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/floatn-common.h" 2 3 4
# 34 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/floatn-common.h" 3 4
#define __HAVE_FLOAT16 0
#define __HAVE_FLOAT32 1
#define __HAVE_FLOAT64 1
#define __HAVE_FLOAT32X 1
#define __HAVE_FLOAT128X 0
# 52 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/floatn-common.h" 3 4
#define __HAVE_DISTINCT_FLOAT16 __HAVE_FLOAT16
#define __HAVE_DISTINCT_FLOAT32 0
#define __HAVE_DISTINCT_FLOAT64 0
#define __HAVE_DISTINCT_FLOAT32X 0
#define __HAVE_DISTINCT_FLOAT64X 0
#define __HAVE_DISTINCT_FLOAT128X __HAVE_FLOAT128X





#define __HAVE_FLOAT128_UNLIKE_LDBL (__HAVE_DISTINCT_FLOAT128 && __LDBL_MANT_DIG__ != 113)






#define __HAVE_FLOATN_NOT_TYPEDEF 1
# 93 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/floatn-common.h" 3 4
#define __f32(x) x ##f32
# 105 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/floatn-common.h" 3 4
#define __f64(x) x ##f64







#define __f32x(x) x ##f32x
# 125 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/floatn-common.h" 3 4
#define __f64x(x) x ##f64x
# 151 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/floatn-common.h" 3 4
#define __CFLOAT32 _Complex _Float32
# 163 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/floatn-common.h" 3 4
#define __CFLOAT64 _Complex _Float64







#define __CFLOAT32X _Complex _Float32x
# 183 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/floatn-common.h" 3 4
#define __CFLOAT64X _Complex _Float64x
# 96 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/floatn.h" 2 3 4
# 436 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 2 3 4




extern int fscanf (FILE *__restrict __stream, const char *__restrict __format, ...) __asm__ ("" "__isoc23_fscanf")

                               ;
extern int scanf (const char *__restrict __format, ...) __asm__ ("" "__isoc23_scanf")
                              ;
extern int sscanf (const char *__restrict __s, const char *__restrict __format, ...) __asm__ ("" "__isoc23_sscanf") __attribute__ ((__nothrow__ , __leaf__))

                      ;
# 486 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern int vfscanf (FILE *__restrict __s, const char *__restrict __format,
      __gnuc_va_list __arg)
     __attribute__ ((__format__ (__scanf__, 2, 0))) ;





extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__format__ (__scanf__, 1, 0))) ;


extern int vsscanf (const char *__restrict __s,
      const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format__ (__scanf__, 2, 0)));






extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc23_vfscanf")



     __attribute__ ((__format__ (__scanf__, 2, 0))) ;
extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc23_vscanf")

     __attribute__ ((__format__ (__scanf__, 1, 0))) ;
extern int vsscanf (const char *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc23_vsscanf") __attribute__ ((__nothrow__ , __leaf__))



     __attribute__ ((__format__ (__scanf__, 2, 0)));
# 571 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern int fgetc (FILE *__stream);
extern int getc (FILE *__stream);





extern int getchar (void);






extern int getc_unlocked (FILE *__stream);
extern int getchar_unlocked (void);
# 596 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern int fgetc_unlocked (FILE *__stream);
# 607 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern int fputc (int __c, FILE *__stream);
extern int putc (int __c, FILE *__stream);





extern int putchar (int __c);
# 623 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern int fputc_unlocked (int __c, FILE *__stream);







extern int putc_unlocked (int __c, FILE *__stream);
extern int putchar_unlocked (int __c);






extern int getw (FILE *__stream);


extern int putw (int __w, FILE *__stream);







extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
     __attribute__ ((__access__ (__write_only__, 1, 2)));
# 673 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern char *fgets_unlocked (char *__restrict __s, int __n,
        FILE *__restrict __stream)
    __attribute__ ((__access__ (__write_only__, 1, 2)));
# 690 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern __ssize_t __getdelim (char **__restrict __lineptr,
                             size_t *__restrict __n, int __delimiter,
                             FILE *__restrict __stream) ;
extern __ssize_t getdelim (char **__restrict __lineptr,
                           size_t *__restrict __n, int __delimiter,
                           FILE *__restrict __stream) ;







extern __ssize_t getline (char **__restrict __lineptr,
                          size_t *__restrict __n,
                          FILE *__restrict __stream) ;







extern int fputs (const char *__restrict __s, FILE *__restrict __stream);





extern int puts (const char *__s);






extern int ungetc (int __c, FILE *__stream);






extern size_t fread (void *__restrict __ptr, size_t __size,
       size_t __n, FILE *__restrict __stream) ;




extern size_t fwrite (const void *__restrict __ptr, size_t __size,
        size_t __n, FILE *__restrict __s);
# 749 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern int fputs_unlocked (const char *__restrict __s,
      FILE *__restrict __stream);
# 760 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
         size_t __n, FILE *__restrict __stream) ;
extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size,
          size_t __n, FILE *__restrict __stream);







extern int fseek (FILE *__stream, long int __off, int __whence);




extern long int ftell (FILE *__stream) ;




extern void rewind (FILE *__stream);
# 794 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern int fseeko (FILE *__stream, __off_t __off, int __whence);




extern __off_t ftello (FILE *__stream) ;
# 818 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);




extern int fsetpos (FILE *__stream, const fpos_t *__pos);
# 837 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
extern __off64_t ftello64 (FILE *__stream) ;
extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos);



extern void clearerr (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));

extern int feof (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;

extern int ferror (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;



extern void clearerr_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
extern int feof_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;
extern int ferror_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;







extern void perror (const char *__s) __attribute__ ((__cold__));




extern int fileno (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;




extern int fileno_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;
# 881 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern int pclose (FILE *__stream);





extern FILE *popen (const char *__command, const char *__modes)
  __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (pclose, 1))) ;






extern char *ctermid (char *__s) __attribute__ ((__nothrow__ , __leaf__))
  __attribute__ ((__access__ (__write_only__, 1)));





extern char *cuserid (char *__s)
  __attribute__ ((__access__ (__write_only__, 1)));




struct obstack;


extern int obstack_printf (struct obstack *__restrict __obstack,
      const char *__restrict __format, ...)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 3)));
extern int obstack_vprintf (struct obstack *__restrict __obstack,
       const char *__restrict __format,
       __gnuc_va_list __args)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 0)));







extern void flockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));



extern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;


extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
# 943 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
extern int __uflow (FILE *);
extern int __overflow (FILE *, int);
# 960 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/stdio.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/stdio.h" 3 4
#define _BITS_STDIO_H 1
# 29 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/stdio.h" 3 4
#define __STDIO_INLINE __extern_inline
# 38 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/stdio.h" 3 4
extern __inline __attribute__ ((__gnu_inline__)) int
vprintf (const char *__restrict __fmt, __gnuc_va_list __arg)
{
  return vfprintf (stdout, __fmt, __arg);
}



extern __inline __attribute__ ((__gnu_inline__)) int
getchar (void)
{
  return getc (stdin);
}




extern __inline __attribute__ ((__gnu_inline__)) int
fgetc_unlocked (FILE *__fp)
{
  return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
}





extern __inline __attribute__ ((__gnu_inline__)) int
getc_unlocked (FILE *__fp)
{
  return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
}


extern __inline __attribute__ ((__gnu_inline__)) int
getchar_unlocked (void)
{
  return (__builtin_expect (((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end), 0) ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++);
}




extern __inline __attribute__ ((__gnu_inline__)) int
putchar (int __c)
{
  return putc (__c, stdout);
}




extern __inline __attribute__ ((__gnu_inline__)) int
fputc_unlocked (int __c, FILE *__stream)
{
  return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
}





extern __inline __attribute__ ((__gnu_inline__)) int
putc_unlocked (int __c, FILE *__stream)
{
  return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
}


extern __inline __attribute__ ((__gnu_inline__)) int
putchar_unlocked (int __c)
{
  return (__builtin_expect (((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end), 0) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c)));
}





extern __inline __attribute__ ((__gnu_inline__)) __ssize_t
getline (char **__lineptr, size_t *__n, FILE *__stream)
{
  return __getdelim (__lineptr, __n, '\n', __stream);
}





extern __inline __attribute__ ((__gnu_inline__)) int
__attribute__ ((__nothrow__ , __leaf__)) feof_unlocked (FILE *__stream)
{
  return (((__stream)->_flags & 0x0010) != 0);
}


extern __inline __attribute__ ((__gnu_inline__)) int
__attribute__ ((__nothrow__ , __leaf__)) ferror_unlocked (FILE *__stream)
{
  return (((__stream)->_flags & 0x0020) != 0);
}
# 147 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/stdio.h" 3 4
#define fread_unlocked(ptr,size,n,stream) (__extension__ ((__builtin_constant_p (size) && __builtin_constant_p (n) && (size_t) (size) * (size_t) (n) <= 8 && (size_t) (size) != 0) ? ({ char *__ptr = (char *) (ptr); FILE *__stream = (stream); size_t __cnt; for (__cnt = (size_t) (size) * (size_t) (n); __cnt > 0; --__cnt) { int __c = getc_unlocked (__stream); if (__c == EOF) break; *__ptr++ = __c; } ((size_t) (size) * (size_t) (n) - __cnt) / (size_t) (size); }) : (((__builtin_constant_p (size) && (size_t) (size) == 0) || (__builtin_constant_p (n) && (size_t) (n) == 0)) ? ((void) (ptr), (void) (stream), (void) (size), (void) (n), (size_t) 0) : fread_unlocked (ptr, size, n, stream))))
# 171 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/stdio.h" 3 4
#define fwrite_unlocked(ptr,size,n,stream) (__extension__ ((__builtin_constant_p (size) && __builtin_constant_p (n) && (size_t) (size) * (size_t) (n) <= 8 && (size_t) (size) != 0) ? ({ const char *__ptr = (const char *) (ptr); FILE *__stream = (stream); size_t __cnt; for (__cnt = (size_t) (size) * (size_t) (n); __cnt > 0; --__cnt) if (putc_unlocked (*__ptr++, __stream) == EOF) break; ((size_t) (size) * (size_t) (n) - __cnt) / (size_t) (size); }) : (((__builtin_constant_p (size) && (size_t) (size) == 0) || (__builtin_constant_p (n) && (size_t) (n) == 0)) ? ((void) (ptr), (void) (stream), (void) (size), (void) (n), (size_t) 0) : fwrite_unlocked (ptr, size, n, stream))))
# 193 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/stdio.h" 3 4
#undef __STDIO_INLINE
# 961 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdio.h" 2 3 4







# 51 "system.h" 2
# 110 "system.h"
# 1 "./safe-ctype.h" 1
# 36 "./safe-ctype.h"
#define SAFE_CTYPE_H 








# 44 "./safe-ctype.h"
enum {

  _sch_isblank = 0x0001,
  _sch_iscntrl = 0x0002,
  _sch_isdigit = 0x0004,
  _sch_islower = 0x0008,
  _sch_isprint = 0x0010,
  _sch_ispunct = 0x0020,
  _sch_isspace = 0x0040,
  _sch_isupper = 0x0080,
  _sch_isxdigit = 0x0100,


  _sch_isidst = 0x0200,
  _sch_isvsp = 0x0400,
  _sch_isnvsp = 0x0800,


  _sch_isalpha = _sch_isupper|_sch_islower,
  _sch_isalnum = _sch_isalpha|_sch_isdigit,
  _sch_isidnum = _sch_isidst|_sch_isdigit,
  _sch_isgraph = _sch_isalnum|_sch_ispunct,
  _sch_iscppsp = _sch_isvsp|_sch_isnvsp,
  _sch_isbasic = _sch_isprint|_sch_iscppsp

};


extern const unsigned short _sch_istable[256];

#define _sch_test(c,bit) (_sch_istable[(c) & 0xff] & (unsigned short)(bit))

#define ISALPHA(c) _sch_test(c, _sch_isalpha)
#define ISALNUM(c) _sch_test(c, _sch_isalnum)
#define ISBLANK(c) _sch_test(c, _sch_isblank)
#define ISCNTRL(c) _sch_test(c, _sch_iscntrl)
#define ISDIGIT(c) _sch_test(c, _sch_isdigit)
#define ISGRAPH(c) _sch_test(c, _sch_isgraph)
#define ISLOWER(c) _sch_test(c, _sch_islower)
#define ISPRINT(c) _sch_test(c, _sch_isprint)
#define ISPUNCT(c) _sch_test(c, _sch_ispunct)
#define ISSPACE(c) _sch_test(c, _sch_isspace)
#define ISUPPER(c) _sch_test(c, _sch_isupper)
#define ISXDIGIT(c) _sch_test(c, _sch_isxdigit)

#define ISIDNUM(c) _sch_test(c, _sch_isidnum)
#define ISIDST(c) _sch_test(c, _sch_isidst)
#define IS_ISOBASIC(c) _sch_test(c, _sch_isbasic)
#define IS_VSPACE(c) _sch_test(c, _sch_isvsp)
#define IS_NVSPACE(c) _sch_test(c, _sch_isnvsp)
#define IS_SPACE_OR_NUL(c) _sch_test(c, _sch_iscppsp)


extern const unsigned char _sch_toupper[256];
extern const unsigned char _sch_tolower[256];
#define TOUPPER(c) _sch_toupper[(c) & 0xff]
#define TOLOWER(c) _sch_tolower[(c) & 0xff]
# 111 "system.h" 2

# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/types.h" 1 3 4
# 23 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/types.h" 3 4
#define _SYS_TYPES_H 1










# 33 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/types.h" 3 4
typedef __u_char u_char;
typedef __u_short u_short;
typedef __u_int u_int;
typedef __u_long u_long;
typedef __quad_t quad_t;
typedef __u_quad_t u_quad_t;
typedef __fsid_t fsid_t;
#define __u_char_defined 

typedef __loff_t loff_t;




typedef __ino_t ino_t;



#define __ino_t_defined 


typedef __ino64_t ino64_t;
#define __ino64_t_defined 



typedef __dev_t dev_t;
#define __dev_t_defined 



typedef __gid_t gid_t;
#define __gid_t_defined 



typedef __mode_t mode_t;
#define __mode_t_defined 



typedef __nlink_t nlink_t;
#define __nlink_t_defined 



typedef __uid_t uid_t;
#define __uid_t_defined 
# 97 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/types.h" 3 4
typedef __pid_t pid_t;
#define __pid_t_defined 




typedef __id_t id_t;
#define __id_t_defined 
# 114 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/types.h" 3 4
typedef __daddr_t daddr_t;
typedef __caddr_t caddr_t;
#define __daddr_t_defined 




typedef __key_t key_t;
#define __key_t_defined 



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/clock_t.h" 1 3 4

#define __clock_t_defined 1




typedef __clock_t clock_t;
# 127 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/types.h" 2 3 4

# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/clockid_t.h" 1 3 4

#define __clockid_t_defined 1




typedef __clockid_t clockid_t;
# 129 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/types.h" 2 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/time_t.h" 1 3 4

#define __time_t_defined 1







typedef __time_t time_t;
# 130 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/types.h" 2 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/timer_t.h" 1 3 4

#define __timer_t_defined 1




typedef __timer_t timer_t;
# 131 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/types.h" 2 3 4



typedef __useconds_t useconds_t;
#define __useconds_t_defined 


typedef __suseconds_t suseconds_t;
#define __suseconds_t_defined 



#define __need_size_t 
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 1 3 4
# 158 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_ptrdiff_t
# 237 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_size_t
# 349 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_wchar_t
# 399 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef NULL




#define NULL ((void *)0)





#undef __need_NULL




#undef offsetof
#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
# 145 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/types.h" 2 3 4



typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;




# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/stdint-intn.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/stdint-intn.h" 3 4
#define _BITS_STDINT_INTN_H 1



typedef __int8_t int8_t;
typedef __int16_t int16_t;
typedef __int32_t int32_t;
typedef __int64_t int64_t;
# 156 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/types.h" 2 3 4


typedef __uint8_t u_int8_t;
typedef __uint16_t u_int16_t;
typedef __uint32_t u_int32_t;
typedef __uint64_t u_int64_t;


typedef int register_t __attribute__ ((__mode__ (__word__)));






#define __BIT_TYPES_DEFINED__ 1




# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/endian.h" 1 3 4
# 19 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/endian.h" 3 4
#define _ENDIAN_H 1




# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/endian.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/endian.h" 3 4
#define _BITS_ENDIAN_H 1
# 30 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/endian.h" 3 4
#define __LITTLE_ENDIAN 1234
#define __BIG_ENDIAN 4321
#define __PDP_ENDIAN 3412


# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/endianness.h" 1 3 4

#define _BITS_ENDIANNESS_H 1






#define __BYTE_ORDER __LITTLE_ENDIAN
# 36 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/endian.h" 2 3 4




#define __FLOAT_WORD_ORDER __BYTE_ORDER



#define __LONG_LONG_PAIR(HI,LO) LO, HI
# 25 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/endian.h" 2 3 4


#define LITTLE_ENDIAN __LITTLE_ENDIAN
#define BIG_ENDIAN __BIG_ENDIAN
#define PDP_ENDIAN __PDP_ENDIAN
#define BYTE_ORDER __BYTE_ORDER




# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/byteswap.h" 1 3 4
# 24 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/byteswap.h" 3 4
#define _BITS_BYTESWAP_H 1





#define __bswap_constant_16(x) ((__uint16_t) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)))


static __inline __uint16_t
__bswap_16 (__uint16_t __bsx)
{

  return __builtin_bswap16 (__bsx);



}


#define __bswap_constant_32(x) ((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >> 8) | (((x) & 0x0000ff00u) << 8) | (((x) & 0x000000ffu) << 24))



static __inline __uint32_t
__bswap_32 (__uint32_t __bsx)
{

  return __builtin_bswap32 (__bsx);



}


#define __bswap_constant_64(x) ((((x) & 0xff00000000000000ull) >> 56) | (((x) & 0x00ff000000000000ull) >> 40) | (((x) & 0x0000ff0000000000ull) >> 24) | (((x) & 0x000000ff00000000ull) >> 8) | (((x) & 0x00000000ff000000ull) << 8) | (((x) & 0x0000000000ff0000ull) << 24) | (((x) & 0x000000000000ff00ull) << 40) | (((x) & 0x00000000000000ffull) << 56))
# 69 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/byteswap.h" 3 4
__extension__ static __inline __uint64_t
__bswap_64 (__uint64_t __bsx)
{

  return __builtin_bswap64 (__bsx);



}
# 36 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/endian.h" 2 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/uintn-identity.h" 1 3 4
# 24 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/uintn-identity.h" 3 4
#define _BITS_UINTN_IDENTITY_H 1







static __inline __uint16_t
__uint16_identity (__uint16_t __x)
{
  return __x;
}

static __inline __uint32_t
__uint32_identity (__uint32_t __x)
{
  return __x;
}

static __inline __uint64_t
__uint64_identity (__uint64_t __x)
{
  return __x;
}
# 37 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/endian.h" 2 3 4


#define htobe16(x) __bswap_16 (x)
#define htole16(x) __uint16_identity (x)
#define be16toh(x) __bswap_16 (x)
#define le16toh(x) __uint16_identity (x)

#define htobe32(x) __bswap_32 (x)
#define htole32(x) __uint32_identity (x)
#define be32toh(x) __bswap_32 (x)
#define le32toh(x) __uint32_identity (x)

#define htobe64(x) __bswap_64 (x)
#define htole64(x) __uint64_identity (x)
#define be64toh(x) __bswap_64 (x)
#define le64toh(x) __uint64_identity (x)
# 177 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/types.h" 2 3 4


# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/select.h" 1 3 4
# 22 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/select.h" 3 4
#define _SYS_SELECT_H 1







# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/select.h" 1 3 4
# 25 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/select.h" 3 4
#define __FD_ZERO(s) do { unsigned int __i; fd_set *__arr = (s); for (__i = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) __FDS_BITS (__arr)[__i] = 0; } while (0)






#define __FD_SET(d,s) ((void) (__FDS_BITS (s)[__FD_ELT(d)] |= __FD_MASK(d)))

#define __FD_CLR(d,s) ((void) (__FDS_BITS (s)[__FD_ELT(d)] &= ~__FD_MASK(d)))

#define __FD_ISSET(d,s) ((__FDS_BITS (s)[__FD_ELT (d)] & __FD_MASK (d)) != 0)
# 31 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/select.h" 2 3 4


# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/sigset_t.h" 1 3 4

#define __sigset_t_defined 1

# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/__sigset_t.h" 1 3 4

#define ____sigset_t_defined 

#define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int)))
typedef struct
{
  unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
} __sigset_t;
# 5 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/sigset_t.h" 2 3 4


typedef __sigset_t sigset_t;
# 34 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/select.h" 2 3 4



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/struct_timeval.h" 1 3 4

#define __timeval_defined 1





struct timeval
{




  __time_t tv_sec;
  __suseconds_t tv_usec;

};
# 38 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/select.h" 2 3 4

# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/struct_timespec.h" 1 3 4


#define _STRUCT_TIMESPEC 1







struct timespec
{



  __time_t tv_sec;




  __syscall_slong_t tv_nsec;
# 31 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/struct_timespec.h" 3 4
};
# 40 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/select.h" 2 3 4
# 49 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/select.h" 3 4
typedef long int __fd_mask;


#undef __NFDBITS

#define __NFDBITS (8 * (int) sizeof (__fd_mask))
#define __FD_ELT(d) ((d) / __NFDBITS)
#define __FD_MASK(d) ((__fd_mask) (1UL << ((d) % __NFDBITS)))


typedef struct
  {



    __fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))];
#define __FDS_BITS(set) ((set)->fds_bits)




  } fd_set;


#define FD_SETSIZE __FD_SETSIZE



typedef __fd_mask fd_mask;


#define NFDBITS __NFDBITS




#define FD_SET(fd,fdsetp) __FD_SET (fd, fdsetp)
#define FD_CLR(fd,fdsetp) __FD_CLR (fd, fdsetp)
#define FD_ISSET(fd,fdsetp) __FD_ISSET (fd, fdsetp)
#define FD_ZERO(fdsetp) __FD_ZERO (fdsetp)



# 102 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/select.h" 3 4
extern int select (int __nfds, fd_set *__restrict __readfds,
     fd_set *__restrict __writefds,
     fd_set *__restrict __exceptfds,
     struct timeval *__restrict __timeout);
# 127 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/select.h" 3 4
extern int pselect (int __nfds, fd_set *__restrict __readfds,
      fd_set *__restrict __writefds,
      fd_set *__restrict __exceptfds,
      const struct timespec *__restrict __timeout,
      const __sigset_t *__restrict __sigmask);
# 153 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/select.h" 3 4

# 180 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/types.h" 2 3 4





typedef __blksize_t blksize_t;
#define __blksize_t_defined 





typedef __blkcnt_t blkcnt_t;
#define __blkcnt_t_defined 


typedef __fsblkcnt_t fsblkcnt_t;
#define __fsblkcnt_t_defined 


typedef __fsfilcnt_t fsfilcnt_t;
#define __fsfilcnt_t_defined 
# 219 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/types.h" 3 4
typedef __blkcnt64_t blkcnt64_t;
typedef __fsblkcnt64_t fsblkcnt64_t;
typedef __fsfilcnt64_t fsfilcnt64_t;





# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/pthreadtypes.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/pthreadtypes.h" 3 4
#define _BITS_PTHREADTYPES_COMMON_H 1


# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/thread-shared-types.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/thread-shared-types.h" 3 4
#define _THREAD_SHARED_TYPES_H 1
# 44 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/thread-shared-types.h" 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/pthreadtypes-arch.h" 1 3 4
# 21 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/pthreadtypes-arch.h" 3 4
#define _BITS_PTHREADTYPES_ARCH_H 1

# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/wordsize.h" 1 3 4
# 18 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
#define __WORDSIZE_TIME64_COMPAT32 0
# 24 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/pthreadtypes-arch.h" 2 3 4


#define __SIZEOF_PTHREAD_ATTR_T 56
#define __SIZEOF_PTHREAD_MUTEX_T 40
#define __SIZEOF_PTHREAD_RWLOCK_T 56
#define __SIZEOF_PTHREAD_BARRIER_T 32






#define __SIZEOF_PTHREAD_MUTEXATTR_T 4
#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
#define __SIZEOF_PTHREAD_BARRIERATTR_T 4
#define __SIZEOF_PTHREAD_COND_T 48
#define __SIZEOF_PTHREAD_CONDATTR_T 4

#define __LOCK_ALIGNMENT 
#define __ONCE_ALIGNMENT 
# 45 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/thread-shared-types.h" 2 3 4

# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/atomic_wide_counter.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/atomic_wide_counter.h" 3 4
#define _BITS_ATOMIC_WIDE_COUNTER_H 




typedef union
{
  __extension__ unsigned long long int __value64;
  struct
  {
    unsigned int __low;
    unsigned int __high;
  } __value32;
} __atomic_wide_counter;
# 47 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/thread-shared-types.h" 2 3 4




typedef struct __pthread_internal_list
{
  struct __pthread_internal_list *__prev;
  struct __pthread_internal_list *__next;
} __pthread_list_t;

typedef struct __pthread_internal_slist
{
  struct __pthread_internal_slist *__next;
} __pthread_slist_t;
# 76 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/thread-shared-types.h" 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/struct_mutex.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/struct_mutex.h" 3 4
#define _THREAD_MUTEX_INTERNAL_H 1






struct __pthread_mutex_s
{
  int __lock ;
  unsigned int __count;
  int __owner;

  unsigned int __nusers;
# 58 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/struct_mutex.h" 3 4
  int __kind;




  int __spins;
  __pthread_list_t __list;
#define __PTHREAD_MUTEX_HAVE_PREV 1
# 74 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/struct_mutex.h" 3 4
};


#define __PTHREAD_MUTEX_INITIALIZER(__kind) 0, 0, 0, 0, __kind, 0, { 0, 0 }
# 77 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/thread-shared-types.h" 2 3 4
# 89 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/thread-shared-types.h" 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/struct_rwlock.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/struct_rwlock.h" 3 4
#define __RWLOCK_INTERNAL_H 
# 29 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/struct_rwlock.h" 3 4
struct __pthread_rwlock_arch_t
{
  unsigned int __readers;
  unsigned int __writers;
  unsigned int __wrphase_futex;
  unsigned int __writers_futex;
  unsigned int __pad3;
  unsigned int __pad4;
# 45 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/struct_rwlock.h" 3 4
  unsigned char __flags;
  unsigned char __shared;
  unsigned char __pad1;
  unsigned char __pad2;

  int __cur_writer;
};





#define __PTHREAD_RWLOCK_INITIALIZER(__flags) 0, 0, 0, 0, 0, 0, __flags, 0, 0, 0, 0
# 90 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/thread-shared-types.h" 2 3 4




struct __pthread_cond_s
{
  __atomic_wide_counter __wseq;
  __atomic_wide_counter __g1_start;
  unsigned int __g_refs[2] ;
  unsigned int __g_size[2];
  unsigned int __g1_orig_size;
  unsigned int __wrefs;
  unsigned int __g_signals[2];
};

typedef unsigned int __tss_t;
typedef unsigned long int __thrd_t;

typedef struct
{
  int __data ;
} __once_flag;

#define __ONCE_FLAG_INIT { 0 }
# 24 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/pthreadtypes.h" 2 3 4



typedef unsigned long int pthread_t;




typedef union
{
  char __size[4];
  int __align;
} pthread_mutexattr_t;




typedef union
{
  char __size[4];
  int __align;
} pthread_condattr_t;



typedef unsigned int pthread_key_t;



typedef int pthread_once_t;


union pthread_attr_t
{
  char __size[56];
  long int __align;
};

typedef union pthread_attr_t pthread_attr_t;
#define __have_pthread_attr_t 1



typedef union
{
  struct __pthread_mutex_s __data;
  char __size[40];
  long int __align;
} pthread_mutex_t;


typedef union
{
  struct __pthread_cond_s __data;
  char __size[48];
  __extension__ long long int __align;
} pthread_cond_t;





typedef union
{
  struct __pthread_rwlock_arch_t __data;
  char __size[56];
  long int __align;
} pthread_rwlock_t;

typedef union
{
  char __size[8];
  long int __align;
} pthread_rwlockattr_t;





typedef volatile int pthread_spinlock_t;




typedef union
{
  char __size[32];
  long int __align;
} pthread_barrier_t;

typedef union
{
  char __size[4];
  int __align;
} pthread_barrierattr_t;
# 228 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/types.h" 2 3 4



# 113 "system.h" 2

# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/errno.h" 1 3 4
# 23 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/errno.h" 3 4
#define _ERRNO_H 1




# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/errno.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/errno.h" 3 4
#define _BITS_ERRNO_H 1





# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/errno.h" 1 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm/errno.h" 1 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm-generic/errno.h" 1 3 4


#define _ASM_GENERIC_ERRNO_H 

# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm-generic/errno-base.h" 1 3 4


#define _ASM_GENERIC_ERRNO_BASE_H 

#define EPERM 1
#define ENOENT 2
#define ESRCH 3
#define EINTR 4
#define EIO 5
#define ENXIO 6
#define E2BIG 7
#define ENOEXEC 8
#define EBADF 9
#define ECHILD 10
#define EAGAIN 11
#define ENOMEM 12
#define EACCES 13
#define EFAULT 14
#define ENOTBLK 15
#define EBUSY 16
#define EEXIST 17
#define EXDEV 18
#define ENODEV 19
#define ENOTDIR 20
#define EISDIR 21
#define EINVAL 22
#define ENFILE 23
#define EMFILE 24
#define ENOTTY 25
#define ETXTBSY 26
#define EFBIG 27
#define ENOSPC 28
#define ESPIPE 29
#define EROFS 30
#define EMLINK 31
#define EPIPE 32
#define EDOM 33
#define ERANGE 34
# 6 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm-generic/errno.h" 2 3 4

#define EDEADLK 35
#define ENAMETOOLONG 36
#define ENOLCK 37
# 18 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm-generic/errno.h" 3 4
#define ENOSYS 38

#define ENOTEMPTY 39
#define ELOOP 40
#define EWOULDBLOCK EAGAIN
#define ENOMSG 42
#define EIDRM 43
#define ECHRNG 44
#define EL2NSYNC 45
#define EL3HLT 46
#define EL3RST 47
#define ELNRNG 48
#define EUNATCH 49
#define ENOCSI 50
#define EL2HLT 51
#define EBADE 52
#define EBADR 53
#define EXFULL 54
#define ENOANO 55
#define EBADRQC 56
#define EBADSLT 57

#define EDEADLOCK EDEADLK

#define EBFONT 59
#define ENOSTR 60
#define ENODATA 61
#define ETIME 62
#define ENOSR 63
#define ENONET 64
#define ENOPKG 65
#define EREMOTE 66
#define ENOLINK 67
#define EADV 68
#define ESRMNT 69
#define ECOMM 70
#define EPROTO 71
#define EMULTIHOP 72
#define EDOTDOT 73
#define EBADMSG 74
#define EOVERFLOW 75
#define ENOTUNIQ 76
#define EBADFD 77
#define EREMCHG 78
#define ELIBACC 79
#define ELIBBAD 80
#define ELIBSCN 81
#define ELIBMAX 82
#define ELIBEXEC 83
#define EILSEQ 84
#define ERESTART 85
#define ESTRPIPE 86
#define EUSERS 87
#define ENOTSOCK 88
#define EDESTADDRREQ 89
#define EMSGSIZE 90
#define EPROTOTYPE 91
#define ENOPROTOOPT 92
#define EPROTONOSUPPORT 93
#define ESOCKTNOSUPPORT 94
#define EOPNOTSUPP 95
#define EPFNOSUPPORT 96
#define EAFNOSUPPORT 97
#define EADDRINUSE 98
#define EADDRNOTAVAIL 99
#define ENETDOWN 100
#define ENETUNREACH 101
#define ENETRESET 102
#define ECONNABORTED 103
#define ECONNRESET 104
#define ENOBUFS 105
#define EISCONN 106
#define ENOTCONN 107
#define ESHUTDOWN 108
#define ETOOMANYREFS 109
#define ETIMEDOUT 110
#define ECONNREFUSED 111
#define EHOSTDOWN 112
#define EHOSTUNREACH 113
#define EALREADY 114
#define EINPROGRESS 115
#define ESTALE 116
#define EUCLEAN 117
#define ENOTNAM 118
#define ENAVAIL 119
#define EISNAM 120
#define EREMOTEIO 121
#define EDQUOT 122

#define ENOMEDIUM 123
#define EMEDIUMTYPE 124
#define ECANCELED 125
#define ENOKEY 126
#define EKEYEXPIRED 127
#define EKEYREVOKED 128
#define EKEYREJECTED 129


#define EOWNERDEAD 130
#define ENOTRECOVERABLE 131

#define ERFKILL 132

#define EHWPOISON 133
# 2 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm/errno.h" 2 3 4
# 2 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/errno.h" 2 3 4
# 27 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/errno.h" 2 3 4



#define ENOTSUP EOPNOTSUPP
# 29 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/errno.h" 2 3 4








extern int *__errno_location (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
#define errno (*__errno_location ())






extern char *program_invocation_name;
extern char *program_invocation_short_name;

# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/error_t.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/error_t.h" 3 4
#define __error_t_defined 1

typedef int error_t;
# 49 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/errno.h" 2 3 4




# 115 "system.h" 2
# 125 "system.h"
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 1 3 4
# 23 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 3 4
#define _STRING_H 1

#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION 
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/libc-header-start.h" 1 3 4
# 31 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION





#undef __GLIBC_USE_LIB_EXT2


#define __GLIBC_USE_LIB_EXT2 1
# 67 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_BFP_EXT

#define __GLIBC_USE_IEC_60559_BFP_EXT 1



#undef __GLIBC_USE_IEC_60559_BFP_EXT_C2X

#define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 1



#undef __GLIBC_USE_IEC_60559_EXT

#define __GLIBC_USE_IEC_60559_EXT 1
# 90 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_FUNCS_EXT

#define __GLIBC_USE_IEC_60559_FUNCS_EXT 1



#undef __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X

#define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 1






#undef __GLIBC_USE_IEC_60559_TYPES_EXT

#define __GLIBC_USE_IEC_60559_TYPES_EXT 1
# 27 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 2 3 4




#define __need_size_t 
#define __need_NULL 
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 1 3 4
# 158 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_ptrdiff_t
# 237 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_size_t
# 349 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_wchar_t
# 399 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef NULL




#define NULL ((void *)0)





#undef __need_NULL




#undef offsetof
#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
# 34 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 2 3 4
# 43 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 3 4
extern void *memcpy (void *__restrict __dest, const void *__restrict __src,
       size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern void *memmove (void *__dest, const void *__src, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));





extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
        int __c, size_t __n)
    __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__access__ (__write_only__, 1, 4)));




extern void *memset (void *__s, int __c, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int memcmp (const void *__s1, const void *__s2, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 80 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 3 4
extern int __memcmpeq (const void *__s1, const void *__s2, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 107 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 3 4
extern void *memchr (const void *__s, int __c, size_t __n)
      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
# 120 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 3 4
extern void *rawmemchr (const void *__s, int __c)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
# 133 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 3 4
extern void *memrchr (const void *__s, int __c, size_t __n)
      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)))
      __attribute__ ((__access__ (__read_only__, 1, 3)));





extern char *strcpy (char *__restrict __dest, const char *__restrict __src)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));

extern char *strncpy (char *__restrict __dest,
        const char *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern char *strcat (char *__restrict __dest, const char *__restrict __src)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));

extern char *strncat (char *__restrict __dest, const char *__restrict __src,
        size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int strcmp (const char *__s1, const char *__s2)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));

extern int strncmp (const char *__s1, const char *__s2, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern int strcoll (const char *__s1, const char *__s2)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));

extern size_t strxfrm (char *__restrict __dest,
         const char *__restrict __src, size_t __n)
    __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) __attribute__ ((__access__ (__write_only__, 1, 3)));



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/locale_t.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/locale_t.h" 3 4
#define _BITS_TYPES_LOCALE_T_H 1

# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/__locale_t.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/__locale_t.h" 3 4
#define _BITS_TYPES___LOCALE_T_H 1






struct __locale_struct
{

  struct __locale_data *__locales[13];


  const unsigned short int *__ctype_b;
  const int *__ctype_tolower;
  const int *__ctype_toupper;


  const char *__names[13];
};

typedef struct __locale_struct *__locale_t;
# 23 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/locale_t.h" 2 3 4

typedef __locale_t locale_t;
# 173 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 2 3 4


extern int strcoll_l (const char *__s1, const char *__s2, locale_t __l)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));


extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n,
    locale_t __l) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4)))
     __attribute__ ((__access__ (__write_only__, 1, 3)));





extern char *strdup (const char *__s)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));






extern char *strndup (const char *__string, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));




#define strdupa(s) (__extension__ ({ const char *__old = (s); size_t __len = strlen (__old) + 1; char *__new = (char *) __builtin_alloca (__len); (char *) memcpy (__new, __old, __len); }))
# 211 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 3 4
#define strndupa(s,n) (__extension__ ({ const char *__old = (s); size_t __len = strnlen (__old, (n)); char *__new = (char *) __builtin_alloca (__len + 1); __new[__len] = '\0'; (char *) memcpy (__new, __old, __len); }))
# 246 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 3 4
extern char *strchr (const char *__s, int __c)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
# 273 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 3 4
extern char *strrchr (const char *__s, int __c)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
# 286 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 3 4
extern char *strchrnul (const char *__s, int __c)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));





extern size_t strcspn (const char *__s, const char *__reject)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern size_t strspn (const char *__s, const char *__accept)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 323 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 3 4
extern char *strpbrk (const char *__s, const char *__accept)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 350 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 3 4
extern char *strstr (const char *__haystack, const char *__needle)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));




extern char *strtok (char *__restrict __s, const char *__restrict __delim)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));



extern char *__strtok_r (char *__restrict __s,
    const char *__restrict __delim,
    char **__restrict __save_ptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));

extern char *strtok_r (char *__restrict __s, const char *__restrict __delim,
         char **__restrict __save_ptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
# 380 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 3 4
extern char *strcasestr (const char *__haystack, const char *__needle)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));







extern void *memmem (const void *__haystack, size_t __haystacklen,
       const void *__needle, size_t __needlelen)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 3)))
    __attribute__ ((__access__ (__read_only__, 1, 2)))
    __attribute__ ((__access__ (__read_only__, 3, 4)));



extern void *__mempcpy (void *__restrict __dest,
   const void *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
extern void *mempcpy (void *__restrict __dest,
        const void *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));




extern size_t strlen (const char *__s)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));




extern size_t strnlen (const char *__string, size_t __maxlen)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));




extern char *strerror (int __errnum) __attribute__ ((__nothrow__ , __leaf__));
# 444 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 3 4
extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) __attribute__ ((__access__ (__write_only__, 2, 3)));




extern const char *strerrordesc_np (int __err) __attribute__ ((__nothrow__ , __leaf__));

extern const char *strerrorname_np (int __err) __attribute__ ((__nothrow__ , __leaf__));





extern char *strerror_l (int __errnum, locale_t __l) __attribute__ ((__nothrow__ , __leaf__));



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/strings.h" 1 3 4
# 19 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/strings.h" 3 4
#define _STRINGS_H 1


#define __need_size_t 
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 1 3 4
# 158 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_ptrdiff_t
# 237 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_size_t
# 349 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_wchar_t
# 399 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef NULL




#define NULL ((void *)0)





#undef __need_NULL




#undef offsetof
#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
# 24 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/strings.h" 2 3 4










extern int bcmp (const void *__s1, const void *__s2, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern void bcopy (const void *__src, void *__dest, size_t __n)
  __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern void bzero (void *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
# 68 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/strings.h" 3 4
extern char *index (const char *__s, int __c)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
# 96 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/strings.h" 3 4
extern char *rindex (const char *__s, int __c)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));






extern int ffs (int __i) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));





extern int ffsl (long int __l) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
__extension__ extern int ffsll (long long int __ll)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));



extern int strcasecmp (const char *__s1, const char *__s2)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern int strncasecmp (const char *__s1, const char *__s2, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));






extern int strcasecmp_l (const char *__s1, const char *__s2, locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));



extern int strncasecmp_l (const char *__s1, const char *__s2,
     size_t __n, locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4)));



# 463 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 2 3 4



extern void explicit_bzero (void *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)))
    __attribute__ ((__access__ (__write_only__, 1, 2)));



extern char *strsep (char **__restrict __stringp,
       const char *__restrict __delim)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));




extern char *strsignal (int __sig) __attribute__ ((__nothrow__ , __leaf__));



extern const char *sigabbrev_np (int __sig) __attribute__ ((__nothrow__ , __leaf__));


extern const char *sigdescr_np (int __sig) __attribute__ ((__nothrow__ , __leaf__));



extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *stpcpy (char *__restrict __dest, const char *__restrict __src)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));



extern char *__stpncpy (char *__restrict __dest,
   const char *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *stpncpy (char *__restrict __dest,
        const char *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));




extern size_t strlcpy (char *__restrict __dest,
         const char *__restrict __src, size_t __n)
  __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__access__ (__write_only__, 1, 3)));



extern size_t strlcat (char *__restrict __dest,
         const char *__restrict __src, size_t __n)
  __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__access__ (__read_write__, 1, 3)));




extern int strverscmp (const char *__s1, const char *__s2)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern char *strfry (char *__string) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern void *memfrob (void *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)))
    __attribute__ ((__access__ (__read_write__, 1, 2)));
# 540 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 3 4
extern char *basename (const char *__filename) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
# 552 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/string.h" 3 4

# 126 "system.h" 2
# 134 "system.h"
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 1 3 4
# 25 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION 
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/libc-header-start.h" 1 3 4
# 31 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION





#undef __GLIBC_USE_LIB_EXT2


#define __GLIBC_USE_LIB_EXT2 1
# 67 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_BFP_EXT

#define __GLIBC_USE_IEC_60559_BFP_EXT 1



#undef __GLIBC_USE_IEC_60559_BFP_EXT_C2X

#define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 1



#undef __GLIBC_USE_IEC_60559_EXT

#define __GLIBC_USE_IEC_60559_EXT 1
# 90 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_FUNCS_EXT

#define __GLIBC_USE_IEC_60559_FUNCS_EXT 1



#undef __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X

#define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 1






#undef __GLIBC_USE_IEC_60559_TYPES_EXT

#define __GLIBC_USE_IEC_60559_TYPES_EXT 1
# 27 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 2 3 4


#define __need_size_t 
#define __need_wchar_t 
#define __need_NULL 
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 1 3 4
# 158 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_ptrdiff_t
# 237 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_size_t
# 349 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_wchar_t
# 399 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef NULL




#define NULL ((void *)0)





#undef __need_NULL




#undef offsetof
#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
# 33 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 2 3 4



#define _STDLIB_H 1



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/waitflags.h" 1 3 4
# 25 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/waitflags.h" 3 4
#define WNOHANG 1
#define WUNTRACED 2



#define WSTOPPED 2
#define WEXITED 4
#define WCONTINUED 8
#define WNOWAIT 0x01000000


#define __WNOTHREAD 0x20000000

#define __WALL 0x40000000
#define __WCLONE 0x80000000
# 41 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 2 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/waitstatus.h" 1 3 4
# 28 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/waitstatus.h" 3 4
#define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)


#define __WTERMSIG(status) ((status) & 0x7f)


#define __WSTOPSIG(status) __WEXITSTATUS(status)


#define __WIFEXITED(status) (__WTERMSIG(status) == 0)


#define __WIFSIGNALED(status) (((signed char) (((status) & 0x7f) + 1) >> 1) > 0)



#define __WIFSTOPPED(status) (((status) & 0xff) == 0x7f)




#define __WIFCONTINUED(status) ((status) == __W_CONTINUED)



#define __WCOREDUMP(status) ((status) & __WCOREFLAG)


#define __W_EXITCODE(ret,sig) ((ret) << 8 | (sig))
#define __W_STOPCODE(sig) ((sig) << 8 | 0x7f)
#define __W_CONTINUED 0xffff
#define __WCOREFLAG 0x80
# 42 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 2 3 4


#define WEXITSTATUS(status) __WEXITSTATUS (status)
#define WTERMSIG(status) __WTERMSIG (status)
#define WSTOPSIG(status) __WSTOPSIG (status)
#define WIFEXITED(status) __WIFEXITED (status)
#define WIFSIGNALED(status) __WIFSIGNALED (status)
#define WIFSTOPPED(status) __WIFSTOPPED (status)

#define WIFCONTINUED(status) __WIFCONTINUED (status)







typedef struct
  {
    int quot;
    int rem;
  } div_t;



typedef struct
  {
    long int quot;
    long int rem;
  } ldiv_t;
#define __ldiv_t_defined 1




__extension__ typedef struct
  {
    long long int quot;
    long long int rem;
  } lldiv_t;
#define __lldiv_t_defined 1




#define RAND_MAX 2147483647




#define EXIT_FAILURE 1
#define EXIT_SUCCESS 0



#define MB_CUR_MAX (__ctype_get_mb_cur_max ())
extern size_t __ctype_get_mb_cur_max (void) __attribute__ ((__nothrow__ , __leaf__)) ;



extern double atof (const char *__nptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;

extern int atoi (const char *__nptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;

extern long int atol (const char *__nptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;



__extension__ extern long long int atoll (const char *__nptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;



extern double strtod (const char *__restrict __nptr,
        char **__restrict __endptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern float strtof (const char *__restrict __nptr,
       char **__restrict __endptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));

extern long double strtold (const char *__restrict __nptr,
       char **__restrict __endptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
# 141 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern _Float32 strtof32 (const char *__restrict __nptr,
     char **__restrict __endptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern _Float64 strtof64 (const char *__restrict __nptr,
     char **__restrict __endptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern _Float128 strtof128 (const char *__restrict __nptr,
       char **__restrict __endptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern _Float32x strtof32x (const char *__restrict __nptr,
       char **__restrict __endptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern _Float64x strtof64x (const char *__restrict __nptr,
       char **__restrict __endptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
# 177 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern long int strtol (const char *__restrict __nptr,
   char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));

extern unsigned long int strtoul (const char *__restrict __nptr,
      char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



__extension__
extern long long int strtoq (const char *__restrict __nptr,
        char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));

__extension__
extern unsigned long long int strtouq (const char *__restrict __nptr,
           char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));




__extension__
extern long long int strtoll (const char *__restrict __nptr,
         char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));

__extension__
extern unsigned long long int strtoull (const char *__restrict __nptr,
     char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));






extern long int strtol (const char *__restrict __nptr, char **__restrict __endptr, int __base) __asm__ ("" "__isoc23_strtol") __attribute__ ((__nothrow__ , __leaf__))


     __attribute__ ((__nonnull__ (1)));
extern unsigned long int strtoul (const char *__restrict __nptr, char **__restrict __endptr, int __base) __asm__ ("" "__isoc23_strtoul") __attribute__ ((__nothrow__ , __leaf__))



     __attribute__ ((__nonnull__ (1)));

__extension__
extern long long int strtoq (const char *__restrict __nptr, char **__restrict __endptr, int __base) __asm__ ("" "__isoc23_strtoll") __attribute__ ((__nothrow__ , __leaf__))


     __attribute__ ((__nonnull__ (1)));
__extension__
extern unsigned long long int strtouq (const char *__restrict __nptr, char **__restrict __endptr, int __base) __asm__ ("" "__isoc23_strtoull") __attribute__ ((__nothrow__ , __leaf__))



     __attribute__ ((__nonnull__ (1)));

__extension__
extern long long int strtoll (const char *__restrict __nptr, char **__restrict __endptr, int __base) __asm__ ("" "__isoc23_strtoll") __attribute__ ((__nothrow__ , __leaf__))


     __attribute__ ((__nonnull__ (1)));
__extension__
extern unsigned long long int strtoull (const char *__restrict __nptr, char **__restrict __endptr, int __base) __asm__ ("" "__isoc23_strtoull") __attribute__ ((__nothrow__ , __leaf__))



     __attribute__ ((__nonnull__ (1)));
# 278 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern int strfromd (char *__dest, size_t __size, const char *__format,
       double __f)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));

extern int strfromf (char *__dest, size_t __size, const char *__format,
       float __f)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));

extern int strfroml (char *__dest, size_t __size, const char *__format,
       long double __f)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));
# 298 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern int strfromf32 (char *__dest, size_t __size, const char * __format,
         _Float32 __f)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));



extern int strfromf64 (char *__dest, size_t __size, const char * __format,
         _Float64 __f)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));



extern int strfromf128 (char *__dest, size_t __size, const char * __format,
   _Float128 __f)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));



extern int strfromf32x (char *__dest, size_t __size, const char * __format,
   _Float32x __f)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));



extern int strfromf64x (char *__dest, size_t __size, const char * __format,
   _Float64x __f)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));
# 340 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern long int strtol_l (const char *__restrict __nptr,
     char **__restrict __endptr, int __base,
     locale_t __loc) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 4)));

extern unsigned long int strtoul_l (const char *__restrict __nptr,
        char **__restrict __endptr,
        int __base, locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 4)));

__extension__
extern long long int strtoll_l (const char *__restrict __nptr,
    char **__restrict __endptr, int __base,
    locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 4)));

__extension__
extern unsigned long long int strtoull_l (const char *__restrict __nptr,
       char **__restrict __endptr,
       int __base, locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 4)));





extern long int strtol_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) __asm__ ("" "__isoc23_strtol_l") __attribute__ ((__nothrow__ , __leaf__))



     __attribute__ ((__nonnull__ (1, 4)));
extern unsigned long int strtoul_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) __asm__ ("" "__isoc23_strtoul_l") __attribute__ ((__nothrow__ , __leaf__))




     __attribute__ ((__nonnull__ (1, 4)));
__extension__
extern long long int strtoll_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) __asm__ ("" "__isoc23_strtoll_l") __attribute__ ((__nothrow__ , __leaf__))




     __attribute__ ((__nonnull__ (1, 4)));
__extension__
extern unsigned long long int strtoull_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) __asm__ ("" "__isoc23_strtoull_l") __attribute__ ((__nothrow__ , __leaf__))




     __attribute__ ((__nonnull__ (1, 4)));
# 415 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern double strtod_l (const char *__restrict __nptr,
   char **__restrict __endptr, locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));

extern float strtof_l (const char *__restrict __nptr,
         char **__restrict __endptr, locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));

extern long double strtold_l (const char *__restrict __nptr,
         char **__restrict __endptr,
         locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));
# 436 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern _Float32 strtof32_l (const char *__restrict __nptr,
       char **__restrict __endptr,
       locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));



extern _Float64 strtof64_l (const char *__restrict __nptr,
       char **__restrict __endptr,
       locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));



extern _Float128 strtof128_l (const char *__restrict __nptr,
         char **__restrict __endptr,
         locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));



extern _Float32x strtof32x_l (const char *__restrict __nptr,
         char **__restrict __endptr,
         locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));



extern _Float64x strtof64x_l (const char *__restrict __nptr,
         char **__restrict __endptr,
         locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));
# 480 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern __inline __attribute__ ((__gnu_inline__)) int
__attribute__ ((__nothrow__ , __leaf__)) atoi (const char *__nptr)
{
  return (int) strtol (__nptr, (char **) ((void *)0), 10);
}
extern __inline __attribute__ ((__gnu_inline__)) long int
__attribute__ ((__nothrow__ , __leaf__)) atol (const char *__nptr)
{
  return strtol (__nptr, (char **) ((void *)0), 10);
}


__extension__ extern __inline __attribute__ ((__gnu_inline__)) long long int
__attribute__ ((__nothrow__ , __leaf__)) atoll (const char *__nptr)
{
  return strtoll (__nptr, (char **) ((void *)0), 10);
}
# 505 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern char *l64a (long int __n) __attribute__ ((__nothrow__ , __leaf__)) ;


extern long int a64l (const char *__s)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
# 521 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern long int random (void) __attribute__ ((__nothrow__ , __leaf__));


extern void srandom (unsigned int __seed) __attribute__ ((__nothrow__ , __leaf__));





extern char *initstate (unsigned int __seed, char *__statebuf,
   size_t __statelen) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));



extern char *setstate (char *__statebuf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));







struct random_data
  {
    int32_t *fptr;
    int32_t *rptr;
    int32_t *state;
    int rand_type;
    int rand_deg;
    int rand_sep;
    int32_t *end_ptr;
  };

extern int random_r (struct random_data *__restrict __buf,
       int32_t *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));

extern int srandom_r (unsigned int __seed, struct random_data *__buf)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));

extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
   size_t __statelen,
   struct random_data *__restrict __buf)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4)));

extern int setstate_r (char *__restrict __statebuf,
         struct random_data *__restrict __buf)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));





extern int rand (void) __attribute__ ((__nothrow__ , __leaf__));

extern void srand (unsigned int __seed) __attribute__ ((__nothrow__ , __leaf__));



extern int rand_r (unsigned int *__seed) __attribute__ ((__nothrow__ , __leaf__));







extern double drand48 (void) __attribute__ ((__nothrow__ , __leaf__));
extern double erand48 (unsigned short int __xsubi[3]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern long int lrand48 (void) __attribute__ ((__nothrow__ , __leaf__));
extern long int nrand48 (unsigned short int __xsubi[3])
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern long int mrand48 (void) __attribute__ ((__nothrow__ , __leaf__));
extern long int jrand48 (unsigned short int __xsubi[3])
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern void srand48 (long int __seedval) __attribute__ ((__nothrow__ , __leaf__));
extern unsigned short int *seed48 (unsigned short int __seed16v[3])
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
extern void lcong48 (unsigned short int __param[7]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));





struct drand48_data
  {
    unsigned short int __x[3];
    unsigned short int __old_x[3];
    unsigned short int __c;
    unsigned short int __init;
    __extension__ unsigned long long int __a;

  };


extern int drand48_r (struct drand48_data *__restrict __buffer,
        double *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
extern int erand48_r (unsigned short int __xsubi[3],
        struct drand48_data *__restrict __buffer,
        double *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int lrand48_r (struct drand48_data *__restrict __buffer,
        long int *__restrict __result)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
extern int nrand48_r (unsigned short int __xsubi[3],
        struct drand48_data *__restrict __buffer,
        long int *__restrict __result)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int mrand48_r (struct drand48_data *__restrict __buffer,
        long int *__restrict __result)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
extern int jrand48_r (unsigned short int __xsubi[3],
        struct drand48_data *__restrict __buffer,
        long int *__restrict __result)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));

extern int seed48_r (unsigned short int __seed16v[3],
       struct drand48_data *__buffer) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));

extern int lcong48_r (unsigned short int __param[7],
        struct drand48_data *__buffer)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern __uint32_t arc4random (void)
     __attribute__ ((__nothrow__ , __leaf__)) ;


extern void arc4random_buf (void *__buf, size_t __size)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern __uint32_t arc4random_uniform (__uint32_t __upper_bound)
     __attribute__ ((__nothrow__ , __leaf__)) ;




extern void *malloc (size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__))
     __attribute__ ((__alloc_size__ (1))) ;

extern void *calloc (size_t __nmemb, size_t __size)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (1, 2))) ;






extern void *realloc (void *__ptr, size_t __size)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__alloc_size__ (2)));


extern void free (void *__ptr) __attribute__ ((__nothrow__ , __leaf__));







extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__))
     __attribute__ ((__alloc_size__ (2, 3)))
    __attribute__ ((__malloc__ (__builtin_free, 1)));


extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__ (reallocarray, 1)));



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/alloca.h" 1 3 4
# 19 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/alloca.h" 3 4
#define _ALLOCA_H 1



#define __need_size_t 
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 1 3 4
# 158 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_ptrdiff_t
# 237 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_size_t
# 349 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_wchar_t
# 399 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef NULL




#define NULL ((void *)0)





#undef __need_NULL




#undef offsetof
#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
# 25 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/alloca.h" 2 3 4




#undef alloca


extern void *alloca (size_t __size) __attribute__ ((__nothrow__ , __leaf__));


#define alloca(size) __builtin_alloca (size)



# 707 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 2 3 4





extern void *valloc (size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__))
     __attribute__ ((__alloc_size__ (1))) ;




extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;




extern void *aligned_alloc (size_t __alignment, size_t __size)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__alloc_align__ (1)))
     __attribute__ ((__alloc_size__ (2))) ;



extern void abort (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__));



extern int atexit (void (*__func) (void)) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));







extern int at_quick_exit (void (*__func) (void)) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));






extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));





extern void exit (int __status) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__));





extern void quick_exit (int __status) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__));





extern void _Exit (int __status) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__));




extern char *getenv (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;




extern char *secure_getenv (const char *__name)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;






extern int putenv (char *__string) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));





extern int setenv (const char *__name, const char *__value, int __replace)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));


extern int unsetenv (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));






extern int clearenv (void) __attribute__ ((__nothrow__ , __leaf__));
# 814 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern char *mktemp (char *__template) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
# 827 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) ;
# 837 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) ;
# 849 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern int mkstemps (char *__template, int __suffixlen) __attribute__ ((__nonnull__ (1))) ;
# 859 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern int mkstemps64 (char *__template, int __suffixlen)
     __attribute__ ((__nonnull__ (1))) ;
# 870 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern char *mkdtemp (char *__template) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;
# 881 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern int mkostemp (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ;
# 891 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ;
# 901 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern int mkostemps (char *__template, int __suffixlen, int __flags)
     __attribute__ ((__nonnull__ (1))) ;
# 913 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
     __attribute__ ((__nonnull__ (1))) ;
# 923 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern int system (const char *__command) ;





extern char *canonicalize_file_name (const char *__name)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__malloc__))
     __attribute__ ((__malloc__ (__builtin_free, 1))) ;
# 940 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern char *realpath (const char *__restrict __name,
         char *__restrict __resolved) __attribute__ ((__nothrow__ , __leaf__)) ;





#define __COMPAR_FN_T 
typedef int (*__compar_fn_t) (const void *, const void *);


typedef __compar_fn_t comparison_fn_t;



typedef int (*__compar_d_fn_t) (const void *, const void *, void *);




extern void *bsearch (const void *__key, const void *__base,
        size_t __nmemb, size_t __size, __compar_fn_t __compar)
     __attribute__ ((__nonnull__ (1, 2, 5))) ;


# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/stdlib-bsearch.h" 1 3 4
# 19 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/stdlib-bsearch.h" 3 4
extern __inline __attribute__ ((__gnu_inline__)) void *
bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size,
  __compar_fn_t __compar)
{
  size_t __l, __u, __idx;
  const void *__p;
  int __comparison;

  __l = 0;
  __u = __nmemb;
  while (__l < __u)
    {
      __idx = (__l + __u) / 2;
      __p = (const void *) (((const char *) __base) + (__idx * __size));
      __comparison = (*__compar) (__key, __p);
      if (__comparison < 0)
 __u = __idx;
      else if (__comparison > 0)
 __l = __idx + 1;
      else
 {

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wcast-qual"

   return (void *) __p;

#pragma GCC diagnostic pop

 }
    }

  return ((void *)0);
}
# 966 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 2 3 4




extern void qsort (void *__base, size_t __nmemb, size_t __size,
     __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));

extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
       __compar_d_fn_t __compar, void *__arg)
  __attribute__ ((__nonnull__ (1, 4)));




extern int abs (int __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ;
extern long int labs (long int __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ;


__extension__ extern long long int llabs (long long int __x)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ;






extern div_t div (int __numer, int __denom)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ;
extern ldiv_t ldiv (long int __numer, long int __denom)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ;


__extension__ extern lldiv_t lldiv (long long int __numer,
        long long int __denom)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ;
# 1012 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) ;




extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) ;




extern char *gcvt (double __value, int __ndigit, char *__buf)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3))) ;




extern char *qecvt (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) ;
extern char *qfcvt (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) ;
extern char *qgcvt (long double __value, int __ndigit, char *__buf)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3))) ;




extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign, char *__restrict __buf,
     size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5)));
extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign, char *__restrict __buf,
     size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5)));

extern int qecvt_r (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign,
      char *__restrict __buf, size_t __len)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5)));
extern int qfcvt_r (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign,
      char *__restrict __buf, size_t __len)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5)));





extern int mblen (const char *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__));


extern int mbtowc (wchar_t *__restrict __pwc,
     const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__ , __leaf__));


extern int wctomb (char *__s, wchar_t __wchar) __attribute__ ((__nothrow__ , __leaf__));



extern size_t mbstowcs (wchar_t *__restrict __pwcs,
   const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__ , __leaf__))
    __attribute__ ((__access__ (__read_only__, 2)));

extern size_t wcstombs (char *__restrict __s,
   const wchar_t *__restrict __pwcs, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__))
  __attribute__ ((__access__ (__write_only__, 1, 3)))
  __attribute__ ((__access__ (__read_only__, 2)));






extern int rpmatch (const char *__response) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;
# 1099 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
extern int getsubopt (char **__restrict __optionp,
        char *const *__restrict __tokens,
        char **__restrict __valuep)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2, 3))) ;







extern int posix_openpt (int __oflag) ;







extern int grantpt (int __fd) __attribute__ ((__nothrow__ , __leaf__));



extern int unlockpt (int __fd) __attribute__ ((__nothrow__ , __leaf__));




extern char *ptsname (int __fd) __attribute__ ((__nothrow__ , __leaf__)) ;






extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) __attribute__ ((__access__ (__write_only__, 2, 3)));


extern int getpt (void);






extern int getloadavg (double __loadavg[], int __nelem)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
# 1155 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/stdlib-float.h" 1 3 4
# 24 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/stdlib-float.h" 3 4
extern __inline __attribute__ ((__gnu_inline__)) double
__attribute__ ((__nothrow__ , __leaf__)) atof (const char *__nptr)
{
  return strtod (__nptr, (char **) ((void *)0));
}
# 1156 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 2 3 4
# 1167 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/stdlib.h" 3 4

# 135 "system.h" 2







#define SUCCESS_EXIT_CODE EXIT_SUCCESS







#define FATAL_EXIT_CODE EXIT_FAILURE






# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 1 3 4
# 23 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
#define _UNISTD_H 1










#define _POSIX_VERSION 200809L
# 53 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
#define __POSIX2_THIS_VERSION 200809L
# 67 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
#define _POSIX2_VERSION __POSIX2_THIS_VERSION


#define _POSIX2_C_VERSION __POSIX2_THIS_VERSION



#define _POSIX2_C_BIND __POSIX2_THIS_VERSION



#define _POSIX2_C_DEV __POSIX2_THIS_VERSION



#define _POSIX2_SW_DEV __POSIX2_THIS_VERSION



#define _POSIX2_LOCALEDEF __POSIX2_THIS_VERSION



#define _XOPEN_VERSION 700
# 100 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
#define _XOPEN_XCU_VERSION 4


#define _XOPEN_XPG2 1
#define _XOPEN_XPG3 1
#define _XOPEN_XPG4 1


#define _XOPEN_UNIX 1



#define _XOPEN_ENH_I18N 1


#define _XOPEN_LEGACY 1
# 202 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/posix_opt.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/posix_opt.h" 3 4
#define _BITS_POSIX_OPT_H 1


#define _POSIX_JOB_CONTROL 1


#define _POSIX_SAVED_IDS 1





#define _POSIX_PRIORITY_SCHEDULING 200809L


#define _POSIX_SYNCHRONIZED_IO 200809L


#define _POSIX_FSYNC 200809L


#define _POSIX_MAPPED_FILES 200809L


#define _POSIX_MEMLOCK 200809L


#define _POSIX_MEMLOCK_RANGE 200809L


#define _POSIX_MEMORY_PROTECTION 200809L


#define _POSIX_CHOWN_RESTRICTED 0



#define _POSIX_VDISABLE '\0'


#define _POSIX_NO_TRUNC 1


#define _XOPEN_REALTIME 1


#define _XOPEN_REALTIME_THREADS 1


#define _XOPEN_SHM 1


#define _POSIX_THREADS 200809L


#define _POSIX_REENTRANT_FUNCTIONS 1
#define _POSIX_THREAD_SAFE_FUNCTIONS 200809L


#define _POSIX_THREAD_PRIORITY_SCHEDULING 200809L


#define _POSIX_THREAD_ATTR_STACKSIZE 200809L


#define _POSIX_THREAD_ATTR_STACKADDR 200809L


#define _POSIX_THREAD_PRIO_INHERIT 200809L



#define _POSIX_THREAD_PRIO_PROTECT 200809L



#define _POSIX_THREAD_ROBUST_PRIO_INHERIT 200809L


#define _POSIX_THREAD_ROBUST_PRIO_PROTECT -1



#define _POSIX_SEMAPHORES 200809L


#define _POSIX_REALTIME_SIGNALS 200809L


#define _POSIX_ASYNCHRONOUS_IO 200809L
#define _POSIX_ASYNC_IO 1

#define _LFS_ASYNCHRONOUS_IO 1

#define _POSIX_PRIORITIZED_IO 200809L


#define _LFS64_ASYNCHRONOUS_IO 1


#define _LFS_LARGEFILE 1
#define _LFS64_LARGEFILE 1
#define _LFS64_STDIO 1


#define _POSIX_SHARED_MEMORY_OBJECTS 200809L


#define _POSIX_CPUTIME 0


#define _POSIX_THREAD_CPUTIME 0


#define _POSIX_REGEXP 1


#define _POSIX_READER_WRITER_LOCKS 200809L


#define _POSIX_SHELL 1


#define _POSIX_TIMEOUTS 200809L


#define _POSIX_SPIN_LOCKS 200809L


#define _POSIX_SPAWN 200809L


#define _POSIX_TIMERS 200809L


#define _POSIX_BARRIERS 200809L


#define _POSIX_MESSAGE_PASSING 200809L


#define _POSIX_THREAD_PROCESS_SHARED 200809L


#define _POSIX_MONOTONIC_CLOCK 0


#define _POSIX_CLOCK_SELECTION 200809L


#define _POSIX_ADVISORY_INFO 200809L


#define _POSIX_IPV6 200809L


#define _POSIX_RAW_SOCKETS 200809L


#define _POSIX2_CHAR_TERM 200809L


#define _POSIX_SPORADIC_SERVER -1
#define _POSIX_THREAD_SPORADIC_SERVER -1


#define _POSIX_TRACE -1
#define _POSIX_TRACE_EVENT_FILTER -1
#define _POSIX_TRACE_INHERIT -1
#define _POSIX_TRACE_LOG -1


#define _POSIX_TYPED_MEMORY_OBJECTS -1
# 203 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 2 3 4



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/environments.h" 1 3 4
# 22 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/environments.h" 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/wordsize.h" 1 3 4
# 18 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
#define __WORDSIZE_TIME64_COMPAT32 0
# 23 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/environments.h" 2 3 4
# 45 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/environments.h" 3 4
#define _POSIX_V7_ILP32_OFF32 -1
#define _POSIX_V7_ILP32_OFFBIG -1
#define _POSIX_V6_ILP32_OFF32 -1
#define _POSIX_V6_ILP32_OFFBIG -1
#define _XBS5_ILP32_OFF32 -1
#define _XBS5_ILP32_OFFBIG -1


#define _POSIX_V7_LPBIG_OFFBIG -1
#define _POSIX_V6_LPBIG_OFFBIG -1
#define _XBS5_LPBIG_OFFBIG -1


#define _POSIX_V7_LP64_OFF64 1
#define _POSIX_V6_LP64_OFF64 1
#define _XBS5_LP64_OFF64 1
# 207 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 2 3 4



#define STDIN_FILENO 0
#define STDOUT_FILENO 1
#define STDERR_FILENO 2
# 224 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
#define __need_size_t 
#define __need_NULL 
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 1 3 4
# 158 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_ptrdiff_t
# 237 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_size_t
# 349 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_wchar_t
# 399 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef NULL




#define NULL ((void *)0)





#undef __need_NULL




#undef offsetof
#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
# 227 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 2 3 4
# 267 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
typedef __intptr_t intptr_t;
#define __intptr_t_defined 





typedef __socklen_t socklen_t;
#define __socklen_t_defined 





#define R_OK 4
#define W_OK 2
#define X_OK 1
#define F_OK 0


extern int access (const char *__name, int __type) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));




extern int euidaccess (const char *__name, int __type)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int eaccess (const char *__name, int __type)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int execveat (int __fd, const char *__path, char *const __argv[],
                     char *const __envp[], int __flags)
    __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));






extern int faccessat (int __fd, const char *__file, int __type, int __flag)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) ;
# 327 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
#define L_SET SEEK_SET
#define L_INCR SEEK_CUR
#define L_XTND SEEK_END
# 339 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
extern __off_t lseek (int __fd, __off_t __offset, int __whence) __attribute__ ((__nothrow__ , __leaf__));
# 350 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence)
     __attribute__ ((__nothrow__ , __leaf__));






extern int close (int __fd);




extern void closefrom (int __lowfd) __attribute__ ((__nothrow__ , __leaf__));







extern ssize_t read (int __fd, void *__buf, size_t __nbytes)
    __attribute__ ((__access__ (__write_only__, 2, 3)));





extern ssize_t write (int __fd, const void *__buf, size_t __n)
    __attribute__ ((__access__ (__read_only__, 2, 3)));
# 389 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
extern ssize_t pread (int __fd, void *__buf, size_t __nbytes,
        __off_t __offset)
    __attribute__ ((__access__ (__write_only__, 2, 3)));






extern ssize_t pwrite (int __fd, const void *__buf, size_t __n,
         __off_t __offset)
    __attribute__ ((__access__ (__read_only__, 2, 3)));
# 422 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes,
   __off64_t __offset)
    __attribute__ ((__access__ (__write_only__, 2, 3)));


extern ssize_t pwrite64 (int __fd, const void *__buf, size_t __n,
    __off64_t __offset)
    __attribute__ ((__access__ (__read_only__, 2, 3)));







extern int pipe (int __pipedes[2]) __attribute__ ((__nothrow__ , __leaf__)) ;




extern int pipe2 (int __pipedes[2], int __flags) __attribute__ ((__nothrow__ , __leaf__)) ;
# 452 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
extern unsigned int alarm (unsigned int __seconds) __attribute__ ((__nothrow__ , __leaf__));
# 464 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
extern unsigned int sleep (unsigned int __seconds);







extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval)
     __attribute__ ((__nothrow__ , __leaf__));






extern int usleep (__useconds_t __useconds);
# 489 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
extern int pause (void);



extern int chown (const char *__file, __uid_t __owner, __gid_t __group)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;



extern int fchown (int __fd, __uid_t __owner, __gid_t __group) __attribute__ ((__nothrow__ , __leaf__)) ;




extern int lchown (const char *__file, __uid_t __owner, __gid_t __group)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;






extern int fchownat (int __fd, const char *__file, __uid_t __owner,
       __gid_t __group, int __flag)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) ;



extern int chdir (const char *__path) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;



extern int fchdir (int __fd) __attribute__ ((__nothrow__ , __leaf__)) ;
# 531 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
extern char *getcwd (char *__buf, size_t __size) __attribute__ ((__nothrow__ , __leaf__)) ;





extern char *get_current_dir_name (void) __attribute__ ((__nothrow__ , __leaf__));







extern char *getwd (char *__buf)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__))
    __attribute__ ((__access__ (__write_only__, 1)));




extern int dup (int __fd) __attribute__ ((__nothrow__ , __leaf__)) ;


extern int dup2 (int __fd, int __fd2) __attribute__ ((__nothrow__ , __leaf__));




extern int dup3 (int __fd, int __fd2, int __flags) __attribute__ ((__nothrow__ , __leaf__));



extern char **__environ;

extern char **environ;





extern int execve (const char *__path, char *const __argv[],
     char *const __envp[]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));




extern int fexecve (int __fd, char *const __argv[], char *const __envp[])
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));




extern int execv (const char *__path, char *const __argv[])
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));



extern int execle (const char *__path, const char *__arg, ...)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));



extern int execl (const char *__path, const char *__arg, ...)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));



extern int execvp (const char *__file, char *const __argv[])
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));




extern int execlp (const char *__file, const char *__arg, ...)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));




extern int execvpe (const char *__file, char *const __argv[],
      char *const __envp[])
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));





extern int nice (int __inc) __attribute__ ((__nothrow__ , __leaf__)) ;




extern void _exit (int __status) __attribute__ ((__noreturn__));





# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/confname.h" 1 3 4
# 24 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/confname.h" 3 4
enum
  {
    _PC_LINK_MAX,
#define _PC_LINK_MAX _PC_LINK_MAX
    _PC_MAX_CANON,
#define _PC_MAX_CANON _PC_MAX_CANON
    _PC_MAX_INPUT,
#define _PC_MAX_INPUT _PC_MAX_INPUT
    _PC_NAME_MAX,
#define _PC_NAME_MAX _PC_NAME_MAX
    _PC_PATH_MAX,
#define _PC_PATH_MAX _PC_PATH_MAX
    _PC_PIPE_BUF,
#define _PC_PIPE_BUF _PC_PIPE_BUF
    _PC_CHOWN_RESTRICTED,
#define _PC_CHOWN_RESTRICTED _PC_CHOWN_RESTRICTED
    _PC_NO_TRUNC,
#define _PC_NO_TRUNC _PC_NO_TRUNC
    _PC_VDISABLE,
#define _PC_VDISABLE _PC_VDISABLE
    _PC_SYNC_IO,
#define _PC_SYNC_IO _PC_SYNC_IO
    _PC_ASYNC_IO,
#define _PC_ASYNC_IO _PC_ASYNC_IO
    _PC_PRIO_IO,
#define _PC_PRIO_IO _PC_PRIO_IO
    _PC_SOCK_MAXBUF,
#define _PC_SOCK_MAXBUF _PC_SOCK_MAXBUF
    _PC_FILESIZEBITS,
#define _PC_FILESIZEBITS _PC_FILESIZEBITS
    _PC_REC_INCR_XFER_SIZE,
#define _PC_REC_INCR_XFER_SIZE _PC_REC_INCR_XFER_SIZE
    _PC_REC_MAX_XFER_SIZE,
#define _PC_REC_MAX_XFER_SIZE _PC_REC_MAX_XFER_SIZE
    _PC_REC_MIN_XFER_SIZE,
#define _PC_REC_MIN_XFER_SIZE _PC_REC_MIN_XFER_SIZE
    _PC_REC_XFER_ALIGN,
#define _PC_REC_XFER_ALIGN _PC_REC_XFER_ALIGN
    _PC_ALLOC_SIZE_MIN,
#define _PC_ALLOC_SIZE_MIN _PC_ALLOC_SIZE_MIN
    _PC_SYMLINK_MAX,
#define _PC_SYMLINK_MAX _PC_SYMLINK_MAX
    _PC_2_SYMLINKS
#define _PC_2_SYMLINKS _PC_2_SYMLINKS
  };


enum
  {
    _SC_ARG_MAX,
#define _SC_ARG_MAX _SC_ARG_MAX
    _SC_CHILD_MAX,
#define _SC_CHILD_MAX _SC_CHILD_MAX
    _SC_CLK_TCK,
#define _SC_CLK_TCK _SC_CLK_TCK
    _SC_NGROUPS_MAX,
#define _SC_NGROUPS_MAX _SC_NGROUPS_MAX
    _SC_OPEN_MAX,
#define _SC_OPEN_MAX _SC_OPEN_MAX
    _SC_STREAM_MAX,
#define _SC_STREAM_MAX _SC_STREAM_MAX
    _SC_TZNAME_MAX,
#define _SC_TZNAME_MAX _SC_TZNAME_MAX
    _SC_JOB_CONTROL,
#define _SC_JOB_CONTROL _SC_JOB_CONTROL
    _SC_SAVED_IDS,
#define _SC_SAVED_IDS _SC_SAVED_IDS
    _SC_REALTIME_SIGNALS,
#define _SC_REALTIME_SIGNALS _SC_REALTIME_SIGNALS
    _SC_PRIORITY_SCHEDULING,
#define _SC_PRIORITY_SCHEDULING _SC_PRIORITY_SCHEDULING
    _SC_TIMERS,
#define _SC_TIMERS _SC_TIMERS
    _SC_ASYNCHRONOUS_IO,
#define _SC_ASYNCHRONOUS_IO _SC_ASYNCHRONOUS_IO
    _SC_PRIORITIZED_IO,
#define _SC_PRIORITIZED_IO _SC_PRIORITIZED_IO
    _SC_SYNCHRONIZED_IO,
#define _SC_SYNCHRONIZED_IO _SC_SYNCHRONIZED_IO
    _SC_FSYNC,
#define _SC_FSYNC _SC_FSYNC
    _SC_MAPPED_FILES,
#define _SC_MAPPED_FILES _SC_MAPPED_FILES
    _SC_MEMLOCK,
#define _SC_MEMLOCK _SC_MEMLOCK
    _SC_MEMLOCK_RANGE,
#define _SC_MEMLOCK_RANGE _SC_MEMLOCK_RANGE
    _SC_MEMORY_PROTECTION,
#define _SC_MEMORY_PROTECTION _SC_MEMORY_PROTECTION
    _SC_MESSAGE_PASSING,
#define _SC_MESSAGE_PASSING _SC_MESSAGE_PASSING
    _SC_SEMAPHORES,
#define _SC_SEMAPHORES _SC_SEMAPHORES
    _SC_SHARED_MEMORY_OBJECTS,
#define _SC_SHARED_MEMORY_OBJECTS _SC_SHARED_MEMORY_OBJECTS
    _SC_AIO_LISTIO_MAX,
#define _SC_AIO_LISTIO_MAX _SC_AIO_LISTIO_MAX
    _SC_AIO_MAX,
#define _SC_AIO_MAX _SC_AIO_MAX
    _SC_AIO_PRIO_DELTA_MAX,
#define _SC_AIO_PRIO_DELTA_MAX _SC_AIO_PRIO_DELTA_MAX
    _SC_DELAYTIMER_MAX,
#define _SC_DELAYTIMER_MAX _SC_DELAYTIMER_MAX
    _SC_MQ_OPEN_MAX,
#define _SC_MQ_OPEN_MAX _SC_MQ_OPEN_MAX
    _SC_MQ_PRIO_MAX,
#define _SC_MQ_PRIO_MAX _SC_MQ_PRIO_MAX
    _SC_VERSION,
#define _SC_VERSION _SC_VERSION
    _SC_PAGESIZE,
#define _SC_PAGESIZE _SC_PAGESIZE
#define _SC_PAGE_SIZE _SC_PAGESIZE
    _SC_RTSIG_MAX,
#define _SC_RTSIG_MAX _SC_RTSIG_MAX
    _SC_SEM_NSEMS_MAX,
#define _SC_SEM_NSEMS_MAX _SC_SEM_NSEMS_MAX
    _SC_SEM_VALUE_MAX,
#define _SC_SEM_VALUE_MAX _SC_SEM_VALUE_MAX
    _SC_SIGQUEUE_MAX,
#define _SC_SIGQUEUE_MAX _SC_SIGQUEUE_MAX
    _SC_TIMER_MAX,
#define _SC_TIMER_MAX _SC_TIMER_MAX



    _SC_BC_BASE_MAX,
#define _SC_BC_BASE_MAX _SC_BC_BASE_MAX
    _SC_BC_DIM_MAX,
#define _SC_BC_DIM_MAX _SC_BC_DIM_MAX
    _SC_BC_SCALE_MAX,
#define _SC_BC_SCALE_MAX _SC_BC_SCALE_MAX
    _SC_BC_STRING_MAX,
#define _SC_BC_STRING_MAX _SC_BC_STRING_MAX
    _SC_COLL_WEIGHTS_MAX,
#define _SC_COLL_WEIGHTS_MAX _SC_COLL_WEIGHTS_MAX
    _SC_EQUIV_CLASS_MAX,
#define _SC_EQUIV_CLASS_MAX _SC_EQUIV_CLASS_MAX
    _SC_EXPR_NEST_MAX,
#define _SC_EXPR_NEST_MAX _SC_EXPR_NEST_MAX
    _SC_LINE_MAX,
#define _SC_LINE_MAX _SC_LINE_MAX
    _SC_RE_DUP_MAX,
#define _SC_RE_DUP_MAX _SC_RE_DUP_MAX
    _SC_CHARCLASS_NAME_MAX,
#define _SC_CHARCLASS_NAME_MAX _SC_CHARCLASS_NAME_MAX

    _SC_2_VERSION,
#define _SC_2_VERSION _SC_2_VERSION
    _SC_2_C_BIND,
#define _SC_2_C_BIND _SC_2_C_BIND
    _SC_2_C_DEV,
#define _SC_2_C_DEV _SC_2_C_DEV
    _SC_2_FORT_DEV,
#define _SC_2_FORT_DEV _SC_2_FORT_DEV
    _SC_2_FORT_RUN,
#define _SC_2_FORT_RUN _SC_2_FORT_RUN
    _SC_2_SW_DEV,
#define _SC_2_SW_DEV _SC_2_SW_DEV
    _SC_2_LOCALEDEF,
#define _SC_2_LOCALEDEF _SC_2_LOCALEDEF

    _SC_PII,
#define _SC_PII _SC_PII
    _SC_PII_XTI,
#define _SC_PII_XTI _SC_PII_XTI
    _SC_PII_SOCKET,
#define _SC_PII_SOCKET _SC_PII_SOCKET
    _SC_PII_INTERNET,
#define _SC_PII_INTERNET _SC_PII_INTERNET
    _SC_PII_OSI,
#define _SC_PII_OSI _SC_PII_OSI
    _SC_POLL,
#define _SC_POLL _SC_POLL
    _SC_SELECT,
#define _SC_SELECT _SC_SELECT
    _SC_UIO_MAXIOV,
#define _SC_UIO_MAXIOV _SC_UIO_MAXIOV
    _SC_IOV_MAX = _SC_UIO_MAXIOV,
#define _SC_IOV_MAX _SC_IOV_MAX
    _SC_PII_INTERNET_STREAM,
#define _SC_PII_INTERNET_STREAM _SC_PII_INTERNET_STREAM
    _SC_PII_INTERNET_DGRAM,
#define _SC_PII_INTERNET_DGRAM _SC_PII_INTERNET_DGRAM
    _SC_PII_OSI_COTS,
#define _SC_PII_OSI_COTS _SC_PII_OSI_COTS
    _SC_PII_OSI_CLTS,
#define _SC_PII_OSI_CLTS _SC_PII_OSI_CLTS
    _SC_PII_OSI_M,
#define _SC_PII_OSI_M _SC_PII_OSI_M
    _SC_T_IOV_MAX,
#define _SC_T_IOV_MAX _SC_T_IOV_MAX


    _SC_THREADS,
#define _SC_THREADS _SC_THREADS
    _SC_THREAD_SAFE_FUNCTIONS,
#define _SC_THREAD_SAFE_FUNCTIONS _SC_THREAD_SAFE_FUNCTIONS
    _SC_GETGR_R_SIZE_MAX,
#define _SC_GETGR_R_SIZE_MAX _SC_GETGR_R_SIZE_MAX
    _SC_GETPW_R_SIZE_MAX,
#define _SC_GETPW_R_SIZE_MAX _SC_GETPW_R_SIZE_MAX
    _SC_LOGIN_NAME_MAX,
#define _SC_LOGIN_NAME_MAX _SC_LOGIN_NAME_MAX
    _SC_TTY_NAME_MAX,
#define _SC_TTY_NAME_MAX _SC_TTY_NAME_MAX
    _SC_THREAD_DESTRUCTOR_ITERATIONS,
#define _SC_THREAD_DESTRUCTOR_ITERATIONS _SC_THREAD_DESTRUCTOR_ITERATIONS
    _SC_THREAD_KEYS_MAX,
#define _SC_THREAD_KEYS_MAX _SC_THREAD_KEYS_MAX
    _SC_THREAD_STACK_MIN,
#define _SC_THREAD_STACK_MIN _SC_THREAD_STACK_MIN
    _SC_THREAD_THREADS_MAX,
#define _SC_THREAD_THREADS_MAX _SC_THREAD_THREADS_MAX
    _SC_THREAD_ATTR_STACKADDR,
#define _SC_THREAD_ATTR_STACKADDR _SC_THREAD_ATTR_STACKADDR
    _SC_THREAD_ATTR_STACKSIZE,
#define _SC_THREAD_ATTR_STACKSIZE _SC_THREAD_ATTR_STACKSIZE
    _SC_THREAD_PRIORITY_SCHEDULING,
#define _SC_THREAD_PRIORITY_SCHEDULING _SC_THREAD_PRIORITY_SCHEDULING
    _SC_THREAD_PRIO_INHERIT,
#define _SC_THREAD_PRIO_INHERIT _SC_THREAD_PRIO_INHERIT
    _SC_THREAD_PRIO_PROTECT,
#define _SC_THREAD_PRIO_PROTECT _SC_THREAD_PRIO_PROTECT
    _SC_THREAD_PROCESS_SHARED,
#define _SC_THREAD_PROCESS_SHARED _SC_THREAD_PROCESS_SHARED

    _SC_NPROCESSORS_CONF,
#define _SC_NPROCESSORS_CONF _SC_NPROCESSORS_CONF
    _SC_NPROCESSORS_ONLN,
#define _SC_NPROCESSORS_ONLN _SC_NPROCESSORS_ONLN
    _SC_PHYS_PAGES,
#define _SC_PHYS_PAGES _SC_PHYS_PAGES
    _SC_AVPHYS_PAGES,
#define _SC_AVPHYS_PAGES _SC_AVPHYS_PAGES
    _SC_ATEXIT_MAX,
#define _SC_ATEXIT_MAX _SC_ATEXIT_MAX
    _SC_PASS_MAX,
#define _SC_PASS_MAX _SC_PASS_MAX

    _SC_XOPEN_VERSION,
#define _SC_XOPEN_VERSION _SC_XOPEN_VERSION
    _SC_XOPEN_XCU_VERSION,
#define _SC_XOPEN_XCU_VERSION _SC_XOPEN_XCU_VERSION
    _SC_XOPEN_UNIX,
#define _SC_XOPEN_UNIX _SC_XOPEN_UNIX
    _SC_XOPEN_CRYPT,
#define _SC_XOPEN_CRYPT _SC_XOPEN_CRYPT
    _SC_XOPEN_ENH_I18N,
#define _SC_XOPEN_ENH_I18N _SC_XOPEN_ENH_I18N
    _SC_XOPEN_SHM,
#define _SC_XOPEN_SHM _SC_XOPEN_SHM

    _SC_2_CHAR_TERM,
#define _SC_2_CHAR_TERM _SC_2_CHAR_TERM
    _SC_2_C_VERSION,
#define _SC_2_C_VERSION _SC_2_C_VERSION
    _SC_2_UPE,
#define _SC_2_UPE _SC_2_UPE

    _SC_XOPEN_XPG2,
#define _SC_XOPEN_XPG2 _SC_XOPEN_XPG2
    _SC_XOPEN_XPG3,
#define _SC_XOPEN_XPG3 _SC_XOPEN_XPG3
    _SC_XOPEN_XPG4,
#define _SC_XOPEN_XPG4 _SC_XOPEN_XPG4

    _SC_CHAR_BIT,
#define _SC_CHAR_BIT _SC_CHAR_BIT
    _SC_CHAR_MAX,
#define _SC_CHAR_MAX _SC_CHAR_MAX
    _SC_CHAR_MIN,
#define _SC_CHAR_MIN _SC_CHAR_MIN
    _SC_INT_MAX,
#define _SC_INT_MAX _SC_INT_MAX
    _SC_INT_MIN,
#define _SC_INT_MIN _SC_INT_MIN
    _SC_LONG_BIT,
#define _SC_LONG_BIT _SC_LONG_BIT
    _SC_WORD_BIT,
#define _SC_WORD_BIT _SC_WORD_BIT
    _SC_MB_LEN_MAX,
#define _SC_MB_LEN_MAX _SC_MB_LEN_MAX
    _SC_NZERO,
#define _SC_NZERO _SC_NZERO
    _SC_SSIZE_MAX,
#define _SC_SSIZE_MAX _SC_SSIZE_MAX
    _SC_SCHAR_MAX,
#define _SC_SCHAR_MAX _SC_SCHAR_MAX
    _SC_SCHAR_MIN,
#define _SC_SCHAR_MIN _SC_SCHAR_MIN
    _SC_SHRT_MAX,
#define _SC_SHRT_MAX _SC_SHRT_MAX
    _SC_SHRT_MIN,
#define _SC_SHRT_MIN _SC_SHRT_MIN
    _SC_UCHAR_MAX,
#define _SC_UCHAR_MAX _SC_UCHAR_MAX
    _SC_UINT_MAX,
#define _SC_UINT_MAX _SC_UINT_MAX
    _SC_ULONG_MAX,
#define _SC_ULONG_MAX _SC_ULONG_MAX
    _SC_USHRT_MAX,
#define _SC_USHRT_MAX _SC_USHRT_MAX

    _SC_NL_ARGMAX,
#define _SC_NL_ARGMAX _SC_NL_ARGMAX
    _SC_NL_LANGMAX,
#define _SC_NL_LANGMAX _SC_NL_LANGMAX
    _SC_NL_MSGMAX,
#define _SC_NL_MSGMAX _SC_NL_MSGMAX
    _SC_NL_NMAX,
#define _SC_NL_NMAX _SC_NL_NMAX
    _SC_NL_SETMAX,
#define _SC_NL_SETMAX _SC_NL_SETMAX
    _SC_NL_TEXTMAX,
#define _SC_NL_TEXTMAX _SC_NL_TEXTMAX

    _SC_XBS5_ILP32_OFF32,
#define _SC_XBS5_ILP32_OFF32 _SC_XBS5_ILP32_OFF32
    _SC_XBS5_ILP32_OFFBIG,
#define _SC_XBS5_ILP32_OFFBIG _SC_XBS5_ILP32_OFFBIG
    _SC_XBS5_LP64_OFF64,
#define _SC_XBS5_LP64_OFF64 _SC_XBS5_LP64_OFF64
    _SC_XBS5_LPBIG_OFFBIG,
#define _SC_XBS5_LPBIG_OFFBIG _SC_XBS5_LPBIG_OFFBIG

    _SC_XOPEN_LEGACY,
#define _SC_XOPEN_LEGACY _SC_XOPEN_LEGACY
    _SC_XOPEN_REALTIME,
#define _SC_XOPEN_REALTIME _SC_XOPEN_REALTIME
    _SC_XOPEN_REALTIME_THREADS,
#define _SC_XOPEN_REALTIME_THREADS _SC_XOPEN_REALTIME_THREADS

    _SC_ADVISORY_INFO,
#define _SC_ADVISORY_INFO _SC_ADVISORY_INFO
    _SC_BARRIERS,
#define _SC_BARRIERS _SC_BARRIERS
    _SC_BASE,
#define _SC_BASE _SC_BASE
    _SC_C_LANG_SUPPORT,
#define _SC_C_LANG_SUPPORT _SC_C_LANG_SUPPORT
    _SC_C_LANG_SUPPORT_R,
#define _SC_C_LANG_SUPPORT_R _SC_C_LANG_SUPPORT_R
    _SC_CLOCK_SELECTION,
#define _SC_CLOCK_SELECTION _SC_CLOCK_SELECTION
    _SC_CPUTIME,
#define _SC_CPUTIME _SC_CPUTIME
    _SC_THREAD_CPUTIME,
#define _SC_THREAD_CPUTIME _SC_THREAD_CPUTIME
    _SC_DEVICE_IO,
#define _SC_DEVICE_IO _SC_DEVICE_IO
    _SC_DEVICE_SPECIFIC,
#define _SC_DEVICE_SPECIFIC _SC_DEVICE_SPECIFIC
    _SC_DEVICE_SPECIFIC_R,
#define _SC_DEVICE_SPECIFIC_R _SC_DEVICE_SPECIFIC_R
    _SC_FD_MGMT,
#define _SC_FD_MGMT _SC_FD_MGMT
    _SC_FIFO,
#define _SC_FIFO _SC_FIFO
    _SC_PIPE,
#define _SC_PIPE _SC_PIPE
    _SC_FILE_ATTRIBUTES,
#define _SC_FILE_ATTRIBUTES _SC_FILE_ATTRIBUTES
    _SC_FILE_LOCKING,
#define _SC_FILE_LOCKING _SC_FILE_LOCKING
    _SC_FILE_SYSTEM,
#define _SC_FILE_SYSTEM _SC_FILE_SYSTEM
    _SC_MONOTONIC_CLOCK,
#define _SC_MONOTONIC_CLOCK _SC_MONOTONIC_CLOCK
    _SC_MULTI_PROCESS,
#define _SC_MULTI_PROCESS _SC_MULTI_PROCESS
    _SC_SINGLE_PROCESS,
#define _SC_SINGLE_PROCESS _SC_SINGLE_PROCESS
    _SC_NETWORKING,
#define _SC_NETWORKING _SC_NETWORKING
    _SC_READER_WRITER_LOCKS,
#define _SC_READER_WRITER_LOCKS _SC_READER_WRITER_LOCKS
    _SC_SPIN_LOCKS,
#define _SC_SPIN_LOCKS _SC_SPIN_LOCKS
    _SC_REGEXP,
#define _SC_REGEXP _SC_REGEXP
    _SC_REGEX_VERSION,
#define _SC_REGEX_VERSION _SC_REGEX_VERSION
    _SC_SHELL,
#define _SC_SHELL _SC_SHELL
    _SC_SIGNALS,
#define _SC_SIGNALS _SC_SIGNALS
    _SC_SPAWN,
#define _SC_SPAWN _SC_SPAWN
    _SC_SPORADIC_SERVER,
#define _SC_SPORADIC_SERVER _SC_SPORADIC_SERVER
    _SC_THREAD_SPORADIC_SERVER,
#define _SC_THREAD_SPORADIC_SERVER _SC_THREAD_SPORADIC_SERVER
    _SC_SYSTEM_DATABASE,
#define _SC_SYSTEM_DATABASE _SC_SYSTEM_DATABASE
    _SC_SYSTEM_DATABASE_R,
#define _SC_SYSTEM_DATABASE_R _SC_SYSTEM_DATABASE_R
    _SC_TIMEOUTS,
#define _SC_TIMEOUTS _SC_TIMEOUTS
    _SC_TYPED_MEMORY_OBJECTS,
#define _SC_TYPED_MEMORY_OBJECTS _SC_TYPED_MEMORY_OBJECTS
    _SC_USER_GROUPS,
#define _SC_USER_GROUPS _SC_USER_GROUPS
    _SC_USER_GROUPS_R,
#define _SC_USER_GROUPS_R _SC_USER_GROUPS_R
    _SC_2_PBS,
#define _SC_2_PBS _SC_2_PBS
    _SC_2_PBS_ACCOUNTING,
#define _SC_2_PBS_ACCOUNTING _SC_2_PBS_ACCOUNTING
    _SC_2_PBS_LOCATE,
#define _SC_2_PBS_LOCATE _SC_2_PBS_LOCATE
    _SC_2_PBS_MESSAGE,
#define _SC_2_PBS_MESSAGE _SC_2_PBS_MESSAGE
    _SC_2_PBS_TRACK,
#define _SC_2_PBS_TRACK _SC_2_PBS_TRACK
    _SC_SYMLOOP_MAX,
#define _SC_SYMLOOP_MAX _SC_SYMLOOP_MAX
    _SC_STREAMS,
#define _SC_STREAMS _SC_STREAMS
    _SC_2_PBS_CHECKPOINT,
#define _SC_2_PBS_CHECKPOINT _SC_2_PBS_CHECKPOINT

    _SC_V6_ILP32_OFF32,
#define _SC_V6_ILP32_OFF32 _SC_V6_ILP32_OFF32
    _SC_V6_ILP32_OFFBIG,
#define _SC_V6_ILP32_OFFBIG _SC_V6_ILP32_OFFBIG
    _SC_V6_LP64_OFF64,
#define _SC_V6_LP64_OFF64 _SC_V6_LP64_OFF64
    _SC_V6_LPBIG_OFFBIG,
#define _SC_V6_LPBIG_OFFBIG _SC_V6_LPBIG_OFFBIG

    _SC_HOST_NAME_MAX,
#define _SC_HOST_NAME_MAX _SC_HOST_NAME_MAX
    _SC_TRACE,
#define _SC_TRACE _SC_TRACE
    _SC_TRACE_EVENT_FILTER,
#define _SC_TRACE_EVENT_FILTER _SC_TRACE_EVENT_FILTER
    _SC_TRACE_INHERIT,
#define _SC_TRACE_INHERIT _SC_TRACE_INHERIT
    _SC_TRACE_LOG,
#define _SC_TRACE_LOG _SC_TRACE_LOG

    _SC_LEVEL1_ICACHE_SIZE,
#define _SC_LEVEL1_ICACHE_SIZE _SC_LEVEL1_ICACHE_SIZE
    _SC_LEVEL1_ICACHE_ASSOC,
#define _SC_LEVEL1_ICACHE_ASSOC _SC_LEVEL1_ICACHE_ASSOC
    _SC_LEVEL1_ICACHE_LINESIZE,
#define _SC_LEVEL1_ICACHE_LINESIZE _SC_LEVEL1_ICACHE_LINESIZE
    _SC_LEVEL1_DCACHE_SIZE,
#define _SC_LEVEL1_DCACHE_SIZE _SC_LEVEL1_DCACHE_SIZE
    _SC_LEVEL1_DCACHE_ASSOC,
#define _SC_LEVEL1_DCACHE_ASSOC _SC_LEVEL1_DCACHE_ASSOC
    _SC_LEVEL1_DCACHE_LINESIZE,
#define _SC_LEVEL1_DCACHE_LINESIZE _SC_LEVEL1_DCACHE_LINESIZE
    _SC_LEVEL2_CACHE_SIZE,
#define _SC_LEVEL2_CACHE_SIZE _SC_LEVEL2_CACHE_SIZE
    _SC_LEVEL2_CACHE_ASSOC,
#define _SC_LEVEL2_CACHE_ASSOC _SC_LEVEL2_CACHE_ASSOC
    _SC_LEVEL2_CACHE_LINESIZE,
#define _SC_LEVEL2_CACHE_LINESIZE _SC_LEVEL2_CACHE_LINESIZE
    _SC_LEVEL3_CACHE_SIZE,
#define _SC_LEVEL3_CACHE_SIZE _SC_LEVEL3_CACHE_SIZE
    _SC_LEVEL3_CACHE_ASSOC,
#define _SC_LEVEL3_CACHE_ASSOC _SC_LEVEL3_CACHE_ASSOC
    _SC_LEVEL3_CACHE_LINESIZE,
#define _SC_LEVEL3_CACHE_LINESIZE _SC_LEVEL3_CACHE_LINESIZE
    _SC_LEVEL4_CACHE_SIZE,
#define _SC_LEVEL4_CACHE_SIZE _SC_LEVEL4_CACHE_SIZE
    _SC_LEVEL4_CACHE_ASSOC,
#define _SC_LEVEL4_CACHE_ASSOC _SC_LEVEL4_CACHE_ASSOC
    _SC_LEVEL4_CACHE_LINESIZE,
#define _SC_LEVEL4_CACHE_LINESIZE _SC_LEVEL4_CACHE_LINESIZE


    _SC_IPV6 = _SC_LEVEL1_ICACHE_SIZE + 50,
#define _SC_IPV6 _SC_IPV6
    _SC_RAW_SOCKETS,
#define _SC_RAW_SOCKETS _SC_RAW_SOCKETS

    _SC_V7_ILP32_OFF32,
#define _SC_V7_ILP32_OFF32 _SC_V7_ILP32_OFF32
    _SC_V7_ILP32_OFFBIG,
#define _SC_V7_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG
    _SC_V7_LP64_OFF64,
#define _SC_V7_LP64_OFF64 _SC_V7_LP64_OFF64
    _SC_V7_LPBIG_OFFBIG,
#define _SC_V7_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG

    _SC_SS_REPL_MAX,
#define _SC_SS_REPL_MAX _SC_SS_REPL_MAX

    _SC_TRACE_EVENT_NAME_MAX,
#define _SC_TRACE_EVENT_NAME_MAX _SC_TRACE_EVENT_NAME_MAX
    _SC_TRACE_NAME_MAX,
#define _SC_TRACE_NAME_MAX _SC_TRACE_NAME_MAX
    _SC_TRACE_SYS_MAX,
#define _SC_TRACE_SYS_MAX _SC_TRACE_SYS_MAX
    _SC_TRACE_USER_EVENT_MAX,
#define _SC_TRACE_USER_EVENT_MAX _SC_TRACE_USER_EVENT_MAX

    _SC_XOPEN_STREAMS,
#define _SC_XOPEN_STREAMS _SC_XOPEN_STREAMS

    _SC_THREAD_ROBUST_PRIO_INHERIT,
#define _SC_THREAD_ROBUST_PRIO_INHERIT _SC_THREAD_ROBUST_PRIO_INHERIT
    _SC_THREAD_ROBUST_PRIO_PROTECT,
#define _SC_THREAD_ROBUST_PRIO_PROTECT _SC_THREAD_ROBUST_PRIO_PROTECT

    _SC_MINSIGSTKSZ,
#define _SC_MINSIGSTKSZ _SC_MINSIGSTKSZ

    _SC_SIGSTKSZ
#define _SC_SIGSTKSZ _SC_SIGSTKSZ
  };


enum
  {
    _CS_PATH,
#define _CS_PATH _CS_PATH

    _CS_V6_WIDTH_RESTRICTED_ENVS,
#define _CS_V6_WIDTH_RESTRICTED_ENVS _CS_V6_WIDTH_RESTRICTED_ENVS
#define _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS _CS_V6_WIDTH_RESTRICTED_ENVS

    _CS_GNU_LIBC_VERSION,
#define _CS_GNU_LIBC_VERSION _CS_GNU_LIBC_VERSION
    _CS_GNU_LIBPTHREAD_VERSION,
#define _CS_GNU_LIBPTHREAD_VERSION _CS_GNU_LIBPTHREAD_VERSION

    _CS_V5_WIDTH_RESTRICTED_ENVS,
#define _CS_V5_WIDTH_RESTRICTED_ENVS _CS_V5_WIDTH_RESTRICTED_ENVS
#define _CS_POSIX_V5_WIDTH_RESTRICTED_ENVS _CS_V5_WIDTH_RESTRICTED_ENVS

    _CS_V7_WIDTH_RESTRICTED_ENVS,
#define _CS_V7_WIDTH_RESTRICTED_ENVS _CS_V7_WIDTH_RESTRICTED_ENVS
#define _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS _CS_V7_WIDTH_RESTRICTED_ENVS

    _CS_LFS_CFLAGS = 1000,
#define _CS_LFS_CFLAGS _CS_LFS_CFLAGS
    _CS_LFS_LDFLAGS,
#define _CS_LFS_LDFLAGS _CS_LFS_LDFLAGS
    _CS_LFS_LIBS,
#define _CS_LFS_LIBS _CS_LFS_LIBS
    _CS_LFS_LINTFLAGS,
#define _CS_LFS_LINTFLAGS _CS_LFS_LINTFLAGS
    _CS_LFS64_CFLAGS,
#define _CS_LFS64_CFLAGS _CS_LFS64_CFLAGS
    _CS_LFS64_LDFLAGS,
#define _CS_LFS64_LDFLAGS _CS_LFS64_LDFLAGS
    _CS_LFS64_LIBS,
#define _CS_LFS64_LIBS _CS_LFS64_LIBS
    _CS_LFS64_LINTFLAGS,
#define _CS_LFS64_LINTFLAGS _CS_LFS64_LINTFLAGS

    _CS_XBS5_ILP32_OFF32_CFLAGS = 1100,
#define _CS_XBS5_ILP32_OFF32_CFLAGS _CS_XBS5_ILP32_OFF32_CFLAGS
    _CS_XBS5_ILP32_OFF32_LDFLAGS,
#define _CS_XBS5_ILP32_OFF32_LDFLAGS _CS_XBS5_ILP32_OFF32_LDFLAGS
    _CS_XBS5_ILP32_OFF32_LIBS,
#define _CS_XBS5_ILP32_OFF32_LIBS _CS_XBS5_ILP32_OFF32_LIBS
    _CS_XBS5_ILP32_OFF32_LINTFLAGS,
#define _CS_XBS5_ILP32_OFF32_LINTFLAGS _CS_XBS5_ILP32_OFF32_LINTFLAGS
    _CS_XBS5_ILP32_OFFBIG_CFLAGS,
#define _CS_XBS5_ILP32_OFFBIG_CFLAGS _CS_XBS5_ILP32_OFFBIG_CFLAGS
    _CS_XBS5_ILP32_OFFBIG_LDFLAGS,
#define _CS_XBS5_ILP32_OFFBIG_LDFLAGS _CS_XBS5_ILP32_OFFBIG_LDFLAGS
    _CS_XBS5_ILP32_OFFBIG_LIBS,
#define _CS_XBS5_ILP32_OFFBIG_LIBS _CS_XBS5_ILP32_OFFBIG_LIBS
    _CS_XBS5_ILP32_OFFBIG_LINTFLAGS,
#define _CS_XBS5_ILP32_OFFBIG_LINTFLAGS _CS_XBS5_ILP32_OFFBIG_LINTFLAGS
    _CS_XBS5_LP64_OFF64_CFLAGS,
#define _CS_XBS5_LP64_OFF64_CFLAGS _CS_XBS5_LP64_OFF64_CFLAGS
    _CS_XBS5_LP64_OFF64_LDFLAGS,
#define _CS_XBS5_LP64_OFF64_LDFLAGS _CS_XBS5_LP64_OFF64_LDFLAGS
    _CS_XBS5_LP64_OFF64_LIBS,
#define _CS_XBS5_LP64_OFF64_LIBS _CS_XBS5_LP64_OFF64_LIBS
    _CS_XBS5_LP64_OFF64_LINTFLAGS,
#define _CS_XBS5_LP64_OFF64_LINTFLAGS _CS_XBS5_LP64_OFF64_LINTFLAGS
    _CS_XBS5_LPBIG_OFFBIG_CFLAGS,
#define _CS_XBS5_LPBIG_OFFBIG_CFLAGS _CS_XBS5_LPBIG_OFFBIG_CFLAGS
    _CS_XBS5_LPBIG_OFFBIG_LDFLAGS,
#define _CS_XBS5_LPBIG_OFFBIG_LDFLAGS _CS_XBS5_LPBIG_OFFBIG_LDFLAGS
    _CS_XBS5_LPBIG_OFFBIG_LIBS,
#define _CS_XBS5_LPBIG_OFFBIG_LIBS _CS_XBS5_LPBIG_OFFBIG_LIBS
    _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS,
#define _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS

    _CS_POSIX_V6_ILP32_OFF32_CFLAGS,
#define _CS_POSIX_V6_ILP32_OFF32_CFLAGS _CS_POSIX_V6_ILP32_OFF32_CFLAGS
    _CS_POSIX_V6_ILP32_OFF32_LDFLAGS,
#define _CS_POSIX_V6_ILP32_OFF32_LDFLAGS _CS_POSIX_V6_ILP32_OFF32_LDFLAGS
    _CS_POSIX_V6_ILP32_OFF32_LIBS,
#define _CS_POSIX_V6_ILP32_OFF32_LIBS _CS_POSIX_V6_ILP32_OFF32_LIBS
    _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS,
#define _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS
    _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS,
#define _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS
    _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS,
#define _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS
    _CS_POSIX_V6_ILP32_OFFBIG_LIBS,
#define _CS_POSIX_V6_ILP32_OFFBIG_LIBS _CS_POSIX_V6_ILP32_OFFBIG_LIBS
    _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS,
#define _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS
    _CS_POSIX_V6_LP64_OFF64_CFLAGS,
#define _CS_POSIX_V6_LP64_OFF64_CFLAGS _CS_POSIX_V6_LP64_OFF64_CFLAGS
    _CS_POSIX_V6_LP64_OFF64_LDFLAGS,
#define _CS_POSIX_V6_LP64_OFF64_LDFLAGS _CS_POSIX_V6_LP64_OFF64_LDFLAGS
    _CS_POSIX_V6_LP64_OFF64_LIBS,
#define _CS_POSIX_V6_LP64_OFF64_LIBS _CS_POSIX_V6_LP64_OFF64_LIBS
    _CS_POSIX_V6_LP64_OFF64_LINTFLAGS,
#define _CS_POSIX_V6_LP64_OFF64_LINTFLAGS _CS_POSIX_V6_LP64_OFF64_LINTFLAGS
    _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS,
#define _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS
    _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS,
#define _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS
    _CS_POSIX_V6_LPBIG_OFFBIG_LIBS,
#define _CS_POSIX_V6_LPBIG_OFFBIG_LIBS _CS_POSIX_V6_LPBIG_OFFBIG_LIBS
    _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS,
#define _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS

    _CS_POSIX_V7_ILP32_OFF32_CFLAGS,
#define _CS_POSIX_V7_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
    _CS_POSIX_V7_ILP32_OFF32_LDFLAGS,
#define _CS_POSIX_V7_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
    _CS_POSIX_V7_ILP32_OFF32_LIBS,
#define _CS_POSIX_V7_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
    _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS,
#define _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS
    _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS,
#define _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
    _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS,
#define _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
    _CS_POSIX_V7_ILP32_OFFBIG_LIBS,
#define _CS_POSIX_V7_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
    _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS,
#define _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS
    _CS_POSIX_V7_LP64_OFF64_CFLAGS,
#define _CS_POSIX_V7_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
    _CS_POSIX_V7_LP64_OFF64_LDFLAGS,
#define _CS_POSIX_V7_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
    _CS_POSIX_V7_LP64_OFF64_LIBS,
#define _CS_POSIX_V7_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
    _CS_POSIX_V7_LP64_OFF64_LINTFLAGS,
#define _CS_POSIX_V7_LP64_OFF64_LINTFLAGS _CS_POSIX_V7_LP64_OFF64_LINTFLAGS
    _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS,
#define _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
    _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS,
#define _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
    _CS_POSIX_V7_LPBIG_OFFBIG_LIBS,
#define _CS_POSIX_V7_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
    _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS,
#define _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS

    _CS_V6_ENV,
#define _CS_V6_ENV _CS_V6_ENV
    _CS_V7_ENV
#define _CS_V7_ENV _CS_V7_ENV
  };
# 631 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 2 3 4


extern long int pathconf (const char *__path, int __name)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern long int fpathconf (int __fd, int __name) __attribute__ ((__nothrow__ , __leaf__));


extern long int sysconf (int __name) __attribute__ ((__nothrow__ , __leaf__));



extern size_t confstr (int __name, char *__buf, size_t __len) __attribute__ ((__nothrow__ , __leaf__))
    __attribute__ ((__access__ (__write_only__, 2, 3)));




extern __pid_t getpid (void) __attribute__ ((__nothrow__ , __leaf__));


extern __pid_t getppid (void) __attribute__ ((__nothrow__ , __leaf__));


extern __pid_t getpgrp (void) __attribute__ ((__nothrow__ , __leaf__));


extern __pid_t __getpgid (__pid_t __pid) __attribute__ ((__nothrow__ , __leaf__));

extern __pid_t getpgid (__pid_t __pid) __attribute__ ((__nothrow__ , __leaf__));






extern int setpgid (__pid_t __pid, __pid_t __pgid) __attribute__ ((__nothrow__ , __leaf__));
# 682 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
extern int setpgrp (void) __attribute__ ((__nothrow__ , __leaf__));






extern __pid_t setsid (void) __attribute__ ((__nothrow__ , __leaf__));



extern __pid_t getsid (__pid_t __pid) __attribute__ ((__nothrow__ , __leaf__));



extern __uid_t getuid (void) __attribute__ ((__nothrow__ , __leaf__));


extern __uid_t geteuid (void) __attribute__ ((__nothrow__ , __leaf__));


extern __gid_t getgid (void) __attribute__ ((__nothrow__ , __leaf__));


extern __gid_t getegid (void) __attribute__ ((__nothrow__ , __leaf__));




extern int getgroups (int __size, __gid_t __list[]) __attribute__ ((__nothrow__ , __leaf__))
    __attribute__ ((__access__ (__write_only__, 2, 1)));


extern int group_member (__gid_t __gid) __attribute__ ((__nothrow__ , __leaf__));






extern int setuid (__uid_t __uid) __attribute__ ((__nothrow__ , __leaf__)) ;




extern int setreuid (__uid_t __ruid, __uid_t __euid) __attribute__ ((__nothrow__ , __leaf__)) ;




extern int seteuid (__uid_t __uid) __attribute__ ((__nothrow__ , __leaf__)) ;






extern int setgid (__gid_t __gid) __attribute__ ((__nothrow__ , __leaf__)) ;




extern int setregid (__gid_t __rgid, __gid_t __egid) __attribute__ ((__nothrow__ , __leaf__)) ;




extern int setegid (__gid_t __gid) __attribute__ ((__nothrow__ , __leaf__)) ;





extern int getresuid (__uid_t *__ruid, __uid_t *__euid, __uid_t *__suid)
     __attribute__ ((__nothrow__ , __leaf__));



extern int getresgid (__gid_t *__rgid, __gid_t *__egid, __gid_t *__sgid)
     __attribute__ ((__nothrow__ , __leaf__));



extern int setresuid (__uid_t __ruid, __uid_t __euid, __uid_t __suid)
     __attribute__ ((__nothrow__ , __leaf__)) ;



extern int setresgid (__gid_t __rgid, __gid_t __egid, __gid_t __sgid)
     __attribute__ ((__nothrow__ , __leaf__)) ;






extern __pid_t fork (void) __attribute__ ((__nothrow__));







extern __pid_t vfork (void) __attribute__ ((__nothrow__ , __leaf__));






extern __pid_t _Fork (void) __attribute__ ((__nothrow__ , __leaf__));





extern char *ttyname (int __fd) __attribute__ ((__nothrow__ , __leaf__));



extern int ttyname_r (int __fd, char *__buf, size_t __buflen)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)))
     __attribute__ ((__access__ (__write_only__, 2, 3)));



extern int isatty (int __fd) __attribute__ ((__nothrow__ , __leaf__));




extern int ttyslot (void) __attribute__ ((__nothrow__ , __leaf__));




extern int link (const char *__from, const char *__to)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) ;




extern int linkat (int __fromfd, const char *__from, int __tofd,
     const char *__to, int __flags)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4))) ;




extern int symlink (const char *__from, const char *__to)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) ;




extern ssize_t readlink (const char *__restrict __path,
    char *__restrict __buf, size_t __len)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)))
     __attribute__ ((__access__ (__write_only__, 2, 3)));





extern int symlinkat (const char *__from, int __tofd,
        const char *__to) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3))) ;


extern ssize_t readlinkat (int __fd, const char *__restrict __path,
      char *__restrict __buf, size_t __len)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)))
     __attribute__ ((__access__ (__write_only__, 3, 4)));



extern int unlink (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern int unlinkat (int __fd, const char *__name, int __flag)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));



extern int rmdir (const char *__path) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern __pid_t tcgetpgrp (int __fd) __attribute__ ((__nothrow__ , __leaf__));


extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) __attribute__ ((__nothrow__ , __leaf__));






extern char *getlogin (void);







extern int getlogin_r (char *__name, size_t __name_len) __attribute__ ((__nonnull__ (1)))
    __attribute__ ((__access__ (__write_only__, 1, 2)));




extern int setlogin (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));







# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/getopt_posix.h" 1 3 4
# 21 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/getopt_posix.h" 3 4
#define _GETOPT_POSIX_H 1





# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/getopt_core.h" 1 3 4
# 21 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/getopt_core.h" 3 4
#define _GETOPT_CORE_H 1














extern char *optarg;
# 50 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/getopt_core.h" 3 4
extern int optind;




extern int opterr;



extern int optopt;
# 91 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/getopt_core.h" 3 4
extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
       __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));


# 28 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/getopt_posix.h" 2 3 4


# 49 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/getopt_posix.h" 3 4

# 904 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 2 3 4







extern int gethostname (char *__name, size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)))
    __attribute__ ((__access__ (__write_only__, 1, 2)));






extern int sethostname (const char *__name, size_t __len)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__access__ (__read_only__, 1, 2)));



extern int sethostid (long int __id) __attribute__ ((__nothrow__ , __leaf__)) ;





extern int getdomainname (char *__name, size_t __len)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)))
     __attribute__ ((__access__ (__write_only__, 1, 2)));
extern int setdomainname (const char *__name, size_t __len)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__access__ (__read_only__, 1, 2)));




extern int vhangup (void) __attribute__ ((__nothrow__ , __leaf__));


extern int revoke (const char *__file) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;







extern int profil (unsigned short int *__sample_buffer, size_t __size,
     size_t __offset, unsigned int __scale)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));





extern int acct (const char *__name) __attribute__ ((__nothrow__ , __leaf__));



extern char *getusershell (void) __attribute__ ((__nothrow__ , __leaf__));
extern void endusershell (void) __attribute__ ((__nothrow__ , __leaf__));
extern void setusershell (void) __attribute__ ((__nothrow__ , __leaf__));





extern int daemon (int __nochdir, int __noclose) __attribute__ ((__nothrow__ , __leaf__)) ;






extern int chroot (const char *__path) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;



extern char *getpass (const char *__prompt) __attribute__ ((__nonnull__ (1)));







extern int fsync (int __fd);





extern int syncfs (int __fd) __attribute__ ((__nothrow__ , __leaf__));






extern long int gethostid (void);


extern void sync (void) __attribute__ ((__nothrow__ , __leaf__));





extern int getpagesize (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));




extern int getdtablesize (void) __attribute__ ((__nothrow__ , __leaf__));
# 1026 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
extern int truncate (const char *__file, __off_t __length)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;
# 1038 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
extern int truncate64 (const char *__file, __off64_t __length)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;
# 1049 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
extern int ftruncate (int __fd, __off_t __length) __attribute__ ((__nothrow__ , __leaf__)) ;
# 1059 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
extern int ftruncate64 (int __fd, __off64_t __length) __attribute__ ((__nothrow__ , __leaf__)) ;
# 1070 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
extern int brk (void *__addr) __attribute__ ((__nothrow__ , __leaf__)) ;





extern void *sbrk (intptr_t __delta) __attribute__ ((__nothrow__ , __leaf__));
# 1091 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
extern long int syscall (long int __sysno, ...) __attribute__ ((__nothrow__ , __leaf__));
# 1108 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
#define F_ULOCK 0
#define F_LOCK 1
#define F_TLOCK 2
#define F_TEST 3


extern int lockf (int __fd, int __cmd, __off_t __len) ;
# 1124 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
extern int lockf64 (int __fd, int __cmd, __off64_t __len) ;
# 1134 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
#define TEMP_FAILURE_RETRY(expression) (__extension__ ({ long int __result; do __result = (long int) (expression); while (__result == -1L && errno == EINTR); __result; }))







ssize_t copy_file_range (int __infd, __off64_t *__pinoff,
    int __outfd, __off64_t *__poutoff,
    size_t __length, unsigned int __flags);





extern int fdatasync (int __fildes);
# 1159 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
extern char *crypt (const char *__key, const char *__salt)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));







extern void swab (const void *__restrict __from, void *__restrict __to,
    ssize_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)))
    __attribute__ ((__access__ (__read_only__, 1, 3)))
    __attribute__ ((__access__ (__write_only__, 2, 3)));
# 1198 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
int getentropy (void *__buffer, size_t __length)
    __attribute__ ((__access__ (__write_only__, 1, 2)));
# 1208 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
extern int close_range (unsigned int __fd, unsigned int __max_fd,
   int __flags) __attribute__ ((__nothrow__ , __leaf__));
# 1218 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/unistd_ext.h" 1 3 4
# 34 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/unistd_ext.h" 3 4
extern __pid_t gettid (void) __attribute__ ((__nothrow__ , __leaf__));



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/close_range.h" 1 3 4


#define _LINUX_CLOSE_RANGE_H 


#define CLOSE_RANGE_UNSHARE (1U << 1)


#define CLOSE_RANGE_CLOEXEC (1U << 2)
# 39 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/unistd_ext.h" 2 3 4
# 1219 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/unistd.h" 2 3 4


# 158 "system.h" 2
# 167 "system.h"
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/limits.h" 1 3 4
# 30 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/limits.h" 3 4
#define _GCC_LIMITS_H_ 



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/syslimits.h" 1 3 4





#define _GCC_NEXT_LIMITS_H 
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/limits.h" 1 3 4
# 210 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/limits.h" 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/limits.h" 1 3 4
# 23 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/limits.h" 3 4
#define _LIBC_LIMITS_H_ 1

#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION 
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/libc-header-start.h" 1 3 4
# 31 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION





#undef __GLIBC_USE_LIB_EXT2


#define __GLIBC_USE_LIB_EXT2 1
# 67 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_BFP_EXT

#define __GLIBC_USE_IEC_60559_BFP_EXT 1



#undef __GLIBC_USE_IEC_60559_BFP_EXT_C2X

#define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 1



#undef __GLIBC_USE_IEC_60559_EXT

#define __GLIBC_USE_IEC_60559_EXT 1
# 90 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_FUNCS_EXT

#define __GLIBC_USE_IEC_60559_FUNCS_EXT 1



#undef __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X

#define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 1






#undef __GLIBC_USE_IEC_60559_TYPES_EXT

#define __GLIBC_USE_IEC_60559_TYPES_EXT 1
# 27 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/limits.h" 2 3 4





#define MB_LEN_MAX 16
# 132 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/limits.h" 3 4
#define LLONG_MIN (-LLONG_MAX-1)


#define LLONG_MAX __LONG_LONG_MAX__


#define ULLONG_MAX (LLONG_MAX * 2ULL + 1)
# 147 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/limits.h" 3 4
#define CHAR_WIDTH 8


#define SCHAR_WIDTH 8


#define UCHAR_WIDTH 8


#define SHRT_WIDTH 16


#define USHRT_WIDTH 16


#define INT_WIDTH 32


#define UINT_WIDTH 32


#define LONG_WIDTH __WORDSIZE


#define ULONG_WIDTH __WORDSIZE


#define LLONG_WIDTH 64


#define ULLONG_WIDTH 64
# 186 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/limits.h" 3 4
#define BOOL_MAX 1


#define BOOL_WIDTH 1





# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/posix1_lim.h" 1 3 4
# 25 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/posix1_lim.h" 3 4
#define _BITS_POSIX1_LIM_H 1

# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/wordsize.h" 1 3 4
# 18 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
#define __WORDSIZE_TIME64_COMPAT32 0
# 28 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/posix1_lim.h" 2 3 4




#define _POSIX_AIO_LISTIO_MAX 2


#define _POSIX_AIO_MAX 1


#define _POSIX_ARG_MAX 4096



#define _POSIX_CHILD_MAX 25





#define _POSIX_DELAYTIMER_MAX 32



#define _POSIX_HOST_NAME_MAX 255


#define _POSIX_LINK_MAX 8


#define _POSIX_LOGIN_NAME_MAX 9


#define _POSIX_MAX_CANON 255



#define _POSIX_MAX_INPUT 255


#define _POSIX_MQ_OPEN_MAX 8


#define _POSIX_MQ_PRIO_MAX 32


#define _POSIX_NAME_MAX 14



#define _POSIX_NGROUPS_MAX 8






#define _POSIX_OPEN_MAX 20







#define _POSIX_FD_SETSIZE _POSIX_OPEN_MAX



#define _POSIX_PATH_MAX 256


#define _POSIX_PIPE_BUF 512



#define _POSIX_RE_DUP_MAX 255


#define _POSIX_RTSIG_MAX 8


#define _POSIX_SEM_NSEMS_MAX 256


#define _POSIX_SEM_VALUE_MAX 32767


#define _POSIX_SIGQUEUE_MAX 32


#define _POSIX_SSIZE_MAX 32767


#define _POSIX_STREAM_MAX 8


#define _POSIX_SYMLINK_MAX 255



#define _POSIX_SYMLOOP_MAX 8


#define _POSIX_TIMER_MAX 32


#define _POSIX_TTY_NAME_MAX 9



#define _POSIX_TZNAME_MAX 6






#define _POSIX_QLIMIT 1



#define _POSIX_HIWAT _POSIX_PIPE_BUF


#define _POSIX_UIO_MAXIOV 16



#define _POSIX_CLOCKRES_MIN 20000000



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/local_lim.h" 1 3 4
# 25 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/local_lim.h" 3 4
#define __undef_NR_OPEN 


#define __undef_LINK_MAX 


#define __undef_OPEN_MAX 


#define __undef_ARG_MAX 



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/limits.h" 1 3 4


#define _LINUX_LIMITS_H 

#define NR_OPEN 1024

#define NGROUPS_MAX 65536
#define ARG_MAX 131072
#define LINK_MAX 127
#define MAX_CANON 255
#define MAX_INPUT 255
#define NAME_MAX 255
#define PATH_MAX 4096
#define PIPE_BUF 4096
#define XATTR_NAME_MAX 255
#define XATTR_SIZE_MAX 65536
#define XATTR_LIST_MAX 65536

#define RTSIG_MAX 32
# 39 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/local_lim.h" 2 3 4



#undef NR_OPEN
#undef __undef_NR_OPEN



#undef LINK_MAX
#undef __undef_LINK_MAX



#undef OPEN_MAX
#undef __undef_OPEN_MAX



#undef ARG_MAX
#undef __undef_ARG_MAX



#define _POSIX_THREAD_KEYS_MAX 128

#define PTHREAD_KEYS_MAX 1024


#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4

#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS


#define _POSIX_THREAD_THREADS_MAX 64

#undef PTHREAD_THREADS_MAX



#define AIO_PRIO_DELTA_MAX 20


# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/pthread_stack_min-dynamic.h" 1 3 4
# 22 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/pthread_stack_min-dynamic.h" 3 4
#define __SC_THREAD_STACK_MIN_VALUE 75

extern long int __sysconf (int __name) __attribute__ ((__nothrow__ , __leaf__));

#define PTHREAD_STACK_MIN __sysconf (__SC_THREAD_STACK_MIN_VALUE)
# 82 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/local_lim.h" 2 3 4


#define DELAYTIMER_MAX 2147483647


#define TTY_NAME_MAX 32


#define LOGIN_NAME_MAX 256


#define HOST_NAME_MAX 64


#define MQ_PRIO_MAX 32768


#define SEM_VALUE_MAX (2147483647)
# 162 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/posix1_lim.h" 2 3 4







#define SSIZE_MAX LONG_MAX
# 196 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/limits.h" 2 3 4



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/posix2_lim.h" 1 3 4
# 23 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/posix2_lim.h" 3 4
#define _BITS_POSIX2_LIM_H 1



#define _POSIX2_BC_BASE_MAX 99


#define _POSIX2_BC_DIM_MAX 2048


#define _POSIX2_BC_SCALE_MAX 99


#define _POSIX2_BC_STRING_MAX 1000



#define _POSIX2_COLL_WEIGHTS_MAX 2



#define _POSIX2_EXPR_NEST_MAX 32


#define _POSIX2_LINE_MAX 2048



#define _POSIX2_RE_DUP_MAX 255



#define _POSIX2_CHARCLASS_NAME_MAX 14







#define BC_BASE_MAX _POSIX2_BC_BASE_MAX


#define BC_DIM_MAX _POSIX2_BC_DIM_MAX


#define BC_SCALE_MAX _POSIX2_BC_SCALE_MAX


#define BC_STRING_MAX _POSIX2_BC_STRING_MAX


#define COLL_WEIGHTS_MAX 255


#define EXPR_NEST_MAX _POSIX2_EXPR_NEST_MAX


#define LINE_MAX _POSIX2_LINE_MAX


#define CHARCLASS_NAME_MAX 2048



#define RE_DUP_MAX (0x7fff)
# 200 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/limits.h" 2 3 4



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/xopen_lim.h" 1 3 4
# 30 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/xopen_lim.h" 3 4
#define _XOPEN_LIM_H 1
# 62 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/xopen_lim.h" 3 4
#define _XOPEN_IOV_MAX _POSIX_UIO_MAXIOV

# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/uio_lim.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/uio_lim.h" 3 4
#define _BITS_UIO_LIM_H 1
# 30 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/uio_lim.h" 3 4
#define __IOV_MAX 1024
# 65 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/xopen_lim.h" 2 3 4

#define IOV_MAX __IOV_MAX






#define NL_ARGMAX _POSIX_ARG_MAX


#define NL_LANGMAX _POSIX2_LINE_MAX


#define NL_MSGMAX INT_MAX




#define NL_NMAX INT_MAX



#define NL_SETMAX INT_MAX


#define NL_TEXTMAX INT_MAX


#define NZERO 20
# 114 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/xopen_lim.h" 3 4
#define WORD_BIT 32
# 137 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/xopen_lim.h" 3 4
#define LONG_BIT 64
# 204 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/limits.h" 2 3 4
# 211 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/limits.h" 2 3 4
# 8 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/syslimits.h" 2 3 4
#undef _GCC_NEXT_LIMITS_H
# 35 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/limits.h" 2 3 4
# 60 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/limits.h" 3 4
#define _LIMITS_H___ 


#undef CHAR_BIT
#define CHAR_BIT __CHAR_BIT__







#undef SCHAR_MIN
#define SCHAR_MIN (-SCHAR_MAX - 1)
#undef SCHAR_MAX
#define SCHAR_MAX __SCHAR_MAX__


#undef UCHAR_MAX



#define UCHAR_MAX (SCHAR_MAX * 2 + 1)
# 96 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/limits.h" 3 4
#undef CHAR_MIN
#define CHAR_MIN SCHAR_MIN
#undef CHAR_MAX
#define CHAR_MAX SCHAR_MAX



#undef SHRT_MIN
#define SHRT_MIN (-SHRT_MAX - 1)
#undef SHRT_MAX
#define SHRT_MAX __SHRT_MAX__


#undef USHRT_MAX



#define USHRT_MAX (SHRT_MAX * 2 + 1)



#undef INT_MIN
#define INT_MIN (-INT_MAX - 1)
#undef INT_MAX
#define INT_MAX __INT_MAX__


#undef UINT_MAX
#define UINT_MAX (INT_MAX * 2U + 1U)



#undef LONG_MIN
#define LONG_MIN (-LONG_MAX - 1L)
#undef LONG_MAX
#define LONG_MAX __LONG_MAX__


#undef ULONG_MAX
#define ULONG_MAX (LONG_MAX * 2UL + 1UL)



#undef LLONG_MIN
#define LLONG_MIN (-LLONG_MAX - 1LL)
#undef LLONG_MAX
#define LLONG_MAX __LONG_LONG_MAX__


#undef ULLONG_MAX
#define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)




#undef LONG_LONG_MIN
#define LONG_LONG_MIN (-LONG_LONG_MAX - 1LL)
#undef LONG_LONG_MAX
#define LONG_LONG_MAX __LONG_LONG_MAX__


#undef ULONG_LONG_MAX
#define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1ULL)
# 168 "system.h" 2



# 1 "hwint.h" 1
# 10 "hwint.h"
#define GCC_HWINT_H 


#define HOST_BITS_PER_CHAR CHAR_BIT
#define HOST_BITS_PER_SHORT (CHAR_BIT * SIZEOF_SHORT)
#define HOST_BITS_PER_INT (CHAR_BIT * SIZEOF_INT)
#define HOST_BITS_PER_LONG (CHAR_BIT * SIZEOF_LONG)


#define HOST_BITS_PER_LONGLONG (CHAR_BIT * SIZEOF_LONG_LONG)
# 67 "hwint.h"
#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG
#define HOST_WIDE_INT long
# 84 "hwint.h"
#define HOST_WIDE_INT_PRINT_DEC "%ld"
# 100 "hwint.h"
#define HOST_WIDE_INT_PRINT_UNSIGNED "%lu"
# 116 "hwint.h"
#define HOST_WIDE_INT_PRINT_HEX "0x%lx"
# 133 "hwint.h"
#define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%lx%016lx"
# 178 "hwint.h"
#define HOST_BITS_PER_WIDEST_INT HOST_BITS_PER_LONG
#define HOST_WIDEST_INT long
#define HOST_WIDEST_INT_PRINT_DEC "%ld"
#define HOST_WIDEST_INT_PRINT_UNSIGNED "%lu"
#define HOST_WIDEST_INT_PRINT_HEX "0x%lx"
# 172 "system.h" 2
# 180 "system.h"
#define IN_RANGE(VALUE,LOWER,UPPER) ((unsigned HOST_WIDE_INT) ((VALUE) - (LOWER)) <= ((UPPER) - (LOWER)))






#define INTTYPE_SIGNED(t) (! ((t) 0 < (t) -1))


#define INTTYPE_MINIMUM(t) ((t) (INTTYPE_SIGNED (t) ? ~ (t) 0 << (sizeof(t) * CHAR_BIT - 1) : (t) 0))

#define INTTYPE_MAXIMUM(t) ((t) (~ (t) 0 - INTTYPE_MINIMUM (t)))
# 207 "system.h"
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 1 3 4
# 23 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 3 4
#define _TIME_H 1



#define __need_size_t 
#define __need_NULL 
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 1 3 4
# 158 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_ptrdiff_t
# 237 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_size_t
# 349 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_wchar_t
# 399 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef NULL




#define NULL ((void *)0)





#undef __need_NULL




#undef offsetof
#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
# 30 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 2 3 4



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/time.h" 1 3 4
# 24 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/time.h" 3 4
#define _BITS_TIME_H 1
# 34 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/time.h" 3 4
#define CLOCKS_PER_SEC ((__clock_t) 1000000)
# 46 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/time.h" 3 4
#define CLOCK_REALTIME 0

#define CLOCK_MONOTONIC 1

#define CLOCK_PROCESS_CPUTIME_ID 2

#define CLOCK_THREAD_CPUTIME_ID 3

#define CLOCK_MONOTONIC_RAW 4

#define CLOCK_REALTIME_COARSE 5

#define CLOCK_MONOTONIC_COARSE 6

#define CLOCK_BOOTTIME 7

#define CLOCK_REALTIME_ALARM 8

#define CLOCK_BOOTTIME_ALARM 9

#define CLOCK_TAI 11


#define TIMER_ABSTIME 1



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/timex.h" 1 3 4
# 19 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/timex.h" 3 4
#define _BITS_TIMEX_H 1






struct timex
{
# 58 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/timex.h" 3 4
  unsigned int modes;
  __syscall_slong_t offset;
  __syscall_slong_t freq;
  __syscall_slong_t maxerror;
  __syscall_slong_t esterror;
  int status;
  __syscall_slong_t constant;
  __syscall_slong_t precision;
  __syscall_slong_t tolerance;
  struct timeval time;
  __syscall_slong_t tick;
  __syscall_slong_t ppsfreq;
  __syscall_slong_t jitter;
  int shift;
  __syscall_slong_t stabil;
  __syscall_slong_t jitcnt;
  __syscall_slong_t calcnt;
  __syscall_slong_t errcnt;
  __syscall_slong_t stbcnt;

  int tai;


  int :32; int :32; int :32; int :32;
  int :32; int :32; int :32; int :32;
  int :32; int :32; int :32;

};


#define ADJ_OFFSET 0x0001
#define ADJ_FREQUENCY 0x0002
#define ADJ_MAXERROR 0x0004
#define ADJ_ESTERROR 0x0008
#define ADJ_STATUS 0x0010
#define ADJ_TIMECONST 0x0020
#define ADJ_TAI 0x0080
#define ADJ_SETOFFSET 0x0100
#define ADJ_MICRO 0x1000
#define ADJ_NANO 0x2000
#define ADJ_TICK 0x4000
#define ADJ_OFFSET_SINGLESHOT 0x8001
#define ADJ_OFFSET_SS_READ 0xa001


#define MOD_OFFSET ADJ_OFFSET
#define MOD_FREQUENCY ADJ_FREQUENCY
#define MOD_MAXERROR ADJ_MAXERROR
#define MOD_ESTERROR ADJ_ESTERROR
#define MOD_STATUS ADJ_STATUS
#define MOD_TIMECONST ADJ_TIMECONST
#define MOD_CLKB ADJ_TICK
#define MOD_CLKA ADJ_OFFSET_SINGLESHOT
#define MOD_TAI ADJ_TAI
#define MOD_MICRO ADJ_MICRO
#define MOD_NANO ADJ_NANO



#define STA_PLL 0x0001
#define STA_PPSFREQ 0x0002
#define STA_PPSTIME 0x0004
#define STA_FLL 0x0008

#define STA_INS 0x0010
#define STA_DEL 0x0020
#define STA_UNSYNC 0x0040
#define STA_FREQHOLD 0x0080

#define STA_PPSSIGNAL 0x0100
#define STA_PPSJITTER 0x0200
#define STA_PPSWANDER 0x0400
#define STA_PPSERROR 0x0800

#define STA_CLOCKERR 0x1000
#define STA_NANO 0x2000
#define STA_MODE 0x4000
#define STA_CLK 0x8000


#define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | STA_PPSERROR | STA_CLOCKERR | STA_NANO | STA_MODE | STA_CLK)
# 74 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/time.h" 2 3 4




extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
# 90 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/time.h" 3 4

# 34 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 2 3 4





# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/struct_tm.h" 1 3 4

#define __struct_tm_defined 1




struct tm
{
  int tm_sec;
  int tm_min;
  int tm_hour;
  int tm_mday;
  int tm_mon;
  int tm_year;
  int tm_wday;
  int tm_yday;
  int tm_isdst;


  long int tm_gmtoff;
  const char *tm_zone;




};
# 40 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 2 3 4
# 48 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/struct_itimerspec.h" 1 3 4

#define __itimerspec_defined 1





struct itimerspec
  {
    struct timespec it_interval;
    struct timespec it_value;
  };
# 49 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 2 3 4
struct sigevent;
# 65 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 3 4
#define TIME_UTC 1






extern clock_t clock (void) __attribute__ ((__nothrow__ , __leaf__));



extern time_t time (time_t *__timer) __attribute__ ((__nothrow__ , __leaf__));


extern double difftime (time_t __time1, time_t __time0)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));


extern time_t mktime (struct tm *__tp) __attribute__ ((__nothrow__ , __leaf__));
# 100 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 3 4
extern size_t strftime (char *__restrict __s, size_t __maxsize,
   const char *__restrict __format,
   const struct tm *__restrict __tp)
   __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3, 4)));




extern char *strptime (const char *__restrict __s,
         const char *__restrict __fmt, struct tm *__tp)
     __attribute__ ((__nothrow__ , __leaf__));






extern size_t strftime_l (char *__restrict __s, size_t __maxsize,
     const char *__restrict __format,
     const struct tm *__restrict __tp,
     locale_t __loc) __attribute__ ((__nothrow__ , __leaf__));



extern char *strptime_l (const char *__restrict __s,
    const char *__restrict __fmt, struct tm *__tp,
    locale_t __loc) __attribute__ ((__nothrow__ , __leaf__));






extern struct tm *gmtime (const time_t *__timer) __attribute__ ((__nothrow__ , __leaf__));



extern struct tm *localtime (const time_t *__timer) __attribute__ ((__nothrow__ , __leaf__));
# 155 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 3 4
extern struct tm *gmtime_r (const time_t *__restrict __timer,
       struct tm *__restrict __tp) __attribute__ ((__nothrow__ , __leaf__));



extern struct tm *localtime_r (const time_t *__restrict __timer,
          struct tm *__restrict __tp) __attribute__ ((__nothrow__ , __leaf__));
# 180 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 3 4
extern char *asctime (const struct tm *__tp) __attribute__ ((__nothrow__ , __leaf__));



extern char *ctime (const time_t *__timer) __attribute__ ((__nothrow__ , __leaf__));
# 198 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 3 4
extern char *asctime_r (const struct tm *__restrict __tp,
   char *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__));



extern char *ctime_r (const time_t *__restrict __timer,
        char *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__));
# 218 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 3 4
extern char *__tzname[2];
extern int __daylight;
extern long int __timezone;




extern char *tzname[2];



extern void tzset (void) __attribute__ ((__nothrow__ , __leaf__));



extern int daylight;
extern long int timezone;





#define __isleap(year) ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0))






extern time_t timegm (struct tm *__tp) __attribute__ ((__nothrow__ , __leaf__));
# 264 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 3 4
extern time_t timelocal (struct tm *__tp) __attribute__ ((__nothrow__ , __leaf__));







extern int dysize (int __year) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
# 282 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 3 4
extern int nanosleep (const struct timespec *__requested_time,
        struct timespec *__remaining);


extern int clock_getres (clockid_t __clock_id, struct timespec *__res) __attribute__ ((__nothrow__ , __leaf__));


extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));


extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
# 324 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 3 4
extern int clock_nanosleep (clockid_t __clock_id, int __flags,
       const struct timespec *__req,
       struct timespec *__rem);
# 339 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 3 4
extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) __attribute__ ((__nothrow__ , __leaf__));




extern int timer_create (clockid_t __clock_id,
    struct sigevent *__restrict __evp,
    timer_t *__restrict __timerid) __attribute__ ((__nothrow__ , __leaf__));


extern int timer_delete (timer_t __timerid) __attribute__ ((__nothrow__ , __leaf__));



extern int timer_settime (timer_t __timerid, int __flags,
     const struct itimerspec *__restrict __value,
     struct itimerspec *__restrict __ovalue) __attribute__ ((__nothrow__ , __leaf__));


extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
     __attribute__ ((__nothrow__ , __leaf__));
# 377 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 3 4
extern int timer_getoverrun (timer_t __timerid) __attribute__ ((__nothrow__ , __leaf__));






extern int timespec_get (struct timespec *__ts, int __base)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
# 400 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 3 4
extern int timespec_getres (struct timespec *__ts, int __base)
     __attribute__ ((__nothrow__ , __leaf__));
# 426 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 3 4
extern int getdate_err;
# 435 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 3 4
extern struct tm *getdate (const char *__string);
# 449 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/time.h" 3 4
extern int getdate_r (const char *__restrict __string,
        struct tm *__restrict __resbufp);



# 208 "system.h" 2





# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/fcntl.h" 1 3 4
# 23 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/fcntl.h" 3 4
#define _FCNTL_H 1











# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/fcntl.h" 1 3 4
# 23 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/fcntl.h" 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/wordsize.h" 1 3 4
# 18 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
#define __WORDSIZE_TIME64_COMPAT32 0
# 24 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/fcntl.h" 2 3 4




#define __O_LARGEFILE 0

#define F_GETLK64 5
#define F_SETLK64 6
#define F_SETLKW64 7


struct flock
{
  short int l_type;
  short int l_whence;

  __off_t l_start;
  __off_t l_len;




  __pid_t l_pid;
};


struct flock64
{
  short int l_type;
  short int l_whence;
  __off64_t l_start;
  __off64_t l_len;
  __pid_t l_pid;
};



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/fcntl-linux.h" 1 3 4
# 38 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/fcntl-linux.h" 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/struct_iovec.h" 1 3 4
# 20 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/struct_iovec.h" 3 4
#define __iovec_defined 1

#define __need_size_t 
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 1 3 4
# 158 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_ptrdiff_t
# 237 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_size_t
# 349 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef __need_wchar_t
# 399 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 3 4
#undef NULL




#define NULL ((void *)0)





#undef __need_NULL




#undef offsetof
#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
# 24 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/struct_iovec.h" 2 3 4


struct iovec
  {
    void *iov_base;
    size_t iov_len;
  };
# 39 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/fcntl-linux.h" 2 3 4



#define O_ACCMODE 0003
#define O_RDONLY 00
#define O_WRONLY 01
#define O_RDWR 02

#define O_CREAT 0100


#define O_EXCL 0200


#define O_NOCTTY 0400


#define O_TRUNC 01000


#define O_APPEND 02000


#define O_NONBLOCK 04000


#define O_NDELAY O_NONBLOCK


#define O_SYNC 04010000

#define O_FSYNC O_SYNC

#define O_ASYNC 020000






#define __O_DIRECTORY 0200000


#define __O_NOFOLLOW 0400000


#define __O_CLOEXEC 02000000


#define __O_DIRECT 040000


#define __O_NOATIME 01000000


#define __O_PATH 010000000


#define __O_DSYNC 010000


#define __O_TMPFILE (020000000 | __O_DIRECTORY)
# 109 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/fcntl-linux.h" 3 4
#define F_GETLK F_GETLK64
#define F_SETLK F_SETLK64
#define F_SETLKW F_SETLKW64
# 132 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/fcntl-linux.h" 3 4
#define F_OFD_GETLK 36
#define F_OFD_SETLK 37
#define F_OFD_SETLKW 38



#define O_LARGEFILE __O_LARGEFILE



#define O_DIRECTORY __O_DIRECTORY
#define O_NOFOLLOW __O_NOFOLLOW
#define O_CLOEXEC __O_CLOEXEC



#define O_DIRECT __O_DIRECT
#define O_NOATIME __O_NOATIME
#define O_PATH __O_PATH
#define O_TMPFILE __O_TMPFILE






#define O_DSYNC __O_DSYNC



#define O_RSYNC O_SYNC




#define F_DUPFD 0
#define F_GETFD 1
#define F_SETFD 2
#define F_GETFL 3
#define F_SETFL 4


#define __F_SETOWN 8
#define __F_GETOWN 9



#define F_SETOWN __F_SETOWN
#define F_GETOWN __F_GETOWN



#define __F_SETSIG 10
#define __F_GETSIG 11


#define __F_SETOWN_EX 15
#define __F_GETOWN_EX 16



#define F_SETSIG __F_SETSIG
#define F_GETSIG __F_GETSIG
#define F_SETOWN_EX __F_SETOWN_EX
#define F_GETOWN_EX __F_GETOWN_EX



#define F_SETLEASE 1024
#define F_GETLEASE 1025
#define F_NOTIFY 1026
#define F_SETPIPE_SZ 1031
#define F_GETPIPE_SZ 1032
#define F_ADD_SEALS 1033
#define F_GET_SEALS 1034

#define F_GET_RW_HINT 1035
#define F_SET_RW_HINT 1036
#define F_GET_FILE_RW_HINT 1037
#define F_SET_FILE_RW_HINT 1038


#define F_DUPFD_CLOEXEC 1030




#define FD_CLOEXEC 1



#define F_RDLCK 0
#define F_WRLCK 1
#define F_UNLCK 2





#define F_EXLCK 4
#define F_SHLCK 8




#define LOCK_SH 1
#define LOCK_EX 2
#define LOCK_NB 4

#define LOCK_UN 8



#define LOCK_MAND 32
#define LOCK_READ 64
#define LOCK_WRITE 128
#define LOCK_RW 192




#define DN_ACCESS 0x00000001
#define DN_MODIFY 0x00000002
#define DN_CREATE 0x00000004
#define DN_DELETE 0x00000008
#define DN_RENAME 0x00000010
#define DN_ATTRIB 0x00000020
#define DN_MULTISHOT 0x80000000





enum __pid_type
  {
    F_OWNER_TID = 0,
    F_OWNER_PID,
    F_OWNER_PGRP,
    F_OWNER_GID = F_OWNER_PGRP
  };


struct f_owner_ex
  {
    enum __pid_type type;
    __pid_t pid;
  };




#define F_SEAL_SEAL 0x0001
#define F_SEAL_SHRINK 0x0002
#define F_SEAL_GROW 0x0004
#define F_SEAL_WRITE 0x0008
#define F_SEAL_FUTURE_WRITE 0x0010

#define F_SEAL_EXEC 0x0020




#define RWH_WRITE_LIFE_NOT_SET 0
#define RWF_WRITE_LIFE_NOT_SET RWH_WRITE_LIFE_NOT_SET
#define RWH_WRITE_LIFE_NONE 1
#define RWH_WRITE_LIFE_SHORT 2
#define RWH_WRITE_LIFE_MEDIUM 3
#define RWH_WRITE_LIFE_LONG 4
#define RWH_WRITE_LIFE_EXTREME 5





#define FAPPEND O_APPEND
#define FFSYNC O_FSYNC
#define FASYNC O_ASYNC
#define FNONBLOCK O_NONBLOCK
#define FNDELAY O_NDELAY



#define __POSIX_FADV_DONTNEED 4
#define __POSIX_FADV_NOREUSE 5



#define POSIX_FADV_NORMAL 0
#define POSIX_FADV_RANDOM 1
#define POSIX_FADV_SEQUENTIAL 2
#define POSIX_FADV_WILLNEED 3
#define POSIX_FADV_DONTNEED __POSIX_FADV_DONTNEED
#define POSIX_FADV_NOREUSE __POSIX_FADV_NOREUSE





#define SYNC_FILE_RANGE_WAIT_BEFORE 1


#define SYNC_FILE_RANGE_WRITE 2


#define SYNC_FILE_RANGE_WAIT_AFTER 4




#define SYNC_FILE_RANGE_WRITE_AND_WAIT (SYNC_FILE_RANGE_WRITE | SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WAIT_AFTER)




#define SPLICE_F_MOVE 1
#define SPLICE_F_NONBLOCK 2


#define SPLICE_F_MORE 4
#define SPLICE_F_GIFT 8



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/falloc.h" 1 3 4


#define _FALLOC_H_ 

#define FALLOC_FL_KEEP_SIZE 0x01
#define FALLOC_FL_PUNCH_HOLE 0x02
#define FALLOC_FL_NO_HIDE_STALE 0x04
# 29 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/falloc.h" 3 4
#define FALLOC_FL_COLLAPSE_RANGE 0x08
# 43 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/falloc.h" 3 4
#define FALLOC_FL_ZERO_RANGE 0x10
# 60 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/falloc.h" 3 4
#define FALLOC_FL_INSERT_RANGE 0x20
# 78 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/falloc.h" 3 4
#define FALLOC_FL_UNSHARE_RANGE 0x40
# 356 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/fcntl-linux.h" 2 3 4



struct file_handle
{
  unsigned int handle_bytes;
  int handle_type;

  unsigned char f_handle[0];
};


#define MAX_HANDLE_SZ 128







extern __ssize_t readahead (int __fd, __off64_t __offset, size_t __count)
    __attribute__ ((__nothrow__ , __leaf__));






extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count,
       unsigned int __flags);






extern __ssize_t vmsplice (int __fdout, const struct iovec *__iov,
      size_t __count, unsigned int __flags);





extern __ssize_t splice (int __fdin, __off64_t *__offin, int __fdout,
    __off64_t *__offout, size_t __len,
    unsigned int __flags);





extern __ssize_t tee (int __fdin, int __fdout, size_t __len,
        unsigned int __flags);






extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len);
# 426 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/fcntl-linux.h" 3 4
extern int fallocate64 (int __fd, int __mode, __off64_t __offset,
   __off64_t __len);




extern int name_to_handle_at (int __dfd, const char *__name,
         struct file_handle *__handle, int *__mnt_id,
         int __flags) __attribute__ ((__nothrow__ , __leaf__));





extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle,
         int __flags);




# 62 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/fcntl.h" 2 3 4
# 36 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/fcntl.h" 2 3 4




#define __OPEN_NEEDS_MODE(oflag) (((oflag) & O_CREAT) != 0 || ((oflag) & __O_TMPFILE) == __O_TMPFILE)
# 78 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/fcntl.h" 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/stat.h" 1 3 4
# 23 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/stat.h" 3 4
#define _BITS_STAT_H 1

# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/struct_stat.h" 1 3 4
# 24 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/struct_stat.h" 3 4
#define _BITS_STRUCT_STAT_H 1


# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/wordsize.h" 1 3 4
# 18 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
#define __WORDSIZE_TIME64_COMPAT32 0
# 28 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/struct_stat.h" 2 3 4







#define __field64(type,type64,name) type name
# 44 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/struct_stat.h" 3 4
struct stat
  {
    __dev_t st_dev;
    __ino_t st_ino;
    __mode_t st_mode;
    __nlink_t st_nlink;
    __uid_t st_uid;
    __gid_t st_gid;
    __dev_t st_rdev;
    __dev_t __pad1;
    __off_t st_size;
    __blksize_t st_blksize;
    int __pad2;
    __blkcnt_t st_blocks;







    struct timespec st_atim;
    struct timespec st_mtim;
    struct timespec st_ctim;
#define st_atime st_atim.tv_sec
#define st_mtime st_mtim.tv_sec
#define st_ctime st_ctim.tv_sec
# 79 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/struct_stat.h" 3 4
    int __glibc_reserved[2];
  };

#undef __field64


struct stat64
  {
    __dev_t st_dev;
    __ino64_t st_ino;
    __mode_t st_mode;
    __nlink_t st_nlink;
    __uid_t st_uid;
    __gid_t st_gid;
    __dev_t st_rdev;
    __dev_t __pad1;
    __off64_t st_size;
    __blksize_t st_blksize;
    int __pad2;
    __blkcnt64_t st_blocks;







    struct timespec st_atim;
    struct timespec st_mtim;
    struct timespec st_ctim;
# 117 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/struct_stat.h" 3 4
    int __glibc_reserved[2];
  };



#define _STATBUF_ST_BLKSIZE 
#define _STATBUF_ST_RDEV 

#define _STATBUF_ST_NSEC 
# 26 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/stat.h" 2 3 4



#define __S_IFMT 0170000


#define __S_IFDIR 0040000
#define __S_IFCHR 0020000
#define __S_IFBLK 0060000
#define __S_IFREG 0100000
#define __S_IFIFO 0010000
#define __S_IFLNK 0120000
#define __S_IFSOCK 0140000



#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode)
#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode)
#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode)



#define __S_ISUID 04000
#define __S_ISGID 02000
#define __S_ISVTX 01000
#define __S_IREAD 0400
#define __S_IWRITE 0200
#define __S_IEXEC 0100


#define UTIME_NOW ((1l << 30) - 1l)
#define UTIME_OMIT ((1l << 30) - 2l)
# 79 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/fcntl.h" 2 3 4

#define S_IFMT __S_IFMT
#define S_IFDIR __S_IFDIR
#define S_IFCHR __S_IFCHR
#define S_IFBLK __S_IFBLK
#define S_IFREG __S_IFREG

#define S_IFIFO __S_IFIFO


#define S_IFLNK __S_IFLNK


#define S_IFSOCK __S_IFSOCK




#define S_ISUID __S_ISUID
#define S_ISGID __S_ISGID



#define S_ISVTX __S_ISVTX


#define S_IRUSR __S_IREAD
#define S_IWUSR __S_IWRITE
#define S_IXUSR __S_IEXEC

#define S_IRWXU (__S_IREAD|__S_IWRITE|__S_IEXEC)

#define S_IRGRP (S_IRUSR >> 3)
#define S_IWGRP (S_IWUSR >> 3)
#define S_IXGRP (S_IXUSR >> 3)

#define S_IRWXG (S_IRWXU >> 3)

#define S_IROTH (S_IRGRP >> 3)
#define S_IWOTH (S_IWGRP >> 3)
#define S_IXOTH (S_IXGRP >> 3)

#define S_IRWXO (S_IRWXG >> 3)
# 137 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/fcntl.h" 3 4
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2
# 149 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/fcntl.h" 3 4
#define AT_FDCWD -100


#define AT_SYMLINK_NOFOLLOW 0x100
#define AT_REMOVEDIR 0x200

#define AT_SYMLINK_FOLLOW 0x400

#define AT_NO_AUTOMOUNT 0x800

#define AT_EMPTY_PATH 0x1000
#define AT_STATX_SYNC_TYPE 0x6000
#define AT_STATX_SYNC_AS_STAT 0x0000
#define AT_STATX_FORCE_SYNC 0x2000
#define AT_STATX_DONT_SYNC 0x4000
#define AT_RECURSIVE 0x8000

#define AT_EACCESS 0x200
# 177 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/fcntl.h" 3 4
extern int fcntl (int __fd, int __cmd, ...);
# 186 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/fcntl.h" 3 4
extern int fcntl64 (int __fd, int __cmd, ...);
# 209 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/fcntl.h" 3 4
extern int open (const char *__file, int __oflag, ...) __attribute__ ((__nonnull__ (1)));
# 219 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/fcntl.h" 3 4
extern int open64 (const char *__file, int __oflag, ...) __attribute__ ((__nonnull__ (1)));
# 233 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/fcntl.h" 3 4
extern int openat (int __fd, const char *__file, int __oflag, ...)
     __attribute__ ((__nonnull__ (2)));
# 244 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/fcntl.h" 3 4
extern int openat64 (int __fd, const char *__file, int __oflag, ...)
     __attribute__ ((__nonnull__ (2)));
# 255 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/fcntl.h" 3 4
extern int creat (const char *__file, mode_t __mode) __attribute__ ((__nonnull__ (1)));
# 265 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/fcntl.h" 3 4
extern int creat64 (const char *__file, mode_t __mode) __attribute__ ((__nonnull__ (1)));
# 301 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/fcntl.h" 3 4
extern int posix_fadvise (int __fd, off_t __offset, off_t __len,
     int __advise) __attribute__ ((__nothrow__ , __leaf__));
# 313 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/fcntl.h" 3 4
extern int posix_fadvise64 (int __fd, off64_t __offset, off64_t __len,
       int __advise) __attribute__ ((__nothrow__ , __leaf__));
# 323 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/fcntl.h" 3 4
extern int posix_fallocate (int __fd, off_t __offset, off_t __len);
# 334 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/fcntl.h" 3 4
extern int posix_fallocate64 (int __fd, off64_t __offset, off64_t __len);
# 345 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/fcntl.h" 3 4

# 214 "system.h" 2
# 242 "system.h"
#undef MIN
#undef MAX
#define MIN(X,Y) ((X) < (Y) ? (X) : (Y))
#define MAX(X,Y) ((X) > (Y) ? (X) : (Y))


#define CEIL(x,y) (((x) + (y) - 1) / (y))
# 312 "system.h"
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/malloc.h" 1 3 4
# 21 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/malloc.h" 3 4
#define _MALLOC_H 1


# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 1 3 4
# 25 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/malloc.h" 2 3 4






#define __MALLOC_HOOK_VOLATILE volatile
#define __MALLOC_DEPRECATED __attribute_deprecated__






extern void *malloc (size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__))
     __attribute__ ((__alloc_size__ (1))) ;


extern void *calloc (size_t __nmemb, size_t __size)
__attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (1, 2))) ;






extern void *realloc (void *__ptr, size_t __size)
__attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__alloc_size__ (2)));






extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
  __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__alloc_size__ (2, 3)))
  __attribute__ ((__malloc__ (__builtin_free, 1)));


extern void free (void *__ptr) __attribute__ ((__nothrow__ , __leaf__));


extern void *memalign (size_t __alignment, size_t __size)
  __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__alloc_align__ (1)))
  __attribute__ ((__alloc_size__ (2))) __attribute__ ((__malloc__ (__builtin_free, 1)));


extern void *valloc (size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__))
     __attribute__ ((__alloc_size__ (1))) __attribute__ ((__malloc__ (__builtin_free, 1)));



extern void *pvalloc (size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__))
  __attribute__ ((__malloc__ (__builtin_free, 1)));



struct mallinfo
{
  int arena;
  int ordblks;
  int smblks;
  int hblks;
  int hblkhd;
  int usmblks;
  int fsmblks;
  int uordblks;
  int fordblks;
  int keepcost;
};




struct mallinfo2
{
  size_t arena;
  size_t ordblks;
  size_t smblks;
  size_t hblks;
  size_t hblkhd;
  size_t usmblks;
  size_t fsmblks;
  size_t uordblks;
  size_t fordblks;
  size_t keepcost;
};


extern struct mallinfo mallinfo (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));


extern struct mallinfo2 mallinfo2 (void) __attribute__ ((__nothrow__ , __leaf__));



#define M_MXFAST 1


#define M_NLBLKS 2


#define M_GRAIN 3


#define M_KEEP 4



#define M_TRIM_THRESHOLD -1
#define M_TOP_PAD -2
#define M_MMAP_THRESHOLD -3
#define M_MMAP_MAX -4
#define M_CHECK_ACTION -5
#define M_PERTURB -6
#define M_ARENA_TEST -7
#define M_ARENA_MAX -8


extern int mallopt (int __param, int __val) __attribute__ ((__nothrow__ , __leaf__));



extern int malloc_trim (size_t __pad) __attribute__ ((__nothrow__ , __leaf__));



extern size_t malloc_usable_size (void *__ptr) __attribute__ ((__nothrow__ , __leaf__));


extern void malloc_stats (void) __attribute__ ((__nothrow__ , __leaf__));


extern int malloc_info (int __options, FILE *__fp) __attribute__ ((__nothrow__ , __leaf__));


# 313 "system.h" 2
# 369 "system.h"
#define HAVE_DESIGNATED_INITIALIZERS ((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L))





#define HAVE__BOOL ((GCC_VERSION >= 3000) || (__STDC_VERSION__ >= 199901L))





# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/stat.h" 1 3 4
# 23 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/stat.h" 3 4
#define _SYS_STAT_H 1
# 99 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/stat.h" 3 4


# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/stat.h" 1 3 4
# 102 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/stat.h" 2 3 4


#define S_IFMT __S_IFMT
#define S_IFDIR __S_IFDIR
#define S_IFCHR __S_IFCHR
#define S_IFBLK __S_IFBLK
#define S_IFREG __S_IFREG

#define S_IFIFO __S_IFIFO


#define S_IFLNK __S_IFLNK



#define S_IFSOCK __S_IFSOCK





#define __S_ISTYPE(mode,mask) (((mode) & __S_IFMT) == (mask))

#define S_ISDIR(mode) __S_ISTYPE((mode), __S_IFDIR)
#define S_ISCHR(mode) __S_ISTYPE((mode), __S_IFCHR)
#define S_ISBLK(mode) __S_ISTYPE((mode), __S_IFBLK)
#define S_ISREG(mode) __S_ISTYPE((mode), __S_IFREG)

#define S_ISFIFO(mode) __S_ISTYPE((mode), __S_IFIFO)


#define S_ISLNK(mode) __S_ISTYPE((mode), __S_IFLNK)
# 142 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/stat.h" 3 4
#define S_ISSOCK(mode) __S_ISTYPE((mode), __S_IFSOCK)
# 152 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/stat.h" 3 4
#define S_TYPEISMQ(buf) __S_TYPEISMQ(buf)
#define S_TYPEISSEM(buf) __S_TYPEISSEM(buf)
#define S_TYPEISSHM(buf) __S_TYPEISSHM(buf)





#define S_ISUID __S_ISUID
#define S_ISGID __S_ISGID



#define S_ISVTX __S_ISVTX


#define S_IRUSR __S_IREAD
#define S_IWUSR __S_IWRITE
#define S_IXUSR __S_IEXEC

#define S_IRWXU (__S_IREAD|__S_IWRITE|__S_IEXEC)


#define S_IREAD S_IRUSR
#define S_IWRITE S_IWUSR
#define S_IEXEC S_IXUSR


#define S_IRGRP (S_IRUSR >> 3)
#define S_IWGRP (S_IWUSR >> 3)
#define S_IXGRP (S_IXUSR >> 3)

#define S_IRWXG (S_IRWXU >> 3)

#define S_IROTH (S_IRGRP >> 3)
#define S_IWOTH (S_IWGRP >> 3)
#define S_IXOTH (S_IXGRP >> 3)

#define S_IRWXO (S_IRWXG >> 3)




#define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO)
#define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)
#define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)

#define S_BLKSIZE 512





extern int stat (const char *__restrict __file,
   struct stat *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));



extern int fstat (int __fd, struct stat *__buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
# 240 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/stat.h" 3 4
extern int stat64 (const char *__restrict __file,
     struct stat64 *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
extern int fstat64 (int __fd, struct stat64 *__buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
# 264 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/stat.h" 3 4
extern int fstatat (int __fd, const char *__restrict __file,
      struct stat *__restrict __buf, int __flag)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
# 291 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/stat.h" 3 4
extern int fstatat64 (int __fd, const char *__restrict __file,
        struct stat64 *__restrict __buf, int __flag)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
# 313 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/stat.h" 3 4
extern int lstat (const char *__restrict __file,
    struct stat *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
# 338 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/stat.h" 3 4
extern int lstat64 (const char *__restrict __file,
      struct stat64 *__restrict __buf)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
# 352 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/stat.h" 3 4
extern int chmod (const char *__file, __mode_t __mode)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));





extern int lchmod (const char *__file, __mode_t __mode)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));




extern int fchmod (int __fd, __mode_t __mode) __attribute__ ((__nothrow__ , __leaf__));





extern int fchmodat (int __fd, const char *__file, __mode_t __mode,
       int __flag)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) ;






extern __mode_t umask (__mode_t __mask) __attribute__ ((__nothrow__ , __leaf__));




extern __mode_t getumask (void) __attribute__ ((__nothrow__ , __leaf__));



extern int mkdir (const char *__path, __mode_t __mode)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));





extern int mkdirat (int __fd, const char *__path, __mode_t __mode)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));






extern int mknod (const char *__path, __mode_t __mode, __dev_t __dev)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));





extern int mknodat (int __fd, const char *__path, __mode_t __mode,
      __dev_t __dev) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));





extern int mkfifo (const char *__path, __mode_t __mode)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));





extern int mkfifoat (int __fd, const char *__path, __mode_t __mode)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));






extern int utimensat (int __fd, const char *__path,
        const struct timespec __times[2],
        int __flags)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
# 452 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/stat.h" 3 4
extern int futimens (int __fd, const struct timespec __times[2]) __attribute__ ((__nothrow__ , __leaf__));
# 465 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/stat.h" 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/statx.h" 1 3 4
# 31 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/statx.h" 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/stat.h" 1 3 4


#define _LINUX_STAT_H 

# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/types.h" 1 3 4


#define _LINUX_TYPES_H 

# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm/types.h" 1 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm-generic/types.h" 1 3 4


#define _ASM_GENERIC_TYPES_H 



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm-generic/int-ll64.h" 1 3 4
# 10 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm-generic/int-ll64.h" 3 4
#define _ASM_GENERIC_INT_LL64_H 

# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm/bitsperlong.h" 1 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm-generic/bitsperlong.h" 1 3 4


#define __ASM_GENERIC_BITS_PER_LONG 
# 14 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm-generic/bitsperlong.h" 3 4
#define __BITS_PER_LONG (__CHAR_BIT__ * __SIZEOF_LONG__)
# 2 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm/bitsperlong.h" 2 3 4
# 13 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm-generic/int-ll64.h" 2 3 4







typedef __signed__ char __s8;
typedef unsigned char __u8;

typedef __signed__ short __s16;
typedef unsigned short __u16;

typedef __signed__ int __s32;
typedef unsigned int __u32;


__extension__ typedef __signed__ long long __s64;
__extension__ typedef unsigned long long __u64;
# 8 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm-generic/types.h" 2 3 4
# 2 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm/types.h" 2 3 4
# 6 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/types.h" 2 3 4



# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/posix_types.h" 1 3 4


#define _LINUX_POSIX_TYPES_H 

# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/stddef.h" 1 3 4


#define _LINUX_STDDEF_H 
# 26 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/stddef.h" 3 4
#define __struct_group(TAG,NAME,ATTRS,MEMBERS...) union { struct { MEMBERS } ATTRS; struct TAG { MEMBERS } ATTRS NAME; }
# 47 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/stddef.h" 3 4
#define __DECLARE_FLEX_ARRAY(TYPE,NAME) struct { struct { } __empty_ ## NAME; TYPE NAME[]; }







#define __counted_by(m) 
# 6 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/posix_types.h" 2 3 4
# 22 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/posix_types.h" 3 4
#undef __FD_SETSIZE
#define __FD_SETSIZE 1024

typedef struct {
 unsigned long fds_bits[1024 / (8 * sizeof(long))];
} __kernel_fd_set;


typedef void (*__kernel_sighandler_t)(int);


typedef int __kernel_key_t;
typedef int __kernel_mqd_t;

# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm/posix_types.h" 1 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm-generic/posix_types.h" 1 3 4


#define __ASM_GENERIC_POSIX_TYPES_H 

# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm/bitsperlong.h" 1 3 4
# 6 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm-generic/posix_types.h" 2 3 4
# 15 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm-generic/posix_types.h" 3 4
typedef long __kernel_long_t;
typedef unsigned long __kernel_ulong_t;



typedef __kernel_ulong_t __kernel_ino_t;



typedef unsigned int __kernel_mode_t;



typedef int __kernel_pid_t;



typedef int __kernel_ipc_pid_t;



typedef unsigned int __kernel_uid_t;
typedef unsigned int __kernel_gid_t;



typedef __kernel_long_t __kernel_suseconds_t;



typedef int __kernel_daddr_t;



typedef unsigned int __kernel_uid32_t;
typedef unsigned int __kernel_gid32_t;



typedef __kernel_uid_t __kernel_old_uid_t;
typedef __kernel_gid_t __kernel_old_gid_t;



typedef unsigned int __kernel_old_dev_t;
# 72 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm-generic/posix_types.h" 3 4
typedef __kernel_ulong_t __kernel_size_t;
typedef __kernel_long_t __kernel_ssize_t;
typedef __kernel_long_t __kernel_ptrdiff_t;




typedef struct {
 int val[2];
} __kernel_fsid_t;





typedef __kernel_long_t __kernel_off_t;
typedef long long __kernel_loff_t;
typedef __kernel_long_t __kernel_old_time_t;
typedef __kernel_long_t __kernel_time_t;
typedef long long __kernel_time64_t;
typedef __kernel_long_t __kernel_clock_t;
typedef int __kernel_timer_t;
typedef int __kernel_clockid_t;
typedef char * __kernel_caddr_t;
typedef unsigned short __kernel_uid16_t;
typedef unsigned short __kernel_gid16_t;
# 2 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/asm/posix_types.h" 2 3 4
# 37 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/posix_types.h" 2 3 4
# 10 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/types.h" 2 3 4


typedef __signed__ __int128 __s128 __attribute__((aligned(16)));
typedef unsigned __int128 __u128 __attribute__((aligned(16)));
# 25 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/types.h" 3 4
#define __bitwise 



#define __bitwise__ __bitwise

typedef __u16 __le16;
typedef __u16 __be16;
typedef __u32 __le32;
typedef __u32 __be32;
typedef __u64 __le64;
typedef __u64 __be64;

typedef __u16 __sum16;
typedef __u32 __wsum;
# 50 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/types.h" 3 4
#define __aligned_u64 __u64 __attribute__((aligned(8)))
#define __aligned_be64 __be64 __attribute__((aligned(8)))
#define __aligned_le64 __le64 __attribute__((aligned(8)))

typedef unsigned __poll_t;
# 6 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/stat.h" 2 3 4
# 56 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/stat.h" 3 4
struct statx_timestamp {
 __s64 tv_sec;
 __u32 tv_nsec;
 __s32 __reserved;
};
# 99 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/stat.h" 3 4
struct statx {

 __u32 stx_mask;
 __u32 stx_blksize;
 __u64 stx_attributes;

 __u32 stx_nlink;
 __u32 stx_uid;
 __u32 stx_gid;
 __u16 stx_mode;
 __u16 __spare0[1];

 __u64 stx_ino;
 __u64 stx_size;
 __u64 stx_blocks;
 __u64 stx_attributes_mask;

 struct statx_timestamp stx_atime;
 struct statx_timestamp stx_btime;
 struct statx_timestamp stx_ctime;
 struct statx_timestamp stx_mtime;

 __u32 stx_rdev_major;
 __u32 stx_rdev_minor;
 __u32 stx_dev_major;
 __u32 stx_dev_minor;

 __u64 stx_mnt_id;
 __u32 stx_dio_mem_align;
 __u32 stx_dio_offset_align;

 __u64 __spare3[12];

};
# 142 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/stat.h" 3 4
#define STATX_TYPE 0x00000001U
#define STATX_MODE 0x00000002U
#define STATX_NLINK 0x00000004U
#define STATX_UID 0x00000008U
#define STATX_GID 0x00000010U
#define STATX_ATIME 0x00000020U
#define STATX_MTIME 0x00000040U
#define STATX_CTIME 0x00000080U
#define STATX_INO 0x00000100U
#define STATX_SIZE 0x00000200U
#define STATX_BLOCKS 0x00000400U
#define STATX_BASIC_STATS 0x000007ffU
#define STATX_BTIME 0x00000800U
#define STATX_MNT_ID 0x00001000U
#define STATX_DIOALIGN 0x00002000U

#define STATX__RESERVED 0x80000000U






#define STATX_ALL 0x00000fffU
# 181 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/linux/stat.h" 3 4
#define STATX_ATTR_COMPRESSED 0x00000004
#define STATX_ATTR_IMMUTABLE 0x00000010
#define STATX_ATTR_APPEND 0x00000020
#define STATX_ATTR_NODUMP 0x00000040
#define STATX_ATTR_ENCRYPTED 0x00000800
#define STATX_ATTR_AUTOMOUNT 0x00001000
#define STATX_ATTR_MOUNT_ROOT 0x00002000
#define STATX_ATTR_VERITY 0x00100000
#define STATX_ATTR_DAX 0x00200000
# 32 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/statx.h" 2 3 4

#define __statx_timestamp_defined 1
#define __statx_defined 1




# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/statx-generic.h" 1 3 4
# 25 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/statx-generic.h" 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/struct_statx_timestamp.h" 1 3 4
# 26 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/statx-generic.h" 2 3 4
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/types/struct_statx.h" 1 3 4
# 27 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/statx-generic.h" 2 3 4
# 58 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/statx-generic.h" 3 4



int statx (int __dirfd, const char *__restrict __path, int __flags,
           unsigned int __mask, struct statx *__restrict __buf)
  __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 5)));


# 40 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/bits/statx.h" 2 3 4
# 466 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/loongarch64-linux-gnu/sysroot/usr/include/sys/stat.h" 2 3 4



# 382 "system.h" 2
# 454 "system.h"
#define HOST_PTR_PRINTF "%p"
# 464 "system.h"
#define PATH_SEPARATOR ':'



#define DIR_SEPARATOR '/'




#define IS_DIR_SEPARATOR(CH) ((CH) == DIR_SEPARATOR)
# 488 "system.h"
#define IS_ABSOLUTE_PATHNAME(STR) (IS_DIR_SEPARATOR ((STR)[0]) || (STR)[0] == '$')




# 1 "libiberty.h" 1
# 36 "libiberty.h"
#define LIBIBERTY_H 
# 46 "libiberty.h"
# 1 "/home/chenglulu/work/loongisa-toolchain/new_toolchain/install/loongarch64-linux-gnu-trunk/lib/gcc/loongarch64-linux-gnu/14.0.1/include/stddef.h" 1 3 4
# 47 "libiberty.h" 2
# 59 "libiberty.h"

# 59 "libiberty.h"
extern char **buildargv (const char *) __attribute__ ((__malloc__));



extern void freeargv (char **);




extern char **dupargv (char **) __attribute__ ((__malloc__));
# 82 "libiberty.h"
extern char *basename (const char *);
# 91 "libiberty.h"
extern const char *lbasename (const char *);





extern char *concat (const char *, ...) __attribute__ ((__malloc__));
# 106 "libiberty.h"
extern char *reconcat (char *, const char *, ...) __attribute__ ((__malloc__));





extern unsigned long concat_length (const char *, ...);






extern char *concat_copy (char *, const char *, ...);






extern char *concat_copy2 (const char *, ...);



extern char *libiberty_concat_ptr;





#define ACONCAT(ACONCAT_PARAMS) (libiberty_concat_ptr = alloca (concat_length ACONCAT_PARAMS + 1), concat_copy2 ACONCAT_PARAMS)





extern int fdmatch (int fd1, int fd2);




extern char * getpwd (void);



extern long get_run_time (void);



extern char *choose_temp_base (void) __attribute__ ((__malloc__));



extern char *make_temp_file (const char *) __attribute__ ((__malloc__));



extern const char *spaces (int count);




extern int errno_max (void);




extern const char *strerrno (int);



extern int strtoerrno (const char *);



extern char *xstrerror (int);




extern int signo_max (void);
# 198 "libiberty.h"
extern const char *strsigno (int);



extern int strtosigno (const char *);



extern int xatexit (void (*fn) (void));



extern void xexit (int status) __attribute__ ((__noreturn__));



extern void xmalloc_set_program_name (const char *);


extern void xmalloc_failed (size_t) __attribute__ ((__noreturn__));





extern void * xmalloc (size_t) __attribute__ ((__malloc__));





extern void * xrealloc (void *, size_t);




extern void * xcalloc (size_t, size_t) __attribute__ ((__malloc__));



extern char *xstrdup (const char *) __attribute__ ((__malloc__));



extern void * xmemdup (const void *, size_t, size_t) __attribute__ ((__malloc__));


extern void specqsort (void *, int, int, int (*)() );



#define _hex_array_size 256
#define _hex_bad 99
extern const char _hex_value[256];
extern void hex_init (void);
#define hex_p(c) (hex_value (c) != _hex_bad)


#define hex_value(c) (_hex_value[(unsigned char) (c)])



#define PEXECUTE_FIRST 1
#define PEXECUTE_LAST 2
#define PEXECUTE_ONE (PEXECUTE_FIRST + PEXECUTE_LAST)
#define PEXECUTE_SEARCH 4
#define PEXECUTE_VERBOSE 8



extern int pexecute (const char *, char * const *, const char *, const char *, char **, char **, int)
                                            ;



extern int pwait (int, int *, int);




extern int asprintf (char **, const char *, ...) __attribute__ ((__format__ (__printf__, 2, 3)));




extern int vasprintf (char **, const char *, va_list)
  __attribute__ ((__format__ (__printf__, 2, 0)));

#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
# 494 "system.h" 2
# 1 "symcat.h" 1
# 20 "symcat.h"
#define SYM_CAT_H 


#define CONCAT2(a,b) a ##b
#define CONCAT3(a,b,c) a ##b ##c
#define CONCAT4(a,b,c,d) a ##b ##c ##d
#define STRINGX(s) #s
# 38 "symcat.h"
#define XCONCAT2(a,b) CONCAT2(a,b)
#define XCONCAT3(a,b,c) CONCAT3(a,b,c)
#define XCONCAT4(a,b,c,d) CONCAT4(a,b,c,d)






#define XSTRING(s) STRINGX(s)
# 495 "system.h" 2





#define HOST_BIT_BUCKET "/dev/null"
# 509 "system.h"
#define ENUM_BITFIELD(TYPE) unsigned int
# 527 "system.h"
#define UNION_INIT_ZERO , {0}
# 549 "system.h"
#undef bool
#undef true
#undef false
#undef TRUE
#undef FALSE







#define bool _Bool
#define true 1
#define false 0


#define TRUE true
#define FALSE false
# 580 "system.h"
#define really_call_malloc malloc
#define really_call_calloc calloc
#define really_call_realloc realloc
# 626 "system.h"
#undef bcopy
#undef bzero
#undef bcmp
#undef rindex
        
# 25 "regrename.c" 2
# 1 "rtl.h" 1
# 23 "rtl.h"
#define GCC_RTL_H 

struct function;

# 1 "machmode.h" 1
# 23 "machmode.h"
#define HAVE_MACHINE_MODES 



#define DEF_MACHMODE(SYM,NAME,TYPE,BITSIZE,SIZE,UNIT,WIDER,INNER) SYM,

enum machine_mode {
# 1 "machmode.def" 1
# 74 "machmode.def"
VOIDmode,

BImode,
QImode,
HImode,
SImode,
DImode,
TImode,
OImode,




PQImode,
PHImode,
PSImode,
PDImode,

QFmode,
HFmode,
TQFmode,
SFmode,
DFmode,
XFmode,
TFmode,


QCmode,
HCmode,
SCmode,
DCmode,
XCmode,
TCmode,

CQImode,
CHImode,
CSImode,
CDImode,
CTImode,
COImode,







V2QImode,
V2HImode,
V2SImode,
V2DImode,

V4QImode,
V4HImode,
V4SImode,
V4DImode,

V8QImode,
V8HImode,
V8SImode,
V8DImode,

V16QImode,

V2SFmode,
V2DFmode,

V4SFmode,
V4DFmode,

V8SFmode,
V8DFmode,
V16SFmode,



BLKmode,






#define CC(E,M) DEF_MACHMODE (E, M, MODE_CC, BITS_PER_UNIT*4, 4, 4, VOIDmode, VOIDmode)

CCmode,


CCGCmode, CCGOCmode, CCNOmode, CCZmode, CCFPmode, CCFPUmode,


#undef CC
# 31 "machmode.h" 2
MAX_MACHINE_MODE };

#undef DEF_MACHMODE


#define NUM_MACHINE_MODES (int) MAX_MACHINE_MODE




extern const char * const mode_name[(int) MAX_MACHINE_MODE];
#define GET_MODE_NAME(MODE) (mode_name[(int) (MODE)])

enum mode_class { MODE_RANDOM, MODE_INT, MODE_FLOAT, MODE_PARTIAL_INT, MODE_CC,
    MODE_COMPLEX_INT, MODE_COMPLEX_FLOAT,
    MODE_VECTOR_INT, MODE_VECTOR_FLOAT,
    MAX_MODE_CLASS};




extern const enum mode_class mode_class[(int) MAX_MACHINE_MODE];
#define GET_MODE_CLASS(MODE) (mode_class[(int) (MODE)])


#define INTEGRAL_MODE_P(MODE) (GET_MODE_CLASS (MODE) == MODE_INT || GET_MODE_CLASS (MODE) == MODE_PARTIAL_INT || GET_MODE_CLASS (MODE) == MODE_COMPLEX_INT || GET_MODE_CLASS (MODE) == MODE_VECTOR_INT)






#define FLOAT_MODE_P(MODE) (GET_MODE_CLASS (MODE) == MODE_FLOAT || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT || GET_MODE_CLASS (MODE) == MODE_VECTOR_FLOAT)





#define COMPLEX_MODE_P(MODE) (GET_MODE_CLASS (MODE) == MODE_COMPLEX_INT || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT)




#define VECTOR_MODE_P(MODE) (GET_MODE_CLASS (MODE) == MODE_VECTOR_INT || GET_MODE_CLASS (MODE) == MODE_VECTOR_FLOAT)





extern const unsigned char mode_size[(int) MAX_MACHINE_MODE];
#define GET_MODE_SIZE(MODE) (mode_size[(int) (MODE)])



extern const unsigned char mode_unit_size[(int) MAX_MACHINE_MODE];
#define GET_MODE_UNIT_SIZE(MODE) (mode_unit_size[(int) (MODE)])



#define GET_MODE_NUNITS(MODE) ((GET_MODE_UNIT_SIZE ((MODE)) == 0) ? 0 : (GET_MODE_SIZE ((MODE)) / GET_MODE_UNIT_SIZE ((MODE))))





extern const unsigned short mode_bitsize[(int) MAX_MACHINE_MODE];
#define GET_MODE_BITSIZE(MODE) (mode_bitsize[(int) (MODE)])
# 106 "machmode.h"
extern const unsigned long mode_mask_array[(int) MAX_MACHINE_MODE];

#define GET_MODE_MASK(MODE) mode_mask_array[(int) (MODE)]

extern const enum machine_mode inner_mode_array[(int) MAX_MACHINE_MODE];



#define GET_MODE_INNER(MODE) inner_mode_array[(int) (MODE)]
# 123 "machmode.h"
extern const unsigned char mode_wider_mode[(int) MAX_MACHINE_MODE];
#define GET_MODE_WIDER_MODE(MODE) ((enum machine_mode)mode_wider_mode[(int) (MODE)])





extern enum machine_mode mode_for_size (unsigned int, enum mode_class, int)
                            ;



extern enum machine_mode smallest_mode_for_size
    (unsigned int, enum mode_class);





extern enum machine_mode int_mode_for_mode (enum machine_mode);



extern enum machine_mode get_best_mode (int, int, unsigned int, enum machine_mode, int)
                              ;



extern unsigned get_mode_alignment (enum machine_mode);

#define GET_MODE_ALIGNMENT(MODE) get_mode_alignment (MODE)



extern const enum machine_mode class_narrowest_mode[(int) MAX_MODE_CLASS];
#define GET_CLASS_NARROWEST_MODE(CLASS) class_narrowest_mode[(int) (CLASS)]




extern enum machine_mode byte_mode;
extern enum machine_mode word_mode;
extern enum machine_mode ptr_mode;
# 28 "rtl.h" 2

#undef FFS
#undef FLOAT
#undef ABS
#undef PC



#define NOOP_MOVE_INSN_CODE INT_MAX



#define RTX_CODE enum rtx_code
enum rtx_code {

#define DEF_RTL_EXPR(ENUM,NAME,FORMAT,CLASS) ENUM ,
# 1 "rtl.def" 1
# 70 "rtl.def"
UNKNOWN ,



NIL ,




INCLUDE ,






EXPR_LIST ,



INSN_LIST ,
# 129 "rtl.def"
MATCH_OPERAND ,






MATCH_SCRATCH ,




MATCH_DUP ,







MATCH_OPERATOR ,
# 158 "rtl.def"
MATCH_PARALLEL ,




MATCH_OP_DUP ,




MATCH_PAR_DUP ,




MATCH_INSN ,
# 192 "rtl.def"
DEFINE_INSN ,







DEFINE_PEEPHOLE ,
# 211 "rtl.def"
DEFINE_SPLIT ,
# 239 "rtl.def"
DEFINE_INSN_AND_SPLIT ,



DEFINE_PEEPHOLE2 ,



DEFINE_COMBINE ,
# 260 "rtl.def"
DEFINE_EXPAND ,
# 276 "rtl.def"
DEFINE_DELAY ,
# 317 "rtl.def"
DEFINE_FUNCTION_UNIT ,


DEFINE_ASM_ATTRIBUTES ,
# 333 "rtl.def"
DEFINE_COND_EXEC ,





SEQUENCE ,


ADDRESS ,
# 353 "rtl.def"
DEFINE_ATTR ,


ATTR ,







SET_ATTR ,
# 379 "rtl.def"
SET_ATTR_ALTERNATIVE ,




EQ_ATTR ,
# 394 "rtl.def"
ATTR_FLAG ,
# 407 "rtl.def"
INSN ,



JUMP_INSN ,






CALL_INSN ,


BARRIER ,
# 430 "rtl.def"
CODE_LABEL ,






NOTE ,
# 450 "rtl.def"
COND_EXEC ,


PARALLEL ,







ASM_INPUT ,
# 475 "rtl.def"
ASM_OPERANDS ,
# 486 "rtl.def"
UNSPEC ,


UNSPEC_VOLATILE ,



ADDR_VEC ,
# 518 "rtl.def"
ADDR_DIFF_VEC ,
# 529 "rtl.def"
PREFETCH ,
# 541 "rtl.def"
SET ,




USE ,




CLOBBER ,





CALL ,



RETURN ,





TRAP_IF ,




RESX ,






CONST_INT ,






CONST_DOUBLE ,


CONST_VECTOR ,


CONST_STRING ,





CONST ,



PC ,


VALUE ,
# 614 "rtl.def"
REG ,






SCRATCH ,
# 631 "rtl.def"
SUBREG ,
# 644 "rtl.def"
STRICT_LOW_PART ,





CONCAT ,




MEM ,





LABEL_REF ,





SYMBOL_REF ,






CC0 ,
# 683 "rtl.def"
ADDRESSOF ,
# 701 "rtl.def"
QUEUED ,
# 713 "rtl.def"
IF_THEN_ELSE ,
# 722 "rtl.def"
COND ,


COMPARE ,


PLUS ,


MINUS ,


NEG ,

MULT ,


DIV ,

MOD ,


UDIV ,
UMOD ,


AND ,

IOR ,

XOR ,

NOT ,




ASHIFT ,
ROTATE ,
ASHIFTRT ,
LSHIFTRT ,
ROTATERT ,





SMIN ,
SMAX ,
UMIN ,
UMAX ,
# 781 "rtl.def"
PRE_DEC ,
PRE_INC ,
POST_DEC ,
POST_INC ,
# 798 "rtl.def"
PRE_MODIFY ,
POST_MODIFY ,



NE ,
EQ ,
GE ,
GT ,
LE ,
LT ,
GEU ,
GTU ,
LEU ,
LTU ,


UNORDERED ,
ORDERED ,


UNEQ ,
UNGE ,
UNGT ,
UNLE ,
UNLT ,


LTGT ,




SIGN_EXTEND ,


ZERO_EXTEND ,


TRUNCATE ,


FLOAT_EXTEND ,
FLOAT_TRUNCATE ,


FLOAT ,







FIX ,


UNSIGNED_FLOAT ,




UNSIGNED_FIX ,


ABS ,


SQRT ,




FFS ,
# 882 "rtl.def"
SIGN_EXTRACT ,


ZERO_EXTRACT ,




HIGH ,



LO_SUM ,
# 907 "rtl.def"
RANGE_INFO ,
# 922 "rtl.def"
RANGE_REG ,





RANGE_VAR ,



RANGE_LIVE ,




CONSTANT_P_RTX ,
# 958 "rtl.def"
CALL_PLACEHOLDER ,






VEC_MERGE ,





VEC_SELECT ,




VEC_CONCAT ,





VEC_DUPLICATE ,


SS_PLUS ,


US_PLUS ,


SS_MINUS ,


US_MINUS ,


SS_TRUNCATE ,


US_TRUNCATE ,
# 1014 "rtl.def"
PHI ,
# 45 "rtl.h" 2
#undef DEF_RTL_EXPR

  LAST_AND_UNUSED_RTX_CODE};



#define NUM_RTX_CODE ((int) LAST_AND_UNUSED_RTX_CODE)


extern const unsigned char rtx_length[((int) LAST_AND_UNUSED_RTX_CODE)];
#define GET_RTX_LENGTH(CODE) (rtx_length[(int) (CODE)])

extern const char * const rtx_name[((int) LAST_AND_UNUSED_RTX_CODE)];
#define GET_RTX_NAME(CODE) (rtx_name[(int) (CODE)])

extern const char * const rtx_format[((int) LAST_AND_UNUSED_RTX_CODE)];
#define GET_RTX_FORMAT(CODE) (rtx_format[(int) (CODE)])

extern const char rtx_class[((int) LAST_AND_UNUSED_RTX_CODE)];
#define GET_RTX_CLASS(CODE) (rtx_class[(int) (CODE)])



typedef struct
{

  unsigned min_align: 8;

  unsigned base_after_vec: 1;
  unsigned min_after_vec: 1;

  unsigned max_after_vec: 1;

  unsigned min_after_base: 1;

  unsigned max_after_base: 1;


  unsigned offset_unsigned: 1;
  unsigned : 2;
  unsigned scale : 8;
} addr_diff_vec_flags;





typedef struct
{
  long alias;
  tree expr;
  rtx offset;
  rtx size;
  unsigned int align;
} mem_attrs;



typedef union rtunion_def
{
  long rtwint;
  int rtint;
  unsigned int rtuint;
  const char *rtstr;
  rtx rtx;
  rtvec rtvec;
  enum machine_mode rttype;
  addr_diff_vec_flags rt_addr_diff_vec_flags;
  struct cselib_val_struct *rt_cselib;
  struct bitmap_head_def *rtbit;
  tree rttree;
  struct basic_block_def *bb;
  mem_attrs *rtmem;
} rtunion;



struct rtx_def
{

  unsigned int code: 16;


  unsigned int mode : 8;






  unsigned int jump : 1;


  unsigned int call : 1;
# 149 "rtl.h"
  unsigned int unchanging : 1;







  unsigned int volatil : 1;
# 175 "rtl.h"
  unsigned int in_struct : 1;






  unsigned int used : 1;




  unsigned integrated : 1;
# 196 "rtl.h"
  unsigned frame_related : 1;




  rtunion fld[1];
};

#define NULL_RTX (rtx) 0



#define GET_CODE(RTX) ((enum rtx_code) (RTX)->code)
#define PUT_CODE(RTX,CODE) ((RTX)->code = (ENUM_BITFIELD(rtx_code)) (CODE))

#define GET_MODE(RTX) ((enum machine_mode) (RTX)->mode)
#define PUT_MODE(RTX,MODE) ((RTX)->mode = (ENUM_BITFIELD(machine_mode)) (MODE))

#define RTX_INTEGRATED_P(RTX) ((RTX)->integrated)
#define RTX_UNCHANGING_P(RTX) ((RTX)->unchanging)
#define RTX_FRAME_RELATED_P(RTX) ((RTX)->frame_related)





struct rtvec_def {
  int num_elem;
  rtx elem[1];
};

#define NULL_RTVEC (rtvec) 0

#define GET_NUM_ELEM(RTVEC) ((RTVEC)->num_elem)
#define PUT_NUM_ELEM(RTVEC,NUM) ((RTVEC)->num_elem = (NUM))


#define REG_P(X) (GET_CODE (X) == REG)


#define LABEL_P(X) (GET_CODE (X) == CODE_LABEL)


#define JUMP_P(X) (GET_CODE (X) == JUMP_INSN)


#define NOTE_P(X) (GET_CODE (X) == NOTE)


#define BARRIER_P(X) (GET_CODE (X) == BARRIER)


#define JUMP_TABLE_DATA_P(INSN) (JUMP_P (INSN) && (GET_CODE (PATTERN (INSN)) == ADDR_VEC || GET_CODE (PATTERN (INSN)) == ADDR_DIFF_VEC))





#define CONSTANT_P(X) (GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST_DOUBLE || GET_CODE (X) == CONST || GET_CODE (X) == HIGH || GET_CODE (X) == CONST_VECTOR || GET_CODE (X) == CONSTANT_P_RTX)
# 332 "rtl.h"
#define RTL_CHECK1(RTX,N,C1) ((RTX)->fld[N])
#define RTL_CHECK2(RTX,N,C1,C2) ((RTX)->fld[N])
#define RTL_CHECKC1(RTX,N,C) ((RTX)->fld[N])
#define RTL_CHECKC2(RTX,N,C1,C2) ((RTX)->fld[N])
#define RTVEC_ELT(RTVEC,I) ((RTVEC)->elem[I])



#define XWINT(RTX,N) (RTL_CHECK1 (RTX, N, 'w').rtwint)
#define XINT(RTX,N) (RTL_CHECK2 (RTX, N, 'i', 'n').rtint)
#define XSTR(RTX,N) (RTL_CHECK2 (RTX, N, 's', 'S').rtstr)
#define XEXP(RTX,N) (RTL_CHECK2 (RTX, N, 'e', 'u').rtx)
#define XVEC(RTX,N) (RTL_CHECK2 (RTX, N, 'E', 'V').rtvec)
#define XMODE(RTX,N) (RTL_CHECK1 (RTX, N, 'M').rttype)
#define XBITMAP(RTX,N) (RTL_CHECK1 (RTX, N, 'b').rtbit)
#define XTREE(RTX,N) (RTL_CHECK1 (RTX, N, 't').rttree)
#define XBBDEF(RTX,N) (RTL_CHECK1 (RTX, N, 'B').bb)
#define XTMPL(RTX,N) (RTL_CHECK1 (RTX, N, 'T').rtstr)

#define XVECEXP(RTX,N,M) RTVEC_ELT (XVEC (RTX, N), M)
#define XVECLEN(RTX,N) GET_NUM_ELEM (XVEC (RTX, N))




#define X0WINT(RTX,N) (RTL_CHECK1 (RTX, N, '0').rtwint)
#define X0INT(RTX,N) (RTL_CHECK1 (RTX, N, '0').rtint)
#define X0UINT(RTX,N) (RTL_CHECK1 (RTX, N, '0').rtuint)
#define X0STR(RTX,N) (RTL_CHECK1 (RTX, N, '0').rtstr)
#define X0EXP(RTX,N) (RTL_CHECK1 (RTX, N, '0').rtx)
#define X0VEC(RTX,N) (RTL_CHECK1 (RTX, N, '0').rtvec)
#define X0MODE(RTX,N) (RTL_CHECK1 (RTX, N, '0').rttype)
#define X0BITMAP(RTX,N) (RTL_CHECK1 (RTX, N, '0').rtbit)
#define X0TREE(RTX,N) (RTL_CHECK1 (RTX, N, '0').rttree)
#define X0BBDEF(RTX,N) (RTL_CHECK1 (RTX, N, '0').bb)
#define X0ADVFLAGS(RTX,N) (RTL_CHECK1 (RTX, N, '0').rt_addr_diff_vec_flags)
#define X0CSELIB(RTX,N) (RTL_CHECK1 (RTX, N, '0').rt_cselib)
#define X0MEMATTR(RTX,N) (RTL_CHECK1 (RTX, N, '0').rtmem)

#define XCWINT(RTX,N,C) (RTL_CHECKC1 (RTX, N, C).rtwint)
#define XCINT(RTX,N,C) (RTL_CHECKC1 (RTX, N, C).rtint)
#define XCUINT(RTX,N,C) (RTL_CHECKC1 (RTX, N, C).rtuint)
#define XCSTR(RTX,N,C) (RTL_CHECKC1 (RTX, N, C).rtstr)
#define XCEXP(RTX,N,C) (RTL_CHECKC1 (RTX, N, C).rtx)
#define XCVEC(RTX,N,C) (RTL_CHECKC1 (RTX, N, C).rtvec)
#define XCMODE(RTX,N,C) (RTL_CHECKC1 (RTX, N, C).rttype)
#define XCBITMAP(RTX,N,C) (RTL_CHECKC1 (RTX, N, C).rtbit)
#define XCTREE(RTX,N,C) (RTL_CHECKC1 (RTX, N, C).rttree)
#define XCBBDEF(RTX,N,C) (RTL_CHECKC1 (RTX, N, C).bb)
#define XCADVFLAGS(RTX,N,C) (RTL_CHECKC1 (RTX, N, C).rt_addr_diff_vec_flags)
#define XCCSELIB(RTX,N,C) (RTL_CHECKC1 (RTX, N, C).rt_cselib)

#define XCVECEXP(RTX,N,M,C) RTVEC_ELT (XCVEC (RTX, N, C), M)
#define XCVECLEN(RTX,N,C) GET_NUM_ELEM (XCVEC (RTX, N, C))

#define XC2EXP(RTX,N,C1,C2) (RTL_CHECKC2 (RTX, N, C1, C2).rtx)




#define INSN_P(X) (GET_RTX_CLASS (GET_CODE(X)) == 'i')



#define INSN_UID(INSN) XINT (INSN, 0)


#define PREV_INSN(INSN) XEXP (INSN, 1)
#define NEXT_INSN(INSN) XEXP (INSN, 2)


#define PATTERN(INSN) XEXP (INSN, 3)



#define INSN_CODE(INSN) XINT (INSN, 4)






#define LOG_LINKS(INSN) XEXP(INSN, 5)


#define INSN_DELETED_P(INSN) ((INSN)->volatil)


#define CONST_OR_PURE_CALL_P(INSN) ((INSN)->unchanging)


#define SIBLING_CALL_P(INSN) ((INSN)->jump)



#define INSN_ANNULLED_BRANCH_P(INSN) ((INSN)->unchanging)


#define INSN_DEAD_CODE_P(INSN) ((INSN)->in_struct)





#define INSN_FROM_TARGET_P(INSN) ((INSN)->in_struct)

#define ADDR_DIFF_VEC_FLAGS(RTX) X0ADVFLAGS(RTX, 4)

#define CSELIB_VAL_PTR(RTX) X0CSELIB(RTX, 0)







#define REG_NOTES(INSN) XEXP(INSN, 6)


enum reg_note
{



  REG_DEAD = 1,


  REG_INC,
# 470 "rtl.h"
  REG_EQUIV,




  REG_EQUAL,





  REG_WAS_0,





  REG_RETVAL,




  REG_LIBCALL,






  REG_NONNEG,



  REG_NO_CONFLICT,


  REG_UNUSED,
# 515 "rtl.h"
  REG_CC_SETTER, REG_CC_USER,




  REG_LABEL,





  REG_DEP_ANTI, REG_DEP_OUTPUT,





  REG_BR_PROB,




  REG_EXEC_COUNT,



  REG_NOALIAS,



  REG_SAVE_AREA,





  REG_BR_PRED,




  REG_FRAME_RELATED_EXPR,




  REG_EH_CONTEXT,





  REG_EH_REGION,


  REG_SAVE_NOTE,





  REG_MAYBE_DEAD,


  REG_NORETURN,



  REG_NON_LOCAL_GOTO,



  REG_SETJMP,


  REG_ALWAYS_RETURN,



  REG_VTABLE_REF
};


#define REG_BR_PROB_BASE 10000


#define REG_NOTE_KIND(LINK) ((enum reg_note) GET_MODE (LINK))
#define PUT_REG_NOTE_KIND(LINK,KIND) PUT_MODE (LINK, (enum machine_mode) (KIND))




extern const char * const reg_note_name[];
#define GET_REG_NOTE_NAME(MODE) (reg_note_name[(int) (MODE)])
# 617 "rtl.h"
#define CALL_INSN_FUNCTION_USAGE(INSN) XEXP(INSN, 7)




#define CODE_LABEL_NUMBER(INSN) XINT (INSN, 5)

#define LINE_NUMBER NOTE
# 633 "rtl.h"
#define NOTE_SOURCE_FILE(INSN) XCSTR (INSN, 3, NOTE)
#define NOTE_BLOCK(INSN) XCTREE (INSN, 3, NOTE)
#define NOTE_EH_HANDLER(INSN) XCINT (INSN, 3, NOTE)
#define NOTE_RANGE_INFO(INSN) XCEXP (INSN, 3, NOTE)
#define NOTE_LIVE_INFO(INSN) XCEXP (INSN, 3, NOTE)
#define NOTE_BASIC_BLOCK(INSN) XCBBDEF (INSN, 3, NOTE)
#define NOTE_EXPECTED_VALUE(INSN) XCEXP (INSN, 3, NOTE)



#define NOTE_LINE_NUMBER(INSN) XCINT (INSN, 4, NOTE)


#define NOTE_INSN_BASIC_BLOCK_P(INSN) (GET_CODE (INSN) == NOTE && NOTE_LINE_NUMBER (INSN) == NOTE_INSN_BASIC_BLOCK)
# 663 "rtl.h"
enum insn_note
{

  NOTE_INSN_BIAS = -100,



  NOTE_INSN_DELETED,



  NOTE_INSN_BLOCK_BEG,
  NOTE_INSN_BLOCK_END,


  NOTE_INSN_LOOP_BEG,
  NOTE_INSN_LOOP_END,


  NOTE_INSN_LOOP_CONT,

  NOTE_INSN_LOOP_VTOP,





  NOTE_INSN_LOOP_END_TOP_COND,






  NOTE_INSN_FUNCTION_END,


  NOTE_INSN_PROLOGUE_END,


  NOTE_INSN_EPILOGUE_BEG,


  NOTE_INSN_DELETED_LABEL,




  NOTE_INSN_FUNCTION_BEG,



  NOTE_INSN_EH_REGION_BEG,
  NOTE_INSN_EH_REGION_END,




  NOTE_INSN_REPEATED_LINE_NUMBER,



  NOTE_INSN_RANGE_BEG,
  NOTE_INSN_RANGE_END,


  NOTE_INSN_LIVE,


  NOTE_INSN_BASIC_BLOCK,



  NOTE_INSN_EXPECTED_VALUE,

  NOTE_INSN_MAX
};



extern const char * const note_insn_name[NOTE_INSN_MAX - NOTE_INSN_BIAS];
#define GET_NOTE_INSN_NAME(NOTE_CODE) (note_insn_name[(NOTE_CODE) - (int) NOTE_INSN_BIAS])




#define LABEL_NAME(RTX) XCSTR (RTX, 6, CODE_LABEL)



#define LABEL_NUSES(RTX) XCINT (RTX, 3, CODE_LABEL)


#define LABEL_ALTERNATE_NAME(RTX) XCSTR (RTX, 7, CODE_LABEL)


#define ADDRESSOF_REGNO(RTX) XCUINT (RTX, 1, ADDRESSOF)


#define ADDRESSOF_DECL(RTX) XCTREE (RTX, 2, ADDRESSOF)




#define JUMP_LABEL(INSN) XCEXP (INSN, 7, JUMP_INSN)





#define LABEL_REFS(LABEL) XCEXP (LABEL, 4, CODE_LABEL)





#define LABEL_NEXTREF(REF) XCEXP (REF, 1, LABEL_REF)




#define CONTAINING_INSN(RTX) XCEXP (RTX, 2, LABEL_REF)





#define REGNO(RTX) XCUINT (RTX, 0, REG)
#define ORIGINAL_REGNO(RTX) X0UINT (RTX, 1)




#define REG_FUNCTION_VALUE_P(RTX) ((RTX)->integrated)


#define REG_USERVAR_P(RTX) ((RTX)->volatil)


#define REG_POINTER(RTX) ((RTX)->frame_related)


#define HARD_REGISTER_P(REG) (HARD_REGISTER_NUM_P (REGNO (REG)))


#define HARD_REGISTER_NUM_P(REG_NO) ((REG_NO) < FIRST_PSEUDO_REGISTER)



#define INTVAL(RTX) XCWINT(RTX, 0, CONST_INT)
# 821 "rtl.h"
#define CONST_DOUBLE_LOW(r) XCWINT (r, 1, CONST_DOUBLE)
#define CONST_DOUBLE_HIGH(r) XCWINT (r, 2, CONST_DOUBLE)


#define CONST_DOUBLE_CHAIN(r) XCEXP (r, 0, CONST_DOUBLE)


#define CONST_VECTOR_ELT(RTX,N) XCVECEXP (RTX, 0, N, CONST_VECTOR)


#define CONST_VECTOR_NUNITS(RTX) XCVECLEN (RTX, 0, CONST_VECTOR)




#define SUBREG_REG(RTX) XCEXP (RTX, 0, SUBREG)
#define SUBREG_BYTE(RTX) XCUINT (RTX, 1, SUBREG)


extern unsigned int subreg_lsb (rtx);
extern unsigned int subreg_regno_offset (unsigned int, enum machine_mode, unsigned int, enum machine_mode)


                           ;
extern unsigned int subreg_regno (rtx);
# 855 "rtl.h"
#define SUBREG_PROMOTED_VAR_P(RTX) ((RTX)->in_struct)
#define SUBREG_PROMOTED_UNSIGNED_P(RTX) ((RTX)->unchanging)



#define ASM_OPERANDS_TEMPLATE(RTX) XCSTR (RTX, 0, ASM_OPERANDS)
#define ASM_OPERANDS_OUTPUT_CONSTRAINT(RTX) XCSTR (RTX, 1, ASM_OPERANDS)
#define ASM_OPERANDS_OUTPUT_IDX(RTX) XCINT (RTX, 2, ASM_OPERANDS)
#define ASM_OPERANDS_INPUT_VEC(RTX) XCVEC (RTX, 3, ASM_OPERANDS)
#define ASM_OPERANDS_INPUT_CONSTRAINT_VEC(RTX) XCVEC (RTX, 4, ASM_OPERANDS)
#define ASM_OPERANDS_INPUT(RTX,N) XCVECEXP (RTX, 3, N, ASM_OPERANDS)
#define ASM_OPERANDS_INPUT_LENGTH(RTX) XCVECLEN (RTX, 3, ASM_OPERANDS)
#define ASM_OPERANDS_INPUT_CONSTRAINT_EXP(RTX,N) XCVECEXP (RTX, 4, N, ASM_OPERANDS)

#define ASM_OPERANDS_INPUT_CONSTRAINT(RTX,N) XSTR (XCVECEXP (RTX, 4, N, ASM_OPERANDS), 0)

#define ASM_OPERANDS_INPUT_MODE(RTX,N) GET_MODE (XCVECEXP (RTX, 4, N, ASM_OPERANDS))

#define ASM_OPERANDS_SOURCE_FILE(RTX) XCSTR (RTX, 5, ASM_OPERANDS)
#define ASM_OPERANDS_SOURCE_LINE(RTX) XCINT (RTX, 6, ASM_OPERANDS)




#define MEM_KEEP_ALIAS_SET_P(RTX) ((RTX)->jump)



#define MEM_VOLATILE_P(RTX) ((RTX)->volatil)




#define MEM_IN_STRUCT_P(RTX) ((RTX)->in_struct)



#define MEM_SCALAR_P(RTX) ((RTX)->frame_related)





#define MEM_SET_IN_STRUCT_P(RTX,VAL) do { if (VAL) { MEM_IN_STRUCT_P (RTX) = 1; MEM_SCALAR_P (RTX) = 0; } else { MEM_IN_STRUCT_P (RTX) = 0; MEM_SCALAR_P (RTX) = 1; } } while (0)
# 914 "rtl.h"
#define MEM_ATTRS(RTX) X0MEMATTR (RTX, 1)
# 925 "rtl.h"
#define MEM_ALIAS_SET(RTX) (MEM_ATTRS (RTX) == 0 ? 0 : MEM_ATTRS (RTX)->alias)



#define MEM_EXPR(RTX) (MEM_ATTRS (RTX) == 0 ? 0 : MEM_ATTRS (RTX)->expr)



#define MEM_OFFSET(RTX) (MEM_ATTRS (RTX) == 0 ? 0 : MEM_ATTRS (RTX)->offset)



#define MEM_SIZE(RTX) (MEM_ATTRS (RTX) != 0 ? MEM_ATTRS (RTX)->size : GET_MODE (RTX) != BLKmode ? GEN_INT (GET_MODE_SIZE (GET_MODE (RTX))) : 0)






#define MEM_ALIGN(RTX) (MEM_ATTRS (RTX) != 0 ? MEM_ATTRS (RTX)->align : (STRICT_ALIGNMENT && GET_MODE (RTX) != BLKmode ? GET_MODE_ALIGNMENT (GET_MODE (RTX)) : BITS_PER_UNIT))





#define MEM_COPY_ATTRIBUTES(LHS,RHS) (MEM_VOLATILE_P (LHS) = MEM_VOLATILE_P (RHS), MEM_IN_STRUCT_P (LHS) = MEM_IN_STRUCT_P (RHS), MEM_SCALAR_P (LHS) = MEM_SCALAR_P (RHS), RTX_UNCHANGING_P (LHS) = RTX_UNCHANGING_P (RHS), MEM_KEEP_ALIAS_SET_P (LHS) = MEM_KEEP_ALIAS_SET_P (RHS), MEM_ATTRS (LHS) = MEM_ATTRS (RHS))
# 960 "rtl.h"
#define LABEL_OUTSIDE_LOOP_P(RTX) ((RTX)->in_struct)



#define LABEL_REF_NONLOCAL_P(RTX) ((RTX)->volatil)


#define LABEL_PRESERVE_P(RTX) ((RTX)->in_struct)


#define REG_LOOP_TEST_P(RTX) ((RTX)->in_struct)



#define SCHED_GROUP_P(INSN) ((INSN)->in_struct)
# 983 "rtl.h"
#define LINK_COST_ZERO(X) ((X)->jump)
#define LINK_COST_FREE(X) ((X)->call)



#define SET_DEST(RTX) XC2EXP(RTX, 0, SET, CLOBBER)
#define SET_SRC(RTX) XCEXP(RTX, 1, SET)
#define SET_IS_RETURN_P(RTX) ((RTX)->jump)


#define TRAP_CONDITION(RTX) XCEXP (RTX, 0, TRAP_IF)
#define TRAP_CODE(RTX) XCEXP (RTX, 1, TRAP_IF)




#define COND_EXEC_TEST(RTX) XCEXP (RTX, 0, COND_EXEC)
#define COND_EXEC_CODE(RTX) XCEXP (RTX, 1, COND_EXEC)


#define CONSTANT_POOL_ADDRESS_P(RTX) ((RTX)->unchanging)


#define STRING_POOL_ADDRESS_P(RTX) ((RTX)->frame_related)


#define SYMBOL_REF_FLAG(RTX) ((RTX)->volatil)


#define SYMBOL_REF_USED(RTX) ((RTX)->used)


#define SYMBOL_REF_WEAK(RTX) ((RTX)->integrated)
# 1027 "rtl.h"
#define FIND_REG_INC_NOTE(INSN,REG) 0
# 1039 "rtl.h"
#define HAVE_PRE_INCREMENT 0



#define HAVE_PRE_DECREMENT 0



#define HAVE_POST_INCREMENT 0



#define HAVE_POST_DECREMENT 0



#define HAVE_POST_MODIFY_DISP 0



#define HAVE_POST_MODIFY_REG 0



#define HAVE_PRE_MODIFY_DISP 0



#define HAVE_PRE_MODIFY_REG 0
# 1076 "rtl.h"
#define USE_LOAD_POST_INCREMENT(MODE) HAVE_POST_INCREMENT



#define USE_LOAD_POST_DECREMENT(MODE) HAVE_POST_DECREMENT



#define USE_LOAD_PRE_INCREMENT(MODE) HAVE_PRE_INCREMENT



#define USE_LOAD_PRE_DECREMENT(MODE) HAVE_PRE_DECREMENT



#define USE_STORE_POST_INCREMENT(MODE) HAVE_POST_INCREMENT



#define USE_STORE_POST_DECREMENT(MODE) HAVE_POST_DECREMENT



#define USE_STORE_PRE_INCREMENT(MODE) HAVE_PRE_INCREMENT



#define USE_STORE_PRE_DECREMENT(MODE) HAVE_PRE_DECREMENT





#define RANGE_INFO_NOTE_START(INSN) XCEXP (INSN, 0, RANGE_INFO)


#define RANGE_INFO_NOTE_END(INSN) XCEXP (INSN, 1, RANGE_INFO)



#define RANGE_INFO_REGS(INSN) XCVEC (INSN, 2, RANGE_INFO)
#define RANGE_INFO_REGS_REG(INSN,N) XCVECEXP (INSN, 2, N, RANGE_INFO)
#define RANGE_INFO_NUM_REGS(INSN) XCVECLEN (INSN, 2, RANGE_INFO)


#define RANGE_INFO_NCALLS(INSN) XCINT (INSN, 3, RANGE_INFO)


#define RANGE_INFO_NINSNS(INSN) XCINT (INSN, 4, RANGE_INFO)


#define RANGE_INFO_UNIQUE(INSN) XCINT (INSN, 5, RANGE_INFO)


#define RANGE_INFO_BB_START(INSN) XCINT (INSN, 6, RANGE_INFO)


#define RANGE_INFO_BB_END(INSN) XCINT (INSN, 7, RANGE_INFO)


#define RANGE_INFO_LOOP_DEPTH(INSN) XCINT (INSN, 8, RANGE_INFO)



#define RANGE_INFO_LIVE_START(INSN) XCBITMAP (INSN, 9, RANGE_INFO)



#define RANGE_INFO_LIVE_END(INSN) XCBITMAP (INSN, 10, RANGE_INFO)


#define RANGE_INFO_MARKER_START(INSN) XCINT (INSN, 11, RANGE_INFO)


#define RANGE_INFO_MARKER_END(INSN) XCINT (INSN, 12, RANGE_INFO)


#define RANGE_REG_PSEUDO(INSN,N) XCINT (XCVECEXP (INSN, 2, N, RANGE_INFO), 0, REG)


#define RANGE_REG_COPY(INSN,N) XCINT (XCVECEXP (INSN, 2, N, RANGE_INFO), 1, REG)


#define RANGE_REG_REFS(INSN,N) XINT (XCVECEXP (INSN, 2, N, RANGE_INFO), 2)


#define RANGE_REG_SETS(INSN,N) XINT (XCVECEXP (INSN, 2, N, RANGE_INFO), 3)


#define RANGE_REG_DEATHS(INSN,N) XINT (XCVECEXP (INSN, 2, N, RANGE_INFO), 4)



#define RANGE_REG_COPY_FLAGS(INSN,N) XINT (XCVECEXP (INSN, 2, N, RANGE_INFO), 5)


#define RANGE_REG_LIVE_LENGTH(INSN,N) XINT (XCVECEXP (INSN, 2, N, RANGE_INFO), 6)


#define RANGE_REG_N_CALLS(INSN,N) XINT (XCVECEXP (INSN, 2, N, RANGE_INFO), 7)



#define RANGE_REG_SYMBOL_NODE(INSN,N) XTREE (XCVECEXP (INSN, 2, N, RANGE_INFO), 8)



#define RANGE_REG_BLOCK_NODE(INSN,N) XTREE (XCVECEXP (INSN, 2, N, RANGE_INFO), 9)


#define RANGE_VAR_LIST(INSN) (XEXP (INSN, 0))


#define RANGE_VAR_BLOCK(INSN) (XTREE (INSN, 1))


#define RANGE_VAR_NUM(INSN) (XINT (INSN, 2))


#define RANGE_LIVE_BITMAP(INSN) (XBITMAP (INSN, 0))


#define RANGE_LIVE_ORIG_BLOCK(INSN) (XINT (INSN, 1))


#define PHI_NODE_P(X) ((X) && GET_CODE (X) == INSN && GET_CODE (PATTERN (X)) == SET && GET_CODE (SET_SRC (PATTERN (X))) == PHI)
# 1211 "rtl.h"
extern int rtx_equal_function_value_matters;


extern int generating_concat_p;




extern int ceil_log2 (unsigned long);

#define plus_constant(X,C) plus_constant_wide ((X), (HOST_WIDE_INT) (C))


extern rtx expand_builtin_expect_jump (tree, rtx, rtx);


extern void set_stack_check_libfunc (rtx);
extern long trunc_int_for_mode (long, enum machine_mode)
                               ;
extern rtx plus_constant_wide (rtx, long);
extern rtx plus_constant_for_output_wide (rtx, long);
extern void optimize_save_area_alloca (rtx);


extern rtx gen_rtx (enum rtx_code, enum machine_mode, ...)
                               ;
extern rtvec gen_rtvec (int, ...);
extern rtx copy_insn_1 (rtx);
extern rtx copy_insn (rtx);
extern rtx gen_int_mode (long, enum machine_mode)
                          ;


extern rtx rtx_alloc (enum rtx_code);
extern rtvec rtvec_alloc (int);
extern rtx copy_rtx (rtx);


extern rtx copy_rtx_if_shared (rtx);


extern rtx copy_most_rtx (rtx, rtx);
extern rtx shallow_copy_rtx (rtx);
extern int rtx_equal_p (rtx, rtx);


extern rtvec gen_rtvec_v (int, rtx *);
extern rtx gen_reg_rtx (enum machine_mode);
extern rtx gen_label_rtx (void);
extern int subreg_hard_regno (rtx, int);
extern rtx gen_lowpart_common (enum machine_mode, rtx);
extern rtx gen_lowpart (enum machine_mode, rtx);


extern rtx gen_lowpart_if_possible (enum machine_mode, rtx);


extern rtx gen_highpart (enum machine_mode, rtx);
extern rtx gen_highpart_mode (enum machine_mode, enum machine_mode, rtx)
                               ;
extern rtx gen_realpart (enum machine_mode, rtx);
extern rtx gen_imagpart (enum machine_mode, rtx);
extern rtx operand_subword (rtx, unsigned int, int, enum machine_mode)
                          ;
extern rtx constant_subword (rtx, int, enum machine_mode)
                          ;


extern rtx operand_subword_force (rtx, unsigned int, enum machine_mode)
                          ;
extern int subreg_lowpart_p (rtx);
extern unsigned int subreg_lowpart_offset (enum machine_mode, enum machine_mode)
                            ;
extern unsigned int subreg_highpart_offset (enum machine_mode, enum machine_mode)
                             ;
extern rtx make_safe_from (rtx, rtx);
extern rtx convert_memory_address (enum machine_mode, rtx);
extern rtx get_insns (void);
extern const char *get_insn_name (int);
extern rtx get_last_insn (void);
extern rtx get_last_insn_anywhere (void);
extern void start_sequence (void);
extern void push_to_sequence (rtx);
extern void end_sequence (void);
extern void push_to_full_sequence (rtx, rtx);
extern void end_full_sequence (rtx*, rtx*);
extern rtx gen_sequence (void);


extern rtx immed_double_const (long, long, enum machine_mode);
extern rtx mem_for_const_double (rtx);
extern rtx force_const_mem (enum machine_mode, rtx);


extern rtx get_pool_constant (rtx);
extern rtx get_pool_constant_mark (rtx, _Bool *);
extern enum machine_mode get_pool_mode (rtx);
extern rtx get_pool_constant_for_function (struct function *, rtx);
extern enum machine_mode get_pool_mode_for_function (struct function *, rtx);
extern int get_pool_offset (rtx);
extern rtx simplify_subtraction (rtx);


extern rtx assign_stack_local (enum machine_mode, long, int)
                                ;
extern rtx assign_stack_temp (enum machine_mode, long, int)
                                ;
extern rtx assign_stack_temp_for_type (enum machine_mode, long, int, tree)
                                 ;
extern rtx assign_temp (tree, int, int, int);

extern rtx emit_insn_before (rtx, rtx);
extern rtx emit_jump_insn_before (rtx, rtx);
extern rtx emit_call_insn_before (rtx, rtx);
extern rtx emit_barrier_before (rtx);
extern rtx emit_label_before (rtx, rtx);
extern rtx emit_note_before (int, rtx);
extern rtx emit_insn_after (rtx, rtx);
extern rtx emit_jump_insn_after (rtx, rtx);
extern rtx emit_barrier_after (rtx);
extern rtx emit_label_after (rtx, rtx);
extern rtx emit_note_after (int, rtx);
extern rtx emit_line_note_after (const char *, int, rtx);
extern rtx emit_insn (rtx);
extern rtx emit_insns (rtx);
extern rtx emit_insns_before (rtx, rtx);
extern rtx emit_insns_after (rtx, rtx);
extern rtx emit_jump_insn (rtx);
extern rtx emit_call_insn (rtx);
extern rtx emit_label (rtx);
extern rtx emit_barrier (void);
extern rtx emit_line_note (const char *, int);
extern rtx emit_note (const char *, int);
extern rtx emit_line_note_force (const char *, int);
extern rtx make_insn_raw (rtx);
extern rtx previous_insn (rtx);
extern rtx next_insn (rtx);
extern rtx prev_nonnote_insn (rtx);
extern rtx next_nonnote_insn (rtx);
extern rtx prev_real_insn (rtx);
extern rtx next_real_insn (rtx);
extern rtx prev_active_insn (rtx);
extern rtx next_active_insn (rtx);
extern int active_insn_p (rtx);
extern rtx prev_label (rtx);
extern rtx next_label (rtx);
extern rtx next_cc0_user (rtx);
extern rtx prev_cc0_setter (rtx);


extern rtx next_nondeleted_insn (rtx);
extern enum rtx_code reverse_condition (enum rtx_code);
extern enum rtx_code reverse_condition_maybe_unordered (enum rtx_code);
extern enum rtx_code swap_condition (enum rtx_code);
extern enum rtx_code unsigned_condition (enum rtx_code);
extern enum rtx_code signed_condition (enum rtx_code);
extern void mark_jump_label (rtx, rtx, int);
extern void cleanup_barriers (void);


extern _Bool squeeze_notes (rtx *, rtx *);
extern rtx delete_related_insns (rtx);
extern void delete_jump (rtx);
extern void delete_barrier (rtx);
extern rtx get_label_before (rtx);
extern rtx get_label_after (rtx);
extern rtx follow_jumps (rtx);


extern rtx *find_constant_term_loc (rtx *);


extern rtx try_split (rtx, rtx, int);
extern int split_branch_probability;


extern rtx split_insns (rtx, rtx);


extern rtx simplify_unary_operation (enum rtx_code, enum machine_mode, rtx, enum machine_mode)

                          ;
extern rtx simplify_binary_operation (enum rtx_code, enum machine_mode, rtx, rtx)

            ;
extern rtx simplify_ternary_operation (enum rtx_code, enum machine_mode, enum machine_mode, rtx, rtx, rtx)


            ;
extern rtx simplify_relational_operation (enum rtx_code, enum machine_mode, rtx, rtx)

             ;
extern rtx simplify_gen_binary (enum rtx_code, enum machine_mode, rtx, rtx)

                 ;
extern rtx simplify_gen_unary (enum rtx_code, enum machine_mode, rtx, enum machine_mode)

                          ;
extern rtx simplify_gen_ternary (enum rtx_code, enum machine_mode, enum machine_mode, rtx, rtx, rtx)


                      ;
extern rtx simplify_gen_relational (enum rtx_code, enum machine_mode, enum machine_mode, rtx, rtx)


                 ;
extern rtx simplify_subreg (enum machine_mode, rtx, enum machine_mode, unsigned int)


                     ;
extern rtx simplify_gen_subreg (enum machine_mode, rtx, enum machine_mode, unsigned int)


                     ;
extern rtx simplify_replace_rtx (rtx, rtx, rtx);
extern rtx simplify_rtx (rtx);
extern rtx avoid_constant_pool_reference (rtx);


extern rtx gen_mem_addressof (rtx, tree);


extern enum machine_mode choose_hard_reg_mode (unsigned int, unsigned int)
                           ;


extern rtx set_unique_reg_note (rtx, enum reg_note, rtx);




#define single_set(I) (INSN_P (I) ? (GET_CODE (PATTERN (I)) == SET ? PATTERN (I) : single_set_1 (I)) : NULL_RTX)



#define single_set_1(I) single_set_2 (I, PATTERN (I))

extern int rtx_addr_can_trap_p (rtx);
extern int rtx_unstable_p (rtx);
extern int rtx_varies_p (rtx, int);
extern int rtx_addr_varies_p (rtx, int);
extern long get_integer_term (rtx);
extern rtx get_related_value (rtx);
extern rtx get_jump_table_offset (rtx, rtx *);
extern int reg_mentioned_p (rtx, rtx);
extern int count_occurrences (rtx, rtx, int);
extern int reg_referenced_p (rtx, rtx);
extern int reg_used_between_p (rtx, rtx, rtx);
extern int reg_referenced_between_p (rtx, rtx, rtx);
extern int reg_set_between_p (rtx, rtx, rtx);
extern int regs_set_between_p (rtx, rtx, rtx);
extern int commutative_operand_precedence (rtx);
extern int swap_commutative_operands_p (rtx, rtx);
extern int modified_between_p (rtx, rtx, rtx);
extern int no_labels_between_p (rtx, rtx);
extern int no_jumps_between_p (rtx, rtx);
extern int modified_in_p (rtx, rtx);
extern int insn_dependent_p (rtx, rtx);
extern int reg_set_p (rtx, rtx);
extern rtx single_set_2 (rtx, rtx);
extern int multiple_sets (rtx);
extern int set_noop_p (rtx);
extern int noop_move_p (rtx);
extern rtx find_last_value (rtx, rtx *, rtx, int);
extern int refers_to_regno_p (unsigned int, unsigned int, rtx, rtx *)
                   ;
extern int reg_overlap_mentioned_p (rtx, rtx);
extern rtx set_of (rtx, rtx);
extern void note_stores (rtx, void (*) (rtx, rtx, void *), void *)

               ;
extern void note_uses (rtx *, void (*) (rtx *, void *), void *)

               ;
extern rtx reg_set_last (rtx, rtx);
extern int dead_or_set_p (rtx, rtx);
extern int dead_or_set_regno_p (rtx, unsigned int);
extern rtx find_reg_note (rtx, enum reg_note, rtx);
extern rtx find_regno_note (rtx, enum reg_note, unsigned int)
                     ;
extern rtx find_reg_equal_equiv_note (rtx);
extern int find_reg_fusage (rtx, enum rtx_code, rtx);
extern int find_regno_fusage (rtx, enum rtx_code, unsigned int)
                     ;
extern int pure_call_p (rtx);
extern void remove_note (rtx, rtx);
extern int side_effects_p (rtx);
extern int volatile_refs_p (rtx);
extern int volatile_insn_p (rtx);
extern int may_trap_p (rtx);
extern int inequality_comparisons_p (rtx);
extern rtx replace_rtx (rtx, rtx, rtx);
extern rtx replace_regs (rtx, rtx *, unsigned int, int)
            ;
extern int computed_jump_p (rtx);
typedef int (*rtx_function) (rtx *, void *);
extern int for_each_rtx (rtx *, rtx_function, void *);
extern rtx regno_use_in (unsigned int, rtx);
extern int auto_inc_p (rtx);
extern int in_expr_list_p (rtx, rtx);
extern void remove_node_from_expr_list (rtx, rtx *);
extern int insns_safe_to_move_p (rtx, rtx, rtx *);
extern int loc_mentioned_in_p (rtx *, rtx);
extern rtx find_first_parameter_load (rtx, rtx);



extern rtx find_use_as_address (rtx, rtx, long);
void init_EXPR_INSN_LIST_cache (void);
void free_EXPR_LIST_list (rtx *);
void free_INSN_LIST_list (rtx *);
void free_EXPR_LIST_node (rtx);
void free_INSN_LIST_node (rtx);
rtx alloc_INSN_LIST (rtx, rtx);
rtx alloc_EXPR_LIST (int, rtx, rtx);







extern int max_parallel;


extern void free_reg_info (void);


extern int asm_noperands (rtx);
extern const char *decode_asm_operands (rtx, rtx *, rtx **, const char **, enum machine_mode *)

                                 ;

extern enum reg_class reg_preferred_class (int);
extern enum reg_class reg_alternate_class (int);

extern rtx get_first_nonparm_insn (void);

extern void split_all_insns (int);
extern void split_all_insns_noflow (void);

#define MAX_SAVED_CONST_INT 64
extern rtx const_int_rtx[64 * 2 + 1];

#define const0_rtx (const_int_rtx[MAX_SAVED_CONST_INT])
#define const1_rtx (const_int_rtx[MAX_SAVED_CONST_INT+1])
#define const2_rtx (const_int_rtx[MAX_SAVED_CONST_INT+2])
#define constm1_rtx (const_int_rtx[MAX_SAVED_CONST_INT-1])
extern rtx const_true_rtx;

extern rtx const_tiny_rtx[3][(int) MAX_MACHINE_MODE];




#define CONST0_RTX(MODE) (const_tiny_rtx[0][(int) (MODE)])



#define CONST1_RTX(MODE) (const_tiny_rtx[1][(int) (MODE)])
#define CONST2_RTX(MODE) (const_tiny_rtx[2][(int) (MODE)])
# 1584 "rtl.h"
enum global_rtl_index
{
  GR_PC,
  GR_CC0,
  GR_STACK_POINTER,
  GR_FRAME_POINTER,
# 1599 "rtl.h"
  GR_HARD_FRAME_POINTER,





  GR_ARG_POINTER,


  GR_VIRTUAL_INCOMING_ARGS,
  GR_VIRTUAL_STACK_ARGS,
  GR_VIRTUAL_STACK_DYNAMIC,
  GR_VIRTUAL_OUTGOING_ARGS,
  GR_VIRTUAL_CFA,

  GR_MAX
};


extern rtx global_rtl[GR_MAX];


#define pc_rtx (global_rtl[GR_PC])
#define cc0_rtx (global_rtl[GR_CC0])




#define stack_pointer_rtx (global_rtl[GR_STACK_POINTER])
#define frame_pointer_rtx (global_rtl[GR_FRAME_POINTER])
#define hard_frame_pointer_rtx (global_rtl[GR_HARD_FRAME_POINTER])
#define arg_pointer_rtx (global_rtl[GR_ARG_POINTER])

extern rtx pic_offset_table_rtx;
extern rtx struct_value_rtx;
extern rtx struct_value_incoming_rtx;
extern rtx static_chain_rtx;
extern rtx static_chain_incoming_rtx;
extern rtx return_address_pointer_rtx;




# 1 "genrtl.h" 1



#define GCC_GENRTL_H 

extern rtx gen_rtx_fmt_s (enum rtx_code, enum machine_mode mode, const char *arg0)
                             ;
extern rtx gen_rtx_fmt_ee (enum rtx_code, enum machine_mode mode, rtx arg0, rtx arg1)
                               ;
extern rtx gen_rtx_fmt_ue (enum rtx_code, enum machine_mode mode, rtx arg0, rtx arg1)
                               ;
extern rtx gen_rtx_fmt_iss (enum rtx_code, enum machine_mode mode, int arg0, const char *arg1, const char *arg2)

                             ;
extern rtx gen_rtx_fmt_is (enum rtx_code, enum machine_mode mode, int arg0, const char *arg1)
                                       ;
extern rtx gen_rtx_fmt_i (enum rtx_code, enum machine_mode mode, int arg0)
                     ;
extern rtx gen_rtx_fmt_isE (enum rtx_code, enum machine_mode mode, int arg0, const char *arg1, rtvec arg2)

                       ;
extern rtx gen_rtx_fmt_iE (enum rtx_code, enum machine_mode mode, int arg0, rtvec arg1)
                                 ;
extern rtx gen_rtx_fmt_Ess (enum rtx_code, enum machine_mode mode, rtvec arg0, const char *arg1, const char *arg2)

                             ;
extern rtx gen_rtx_fmt_sEss (enum rtx_code, enum machine_mode mode, const char *arg0, rtvec arg1, const char *arg2, const char *arg3)

                                               ;
extern rtx gen_rtx_fmt_eE (enum rtx_code, enum machine_mode mode, rtx arg0, rtvec arg1)
                                 ;
extern rtx gen_rtx_fmt_E (enum rtx_code, enum machine_mode mode, rtvec arg0)
                       ;
extern rtx gen_rtx_fmt_e (enum rtx_code, enum machine_mode mode, rtx arg0)
                     ;
extern rtx gen_rtx_fmt_sse (enum rtx_code, enum machine_mode mode, const char *arg0, const char *arg1, rtx arg2)

                     ;
extern rtx gen_rtx_fmt_ss (enum rtx_code, enum machine_mode mode, const char *arg0, const char *arg1)
                                               ;
extern rtx gen_rtx_fmt_sE (enum rtx_code, enum machine_mode mode, const char *arg0, rtvec arg1)
                                         ;
extern rtx gen_rtx_fmt_iuueiee (enum rtx_code, enum machine_mode mode, int arg0, rtx arg1, rtx arg2, rtx arg3, int arg4, rtx arg5, rtx arg6)


                     ;
extern rtx gen_rtx_fmt_iuueiee0 (enum rtx_code, enum machine_mode mode, int arg0, rtx arg1, rtx arg2, rtx arg3, int arg4, rtx arg5, rtx arg6)


                     ;
extern rtx gen_rtx_fmt_iuueieee (enum rtx_code, enum machine_mode mode, int arg0, rtx arg1, rtx arg2, rtx arg3, int arg4, rtx arg5, rtx arg6, rtx arg7)


                               ;
extern rtx gen_rtx_fmt_iuu (enum rtx_code, enum machine_mode mode, int arg0, rtx arg1, rtx arg2)
                                         ;
extern rtx gen_rtx_fmt_iuu00iss (enum rtx_code, enum machine_mode mode, int arg0, rtx arg1, rtx arg2, int arg3, const char *arg4, const char *arg5)


                             ;
extern rtx gen_rtx_fmt_ssiEEsi (enum rtx_code, enum machine_mode mode, const char *arg0, const char *arg1, int arg2, rtvec arg3, rtvec arg4, const char *arg5, int arg6)


                                       ;
extern rtx gen_rtx_fmt_Ei (enum rtx_code, enum machine_mode mode, rtvec arg0, int arg1)
                                 ;
extern rtx gen_rtx_fmt_eEee0 (enum rtx_code, enum machine_mode mode, rtx arg0, rtvec arg1, rtx arg2, rtx arg3)

                     ;
extern rtx gen_rtx_fmt_eee (enum rtx_code, enum machine_mode mode, rtx arg0, rtx arg1, rtx arg2)
                                         ;
extern rtx gen_rtx_fmt_ (enum rtx_code, enum machine_mode mode);
extern rtx gen_rtx_fmt_w (enum rtx_code, enum machine_mode mode, long arg0)
                               ;
extern rtx gen_rtx_fmt_0www (enum rtx_code, enum machine_mode mode, long arg0, long arg1, long arg2)


                               ;
extern rtx gen_rtx_fmt_0 (enum rtx_code, enum machine_mode mode);
extern rtx gen_rtx_fmt_i0 (enum rtx_code, enum machine_mode mode, int arg0)
                     ;
extern rtx gen_rtx_fmt_ei (enum rtx_code, enum machine_mode mode, rtx arg0, int arg1)
                               ;
extern rtx gen_rtx_fmt_e0 (enum rtx_code, enum machine_mode mode, rtx arg0)
                     ;
extern rtx gen_rtx_fmt_u00 (enum rtx_code, enum machine_mode mode, rtx arg0)
                     ;
extern rtx gen_rtx_fmt_eit (enum rtx_code, enum machine_mode mode, rtx arg0, int arg1, union tree_node *arg2)

                                  ;
extern rtx gen_rtx_fmt_eeeee (enum rtx_code, enum machine_mode mode, rtx arg0, rtx arg1, rtx arg2, rtx arg3, rtx arg4)

                               ;
extern rtx gen_rtx_fmt_Ee (enum rtx_code, enum machine_mode mode, rtvec arg0, rtx arg1)
                                 ;
extern rtx gen_rtx_fmt_uuEiiiiiibbii (enum rtx_code, enum machine_mode mode, rtx arg0, rtx arg1, rtvec arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, struct bitmap_head_def *arg9, struct bitmap_head_def *arg10, int arg11, int arg12)





                                 ;
extern rtx gen_rtx_fmt_iiiiiiiitt (enum rtx_code, enum machine_mode mode, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, union tree_node *arg8, union tree_node *arg9)




                                  ;
extern rtx gen_rtx_fmt_eti (enum rtx_code, enum machine_mode mode, rtx arg0, union tree_node *arg1, int arg2)

                     ;
extern rtx gen_rtx_fmt_bi (enum rtx_code, enum machine_mode mode, struct bitmap_head_def *arg0, int arg1)

                     ;
extern rtx gen_rtx_fmt_uuuu (enum rtx_code, enum machine_mode mode, rtx arg0, rtx arg1, rtx arg2, rtx arg3)

                     ;

#define gen_rtx_INCLUDE(MODE,ARG0) gen_rtx_fmt_s (INCLUDE, (MODE), (ARG0))

#define gen_rtx_EXPR_LIST(MODE,ARG0,ARG1) gen_rtx_fmt_ee (EXPR_LIST, (MODE), (ARG0), (ARG1))

#define gen_rtx_INSN_LIST(MODE,ARG0,ARG1) gen_rtx_fmt_ue (INSN_LIST, (MODE), (ARG0), (ARG1))

#define gen_rtx_MATCH_OPERAND(MODE,ARG0,ARG1,ARG2) gen_rtx_fmt_iss (MATCH_OPERAND, (MODE), (ARG0), (ARG1), (ARG2))

#define gen_rtx_MATCH_SCRATCH(MODE,ARG0,ARG1) gen_rtx_fmt_is (MATCH_SCRATCH, (MODE), (ARG0), (ARG1))

#define gen_rtx_MATCH_DUP(MODE,ARG0) gen_rtx_fmt_i (MATCH_DUP, (MODE), (ARG0))

#define gen_rtx_MATCH_OPERATOR(MODE,ARG0,ARG1,ARG2) gen_rtx_fmt_isE (MATCH_OPERATOR, (MODE), (ARG0), (ARG1), (ARG2))

#define gen_rtx_MATCH_PARALLEL(MODE,ARG0,ARG1,ARG2) gen_rtx_fmt_isE (MATCH_PARALLEL, (MODE), (ARG0), (ARG1), (ARG2))

#define gen_rtx_MATCH_OP_DUP(MODE,ARG0,ARG1) gen_rtx_fmt_iE (MATCH_OP_DUP, (MODE), (ARG0), (ARG1))

#define gen_rtx_MATCH_PAR_DUP(MODE,ARG0,ARG1) gen_rtx_fmt_iE (MATCH_PAR_DUP, (MODE), (ARG0), (ARG1))

#define gen_rtx_MATCH_INSN(MODE,ARG0,ARG1) gen_rtx_fmt_is (MATCH_INSN, (MODE), (ARG0), (ARG1))

#define gen_rtx_DEFINE_COMBINE(MODE,ARG0,ARG1,ARG2) gen_rtx_fmt_Ess (DEFINE_COMBINE, (MODE), (ARG0), (ARG1), (ARG2))

#define gen_rtx_DEFINE_EXPAND(MODE,ARG0,ARG1,ARG2,ARG3) gen_rtx_fmt_sEss (DEFINE_EXPAND, (MODE), (ARG0), (ARG1), (ARG2), (ARG3))

#define gen_rtx_DEFINE_DELAY(MODE,ARG0,ARG1) gen_rtx_fmt_eE (DEFINE_DELAY, (MODE), (ARG0), (ARG1))

#define gen_rtx_DEFINE_COND_EXEC(MODE,ARG0,ARG1,ARG2) gen_rtx_fmt_Ess (DEFINE_COND_EXEC, (MODE), (ARG0), (ARG1), (ARG2))

#define gen_rtx_SEQUENCE(MODE,ARG0) gen_rtx_fmt_E (SEQUENCE, (MODE), (ARG0))

#define gen_rtx_ADDRESS(MODE,ARG0) gen_rtx_fmt_e (ADDRESS, (MODE), (ARG0))

#define gen_rtx_DEFINE_ATTR(MODE,ARG0,ARG1,ARG2) gen_rtx_fmt_sse (DEFINE_ATTR, (MODE), (ARG0), (ARG1), (ARG2))

#define gen_rtx_ATTR(MODE,ARG0) gen_rtx_fmt_s (ATTR, (MODE), (ARG0))

#define gen_rtx_SET_ATTR(MODE,ARG0,ARG1) gen_rtx_fmt_ss (SET_ATTR, (MODE), (ARG0), (ARG1))

#define gen_rtx_SET_ATTR_ALTERNATIVE(MODE,ARG0,ARG1) gen_rtx_fmt_sE (SET_ATTR_ALTERNATIVE, (MODE), (ARG0), (ARG1))

#define gen_rtx_EQ_ATTR(MODE,ARG0,ARG1) gen_rtx_fmt_ss (EQ_ATTR, (MODE), (ARG0), (ARG1))

#define gen_rtx_ATTR_FLAG(MODE,ARG0) gen_rtx_fmt_s (ATTR_FLAG, (MODE), (ARG0))

#define gen_rtx_INSN(MODE,ARG0,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6) gen_rtx_fmt_iuueiee (INSN, (MODE), (ARG0), (ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6))

#define gen_rtx_JUMP_INSN(MODE,ARG0,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6) gen_rtx_fmt_iuueiee0 (JUMP_INSN, (MODE), (ARG0), (ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6))

#define gen_rtx_CALL_INSN(MODE,ARG0,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7) gen_rtx_fmt_iuueieee (CALL_INSN, (MODE), (ARG0), (ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6), (ARG7))

#define gen_rtx_BARRIER(MODE,ARG0,ARG1,ARG2) gen_rtx_fmt_iuu (BARRIER, (MODE), (ARG0), (ARG1), (ARG2))

#define gen_rtx_CODE_LABEL(MODE,ARG0,ARG1,ARG2,ARG3,ARG4,ARG5) gen_rtx_fmt_iuu00iss (CODE_LABEL, (MODE), (ARG0), (ARG1), (ARG2), (ARG3), (ARG4), (ARG5))

#define gen_rtx_COND_EXEC(MODE,ARG0,ARG1) gen_rtx_fmt_ee (COND_EXEC, (MODE), (ARG0), (ARG1))

#define gen_rtx_PARALLEL(MODE,ARG0) gen_rtx_fmt_E (PARALLEL, (MODE), (ARG0))

#define gen_rtx_ASM_INPUT(MODE,ARG0) gen_rtx_fmt_s (ASM_INPUT, (MODE), (ARG0))

#define gen_rtx_ASM_OPERANDS(MODE,ARG0,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6) gen_rtx_fmt_ssiEEsi (ASM_OPERANDS, (MODE), (ARG0), (ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6))

#define gen_rtx_UNSPEC(MODE,ARG0,ARG1) gen_rtx_fmt_Ei (UNSPEC, (MODE), (ARG0), (ARG1))

#define gen_rtx_UNSPEC_VOLATILE(MODE,ARG0,ARG1) gen_rtx_fmt_Ei (UNSPEC_VOLATILE, (MODE), (ARG0), (ARG1))

#define gen_rtx_ADDR_VEC(MODE,ARG0) gen_rtx_fmt_E (ADDR_VEC, (MODE), (ARG0))

#define gen_rtx_ADDR_DIFF_VEC(MODE,ARG0,ARG1,ARG2,ARG3) gen_rtx_fmt_eEee0 (ADDR_DIFF_VEC, (MODE), (ARG0), (ARG1), (ARG2), (ARG3))

#define gen_rtx_PREFETCH(MODE,ARG0,ARG1,ARG2) gen_rtx_fmt_eee (PREFETCH, (MODE), (ARG0), (ARG1), (ARG2))

#define gen_rtx_SET(MODE,ARG0,ARG1) gen_rtx_fmt_ee (SET, (MODE), (ARG0), (ARG1))

#define gen_rtx_USE(MODE,ARG0) gen_rtx_fmt_e (USE, (MODE), (ARG0))

#define gen_rtx_CLOBBER(MODE,ARG0) gen_rtx_fmt_e (CLOBBER, (MODE), (ARG0))

#define gen_rtx_CALL(MODE,ARG0,ARG1) gen_rtx_fmt_ee (CALL, (MODE), (ARG0), (ARG1))

#define gen_rtx_RETURN(MODE) gen_rtx_fmt_ (RETURN, (MODE))

#define gen_rtx_TRAP_IF(MODE,ARG0,ARG1) gen_rtx_fmt_ee (TRAP_IF, (MODE), (ARG0), (ARG1))

#define gen_rtx_RESX(MODE,ARG0) gen_rtx_fmt_i (RESX, (MODE), (ARG0))

#define gen_rtx_raw_CONST_INT(MODE,ARG0) gen_rtx_fmt_w (CONST_INT, (MODE), (ARG0))

#define gen_rtx_raw_CONST_DOUBLE(MODE,ARG0,ARG1,ARG2) gen_rtx_fmt_0www (CONST_DOUBLE, (MODE), (ARG0), (ARG1), (ARG2))

#define gen_rtx_CONST_VECTOR(MODE,ARG0) gen_rtx_fmt_E (CONST_VECTOR, (MODE), (ARG0))

#define gen_rtx_CONST_STRING(MODE,ARG0) gen_rtx_fmt_s (CONST_STRING, (MODE), (ARG0))

#define gen_rtx_CONST(MODE,ARG0) gen_rtx_fmt_e (CONST, (MODE), (ARG0))

#define gen_rtx_PC(MODE) gen_rtx_fmt_ (PC, (MODE))

#define gen_rtx_VALUE(MODE) gen_rtx_fmt_0 (VALUE, (MODE))

#define gen_rtx_raw_REG(MODE,ARG0) gen_rtx_fmt_i0 (REG, (MODE), (ARG0))

#define gen_rtx_SCRATCH(MODE) gen_rtx_fmt_0 (SCRATCH, (MODE))

#define gen_rtx_raw_SUBREG(MODE,ARG0,ARG1) gen_rtx_fmt_ei (SUBREG, (MODE), (ARG0), (ARG1))

#define gen_rtx_STRICT_LOW_PART(MODE,ARG0) gen_rtx_fmt_e (STRICT_LOW_PART, (MODE), (ARG0))

#define gen_rtx_CONCAT(MODE,ARG0,ARG1) gen_rtx_fmt_ee (CONCAT, (MODE), (ARG0), (ARG1))

#define gen_rtx_raw_MEM(MODE,ARG0) gen_rtx_fmt_e0 (MEM, (MODE), (ARG0))

#define gen_rtx_LABEL_REF(MODE,ARG0) gen_rtx_fmt_u00 (LABEL_REF, (MODE), (ARG0))

#define gen_rtx_SYMBOL_REF(MODE,ARG0) gen_rtx_fmt_s (SYMBOL_REF, (MODE), (ARG0))

#define gen_rtx_CC0(MODE) gen_rtx_fmt_ (CC0, (MODE))

#define gen_rtx_ADDRESSOF(MODE,ARG0,ARG1,ARG2) gen_rtx_fmt_eit (ADDRESSOF, (MODE), (ARG0), (ARG1), (ARG2))

#define gen_rtx_QUEUED(MODE,ARG0,ARG1,ARG2,ARG3,ARG4) gen_rtx_fmt_eeeee (QUEUED, (MODE), (ARG0), (ARG1), (ARG2), (ARG3), (ARG4))

#define gen_rtx_IF_THEN_ELSE(MODE,ARG0,ARG1,ARG2) gen_rtx_fmt_eee (IF_THEN_ELSE, (MODE), (ARG0), (ARG1), (ARG2))

#define gen_rtx_COND(MODE,ARG0,ARG1) gen_rtx_fmt_Ee (COND, (MODE), (ARG0), (ARG1))

#define gen_rtx_COMPARE(MODE,ARG0,ARG1) gen_rtx_fmt_ee (COMPARE, (MODE), (ARG0), (ARG1))

#define gen_rtx_PLUS(MODE,ARG0,ARG1) gen_rtx_fmt_ee (PLUS, (MODE), (ARG0), (ARG1))

#define gen_rtx_MINUS(MODE,ARG0,ARG1) gen_rtx_fmt_ee (MINUS, (MODE), (ARG0), (ARG1))

#define gen_rtx_NEG(MODE,ARG0) gen_rtx_fmt_e (NEG, (MODE), (ARG0))

#define gen_rtx_MULT(MODE,ARG0,ARG1) gen_rtx_fmt_ee (MULT, (MODE), (ARG0), (ARG1))

#define gen_rtx_DIV(MODE,ARG0,ARG1) gen_rtx_fmt_ee (DIV, (MODE), (ARG0), (ARG1))

#define gen_rtx_MOD(MODE,ARG0,ARG1) gen_rtx_fmt_ee (MOD, (MODE), (ARG0), (ARG1))

#define gen_rtx_UDIV(MODE,ARG0,ARG1) gen_rtx_fmt_ee (UDIV, (MODE), (ARG0), (ARG1))

#define gen_rtx_UMOD(MODE,ARG0,ARG1) gen_rtx_fmt_ee (UMOD, (MODE), (ARG0), (ARG1))

#define gen_rtx_AND(MODE,ARG0,ARG1) gen_rtx_fmt_ee (AND, (MODE), (ARG0), (ARG1))

#define gen_rtx_IOR(MODE,ARG0,ARG1) gen_rtx_fmt_ee (IOR, (MODE), (ARG0), (ARG1))

#define gen_rtx_XOR(MODE,ARG0,ARG1) gen_rtx_fmt_ee (XOR, (MODE), (ARG0), (ARG1))

#define gen_rtx_NOT(MODE,ARG0) gen_rtx_fmt_e (NOT, (MODE), (ARG0))

#define gen_rtx_ASHIFT(MODE,ARG0,ARG1) gen_rtx_fmt_ee (ASHIFT, (MODE), (ARG0), (ARG1))

#define gen_rtx_ROTATE(MODE,ARG0,ARG1) gen_rtx_fmt_ee (ROTATE, (MODE), (ARG0), (ARG1))

#define gen_rtx_ASHIFTRT(MODE,ARG0,ARG1) gen_rtx_fmt_ee (ASHIFTRT, (MODE), (ARG0), (ARG1))

#define gen_rtx_LSHIFTRT(MODE,ARG0,ARG1) gen_rtx_fmt_ee (LSHIFTRT, (MODE), (ARG0), (ARG1))

#define gen_rtx_ROTATERT(MODE,ARG0,ARG1) gen_rtx_fmt_ee (ROTATERT, (MODE), (ARG0), (ARG1))

#define gen_rtx_SMIN(MODE,ARG0,ARG1) gen_rtx_fmt_ee (SMIN, (MODE), (ARG0), (ARG1))

#define gen_rtx_SMAX(MODE,ARG0,ARG1) gen_rtx_fmt_ee (SMAX, (MODE), (ARG0), (ARG1))

#define gen_rtx_UMIN(MODE,ARG0,ARG1) gen_rtx_fmt_ee (UMIN, (MODE), (ARG0), (ARG1))

#define gen_rtx_UMAX(MODE,ARG0,ARG1) gen_rtx_fmt_ee (UMAX, (MODE), (ARG0), (ARG1))

#define gen_rtx_PRE_DEC(MODE,ARG0) gen_rtx_fmt_e (PRE_DEC, (MODE), (ARG0))

#define gen_rtx_PRE_INC(MODE,ARG0) gen_rtx_fmt_e (PRE_INC, (MODE), (ARG0))

#define gen_rtx_POST_DEC(MODE,ARG0) gen_rtx_fmt_e (POST_DEC, (MODE), (ARG0))

#define gen_rtx_POST_INC(MODE,ARG0) gen_rtx_fmt_e (POST_INC, (MODE), (ARG0))

#define gen_rtx_PRE_MODIFY(MODE,ARG0,ARG1) gen_rtx_fmt_ee (PRE_MODIFY, (MODE), (ARG0), (ARG1))

#define gen_rtx_POST_MODIFY(MODE,ARG0,ARG1) gen_rtx_fmt_ee (POST_MODIFY, (MODE), (ARG0), (ARG1))

#define gen_rtx_NE(MODE,ARG0,ARG1) gen_rtx_fmt_ee (NE, (MODE), (ARG0), (ARG1))

#define gen_rtx_EQ(MODE,ARG0,ARG1) gen_rtx_fmt_ee (EQ, (MODE), (ARG0), (ARG1))

#define gen_rtx_GE(MODE,ARG0,ARG1) gen_rtx_fmt_ee (GE, (MODE), (ARG0), (ARG1))

#define gen_rtx_GT(MODE,ARG0,ARG1) gen_rtx_fmt_ee (GT, (MODE), (ARG0), (ARG1))

#define gen_rtx_LE(MODE,ARG0,ARG1) gen_rtx_fmt_ee (LE, (MODE), (ARG0), (ARG1))

#define gen_rtx_LT(MODE,ARG0,ARG1) gen_rtx_fmt_ee (LT, (MODE), (ARG0), (ARG1))

#define gen_rtx_GEU(MODE,ARG0,ARG1) gen_rtx_fmt_ee (GEU, (MODE), (ARG0), (ARG1))

#define gen_rtx_GTU(MODE,ARG0,ARG1) gen_rtx_fmt_ee (GTU, (MODE), (ARG0), (ARG1))

#define gen_rtx_LEU(MODE,ARG0,ARG1) gen_rtx_fmt_ee (LEU, (MODE), (ARG0), (ARG1))

#define gen_rtx_LTU(MODE,ARG0,ARG1) gen_rtx_fmt_ee (LTU, (MODE), (ARG0), (ARG1))

#define gen_rtx_UNORDERED(MODE,ARG0,ARG1) gen_rtx_fmt_ee (UNORDERED, (MODE), (ARG0), (ARG1))

#define gen_rtx_ORDERED(MODE,ARG0,ARG1) gen_rtx_fmt_ee (ORDERED, (MODE), (ARG0), (ARG1))

#define gen_rtx_UNEQ(MODE,ARG0,ARG1) gen_rtx_fmt_ee (UNEQ, (MODE), (ARG0), (ARG1))

#define gen_rtx_UNGE(MODE,ARG0,ARG1) gen_rtx_fmt_ee (UNGE, (MODE), (ARG0), (ARG1))

#define gen_rtx_UNGT(MODE,ARG0,ARG1) gen_rtx_fmt_ee (UNGT, (MODE), (ARG0), (ARG1))

#define gen_rtx_UNLE(MODE,ARG0,ARG1) gen_rtx_fmt_ee (UNLE, (MODE), (ARG0), (ARG1))

#define gen_rtx_UNLT(MODE,ARG0,ARG1) gen_rtx_fmt_ee (UNLT, (MODE), (ARG0), (ARG1))

#define gen_rtx_LTGT(MODE,ARG0,ARG1) gen_rtx_fmt_ee (LTGT, (MODE), (ARG0), (ARG1))

#define gen_rtx_SIGN_EXTEND(MODE,ARG0) gen_rtx_fmt_e (SIGN_EXTEND, (MODE), (ARG0))

#define gen_rtx_ZERO_EXTEND(MODE,ARG0) gen_rtx_fmt_e (ZERO_EXTEND, (MODE), (ARG0))

#define gen_rtx_TRUNCATE(MODE,ARG0) gen_rtx_fmt_e (TRUNCATE, (MODE), (ARG0))

#define gen_rtx_FLOAT_EXTEND(MODE,ARG0) gen_rtx_fmt_e (FLOAT_EXTEND, (MODE), (ARG0))

#define gen_rtx_FLOAT_TRUNCATE(MODE,ARG0) gen_rtx_fmt_e (FLOAT_TRUNCATE, (MODE), (ARG0))

#define gen_rtx_FLOAT(MODE,ARG0) gen_rtx_fmt_e (FLOAT, (MODE), (ARG0))

#define gen_rtx_FIX(MODE,ARG0) gen_rtx_fmt_e (FIX, (MODE), (ARG0))

#define gen_rtx_UNSIGNED_FLOAT(MODE,ARG0) gen_rtx_fmt_e (UNSIGNED_FLOAT, (MODE), (ARG0))

#define gen_rtx_UNSIGNED_FIX(MODE,ARG0) gen_rtx_fmt_e (UNSIGNED_FIX, (MODE), (ARG0))

#define gen_rtx_ABS(MODE,ARG0) gen_rtx_fmt_e (ABS, (MODE), (ARG0))

#define gen_rtx_SQRT(MODE,ARG0) gen_rtx_fmt_e (SQRT, (MODE), (ARG0))

#define gen_rtx_FFS(MODE,ARG0) gen_rtx_fmt_e (FFS, (MODE), (ARG0))

#define gen_rtx_SIGN_EXTRACT(MODE,ARG0,ARG1,ARG2) gen_rtx_fmt_eee (SIGN_EXTRACT, (MODE), (ARG0), (ARG1), (ARG2))

#define gen_rtx_ZERO_EXTRACT(MODE,ARG0,ARG1,ARG2) gen_rtx_fmt_eee (ZERO_EXTRACT, (MODE), (ARG0), (ARG1), (ARG2))

#define gen_rtx_HIGH(MODE,ARG0) gen_rtx_fmt_e (HIGH, (MODE), (ARG0))

#define gen_rtx_LO_SUM(MODE,ARG0,ARG1) gen_rtx_fmt_ee (LO_SUM, (MODE), (ARG0), (ARG1))

#define gen_rtx_RANGE_INFO(MODE,ARG0,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7,ARG8,ARG9,ARG10,ARG11,ARG12) gen_rtx_fmt_uuEiiiiiibbii (RANGE_INFO, (MODE), (ARG0), (ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6), (ARG7), (ARG8), (ARG9), (ARG10), (ARG11), (ARG12))

#define gen_rtx_RANGE_REG(MODE,ARG0,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7,ARG8,ARG9) gen_rtx_fmt_iiiiiiiitt (RANGE_REG, (MODE), (ARG0), (ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6), (ARG7), (ARG8), (ARG9))

#define gen_rtx_RANGE_VAR(MODE,ARG0,ARG1,ARG2) gen_rtx_fmt_eti (RANGE_VAR, (MODE), (ARG0), (ARG1), (ARG2))

#define gen_rtx_RANGE_LIVE(MODE,ARG0,ARG1) gen_rtx_fmt_bi (RANGE_LIVE, (MODE), (ARG0), (ARG1))

#define gen_rtx_CONSTANT_P_RTX(MODE,ARG0) gen_rtx_fmt_e (CONSTANT_P_RTX, (MODE), (ARG0))

#define gen_rtx_CALL_PLACEHOLDER(MODE,ARG0,ARG1,ARG2,ARG3) gen_rtx_fmt_uuuu (CALL_PLACEHOLDER, (MODE), (ARG0), (ARG1), (ARG2), (ARG3))

#define gen_rtx_VEC_MERGE(MODE,ARG0,ARG1,ARG2) gen_rtx_fmt_eee (VEC_MERGE, (MODE), (ARG0), (ARG1), (ARG2))

#define gen_rtx_VEC_SELECT(MODE,ARG0,ARG1) gen_rtx_fmt_ee (VEC_SELECT, (MODE), (ARG0), (ARG1))

#define gen_rtx_VEC_CONCAT(MODE,ARG0,ARG1) gen_rtx_fmt_ee (VEC_CONCAT, (MODE), (ARG0), (ARG1))

#define gen_rtx_VEC_DUPLICATE(MODE,ARG0) gen_rtx_fmt_e (VEC_DUPLICATE, (MODE), (ARG0))

#define gen_rtx_SS_PLUS(MODE,ARG0,ARG1) gen_rtx_fmt_ee (SS_PLUS, (MODE), (ARG0), (ARG1))

#define gen_rtx_US_PLUS(MODE,ARG0,ARG1) gen_rtx_fmt_ee (US_PLUS, (MODE), (ARG0), (ARG1))

#define gen_rtx_SS_MINUS(MODE,ARG0,ARG1) gen_rtx_fmt_ee (SS_MINUS, (MODE), (ARG0), (ARG1))

#define gen_rtx_US_MINUS(MODE,ARG0,ARG1) gen_rtx_fmt_ee (US_MINUS, (MODE), (ARG0), (ARG1))

#define gen_rtx_SS_TRUNCATE(MODE,ARG0) gen_rtx_fmt_e (SS_TRUNCATE, (MODE), (ARG0))

#define gen_rtx_US_TRUNCATE(MODE,ARG0) gen_rtx_fmt_e (US_TRUNCATE, (MODE), (ARG0))

#define gen_rtx_PHI(MODE,ARG0) gen_rtx_fmt_E (PHI, (MODE), (ARG0))
# 1643 "rtl.h" 2







extern rtx gen_rtx_CONST_DOUBLE (enum machine_mode, long, long)
                                         ;
extern rtx gen_rtx_CONST_INT (enum machine_mode, long);
extern rtx gen_raw_REG (enum machine_mode, int);
extern rtx gen_rtx_REG (enum machine_mode, int);
extern rtx gen_rtx_SUBREG (enum machine_mode, rtx, int);
extern rtx gen_rtx_MEM (enum machine_mode, rtx);

extern rtx gen_lowpart_SUBREG (enum machine_mode, rtx);



#define GEN_INT(N) gen_rtx_CONST_INT (VOIDmode, (HOST_WIDE_INT) (N))







#define FIRST_VIRTUAL_REGISTER (FIRST_PSEUDO_REGISTER)





#define virtual_incoming_args_rtx (global_rtl[GR_VIRTUAL_INCOMING_ARGS])

#define VIRTUAL_INCOMING_ARGS_REGNUM (FIRST_VIRTUAL_REGISTER)





#define virtual_stack_vars_rtx (global_rtl[GR_VIRTUAL_STACK_ARGS])

#define VIRTUAL_STACK_VARS_REGNUM ((FIRST_VIRTUAL_REGISTER) + 1)





#define virtual_stack_dynamic_rtx (global_rtl[GR_VIRTUAL_STACK_DYNAMIC])

#define VIRTUAL_STACK_DYNAMIC_REGNUM ((FIRST_VIRTUAL_REGISTER) + 2)





#define virtual_outgoing_args_rtx (global_rtl[GR_VIRTUAL_OUTGOING_ARGS])

#define VIRTUAL_OUTGOING_ARGS_REGNUM ((FIRST_VIRTUAL_REGISTER) + 3)







#define virtual_cfa_rtx (global_rtl[GR_VIRTUAL_CFA])

#define VIRTUAL_CFA_REGNUM ((FIRST_VIRTUAL_REGISTER) + 4)

#define LAST_VIRTUAL_REGISTER ((FIRST_VIRTUAL_REGISTER) + 4)


#define REGNO_PTR_FRAME_P(REGNUM) ((REGNUM) == STACK_POINTER_REGNUM || (REGNUM) == FRAME_POINTER_REGNUM || (REGNUM) == HARD_FRAME_POINTER_REGNUM || (REGNUM) == ARG_POINTER_REGNUM || ((REGNUM) >= FIRST_VIRTUAL_REGISTER && (REGNUM) <= LAST_VIRTUAL_REGISTER))
# 1726 "rtl.h"
#define INVALID_REGNUM (~(unsigned int) 0)

extern rtx find_next_ref (rtx, rtx);

extern rtx output_constant_def (tree, int);
extern rtx immed_real_const (tree);
# 1741 "rtl.h"
extern int flow2_completed;




extern int reload_completed;




extern int reload_in_progress;







extern int cse_not_expected;



extern int no_new_pseudos;





extern int rtx_to_tree_code (enum rtx_code);


struct obstack;
extern void gcc_obstack_init (struct obstack *);


struct cse_basic_block_data;




#define COSTS_N_INSNS(N) ((N) * 4)



#define MAX_COST INT_MAX

extern int rtx_cost (rtx, enum rtx_code);
extern int address_cost (rtx, enum machine_mode);
extern void delete_trivially_dead_insns (rtx, int, int);

extern int cse_main (rtx, int, int, FILE *);

extern void cse_end_of_basic_block (rtx, struct cse_basic_block_data *, int, int, int)

                     ;


extern int comparison_dominates_p (enum rtx_code, enum rtx_code);
extern int condjump_p (rtx);
extern int any_condjump_p (rtx);
extern int any_uncondjump_p (rtx);
extern int safe_to_remove_jump_p (rtx);
extern rtx pc_set (rtx);
extern rtx condjump_label (rtx);
extern int simplejump_p (rtx);
extern int returnjump_p (rtx);
extern int onlyjump_p (rtx);
extern int only_sets_cc0_p (rtx);
extern int sets_cc0_p (rtx);
extern int invert_jump_1 (rtx, rtx);
extern int invert_jump (rtx, rtx, int);
extern int rtx_renumbered_equal_p (rtx, rtx);
extern int true_regnum (rtx);
extern int redirect_jump_1 (rtx, rtx);
extern int redirect_jump (rtx, rtx, int);
extern void rebuild_jump_labels (rtx);
extern enum rtx_code reversed_comparison_code (rtx, rtx);
extern enum rtx_code reversed_comparison_code_parts (enum rtx_code, rtx, rtx, rtx)
                           ;
extern void delete_for_peephole (rtx, rtx);
extern int condjump_in_parallel_p (rtx);
extern void never_reached_warning (rtx, rtx);
extern void purge_line_number_notes (rtx);
extern void copy_loop_headers (rtx);


extern int max_reg_num (void);
extern int max_label_num (void);
extern int get_first_label_num (void);
extern void delete_insns_since (rtx);
extern void mark_reg_pointer (rtx, int);
extern void mark_user_reg (rtx);
extern void reset_used_flags (rtx);
extern void reorder_insns (rtx, rtx, rtx);
extern void reorder_insns_nobb (rtx, rtx, rtx);
extern int get_max_uid (void);
extern int in_sequence_p (void);
extern void force_next_line_note (void);
extern void clear_emit_caches (void);
extern void init_emit (void);
extern void init_emit_once (int);
extern void push_topmost_sequence (void);
extern void pop_topmost_sequence (void);
extern int subreg_realpart_p (rtx);
extern void reverse_comparison (rtx);
extern void set_new_first_and_last_insn (rtx, rtx);
extern void set_new_first_and_last_label_num (int, int);
extern void set_new_last_label_num (int);
extern void unshare_all_rtl_again (rtx);
extern void set_last_insn (rtx);
extern void link_cc0_insns (rtx);
extern void add_insn (rtx);
extern void add_insn_before (rtx, rtx);
extern void add_insn_after (rtx, rtx);
extern void remove_insn (rtx);
extern void reorder_insns_with_line_notes (rtx, rtx, rtx);
extern void emit_insn_after_with_line_notes (rtx, rtx, rtx);
extern enum rtx_code classify_insn (rtx);
extern rtx emit (rtx);



int force_line_numbers (void);
void restore_line_number_status (int old_value);
extern void renumber_insns (FILE *);
extern void remove_unnecessary_notes (void);
extern rtx delete_insn (rtx);
extern void delete_insn_chain (rtx, rtx);


extern int combine_instructions (rtx, unsigned int);
extern unsigned int extended_count (rtx, enum machine_mode, int);
extern rtx remove_death (unsigned int, rtx);

extern void dump_combine_stats (FILE *);
extern void dump_combine_total_stats (FILE *);




extern void schedule_insns (FILE *);
extern void schedule_ebbs (FILE *);

extern void fix_sched_param (const char *, const char *);


extern const char *print_rtx_head;
extern void debug_rtx (rtx);
extern void debug_rtx_list (rtx, int);
extern void debug_rtx_range (rtx, rtx);
extern rtx debug_rtx_find (rtx, int);

extern void print_mem_expr (FILE *, tree);
extern void print_rtl (FILE *, rtx);
extern void print_simple_rtl (FILE *, rtx);
extern int print_rtl_single (FILE *, rtx);
extern void print_inline_rtx (FILE *, rtx, int);



extern void init_loop (void);
extern rtx libcall_other_reg (rtx, rtx);

extern void loop_optimize (rtx, FILE *, int);

extern void record_excess_regs (rtx, rtx, rtx *);


extern void reposition_prologue_and_epilogue_notes (rtx);
extern void thread_prologue_and_epilogue_insns (rtx);
extern int prologue_epilogue_contains (rtx);
extern int sibcall_epilogue_contains (rtx);
extern void preserve_rtl_expr_result (rtx);
extern void mark_temp_addr_taken (rtx);
extern void update_temp_slot_address (rtx, rtx);
extern void purge_addressof (rtx);
extern void purge_hard_subreg_sets (rtx);


extern void set_file_and_line_for_stmt (const char *, int);
extern void expand_null_return (void);
extern void emit_jump (rtx);
extern int preserve_subexpressions_p (void);


extern void move_by_pieces (rtx, rtx, unsigned long, unsigned int)

                     ;


extern void recompute_reg_usage (rtx, int);
extern int initialize_uninitialized_subregs (void);

extern void print_rtl_with_bb (FILE *, rtx);
extern void dump_flow_info (FILE *);



extern void init_expmed (void);
extern void expand_inc (rtx, rtx);
extern void expand_dec (rtx, rtx);
extern rtx expand_mult_highpart (enum machine_mode, rtx, unsigned long, rtx, int, int)

                ;



extern int gcse_main (rtx, FILE *);



extern void mark_elimination (int, int);

extern int global_alloc (FILE *);
extern void dump_global_regs (FILE *);




extern void build_insn_chain (rtx);


extern int reg_classes_intersect_p (enum reg_class, enum reg_class);
extern int reg_class_subset_p (enum reg_class, enum reg_class);
extern void globalize_reg (int);
extern void init_regs (void);
extern void init_reg_sets (void);
extern void regset_release_memory (void);
extern void regclass_init (void);
extern void regclass (rtx, int, FILE *);
extern void reg_scan (rtx, unsigned int, int);
extern void reg_scan_update (rtx, rtx, unsigned int);
extern void fix_register (const char *, int, int);

extern void delete_null_pointer_checks (rtx);



extern void regmove_optimize (rtx, int, FILE *);

extern void combine_stack_adjustments (void);



extern void dbr_schedule (rtx, FILE *);




extern void dump_local_alloc (FILE *);

extern int local_alloc (void);
extern int function_invariant_p (rtx);


extern void init_branch_prob (const char *);
extern void branch_prob (void);
extern void end_branch_prob (void);
extern void output_func_start_profiler (void);



extern void reg_to_stack (rtx, FILE *);



extern int add_double (unsigned long, long, unsigned long, long, unsigned long *, long *)


                       ;
extern int neg_double (unsigned long, long, unsigned long *, long *)

                       ;
extern int mul_double (unsigned long, long, unsigned long, long, unsigned long *, long *)



                       ;
extern void lshift_double (unsigned long, long, long, unsigned int, unsigned long *, long *, int)


                            ;
extern void rshift_double (unsigned long, long, long, unsigned int, unsigned long *, long *, int)


                            ;
extern void lrotate_double (unsigned long, long, long, unsigned int, unsigned long *, long *)


                       ;
extern void rrotate_double (unsigned long, long, long, unsigned int, unsigned long *, long *)


                       ;


enum libcall_type
{
  LCT_NORMAL = 0,
  LCT_CONST = 1,
  LCT_PURE = 2,
  LCT_CONST_MAKE_BLOCK = 3,
  LCT_PURE_MAKE_BLOCK = 4,
  LCT_NORETURN = 5,
  LCT_THROW = 6,
  LCT_ALWAYS_RETURN = 7,
  LCT_RETURNS_TWICE = 8
};

extern void emit_library_call (rtx, enum libcall_type, enum machine_mode, int, ...)

            ;
extern rtx emit_library_call_value (rtx, rtx, enum libcall_type, enum machine_mode, int, ...)

            ;


extern int set_dominates_use (int, int, int, rtx, rtx);


extern int in_data_section (void);
extern void init_varasm_once (void);


extern void init_rtl (void);
extern void traverse_md_constants (int (*) (void **, void *), void *)
               ;
struct md_constant { char *name, *value; };


extern int read_skip_spaces (FILE *);
extern rtx read_rtx (FILE *);


extern const char *read_rtx_filename;
extern int read_rtx_lineno;







extern void fancy_abort (const char *, int, const char *)
    __attribute__ ((__noreturn__));
#define abort() fancy_abort (__FILE__, __LINE__, __FUNCTION__)


extern void clear_reg_alias_info (rtx);
extern rtx canon_rtx (rtx);
extern int true_dependence (rtx, enum machine_mode, rtx, int (*)(rtx, int))
                         ;
extern rtx get_addr (rtx);
extern int canon_true_dependence (rtx, enum machine_mode, rtx, rtx, int (*)(rtx, int))
                                                                        ;
extern int read_dependence (rtx, rtx);
extern int anti_dependence (rtx, rtx);
extern int output_dependence (rtx, rtx);
extern void mark_constant_function (void);
extern void init_alias_once (void);
extern void init_alias_analysis (void);
extern void end_alias_analysis (void);
extern rtx addr_side_effect_eval (rtx, int, int);


typedef enum {
  sibcall_use_normal = 1,
  sibcall_use_tail_recursion,
  sibcall_use_sibcall
} sibcall_use_t;

extern void optimize_sibling_and_tail_recursive_calls (void);
extern void replace_call_placeholder (rtx, sibcall_use_t);


extern int stack_regs_mentioned (rtx insn);



extern rtx stack_limit_rtx;


extern void regrename_optimize (void);
extern void copyprop_hardreg_forward (void);


extern void if_convert (int);


extern void invert_br_probabilities (rtx);
extern _Bool expensive_function_p (int);
# 26 "regrename.c" 2
# 1 "tm_p.h" 1
# 1 "i386-protos.h" 1
# 23 "i386-protos.h"
extern void override_options (void);
extern void optimization_options (int, int);

extern int ix86_can_use_return_insn_p (void);
extern int ix86_frame_pointer_required (void);
extern void ix86_setup_frame_addresses (void);

extern void ix86_asm_file_end (FILE *);
extern void load_pic_register (void);
extern long ix86_initial_elimination_offset (int, int);
extern void ix86_expand_prologue (void);
extern void ix86_expand_epilogue (int);

extern void ix86_output_addr_vec_elt (FILE *, int);
extern void ix86_output_addr_diff_elt (FILE *, int, int);


extern int ix86_aligned_p (rtx);

extern int standard_80387_constant_p (rtx);
extern int standard_sse_constant_p (rtx);
extern int symbolic_reference_mentioned_p (rtx);

extern int x86_64_general_operand (rtx, enum machine_mode);
extern int x86_64_szext_general_operand (rtx, enum machine_mode);
extern int x86_64_nonmemory_operand (rtx, enum machine_mode);
extern int x86_64_szext_nonmemory_operand (rtx, enum machine_mode);
extern int x86_64_immediate_operand (rtx, enum machine_mode);
extern int x86_64_zext_immediate_operand (rtx, enum machine_mode);
extern int const_int_1_operand (rtx, enum machine_mode);
extern int symbolic_operand (rtx, enum machine_mode);
extern int pic_symbolic_operand (rtx, enum machine_mode);
extern int call_insn_operand (rtx, enum machine_mode);
extern int constant_call_address_operand (rtx, enum machine_mode);
extern int const0_operand (rtx, enum machine_mode);
extern int const1_operand (rtx, enum machine_mode);
extern int const248_operand (rtx, enum machine_mode);
extern int incdec_operand (rtx, enum machine_mode);
extern int reg_no_sp_operand (rtx, enum machine_mode);
extern int mmx_reg_operand (rtx, enum machine_mode);
extern int general_no_elim_operand (rtx, enum machine_mode);
extern int nonmemory_no_elim_operand (rtx, enum machine_mode);
extern int q_regs_operand (rtx, enum machine_mode);
extern int non_q_regs_operand (rtx, enum machine_mode);
extern int sse_comparison_operator (rtx, enum machine_mode);
extern int fcmov_comparison_operator (rtx, enum machine_mode);
extern int cmp_fp_expander_operand (rtx, enum machine_mode);
extern int ix86_comparison_operator (rtx, enum machine_mode);
extern int ext_register_operand (rtx, enum machine_mode);
extern int binary_fp_operator (rtx, enum machine_mode);
extern int mult_operator (rtx, enum machine_mode);
extern int div_operator (rtx, enum machine_mode);
extern int arith_or_logical_operator (rtx, enum machine_mode);
extern int promotable_binary_operator (rtx, enum machine_mode);
extern int memory_displacement_operand (rtx, enum machine_mode);
extern int cmpsi_operand (rtx, enum machine_mode);
extern int long_memory_operand (rtx, enum machine_mode);
extern int aligned_operand (rtx, enum machine_mode);
extern enum machine_mode ix86_cc_mode (enum rtx_code, rtx, rtx);

extern int ix86_expand_movstr (rtx, rtx, rtx, rtx);
extern int ix86_expand_clrstr (rtx, rtx, rtx);
extern int ix86_expand_strlen (rtx, rtx, rtx, rtx);

extern int legitimate_pic_address_disp_p (rtx);
extern int legitimate_address_p (enum machine_mode, rtx, int);
extern rtx legitimize_pic_address (rtx, rtx);
extern rtx legitimize_address (rtx, rtx, enum machine_mode);

extern void print_reg (rtx, int, FILE*);
extern void print_operand (FILE*, rtx, int);
extern void print_operand_address (FILE*, rtx);

extern void split_di (rtx[], int, rtx[], rtx[]);
extern void split_ti (rtx[], int, rtx[], rtx[]);

extern const char *output_387_binary_op (rtx, rtx*);
extern const char *output_fix_trunc (rtx, rtx*);
extern const char *output_fp_compare (rtx, rtx*, int, int);

extern void i386_dwarf_output_addr_const (FILE*, rtx);
extern rtx i386_simplify_dwarf_addr (rtx);

extern void ix86_expand_clear (rtx);
extern void ix86_expand_move (enum machine_mode, rtx[]);
extern void ix86_expand_vector_move (enum machine_mode, rtx[]);
extern void ix86_expand_binary_operator (enum rtx_code, enum machine_mode, rtx[])
                                      ;
extern int ix86_binary_operator_ok (enum rtx_code, enum machine_mode, rtx[])
              ;
extern void ix86_expand_unary_operator (enum rtx_code, enum machine_mode, rtx[])
                  ;
extern int ix86_unary_operator_ok (enum rtx_code, enum machine_mode, rtx[])
             ;
extern int ix86_match_ccmode (rtx, enum machine_mode);
extern rtx ix86_expand_compare (enum rtx_code, rtx *, rtx *);
extern int ix86_use_fcomi_compare (enum rtx_code);
extern void ix86_expand_branch (enum rtx_code, rtx);
extern int ix86_expand_setcc (enum rtx_code, rtx);
extern int ix86_expand_int_movcc (rtx[]);
extern int ix86_expand_fp_movcc (rtx[]);
extern void x86_initialize_trampoline (rtx, rtx, rtx);
extern rtx ix86_zero_extend_to_Pmode (rtx);
extern void ix86_split_long_move (rtx[]);
extern void ix86_split_ashldi (rtx *, rtx);
extern void ix86_split_ashrdi (rtx *, rtx);
extern void ix86_split_lshrdi (rtx *, rtx);
extern int ix86_address_cost (rtx);
extern rtx ix86_find_base_term (rtx);

extern rtx assign_386_stack_local (enum machine_mode, int);
extern int ix86_attr_length_immediate_default (rtx, int);
extern int ix86_attr_length_address_default (rtx);

extern enum machine_mode ix86_fp_compare_mode (enum rtx_code);

extern int x86_64_sign_extended_value (rtx);
extern int x86_64_zero_extended_value (rtx);
extern rtx ix86_libcall_value (enum machine_mode);
extern _Bool ix86_function_value_regno_p (int);
extern _Bool ix86_function_arg_regno_p (int);
extern int ix86_function_arg_boundary (enum machine_mode, tree);
extern int ix86_return_in_memory (tree);
extern void ix86_va_start (int, tree, rtx);
extern rtx ix86_va_arg (tree, tree);
extern void ix86_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode, tree, int *, int)

                         ;

extern rtx ix86_force_to_memory (enum machine_mode, rtx);
extern void ix86_free_from_memory (enum machine_mode);
extern void ix86_split_fp_branch (enum rtx_code code, rtx, rtx, rtx, rtx, rtx)
                           ;
extern int ix86_hard_regno_mode_ok (int, enum machine_mode);
extern int ix86_register_move_cost (enum machine_mode, enum reg_class, enum reg_class)
                         ;
extern int ix86_secondary_memory_needed (enum reg_class, enum reg_class, enum machine_mode, int)

                               ;
extern enum reg_class ix86_preferred_reload_class (rtx, enum reg_class)
                          ;
extern int ix86_memory_move_cost (enum machine_mode, enum reg_class, int)
            ;
extern void ix86_set_move_mem_attrs (rtx, rtx, rtx, rtx, rtx);
extern void emit_i387_cw_initialization (rtx, rtx);
extern _Bool ix86_fp_jump_nontrivial_p (enum rtx_code);
extern void x86_order_regs_for_local_alloc (void);
# 2 "tm_p.h" 2
# 1 "tm-preds.h" 1



#define GCC_TM_PREDS_H 



extern int x86_64_immediate_operand (rtx, enum machine_mode);
extern int x86_64_nonmemory_operand (rtx, enum machine_mode);
extern int x86_64_movabs_operand (rtx, enum machine_mode);
extern int x86_64_szext_nonmemory_operand (rtx, enum machine_mode);
extern int x86_64_general_operand (rtx, enum machine_mode);
extern int x86_64_szext_general_operand (rtx, enum machine_mode);
extern int x86_64_zext_immediate_operand (rtx, enum machine_mode);
extern int shiftdi_operand (rtx, enum machine_mode);
extern int const_int_1_operand (rtx, enum machine_mode);
extern int const_int_1_31_operand (rtx, enum machine_mode);
extern int symbolic_operand (rtx, enum machine_mode);
extern int aligned_operand (rtx, enum machine_mode);
extern int pic_symbolic_operand (rtx, enum machine_mode);
extern int call_insn_operand (rtx, enum machine_mode);
extern int constant_call_address_operand (rtx, enum machine_mode);
extern int const0_operand (rtx, enum machine_mode);
extern int const1_operand (rtx, enum machine_mode);
extern int const248_operand (rtx, enum machine_mode);
extern int incdec_operand (rtx, enum machine_mode);
extern int mmx_reg_operand (rtx, enum machine_mode);
extern int reg_no_sp_operand (rtx, enum machine_mode);
extern int general_no_elim_operand (rtx, enum machine_mode);
extern int nonmemory_no_elim_operand (rtx, enum machine_mode);
extern int q_regs_operand (rtx, enum machine_mode);
extern int non_q_regs_operand (rtx, enum machine_mode);
extern int fcmov_comparison_operator (rtx, enum machine_mode);
extern int sse_comparison_operator (rtx, enum machine_mode);
extern int ix86_comparison_operator (rtx, enum machine_mode);
extern int cmp_fp_expander_operand (rtx, enum machine_mode);
extern int ext_register_operand (rtx, enum machine_mode);
extern int binary_fp_operator (rtx, enum machine_mode);
extern int mult_operator (rtx, enum machine_mode);
extern int div_operator (rtx, enum machine_mode);
extern int arith_or_logical_operator (rtx, enum machine_mode);
extern int promotable_binary_operator (rtx, enum machine_mode);
extern int memory_displacement_operand (rtx, enum machine_mode);
extern int cmpsi_operand (rtx, enum machine_mode);
extern int long_memory_operand (rtx, enum machine_mode);
# 3 "tm_p.h" 2
# 27 "regrename.c" 2
# 1 "insn-config.h" 1




#define GCC_INSN_CONFIG_H 

#define MAX_RECOG_OPERANDS 30
#define MAX_DUP_OPERANDS 4

#define MAX_INSNS_PER_SPLIT 4

#define HAVE_conditional_move 1
#define HAVE_peephole2 1
#define MAX_INSNS_PER_PEEP2 4
# 28 "regrename.c" 2
# 1 "regs.h" 1
# 23 "regs.h"
# 1 "varray.h" 1
# 23 "varray.h"
#define GCC_VARRAY_H 
# 36 "varray.h"
struct const_equiv_data {
# 50 "varray.h"
  struct rtx_def *rtx;



  unsigned age;
};


typedef union varray_data_tag {
  char c[1];
  unsigned char uc[1];
  short s[1];
  unsigned short us[1];
  int i[1];
  unsigned int u[1];
  long l[1];
  unsigned long ul[1];
  long hint[1];
  unsigned long uhint[1];
  void * generic[1];
  char *cptr[1];
  struct rtx_def *rtx[1];
  struct rtvec_def *rtvec[1];
  union tree_node *tree[1];
  struct bitmap_head_def *bitmap[1];
  struct sched_info_tag *sched[1];
  struct reg_info_def *reg[1];
  struct const_equiv_data const_equiv[1];
  struct basic_block_def *bb[1];
  struct elt_list *te[1];
} varray_data;


typedef struct varray_head_tag {
  size_t num_elements;
  size_t elements_used;

  size_t element_size;
  const char *name;
  varray_data data;
} *varray_type;



extern varray_type varray_init (size_t, size_t, const char *);

#define VARRAY_CHAR_INIT(va,num,name) va = varray_init (num, sizeof (char), name)


#define VARRAY_UCHAR_INIT(va,num,name) va = varray_init (num, sizeof (unsigned char), name)


#define VARRAY_SHORT_INIT(va,num,name) va = varray_init (num, sizeof (short), name)


#define VARRAY_USHORT_INIT(va,num,name) va = varray_init (num, sizeof (unsigned short), name)


#define VARRAY_INT_INIT(va,num,name) va = varray_init (num, sizeof (int), name)


#define VARRAY_UINT_INIT(va,num,name) va = varray_init (num, sizeof (unsigned int), name)


#define VARRAY_LONG_INIT(va,num,name) va = varray_init (num, sizeof (long), name)


#define VARRAY_ULONG_INIT(va,num,name) va = varray_init (num, sizeof (unsigned long), name)


#define VARRAY_WIDE_INT_INIT(va,num,name) va = varray_init (num, sizeof (HOST_WIDE_INT), name)


#define VARRAY_UWIDE_INT_INIT(va,num,name) va = varray_init (num, sizeof (unsigned HOST_WIDE_INT), name)


#define VARRAY_GENERIC_PTR_INIT(va,num,name) va = varray_init (num, sizeof (PTR), name)


#define VARRAY_CHAR_PTR_INIT(va,num,name) va = varray_init (num, sizeof (char *), name)


#define VARRAY_RTX_INIT(va,num,name) va = varray_init (num, sizeof (struct rtx_def *), name)


#define VARRAY_RTVEC_INIT(va,num,name) va = varray_init (num, sizeof (struct rtvec_def), name)


#define VARRAY_TREE_INIT(va,num,name) va = varray_init (num, sizeof (union tree_node *), name)


#define VARRAY_BITMAP_INIT(va,num,name) va = varray_init (num, sizeof (struct bitmap_head_def *), name)


#define VARRAY_SCHED_INIT(va,num,name) va = varray_init (num, sizeof (struct sched_info_tag *), name)


#define VARRAY_REG_INIT(va,num,name) va = varray_init (num, sizeof (struct reg_info_def *), name)


#define VARRAY_CONST_EQUIV_INIT(va,num,name) va = varray_init (num, sizeof (struct const_equiv_data), name)


#define VARRAY_BB_INIT(va,num,name) va = varray_init (num, sizeof (struct basic_block_def *), name)


#define VARRAY_ELT_LIST_INIT(va,num,name) va = varray_init (num, sizeof (struct elt_list *), name)




#define VARRAY_FREE(vp) do { if (vp) { free (vp); vp = (varray_type) 0; } } while (0)



extern varray_type varray_grow (varray_type, size_t);

#define VARRAY_GROW(VA,N) ((VA) = varray_grow (VA, N))

#define VARRAY_SIZE(VA) ((VA)->num_elements)

#define VARRAY_ACTIVE_SIZE(VA) ((VA)->elements_used)
#define VARRAY_POP_ALL(VA) ((VA)->elements_used = 0)
# 186 "varray.h"
#define VARRAY_CHECK(VA,N,T) ((VA)->data.T[N])




#define VARRAY_PUSH(VA,T,X) do { if ((VA)->elements_used >= (VA)->num_elements) VARRAY_GROW ((VA), 2 * (VA)->num_elements); (VA)->data.T[(VA)->elements_used++] = (X); } while (0)
# 201 "varray.h"
#define VARRAY_POP(VA) ((VA)->elements_used--)



#define VARRAY_TOP(VA,T) ((VA)->data.T[(VA)->elements_used - 1])


#define VARRAY_CHAR(VA,N) VARRAY_CHECK (VA, N, c)
#define VARRAY_UCHAR(VA,N) VARRAY_CHECK (VA, N, uc)
#define VARRAY_SHORT(VA,N) VARRAY_CHECK (VA, N, s)
#define VARRAY_USHORT(VA,N) VARRAY_CHECK (VA, N, us)
#define VARRAY_INT(VA,N) VARRAY_CHECK (VA, N, i)
#define VARRAY_UINT(VA,N) VARRAY_CHECK (VA, N, u)
#define VARRAY_LONG(VA,N) VARRAY_CHECK (VA, N, l)
#define VARRAY_ULONG(VA,N) VARRAY_CHECK (VA, N, ul)
#define VARRAY_WIDE_INT(VA,N) VARRAY_CHECK (VA, N, hint)
#define VARRAY_UWIDE_INT(VA,N) VARRAY_CHECK (VA, N, uhint)
#define VARRAY_GENERIC_PTR(VA,N) VARRAY_CHECK (VA, N, generic)
#define VARRAY_CHAR_PTR(VA,N) VARRAY_CHECK (VA, N, cptr)
#define VARRAY_RTX(VA,N) VARRAY_CHECK (VA, N, rtx)
#define VARRAY_RTVEC(VA,N) VARRAY_CHECK (VA, N, rtvec)
#define VARRAY_TREE(VA,N) VARRAY_CHECK (VA, N, tree)
#define VARRAY_BITMAP(VA,N) VARRAY_CHECK (VA, N, bitmap)
#define VARRAY_SCHED(VA,N) VARRAY_CHECK (VA, N, sched)
#define VARRAY_REG(VA,N) VARRAY_CHECK (VA, N, reg)
#define VARRAY_CONST_EQUIV(VA,N) VARRAY_CHECK (VA, N, const_equiv)
#define VARRAY_BB(VA,N) VARRAY_CHECK (VA, N, bb)
#define VARRAY_ELT_LIST(VA,N) VARRAY_CHECK (VA, N, te)


#define VARRAY_PUSH_CHAR(VA,X) VARRAY_PUSH (VA, c, X)
#define VARRAY_PUSH_UCHAR(VA,X) VARRAY_PUSH (VA, uc, X)
#define VARRAY_PUSH_SHORT(VA,X) VARRAY_PUSH (VA, s, X)
#define VARRAY_PUSH_USHORT(VA,X) VARRAY_PUSH (VA, us, X)
#define VARRAY_PUSH_INT(VA,X) VARRAY_PUSH (VA, i, X)
#define VARRAY_PUSH_UINT(VA,X) VARRAY_PUSH (VA, u, X)
#define VARRAY_PUSH_LONG(VA,X) VARRAY_PUSH (VA, l, X)
#define VARRAY_PUSH_ULONG(VA,X) VARRAY_PUSH (VA, ul, X)
#define VARRAY_PUSH_WIDE_INT(VA,X) VARRAY_PUSH (VA, hint, X)
#define VARRAY_PUSH_UWIDE_INT(VA,X) VARRAY_PUSH (VA, uhint, X)
#define VARRAY_PUSH_GENERIC_PTR(VA,X) VARRAY_PUSH (VA, generic, X)
#define VARRAY_PUSH_CHAR_PTR(VA,X) VARRAY_PUSH (VA, cptr, X)
#define VARRAY_PUSH_RTX(VA,X) VARRAY_PUSH (VA, rtx, X)
#define VARRAY_PUSH_RTVEC(VA,X) VARRAY_PUSH (VA, rtvec, X)
#define VARRAY_PUSH_TREE(VA,X) VARRAY_PUSH (VA, tree, X)
#define VARRAY_PUSH_BITMAP(VA,X) VARRAY_PUSH (VA, bitmap, X)
#define VARRAY_PUSH_SCHED(VA,X) VARRAY_PUSH (VA, sched, X)
#define VARRAY_PUSH_REG(VA,X) VARRAY_PUSH (VA, reg, X)
#define VARRAY_PUSH_CONST_EQUIV(VA,X) VARRAY_PUSH (VA, const_equiv, X)
#define VARRAY_PUSH_BB(VA,X) VARRAY_PUSH (VA, bb, X)


#define VARRAY_TOP_CHAR(VA) VARRAY_TOP (VA, c)
#define VARRAY_TOP_UCHAR(VA) VARRAY_TOP (VA, uc)
#define VARRAY_TOP_SHORT(VA) VARRAY_TOP (VA, s)
#define VARRAY_TOP_USHORT(VA) VARRAY_TOP (VA, us)
#define VARRAY_TOP_INT(VA) VARRAY_TOP (VA, i)
#define VARRAY_TOP_UINT(VA) VARRAY_TOP (VA, u)
#define VARRAY_TOP_LONG(VA) VARRAY_TOP (VA, l)
#define VARRAY_TOP_ULONG(VA) VARRAY_TOP (VA, ul)
#define VARRAY_TOP_WIDE_INT(VA) VARRAY_TOP (VA, hint)
#define VARRAY_TOP_UWIDE_INT(VA) VARRAY_TOP (VA, uhint)
#define VARRAY_TOP_GENERIC_PTR(VA) VARRAY_TOP (VA, generic)
#define VARRAY_TOP_CHAR_PTR(VA) VARRAY_TOP (VA, cptr)
#define VARRAY_TOP_RTX(VA) VARRAY_TOP (VA, rtx)
#define VARRAY_TOP_RTVEC(VA) VARRAY_TOP (VA, rtvec)
#define VARRAY_TOP_TREE(VA) VARRAY_TOP (VA, tree)
#define VARRAY_TOP_BITMAP(VA) VARRAY_TOP (VA, bitmap)
#define VARRAY_TOP_SCHED(VA) VARRAY_TOP (VA, sched)
#define VARRAY_TOP_REG(VA) VARRAY_TOP (VA, reg)
#define VARRAY_TOP_CONST_EQUIV(VA) VARRAY_TOP (VA, const_equiv)
#define VARRAY_TOP_BB(VA) VARRAY_TOP (VA, bb)
# 24 "regs.h" 2

#define REG_BYTES(R) mode_size[(int) GET_MODE (R)]







#define REGMODE_NATURAL_SIZE(MODE) UNITS_PER_WORD
# 42 "regs.h"
extern int max_regno;


typedef struct reg_info_def
{
  int first_uid;
  int last_uid;
  int last_note_uid;


  int sets;


  int refs;
  int freq;
  int deaths;
  int live_length;
  int calls_crossed;
  int basic_block;
  char changes_mode;

} reg_info;

extern varray_type reg_n_info;



#define REG_N_REFS(N) (VARRAY_REG (reg_n_info, N)->refs)



#define REG_FREQ(N) (VARRAY_REG (reg_n_info, N)->freq)





#define REG_FREQ_MAX 1000





#define REG_FREQ_FROM_BB(bb) (optimize_size || (flag_branch_probabilities && !ENTRY_BLOCK_PTR->count) ? REG_FREQ_MAX : ((bb)->frequency * REG_FREQ_MAX / BB_FREQ_MAX) ? ((bb)->frequency * REG_FREQ_MAX / BB_FREQ_MAX) : 1)
# 97 "regs.h"
#define REG_N_SETS(N) (VARRAY_REG (reg_n_info, N)->sets)







#define REG_N_DEATHS(N) (VARRAY_REG (reg_n_info, N)->deaths)






#define REG_CHANGES_MODE(N) (VARRAY_REG (reg_n_info, N)->changes_mode)



#define PSEUDO_REGNO_SIZE(N) ((GET_MODE_SIZE (PSEUDO_REGNO_MODE (N)) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)





#define PSEUDO_REGNO_BYTES(N) GET_MODE_SIZE (PSEUDO_REGNO_MODE (N))




#define PSEUDO_REGNO_MODE(N) GET_MODE (regno_reg_rtx[N])



#define REG_N_CALLS_CROSSED(N) (VARRAY_REG (reg_n_info, N)->calls_crossed)
# 148 "regs.h"
#define REG_LIVE_LENGTH(N) (VARRAY_REG (reg_n_info, N)->live_length)
# 157 "regs.h"
extern short *reg_renumber;




extern char regs_ever_live[53];



extern const char * reg_names[53];






extern enum machine_mode reg_raw_mode[53];






#define REGNO_FIRST_UID(N) (VARRAY_REG (reg_n_info, N)->first_uid)







#define REGNO_LAST_UID(N) (VARRAY_REG (reg_n_info, N)->last_uid)



#define REGNO_LAST_NOTE_UID(N) (VARRAY_REG (reg_n_info, N)->last_note_uid)



extern rtx regs_may_share;




extern int caller_save_needed;






#define CALLER_SAVE_PROFITABLE(REFS,CALLS) (4 * (CALLS) < (REFS))
# 226 "regs.h"
#define HARD_REGNO_CALL_PART_CLOBBERED(REGNO,MODE) 0



extern void allocate_reg_info (size_t, int, int);
# 29 "regrename.c" 2
# 1 "hard-reg-set.h" 1
# 22 "hard-reg-set.h"
#define GCC_HARD_REG_SET_H 
# 41 "hard-reg-set.h"
typedef unsigned long HARD_REG_ELT_TYPE;



#define HARD_REG_SET HARD_REG_ELT_TYPE
# 59 "hard-reg-set.h"
#define HARD_CONST(X) ((HARD_REG_ELT_TYPE) (X))
# 90 "hard-reg-set.h"
#define SET_HARD_REG_BIT(SET,BIT) ((SET) |= HARD_CONST (1) << (BIT))

#define CLEAR_HARD_REG_BIT(SET,BIT) ((SET) &= ~(HARD_CONST (1) << (BIT)))

#define TEST_HARD_REG_BIT(SET,BIT) ((SET) & (HARD_CONST (1) << (BIT)))


#define CLEAR_HARD_REG_SET(TO) ((TO) = HARD_CONST (0))
#define SET_HARD_REG_SET(TO) ((TO) = ~ HARD_CONST (0))

#define COPY_HARD_REG_SET(TO,FROM) ((TO) = (FROM))
#define COMPL_HARD_REG_SET(TO,FROM) ((TO) = ~(FROM))

#define IOR_HARD_REG_SET(TO,FROM) ((TO) |= (FROM))
#define IOR_COMPL_HARD_REG_SET(TO,FROM) ((TO) |= ~ (FROM))
#define AND_HARD_REG_SET(TO,FROM) ((TO) &= (FROM))
#define AND_COMPL_HARD_REG_SET(TO,FROM) ((TO) &= ~ (FROM))

#define GO_IF_HARD_REG_SUBSET(X,Y,TO) if (HARD_CONST (0) == ((X) & ~(Y))) goto TO

#define GO_IF_HARD_REG_EQUAL(X,Y,TO) if ((X) == (Y)) goto TO
# 395 "hard-reg-set.h"
extern char fixed_regs[53];



extern HARD_REG_ELT_TYPE fixed_reg_set;






extern char call_used_regs[53];



extern HARD_REG_ELT_TYPE call_used_reg_set;


extern HARD_REG_ELT_TYPE losing_caller_save_reg_set;







extern char call_fixed_regs[53];



extern HARD_REG_ELT_TYPE call_fixed_reg_set;






extern char global_regs[53];
# 441 "hard-reg-set.h"
extern HARD_REG_ELT_TYPE regs_invalidated_by_call;




extern int reg_alloc_order[53];



extern int inv_reg_alloc_order[53];




extern HARD_REG_ELT_TYPE reg_class_contents[((int) LIM_REG_CLASSES)];



extern unsigned int reg_class_size[((int) LIM_REG_CLASSES)];



extern enum reg_class reg_class_superclasses[((int) LIM_REG_CLASSES)][((int) LIM_REG_CLASSES)];



extern enum reg_class reg_class_subclasses[((int) LIM_REG_CLASSES)][((int) LIM_REG_CLASSES)];




extern enum reg_class reg_class_subunion[((int) LIM_REG_CLASSES)][((int) LIM_REG_CLASSES)];




extern enum reg_class reg_class_superunion[((int) LIM_REG_CLASSES)][((int) LIM_REG_CLASSES)];



extern int n_non_fixed_regs;



extern const char * reg_names[53];
# 30 "regrename.c" 2
# 1 "basic-block.h" 1
# 23 "basic-block.h"
#define GCC_BASIC_BLOCK_H 

# 1 "bitmap.h" 1
# 23 "bitmap.h"
#define GCC_BITMAP_H 




#define BITMAP_ELEMENT_WORDS 2






#define BITMAP_ELEMENT_ALL_BITS ((unsigned) (BITMAP_ELEMENT_WORDS * HOST_BITS_PER_WIDE_INT))







typedef struct bitmap_element_def
{
  struct bitmap_element_def *next;
  struct bitmap_element_def *prev;
  unsigned int indx;
  unsigned long bits[2];
} bitmap_element;


typedef struct bitmap_head_def {
  bitmap_element *first;
  bitmap_element *current;
  unsigned int indx;

} bitmap_head, *bitmap;


enum bitmap_bits {
  BITMAP_AND,
  BITMAP_AND_COMPL,
  BITMAP_IOR,
  BITMAP_XOR,
  BITMAP_IOR_COMPL
};


extern bitmap_element bitmap_zero_bits;


extern void bitmap_clear (bitmap);


extern void bitmap_copy (bitmap, bitmap);


extern int bitmap_equal_p (bitmap, bitmap);


extern int bitmap_operation (bitmap, bitmap, bitmap, enum bitmap_bits);



extern void bitmap_ior_and_compl (bitmap, bitmap, bitmap);


extern void bitmap_clear_bit (bitmap, int);


extern void bitmap_set_bit (bitmap, int);


extern int bitmap_bit_p (bitmap, int);


extern void debug_bitmap (bitmap);
extern void debug_bitmap_file (FILE *, bitmap);


extern void bitmap_print (FILE *, bitmap, const char *, const char *);


extern bitmap bitmap_initialize (bitmap);


extern void bitmap_release_memory (void);


#define dump_bitmap(file,bitmap) bitmap_print (file, bitmap, "", "\n")
#define bitmap_zero(a) bitmap_clear (a)
#define bitmap_a_or_b(a,b,c) bitmap_operation (a, b, c, BITMAP_IOR)
#define bitmap_a_and_b(a,b,c) bitmap_operation (a, b, c, BITMAP_AND)
extern int bitmap_union_of_diff (bitmap, bitmap, bitmap, bitmap);
extern int bitmap_first_set_bit (bitmap);
extern int bitmap_last_set_bit (bitmap);


#define BITMAP_OBSTACK_ALLOC(OBSTACK) bitmap_initialize ((bitmap) obstack_alloc (OBSTACK, sizeof (bitmap_head)))







#define BITMAP_ALLOCA(PTR) do { bitmap temp_bitmap_ = (bitmap) alloca (sizeof (bitmap_head)); (PTR) = bitmap_initialize (temp_bitmap_); } while (0)






#define BITMAP_XMALLOC() bitmap_initialize ((bitmap) xmalloc (sizeof (bitmap_head)))



#define BITMAP_FREE(BITMAP) do { if (BITMAP) { bitmap_clear (BITMAP); (BITMAP) = 0; } } while (0)
# 148 "bitmap.h"
#define BITMAP_XFREE(BITMAP) do { if (BITMAP) { bitmap_clear (BITMAP); free (BITMAP); (BITMAP) = 0; } } while (0)
# 159 "bitmap.h"
#define BITMAP_INIT_ONCE() 




#define EXECUTE_IF_SET_IN_BITMAP(BITMAP,MIN,BITNUM,CODE) do { bitmap_element *ptr_ = (BITMAP)->first; unsigned int indx_ = (MIN) / BITMAP_ELEMENT_ALL_BITS; unsigned bit_num_ = (MIN) % ((unsigned) HOST_BITS_PER_WIDE_INT); unsigned word_num_ = (((MIN) / ((unsigned) HOST_BITS_PER_WIDE_INT)) % BITMAP_ELEMENT_WORDS); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < BITMAP_ELEMENT_WORDS; word_num_++) { unsigned HOST_WIDE_INT word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < HOST_BITS_PER_WIDE_INT; bit_num_++) { unsigned HOST_WIDE_INT mask_ = ((unsigned HOST_WIDE_INT) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (BITNUM) = (ptr_->indx * BITMAP_ELEMENT_ALL_BITS + word_num_ * HOST_BITS_PER_WIDE_INT + bit_num_); CODE; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
# 221 "bitmap.h"
#define EXECUTE_IF_AND_COMPL_IN_BITMAP(BITMAP1,BITMAP2,MIN,BITNUM,CODE) do { bitmap_element *ptr1_ = (BITMAP1)->first; bitmap_element *ptr2_ = (BITMAP2)->first; unsigned int indx_ = (MIN) / BITMAP_ELEMENT_ALL_BITS; unsigned bit_num_ = (MIN) % ((unsigned) HOST_BITS_PER_WIDE_INT); unsigned word_num_ = (((MIN) / ((unsigned) HOST_BITS_PER_WIDE_INT)) % BITMAP_ELEMENT_WORDS); while (ptr1_ != 0 && ptr1_->indx < indx_) ptr1_ = ptr1_->next; if (ptr1_ != 0 && ptr1_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr1_ != 0 ; ptr1_ = ptr1_->next) { bitmap_element *tmp2_; while (ptr2_ != 0 && ptr2_->indx < ptr1_->indx) ptr2_ = ptr2_->next; tmp2_ = ((ptr2_ != 0 && ptr2_->indx == ptr1_->indx) ? ptr2_ : &bitmap_zero_bits); for (; word_num_ < BITMAP_ELEMENT_WORDS; word_num_++) { unsigned HOST_WIDE_INT word_ = (ptr1_->bits[word_num_] & ~ tmp2_->bits[word_num_]); if (word_ != 0) { for (; bit_num_ < HOST_BITS_PER_WIDE_INT; bit_num_++) { unsigned HOST_WIDE_INT mask_ = ((unsigned HOST_WIDE_INT)1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (BITNUM) = (ptr1_->indx * BITMAP_ELEMENT_ALL_BITS + word_num_ * HOST_BITS_PER_WIDE_INT + bit_num_); CODE; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
# 288 "bitmap.h"
#define EXECUTE_IF_AND_IN_BITMAP(BITMAP1,BITMAP2,MIN,BITNUM,CODE) do { bitmap_element *ptr1_ = (BITMAP1)->first; bitmap_element *ptr2_ = (BITMAP2)->first; unsigned int indx_ = (MIN) / BITMAP_ELEMENT_ALL_BITS; unsigned bit_num_ = (MIN) % ((unsigned) HOST_BITS_PER_WIDE_INT); unsigned word_num_ = (((MIN) / ((unsigned) HOST_BITS_PER_WIDE_INT)) % BITMAP_ELEMENT_WORDS); while (ptr1_ != 0 && ptr1_->indx < indx_) ptr1_ = ptr1_->next; if (ptr1_ != 0 && ptr1_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr1_ != 0 ; ptr1_ = ptr1_->next) { while (ptr2_ != 0 && ptr2_->indx < ptr1_->indx) ptr2_ = ptr2_->next; if (ptr2_ == 0) { ptr1_ = (bitmap_element *)0; break; } else if (ptr2_->indx > ptr1_->indx) { bit_num_ = word_num_ = 0; continue; } for (; word_num_ < BITMAP_ELEMENT_WORDS; word_num_++) { unsigned HOST_WIDE_INT word_ = (ptr1_->bits[word_num_] & ptr2_->bits[word_num_]); if (word_ != 0) { for (; bit_num_ < HOST_BITS_PER_WIDE_INT; bit_num_++) { unsigned HOST_WIDE_INT mask_ = ((unsigned HOST_WIDE_INT)1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (BITNUM) = (ptr1_->indx * BITMAP_ELEMENT_ALL_BITS + word_num_ * HOST_BITS_PER_WIDE_INT + bit_num_); CODE; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
# 26 "basic-block.h" 2
# 1 "sbitmap.h" 1
# 22 "sbitmap.h"
#define GCC_SBITMAP_H 





#define SBITMAP_ELT_BITS ((unsigned) HOST_BITS_PER_WIDE_INT)
#define SBITMAP_ELT_TYPE unsigned HOST_WIDE_INT

typedef struct simple_bitmap_def
{
  unsigned int n_bits;
  unsigned int size;
  unsigned int bytes;
  unsigned long elms[1];
} *sbitmap;

typedef unsigned long *sbitmap_ptr;


#define SBITMAP_SET_SIZE(N) (((N) + SBITMAP_ELT_BITS - 1) / SBITMAP_ELT_BITS)


#define SET_BIT(BITMAP,BITNO) ((BITMAP)->elms [(BITNO) / SBITMAP_ELT_BITS] |= (SBITMAP_ELT_TYPE) 1 << (BITNO) % SBITMAP_ELT_BITS)




#define TEST_BIT(BITMAP,BITNO) ((BITMAP)->elms [(BITNO) / SBITMAP_ELT_BITS] >> (BITNO) % SBITMAP_ELT_BITS & 1)



#define RESET_BIT(BITMAP,BITNO) ((BITMAP)->elms [(BITNO) / SBITMAP_ELT_BITS] &= ~((SBITMAP_ELT_TYPE) 1 << (BITNO) % SBITMAP_ELT_BITS))




#define EXECUTE_IF_SET_IN_SBITMAP(SBITMAP,MIN,N,CODE) do { unsigned int word_num_; unsigned int bit_num_ = (MIN) % (unsigned int) SBITMAP_ELT_BITS; unsigned int size_ = (SBITMAP)->size; SBITMAP_ELT_TYPE *ptr_ = (SBITMAP)->elms; for (word_num_ = (MIN) / (unsigned int) SBITMAP_ELT_BITS; word_num_ < size_; word_num_++, bit_num_ = 0) { SBITMAP_ELT_TYPE word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < SBITMAP_ELT_BITS; bit_num_++) { SBITMAP_ELT_TYPE _mask = (SBITMAP_ELT_TYPE) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (N) = word_num_ * SBITMAP_ELT_BITS + bit_num_; CODE; if (word_ == 0) break; } } } } while (0)
# 88 "sbitmap.h"
#define sbitmap_free(MAP) free(MAP)
#define sbitmap_vector_free(VEC) free(VEC)

struct int_list;

extern void dump_sbitmap (FILE *, sbitmap);
extern void dump_sbitmap_vector (FILE *, const char *, const char *, sbitmap *, int)

            ;
extern sbitmap sbitmap_alloc (unsigned int);
extern sbitmap *sbitmap_vector_alloc (unsigned int, unsigned int);
extern void sbitmap_copy (sbitmap, sbitmap);
extern int sbitmap_equal (sbitmap, sbitmap);
extern void sbitmap_zero (sbitmap);
extern void sbitmap_ones (sbitmap);
extern void sbitmap_vector_zero (sbitmap *, unsigned int);
extern void sbitmap_vector_ones (sbitmap *, unsigned int);

extern int sbitmap_union_of_diff (sbitmap, sbitmap, sbitmap, sbitmap)
                ;
extern void sbitmap_difference (sbitmap, sbitmap, sbitmap);
extern void sbitmap_not (sbitmap, sbitmap);
extern int sbitmap_a_or_b_and_c (sbitmap, sbitmap, sbitmap, sbitmap)
                ;
extern int sbitmap_a_and_b_or_c (sbitmap, sbitmap, sbitmap, sbitmap)
                ;
extern int sbitmap_a_and_b (sbitmap, sbitmap, sbitmap);
extern int sbitmap_a_or_b (sbitmap, sbitmap, sbitmap);
extern int sbitmap_a_xor_b (sbitmap, sbitmap, sbitmap);
extern int sbitmap_a_subset_b_p (sbitmap, sbitmap);

extern int sbitmap_first_set_bit (sbitmap);
extern int sbitmap_last_set_bit (sbitmap);

extern void sbitmap_intersect_of_predsucc (sbitmap, sbitmap *, int, struct int_list **)
                                 ;
#define sbitmap_intersect_of_predecessors sbitmap_intersect_of_predsucc
#define sbitmap_intersect_of_successors sbitmap_intersect_of_predsucc

extern void sbitmap_union_of_predsucc (sbitmap, sbitmap *, int, struct int_list **)
                           ;
#define sbitmap_union_of_predecessors sbitmap_union_of_predsucc
#define sbitmap_union_of_successors sbitmap_union_of_predsucc




extern void sbitmap_intersection_of_succs (sbitmap, sbitmap *, int);
extern void sbitmap_intersection_of_preds (sbitmap, sbitmap *, int);
extern void sbitmap_union_of_succs (sbitmap, sbitmap *, int);
extern void sbitmap_union_of_preds (sbitmap, sbitmap *, int);

extern void debug_sbitmap (sbitmap);
# 27 "basic-block.h" 2

# 1 "partition.h" 1
# 37 "partition.h"
#define _PARTITION_H 





# 1 "./ansidecl.h" 1
# 44 "partition.h" 2


struct partition_elem
{


  int class_element;


  struct partition_elem* next;


  unsigned class_count;
};

typedef struct partition_def
{

  int num_elements;

  struct partition_elem elements[1];
} *partition;

extern partition partition_new (int);
extern void partition_delete (partition);
extern int partition_union (partition, int, int)

           ;
extern void partition_print (partition, FILE*)
             ;




#define partition_find(partition__,element__) ((partition__)->elements[(element__)].class_element)
# 29 "basic-block.h" 2


typedef bitmap_head regset_head;

typedef bitmap regset;


#define INIT_REG_SET(HEAD) bitmap_initialize (HEAD)


#define CLEAR_REG_SET(HEAD) bitmap_clear (HEAD)


#define COPY_REG_SET(TO,FROM) bitmap_copy (TO, FROM)


#define REG_SET_EQUAL_P(A,B) bitmap_equal_p (A, B)


#define AND_REG_SET(TO,FROM) bitmap_operation (TO, TO, FROM, BITMAP_AND)


#define AND_COMPL_REG_SET(TO,FROM) bitmap_operation (TO, TO, FROM, BITMAP_AND_COMPL)



#define IOR_REG_SET(TO,FROM) bitmap_operation (TO, TO, FROM, BITMAP_IOR)


#define XOR_REG_SET(TO,FROM) bitmap_operation (TO, TO, FROM, BITMAP_XOR)


#define IOR_AND_COMPL_REG_SET(TO,FROM1,FROM2) bitmap_ior_and_compl (TO, FROM1, FROM2)



#define CLEAR_REGNO_REG_SET(HEAD,REG) bitmap_clear_bit (HEAD, REG)


#define SET_REGNO_REG_SET(HEAD,REG) bitmap_set_bit (HEAD, REG)


#define REGNO_REG_SET_P(TO,REG) bitmap_bit_p (TO, REG)


extern void reg_set_to_hard_reg_set (HARD_REG_ELT_TYPE *, bitmap);
#define REG_SET_TO_HARD_REG_SET(TO,FROM) do { CLEAR_HARD_REG_SET (TO); reg_set_to_hard_reg_set (&TO, FROM); } while (0)







#define EXECUTE_IF_SET_IN_REG_SET(REGSET,MIN,REGNUM,CODE) EXECUTE_IF_SET_IN_BITMAP (REGSET, MIN, REGNUM, CODE)





#define EXECUTE_IF_AND_COMPL_IN_REG_SET(REGSET1,REGSET2,MIN,REGNUM,CODE) EXECUTE_IF_AND_COMPL_IN_BITMAP (REGSET1, REGSET2, MIN, REGNUM, CODE)





#define EXECUTE_IF_AND_IN_REG_SET(REGSET1,REGSET2,MIN,REGNUM,CODE) EXECUTE_IF_AND_IN_BITMAP (REGSET1, REGSET2, MIN, REGNUM, CODE)



#define OBSTACK_ALLOC_REG_SET(OBSTACK) BITMAP_OBSTACK_ALLOC (OBSTACK)


#define INITIALIZE_REG_SET(HEAD) bitmap_initialize (&HEAD)


#define FREE_REG_SET(REGSET) BITMAP_FREE(REGSET)


#define INIT_ONCE_REG_SET() BITMAP_INIT_ONCE ()




#define MAX_REGNO_REG_SET(NUM_REGS,NEW_P,RENUMBER_P) 


typedef long gcov_type;


typedef struct edge_def {

  struct edge_def *pred_next, *succ_next;


  struct basic_block_def *src, *dest;


  rtx insns;


  void *aux;

  int flags;
  int probability;
  gcov_type count;

} *edge;

#define EDGE_FALLTHRU 1
#define EDGE_ABNORMAL 2
#define EDGE_ABNORMAL_CALL 4
#define EDGE_EH 8
#define EDGE_FAKE 16
#define EDGE_DFS_BACK 32

#define EDGE_COMPLEX (EDGE_ABNORMAL | EDGE_ABNORMAL_CALL | EDGE_EH)
# 174 "basic-block.h"
typedef struct basic_block_def {

  rtx head, end;


  tree head_tree;
  tree end_tree;


  edge pred, succ;




  regset local_set;



  regset cond_local_set;





  regset global_live_at_start;

  regset global_live_at_end;


  void *aux;


  int index;


  int loop_depth;


  gcov_type count;


  int frequency;


  int flags;
} *basic_block;

#define BB_FREQ_MAX 10000


#define BB_REACHABLE 1



extern int n_basic_blocks;



extern int n_edges;



extern varray_type basic_block_info;

#define BASIC_BLOCK(N) (VARRAY_BB (basic_block_info, (N)))



extern regset regs_live_at_setjmp;



extern rtx label_value_list, tail_recursion_label_list;

extern struct obstack flow_obstack;
# 257 "basic-block.h"
#define REG_BLOCK_UNKNOWN -1
#define REG_BLOCK_GLOBAL -2

#define REG_BASIC_BLOCK(N) (VARRAY_REG (reg_n_info, N)->basic_block)



#define BLOCK_HEAD(B) (BASIC_BLOCK (B)->head)
#define BLOCK_END(B) (BASIC_BLOCK (B)->end)

#define BLOCK_HEAD_TREE(B) (BASIC_BLOCK (B)->head_tree)
#define BLOCK_END_TREE(B) (BASIC_BLOCK (B)->end_tree)


#define ENTRY_BLOCK (-1)
#define EXIT_BLOCK (-2)


#define INVALID_BLOCK (-3)


extern struct basic_block_def entry_exit_blocks[2];
#define ENTRY_BLOCK_PTR (&entry_exit_blocks[0])
#define EXIT_BLOCK_PTR (&entry_exit_blocks[1])

extern varray_type basic_block_for_insn;
#define BLOCK_FOR_INSN(INSN) VARRAY_BB (basic_block_for_insn, INSN_UID (INSN))
#define BLOCK_NUM(INSN) (BLOCK_FOR_INSN (INSN)->index + 0)

extern void compute_bb_for_insn (int);
extern void free_bb_for_insn (void);
extern void update_bb_for_insn (basic_block);
extern void set_block_for_insn (rtx, basic_block);

extern void free_basic_block_vars (int);

extern edge split_block (basic_block, rtx);
extern basic_block split_edge (edge);
extern void insert_insn_on_edge (rtx, edge);
extern void commit_edge_insertions (void);
extern void remove_fake_edges (void);
extern void add_noreturn_fake_exit_edges (void);
extern void connect_infinite_loops_to_exit (void);
extern int flow_call_edges_add (sbitmap);
extern edge cached_make_edge (sbitmap *, basic_block, basic_block, int)
                         ;
extern edge make_edge (basic_block, basic_block, int)
                         ;
extern edge make_single_succ_edge (basic_block, basic_block, int)
                         ;
extern void remove_edge (edge);
extern void redirect_edge_succ (edge, basic_block);
extern edge redirect_edge_succ_nodup (edge, basic_block);
extern void redirect_edge_pred (edge, basic_block);
extern basic_block create_basic_block_structure (int, rtx, rtx, rtx);
extern basic_block create_basic_block (int, rtx, rtx);
extern int flow_delete_block (basic_block);
extern int flow_delete_block_noexpunge (basic_block);
extern void merge_blocks_nomove (basic_block, basic_block);
extern void tidy_fallthru_edge (edge, basic_block, basic_block)
                    ;
extern void tidy_fallthru_edges (void);
extern void flow_reverse_top_sort_order_compute (int *);
extern int flow_depth_first_order_compute (int *, int *);
extern void flow_preorder_transversal_compute (int *);
extern void dump_edge_info (FILE *, edge, int);
extern void clear_edges (void);
extern void mark_critical_edges (void);
extern rtx first_insn_after_basic_block_note (basic_block);


struct loop
{

  int num;


  basic_block header;


  basic_block latch;


  basic_block pre_header;




  edge *pre_header_edges;


  int num_pre_header_edges;



  basic_block first;



  basic_block last;


  sbitmap nodes;


  int num_nodes;


  edge *entry_edges;


  int num_entries;


  edge *exit_edges;


  int num_exits;


  sbitmap exits_doms;


  int depth;



  int level;


  struct loop *outer;


  struct loop *inner;


  struct loop *next;


  int shared;


  int invalid;


  void *aux;





  rtx vtop;



  rtx cont;


  rtx cont_dominator;


  rtx start;


  rtx end;



  rtx top;


  rtx scan_start;


  rtx sink;
# 442 "basic-block.h"
  rtx exit_labels;



  int exit_count;
};



struct loops
{

  int num;


  int levels;



  struct loop *array;


  struct loop *tree_root;


  struct cfg
  {

    sbitmap *dom;


    int *dfs_order;



    int *rc_order;
  } cfg;


  sbitmap shared_headers;
};

extern int flow_loops_find (struct loops *, int flags);
extern int flow_loops_update (struct loops *, int flags);
extern void flow_loops_free (struct loops *);
extern void flow_loops_dump (const struct loops *, FILE *, void (*)(const struct loop *, FILE *, int), int)

                              ;
extern void flow_loop_dump (const struct loop *, FILE *, void (*)(const struct loop *, FILE *, int), int)

                             ;
extern int flow_loop_scan (struct loops *, struct loop *, int);


struct edge_list
{
  int num_blocks;
  int num_edges;
  edge *index_to_edge;
};


#define EDGE_INDEX_NO_EDGE -1



#define EDGE_INDEX(el,pred,succ) (find_edge_index ((el), (pred), (succ)))



#define INDEX_EDGE_PRED_BB(el,index) ((el)->index_to_edge[(index)]->src)
#define INDEX_EDGE_SUCC_BB(el,index) ((el)->index_to_edge[(index)]->dest)


#define INDEX_EDGE(el,index) ((el)->index_to_edge[(index)])


#define NUM_EDGES(el) ((el)->num_edges)


#define FALLTHRU_EDGE(bb) ((bb)->succ->flags & EDGE_FALLTHRU ? (bb)->succ : (bb)->succ->succ_next)



#define BRANCH_EDGE(bb) ((bb)->succ->flags & EDGE_FALLTHRU ? (bb)->succ->succ_next : (bb)->succ)



#define EDGE_FREQUENCY(e) (((e)->src->frequency * (e)->probability + REG_BR_PROB_BASE / 2) / REG_BR_PROB_BASE)





#define EDGE_CRITICAL_P(e) ((e)->src->succ->succ_next && (e)->dest->pred->pred_next)


struct edge_list * create_edge_list (void);
void free_edge_list (struct edge_list *);
void print_edge_list (FILE *, struct edge_list *);
void verify_edge_list (FILE *, struct edge_list *);
int find_edge_index (struct edge_list *, basic_block, basic_block)
                                 ;


enum update_life_extent
{
  UPDATE_LIFE_LOCAL = 0,
  UPDATE_LIFE_GLOBAL = 1,
  UPDATE_LIFE_GLOBAL_RM_NOTES = 2
};



#define PROP_DEATH_NOTES 1
#define PROP_LOG_LINKS 2
#define PROP_REG_INFO 4
#define PROP_KILL_DEAD_CODE 8
#define PROP_SCAN_DEAD_CODE 16
#define PROP_ALLOW_CFG_CHANGES 32

#define PROP_AUTOINC 64
#define PROP_EQUAL_NOTES 128
#define PROP_FINAL 127

#define CLEANUP_EXPENSIVE 1

#define CLEANUP_CROSSJUMP 2
#define CLEANUP_POST_REGSTACK 4

#define CLEANUP_PRE_SIBCALL 8

#define CLEANUP_PRE_LOOP 16

#define CLEANUP_UPDATE_LIFE 32
#define CLEANUP_THREADING 64


#define LOOP_TREE 1
#define LOOP_PRE_HEADER 2
#define LOOP_ENTRY_EDGES 4
#define LOOP_EXIT_EDGES 8
#define LOOP_EDGES (LOOP_ENTRY_EDGES | LOOP_EXIT_EDGES)
#define LOOP_EXITS_DOMS 16
#define LOOP_ALL 31

extern void life_analysis (rtx, FILE *, int);
extern void update_life_info (sbitmap, enum update_life_extent, int)
           ;
extern int count_or_remove_death_notes (sbitmap, int);
extern int propagate_block (basic_block, regset, regset, regset, int)
           ;

struct propagate_block_info;
extern rtx propagate_one_insn (struct propagate_block_info *, rtx);
extern struct propagate_block_info *init_propagate_block_info
  (basic_block, regset, regset, regset, int);
extern void free_propagate_block_info (struct propagate_block_info *);


extern struct edge_list *pre_edge_lcm (FILE *, int, sbitmap *, sbitmap *, sbitmap *, sbitmap *, sbitmap **, sbitmap **)


                   ;
extern struct edge_list *pre_edge_rev_lcm (FILE *, int, sbitmap *, sbitmap *, sbitmap *, sbitmap *, sbitmap **, sbitmap **)


                     ;
extern void compute_available (sbitmap *, sbitmap *, sbitmap *, sbitmap *)
                             ;
extern int optimize_mode_switching (FILE *);


extern rtx emit_block_insn_after (rtx, rtx, basic_block);
extern rtx emit_block_insn_before (rtx, rtx, basic_block);


extern void estimate_probability (struct loops *);
extern void expected_value_to_br_prob (void);


extern void init_flow (void);
extern void reorder_basic_blocks (void);
extern void dump_bb (basic_block, FILE *);
extern void debug_bb (basic_block);
extern void debug_bb_n (int);
extern void dump_regset (regset, FILE *);
extern void debug_regset (regset);
extern void allocate_reg_life_data (void);
extern void allocate_bb_life_data (void);
extern void expunge_block (basic_block);
extern void expunge_block_nocompact (basic_block);
extern basic_block alloc_block (void);
extern void find_unreachable_blocks (void);
extern void delete_noop_moves (rtx);
extern basic_block redirect_edge_and_branch_force (edge, basic_block);
extern basic_block force_nonfallthru (edge);
extern _Bool redirect_edge_and_branch (edge, basic_block);
extern rtx block_label (basic_block);
extern _Bool forwarder_block_p (basic_block);
extern _Bool purge_all_dead_edges (int);
extern _Bool purge_dead_edges (basic_block);
extern void find_sub_basic_blocks (basic_block);
extern void find_many_sub_basic_blocks (sbitmap);
extern _Bool can_fallthru (basic_block, basic_block);
extern void flow_nodes_print (const char *, const sbitmap, FILE *)
               ;
extern void flow_edge_list_print (const char *, const edge *, int, FILE *)
                    ;
extern void alloc_aux_for_block (basic_block, int);
extern void alloc_aux_for_blocks (int);
extern void clear_aux_for_blocks (void);
extern void free_aux_for_blocks (void);



static



       void alloc_aux_for_edge (edge, int);
extern void alloc_aux_for_edges (int);
extern void clear_aux_for_edges (void);
extern void free_aux_for_edges (void);




extern void verify_flow_info (void);
extern int flow_loop_outside_edge_p (const struct loop *, edge);

typedef struct conflict_graph_def *conflict_graph;




typedef int (*conflict_graph_enum_fn) (int, int, void *);




extern conflict_graph conflict_graph_new
                                        (int);
extern void conflict_graph_delete (conflict_graph);
extern int conflict_graph_add (conflict_graph, int, int)
                 ;
extern int conflict_graph_conflict_p (conflict_graph, int, int)
                 ;
extern void conflict_graph_enum (conflict_graph, int, conflict_graph_enum_fn, void *)

               ;
extern void conflict_graph_merge_regs (conflict_graph, int, int)
            ;
extern void conflict_graph_print (conflict_graph, FILE*);
extern conflict_graph conflict_graph_compute
                                        (regset, partition)
                  ;
extern _Bool mark_dfs_back_edges (void);
extern void update_br_prob_note (basic_block);
extern void fixup_abnormal_edges (void);



enum cdi_direction
{
  CDI_DOMINATORS,
  CDI_POST_DOMINATORS
};

extern void calculate_dominance_info (int *, sbitmap *, enum cdi_direction)
                           ;
# 31 "regrename.c" 2
# 1 "reload.h" 1
# 35 "reload.h"
#define HAVE_SECONDARY_RELOADS 
# 47 "reload.h"
extern int memory_move_secondary_cost (enum machine_mode, enum reg_class, int);


#define MAX_RELOADS (2 * MAX_RECOG_OPERANDS * (MAX_REGS_PER_ADDRESS + 1))
# 76 "reload.h"
enum reload_type
{
  RELOAD_FOR_INPUT, RELOAD_FOR_OUTPUT, RELOAD_FOR_INSN,
  RELOAD_FOR_INPUT_ADDRESS, RELOAD_FOR_INPADDR_ADDRESS,
  RELOAD_FOR_OUTPUT_ADDRESS, RELOAD_FOR_OUTADDR_ADDRESS,
  RELOAD_FOR_OPERAND_ADDRESS, RELOAD_FOR_OPADDR_ADDR,
  RELOAD_OTHER, RELOAD_FOR_OTHER_ADDRESS
};
# 167 "reload.h"
extern rtx *reg_equiv_constant;
extern rtx *reg_equiv_memory_loc;
extern rtx *reg_equiv_address;
extern rtx *reg_equiv_mem;



extern int n_earlyclobbers;
extern rtx reload_earlyclobbers[30];


extern int reload_n_operands;



extern int reload_first_uid;





extern char indirect_symref_ok;


extern char double_reg_address_ok;

extern int num_not_at_initial_offset;

struct needs
{

  short regs[2][((int) LIM_REG_CLASSES)];
  short groups[((int) LIM_REG_CLASSES)];
};





struct insn_chain
{

  struct insn_chain *next, *prev;



  struct insn_chain *next_need_reload;


  int block;

  rtx insn;


  regset_head live_throughout;
  regset_head dead_or_set;


  struct reload *rld;
  int n_reloads;


  HARD_REG_ELT_TYPE used_spill_regs;


  struct needs need;


  unsigned int need_reload:1;


  unsigned int need_operand_change:1;

  unsigned int need_elim:1;

  unsigned int is_caller_save_insn:1;
};



extern struct insn_chain *reload_insn_chain;


extern struct insn_chain *new_insn_chain (void);

extern void compute_use_by_pseudos (HARD_REG_ELT_TYPE *, regset);







extern rtx get_secondary_mem (rtx, enum machine_mode, int, enum reload_type)
                               ;


extern void clear_secondary_mem (void);



extern void transfer_replacements (int, int);





extern int remove_address_replacements (rtx in_rtx);




extern int operands_match_p (rtx, rtx);


extern int safe_from_earlyclobber (rtx, rtx);




extern int find_reloads (rtx, int, int, int, short *);





extern rtx form_sum (rtx, rtx);



extern void subst_reloads (rtx);




extern void copy_replacements (rtx, rtx);


extern void move_replacements (rtx *x, rtx *y);



extern rtx find_replacement (rtx *);




extern int refers_to_regno_for_reload_p (unsigned int, unsigned int, rtx, rtx *)
                   ;


extern int reg_overlap_mentioned_for_reload_p (rtx, rtx);



extern int refers_to_mem_for_reload_p (rtx);



extern rtx find_equiv_reg (rtx, rtx, enum reg_class, int, short *, int, enum machine_mode)
                             ;


extern int regno_clobbered_p (unsigned int, rtx, enum machine_mode, int)
               ;


extern int earlyclobber_operand_p (rtx);


extern int push_reload (rtx, rtx, rtx *, rtx *, enum reg_class, enum machine_mode, enum machine_mode, int, int, int, enum reload_type)

                                     ;



extern void reload_cse_regs (rtx);
extern int reloads_conflict (int, int);


extern void init_reload (void);


extern int reload (rtx, int);



extern void mark_home_live (int);



extern rtx eliminate_regs (rtx, enum machine_mode, rtx);




extern rtx gen_reload (rtx, rtx, int, enum reload_type);


extern void deallocate_reload_reg (int r);




extern void init_caller_save (void);


extern void init_save_areas (void);


extern void setup_save_areas (void);


extern void save_call_clobbered_regs (void);


extern void cleanup_subreg_operands (rtx);


extern void debug_reload_to_stream (FILE *);
extern void debug_reload (void);
# 32 "regrename.c" 2
# 1 "output.h" 1
# 24 "output.h"
extern void compute_alignments (void);


extern void init_final (const char *);



extern void end_final (const char *);



extern void app_enable (void);



extern void app_disable (void);




extern int dbr_sequence_length (void);


extern void init_insn_lengths (void);




extern int get_attr_length (rtx);



extern void shorten_branches (rtx);






extern void final_start_function (rtx, FILE *, int);




extern void final_end_function (void);


extern void final (rtx, FILE *, int, int);




extern rtx final_scan_insn (rtx, FILE *, int, int, int);



extern rtx alter_subreg (rtx *);



extern void output_operand_lossage (const char *, ...) __attribute__ ((__format__ (__printf__, 1, 2)));



extern void output_asm_insn (const char *, rtx *);




extern int insn_current_reference_address (rtx);



extern int label_to_alignment (rtx);


extern void output_asm_label (rtx);



extern void output_address (rtx);




extern void output_addr_const (FILE *, rtx);



extern void asm_fprintf (FILE *file, const char *p, ...);



extern void split_double (rtx, rtx *, rtx *);


extern int leaf_function_p (void);




extern int final_forward_branch_p (rtx);



extern int only_leaf_regs_used (void);



extern void leaf_renumber_regs_insn (rtx);


extern const char *get_insn_template (int, rtx);



extern int add_weak (const char *, const char *);


extern void allocate_for_life_analysis (void);
extern int regno_uninitialized (unsigned int);
extern int regno_clobbered_at_setjmp (int);
extern void find_basic_blocks (rtx, int, FILE *);
extern _Bool cleanup_cfg (int);
extern void check_function_return_warnings (void);





extern void text_section (void);


extern void data_section (void);


extern void force_data_section (void);



extern void readonly_data_section (void);


extern int in_text_section (void);
# 178 "output.h"
extern void bss_section (void);



extern void const_section (void);



extern void init_section (void);



extern void fini_section (void);
# 239 "output.h"
extern void weak_finish (void);
# 248 "output.h"
extern int decode_reg_name (const char *);
# 292 "output.h"
extern void assemble_zeros (int);


extern void assemble_align (int);
extern void assemble_eh_align (int);


extern void assemble_string (const char *, int);



extern void assemble_external_libcall (rtx);



extern void assemble_global (const char *);


extern void assemble_label (const char *);
extern void assemble_eh_label (const char *);






extern void assemble_name (FILE *, const char *);
# 327 "output.h"
extern const char *integer_asm_op (int, int);




extern void assemble_integer_with_op (const char *, rtx);


extern _Bool default_assemble_integer (rtx, unsigned int, int);





extern _Bool assemble_integer (rtx, unsigned, unsigned, int);




#define assemble_aligned_integer(SIZE,VALUE) assemble_integer (VALUE, SIZE, (SIZE) * BITS_PER_UNIT, 1)
# 360 "output.h"
extern void clear_const_double_mem (void);


extern void defer_addressed_constants (void);



extern void output_deferred_addressed_constants (void);


extern int get_pool_size (void);
# 410 "output.h"
extern rtx final_sequence;
# 423 "output.h"
extern FILE *asm_out_file;



extern const char *first_global_object_name;


extern const char *weak_global_object_name;






extern int current_function_is_leaf;




extern int current_function_nothrow;





extern int current_function_sp_is_unchanging;





extern int current_function_uses_only_leaf_regs;




extern FILE *rtl_dump_file;



extern struct rtx_def *current_insn_predicate;


extern struct rtx_def *current_output_insn;




#define DECL_READONLY_SECTION(DECL,RELOC) (TREE_READONLY (DECL) && ! TREE_THIS_VOLATILE (DECL) && DECL_INITIAL (DECL) && (DECL_INITIAL (DECL) == error_mark_node || TREE_CONSTANT (DECL_INITIAL (DECL))) && ! (RELOC && (flag_pic || DECL_ONE_ONLY (DECL))))
# 480 "output.h"
extern const char *user_label_prefix;





#define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) (VAR) = ((SYMBOL_NAME) + ((SYMBOL_NAME)[0] == '*'))




extern void default_function_pro_epilogue (FILE *, long);


extern void default_exception_section (void);


extern void default_eh_frame_section (void);


extern void no_asm_to_stream (FILE *);


#define SECTION_ENTSIZE 0x000ff
#define SECTION_CODE 0x00100
#define SECTION_WRITE 0x00200
#define SECTION_DEBUG 0x00400
#define SECTION_LINKONCE 0x00800
#define SECTION_SMALL 0x01000
#define SECTION_BSS 0x02000
#define SECTION_FORGET 0x04000
#define SECTION_MERGE 0x08000
#define SECTION_STRINGS 0x10000

#define SECTION_OVERRIDE 0x20000
#define SECTION_MACH_DEP 0x40000

extern unsigned int get_named_section_flags (const char *);
extern _Bool set_named_section_flags (const char *, unsigned int);
extern void named_section_flags (const char *, unsigned int);
extern _Bool named_section_first_declaration (const char *);

union tree_node;
extern unsigned int default_section_type_flags (union tree_node *, const char *, int)
                          ;

extern void default_no_named_section (const char *, unsigned int);
extern void default_elf_asm_named_section (const char *, unsigned int);
extern void default_coff_asm_named_section (const char *, unsigned int)
                        ;
extern void default_pe_asm_named_section (const char *, unsigned int);

extern void default_stabs_asm_out_destructor (struct rtx_def *, int);
extern void default_named_section_asm_out_destructor (struct rtx_def *, int)
                  ;
extern void default_dtor_section_asm_out_destructor (struct rtx_def *, int)
                 ;
extern void default_stabs_asm_out_constructor (struct rtx_def *, int);
extern void default_named_section_asm_out_constructor (struct rtx_def *, int)
                   ;
extern void default_ctor_section_asm_out_constructor (struct rtx_def *, int)
                  ;


extern void assemble_vtable_entry (struct rtx_def *, long);
extern void assemble_vtable_inherit (struct rtx_def *, struct rtx_def *)
                            ;
# 33 "regrename.c" 2
# 1 "function.h" 1
# 22 "function.h"
struct var_refs_queue
{
  rtx modified;
  enum machine_mode promoted_mode;
  int unsignedp;
  struct var_refs_queue *next;
};






struct sequence_stack
{

  rtx first, last;
  tree sequence_rtl_expr;
  struct sequence_stack *next;
};

extern struct sequence_stack *sequence_stack;



struct simple_obstack_stack
{
  struct obstack *obstack;
  struct simple_obstack_stack *next;
};

struct emit_status
{


  int x_reg_rtx_no;


  int x_first_label_num;






  rtx x_first_insn;
  rtx x_last_insn;




  tree sequence_rtl_expr;





  struct sequence_stack *sequence_stack;



  int x_cur_insn_uid;



  int x_last_linenum;
  const char *x_last_filename;





  int regno_pointer_align_length;




  unsigned char *regno_pointer_align;



  tree *regno_decl;



  rtx *x_regno_reg_rtx;
};


#define reg_rtx_no (cfun->emit->x_reg_rtx_no)
#define seq_rtl_expr (cfun->emit->sequence_rtl_expr)
#define regno_reg_rtx (cfun->emit->x_regno_reg_rtx)
#define seq_stack (cfun->emit->sequence_stack)

#define REGNO_POINTER_ALIGN(REGNO) (cfun->emit->regno_pointer_align[REGNO])
#define REGNO_DECL(REGNO) (cfun->emit->regno_decl[REGNO])

struct expr_status
{


  int x_pending_stack_adjust;
# 140 "function.h"
  int x_inhibit_defer_pop;





  int x_stack_pointer_delta;




  rtx x_saveregs_value;


  rtx x_apply_args_value;


  rtx x_forced_labels;


  rtx x_pending_chain;
};

#define pending_stack_adjust (cfun->expr->x_pending_stack_adjust)
#define inhibit_defer_pop (cfun->expr->x_inhibit_defer_pop)
#define saveregs_value (cfun->expr->x_saveregs_value)
#define apply_args_value (cfun->expr->x_apply_args_value)
#define forced_labels (cfun->expr->x_forced_labels)
#define pending_chain (cfun->expr->x_pending_chain)
#define stack_pointer_delta (cfun->expr->x_stack_pointer_delta)




struct function
{
  struct eh_status *eh;
  struct stmt_status *stmt;
  struct expr_status *expr;
  struct emit_status *emit;
  struct varasm_status *varasm;




  const char *name;


  tree decl;


  struct function *outer;




  int pops_args;




  int args_size;




  int pretend_args_size;



  int outgoing_args_size;



  rtx arg_offset_rtx;



  CUMULATIVE_ARGS args_info;





  rtx return_rtx;


  rtx internal_arg_pointer;



  const char *cannot_inline;



  struct initial_value_struct *hard_reg_initial_vals;


  int x_function_call_count;




  tree x_nonlocal_labels;





  rtx x_nonlocal_goto_handler_slots;



  rtx x_nonlocal_goto_handler_labels;




  rtx x_nonlocal_goto_stack_level;





  rtx x_cleanup_label;




  rtx x_return_label;



  rtx x_save_expr_regs;



  rtx x_stack_slot_list;


  tree x_rtl_expr_chain;



  rtx x_tail_recursion_label;


  rtx x_tail_recursion_reentry;





  rtx x_arg_pointer_save_area;




  rtx x_clobber_return_insn;




  long x_frame_offset;




  tree x_context_display;
# 317 "function.h"
  tree x_trampoline_list;


  rtx x_parm_birth_insn;



  rtx x_last_parm_insn;



  unsigned int x_max_parm_reg;





  rtx *x_parm_reg_stack_loc;


  struct temp_slot *x_temp_slots;


  int x_temp_slot_level;


  int x_var_temp_slot_level;





  int x_target_temp_slot_level;



  struct var_refs_queue *fixup_var_refs_queue;


  int inlinable;
  int no_debugging_symbols;

  void *original_arg_vector;
  tree original_decl_initial;


  rtx inl_last_parm_insn;

  int inl_max_label_num;


  int profile_label_no;




  struct machine_function *machine;

  int stack_alignment_needed;

  int preferred_stack_boundary;


  struct language_function *language;





  rtx epilogue_delay_list;





  unsigned int returns_struct : 1;



  unsigned int returns_pcc_struct : 1;


  unsigned int returns_pointer : 1;


  unsigned int needs_context : 1;


  unsigned int calls_setjmp : 1;


  unsigned int calls_longjmp : 1;



  unsigned int calls_alloca : 1;


  unsigned int calls_eh_return : 1;



  unsigned int has_nonlocal_label : 1;



  unsigned int has_nonlocal_goto : 1;


  unsigned int contains_functions : 1;


  unsigned int has_computed_jump : 1;




  unsigned int is_thunk : 1;



  unsigned int instrument_entry_exit : 1;


  unsigned int profile : 1;



  unsigned int limit_stack : 1;



  unsigned int varargs : 1;



  unsigned int stdarg : 1;





  unsigned int x_whole_function_mode_p : 1;
# 468 "function.h"
  unsigned int x_dont_save_pending_sizes_p : 1;


  unsigned int uses_const_pool : 1;


  unsigned int uses_pic_offset_table : 1;


  unsigned int uses_eh_lsda : 1;


  unsigned int arg_pointer_save_area_init : 1;
};


extern struct function *cfun;


extern int virtuals_instantiated;


#define current_function_name (cfun->name)
#define current_function_pops_args (cfun->pops_args)
#define current_function_returns_struct (cfun->returns_struct)
#define current_function_returns_pcc_struct (cfun->returns_pcc_struct)
#define current_function_returns_pointer (cfun->returns_pointer)
#define current_function_needs_context (cfun->needs_context)
#define current_function_calls_setjmp (cfun->calls_setjmp)
#define current_function_calls_alloca (cfun->calls_alloca)
#define current_function_calls_longjmp (cfun->calls_longjmp)
#define current_function_calls_eh_return (cfun->calls_eh_return)
#define current_function_has_computed_jump (cfun->has_computed_jump)
#define current_function_contains_functions (cfun->contains_functions)
#define current_function_is_thunk (cfun->is_thunk)
#define current_function_args_info (cfun->args_info)
#define current_function_args_size (cfun->args_size)
#define current_function_pretend_args_size (cfun->pretend_args_size)
#define current_function_outgoing_args_size (cfun->outgoing_args_size)
#define current_function_arg_offset_rtx (cfun->arg_offset_rtx)
#define current_function_varargs (cfun->varargs)
#define current_function_stdarg (cfun->stdarg)
#define current_function_internal_arg_pointer (cfun->internal_arg_pointer)
#define current_function_return_rtx (cfun->return_rtx)
#define current_function_instrument_entry_exit (cfun->instrument_entry_exit)
#define current_function_profile (cfun->profile)
#define current_function_profile_label_no (cfun->profile_label_no)
#define current_function_limit_stack (cfun->limit_stack)
#define current_function_uses_pic_offset_table (cfun->uses_pic_offset_table)
#define current_function_uses_const_pool (cfun->uses_const_pool)
#define current_function_cannot_inline (cfun->cannot_inline)
#define current_function_epilogue_delay_list (cfun->epilogue_delay_list)
#define current_function_has_nonlocal_label (cfun->has_nonlocal_label)
#define current_function_has_nonlocal_goto (cfun->has_nonlocal_goto)

#define max_parm_reg (cfun->x_max_parm_reg)
#define parm_reg_stack_loc (cfun->x_parm_reg_stack_loc)
#define cleanup_label (cfun->x_cleanup_label)
#define return_label (cfun->x_return_label)
#define save_expr_regs (cfun->x_save_expr_regs)
#define stack_slot_list (cfun->x_stack_slot_list)
#define parm_birth_insn (cfun->x_parm_birth_insn)
#define frame_offset (cfun->x_frame_offset)
#define tail_recursion_label (cfun->x_tail_recursion_label)
#define tail_recursion_reentry (cfun->x_tail_recursion_reentry)
#define arg_pointer_save_area (cfun->x_arg_pointer_save_area)
#define rtl_expr_chain (cfun->x_rtl_expr_chain)
#define last_parm_insn (cfun->x_last_parm_insn)
#define context_display (cfun->x_context_display)
#define trampoline_list (cfun->x_trampoline_list)
#define function_call_count (cfun->x_function_call_count)
#define temp_slots (cfun->x_temp_slots)
#define temp_slot_level (cfun->x_temp_slot_level)
#define target_temp_slot_level (cfun->x_target_temp_slot_level)
#define var_temp_slot_level (cfun->x_var_temp_slot_level)
#define nonlocal_labels (cfun->x_nonlocal_labels)
#define nonlocal_goto_handler_slots (cfun->x_nonlocal_goto_handler_slots)
#define nonlocal_goto_handler_labels (cfun->x_nonlocal_goto_handler_labels)
#define nonlocal_goto_stack_level (cfun->x_nonlocal_goto_stack_level)


extern tree inline_function_decl;



struct function *find_function_data (tree);


extern void identify_blocks (void);



extern void reorder_blocks (void);


extern void number_blocks (tree);




extern long get_frame_size (void);

extern long get_func_frame_size (struct function *);



extern void (*init_machine_status) (struct function *);
extern void (*free_machine_status) (struct function *);



extern void (*mark_machine_status) (struct function *);


extern void (*init_lang_status) (struct function *);
extern void (*mark_lang_status) (struct function *);
extern void (*save_lang_status) (struct function *);
extern void (*restore_lang_status) (struct function *);
extern void (*free_lang_status) (struct function *);


extern void restore_emit_status (struct function *);
extern void free_after_parsing (struct function *);
extern void free_after_compilation (struct function *);

extern void init_varasm_status (struct function *);
extern void free_varasm_status (struct function *);
extern void free_emit_status (struct function *);
extern void free_stmt_status (struct function *);
extern void free_eh_status (struct function *);
extern void free_expr_status (struct function *);

extern rtx get_first_block_beg (void);


extern void diddle_return_value (void (*)(rtx, void*), void*);
extern void clobber_return_register (void);
extern void use_return_register (void);


extern rtx get_arg_pointer_save_area (struct function *);

extern void init_virtual_regs (struct emit_status *);


extern void init_function_once (void);
# 34 "regrename.c" 2
# 1 "recog.h" 1
# 23 "recog.h"
#define MAX_RECOG_ALTERNATIVES 30
#define recog_memoized(I) (INSN_CODE (I) >= 0 ? INSN_CODE (I) : recog_memoized_1 (I))



enum op_type {
  OP_IN,
  OP_OUT,
  OP_INOUT
};

struct operand_alternative
{


  const char *constraint;


  enum reg_class class;



  unsigned int reject;


  int matches;



  int matched;


  unsigned int earlyclobber:1;

  unsigned int memory_ok:1;

  unsigned int offmem_ok:1;

  unsigned int nonoffmem_ok:1;

  unsigned int decmem_ok:1;

  unsigned int incmem_ok:1;

  unsigned int is_address:1;


  unsigned int anything_ok:1;
};


extern void init_recog (void);
extern void init_recog_no_volatile (void);
extern int recog_memoized_1 (rtx);
extern int check_asm_operands (rtx);
extern int asm_operand_ok (rtx, const char *);
extern int validate_change (rtx, rtx *, rtx, int);
extern int insn_invalid_p (rtx);
extern int apply_change_group (void);
extern int num_validated_changes (void);
extern void cancel_changes (int);
extern int constrain_operands (int);
extern int constrain_operands_cached (int);
extern int memory_address_p (enum machine_mode, rtx);
extern int strict_memory_address_p (enum machine_mode, rtx);
extern int validate_replace_rtx_subexp (rtx, rtx, rtx, rtx *);
extern int validate_replace_rtx (rtx, rtx, rtx);
extern void validate_replace_rtx_group (rtx, rtx, rtx);
extern int validate_replace_src (rtx, rtx, rtx);



extern int reg_fits_class_p (rtx, enum reg_class, int, enum machine_mode)
                               ;
extern rtx *find_single_use (rtx, rtx, rtx *);

extern int general_operand (rtx, enum machine_mode);
extern int address_operand (rtx, enum machine_mode);
extern int register_operand (rtx, enum machine_mode);
extern int pmode_register_operand (rtx, enum machine_mode);
extern int scratch_operand (rtx, enum machine_mode);
extern int immediate_operand (rtx, enum machine_mode);
extern int const_int_operand (rtx, enum machine_mode);
extern int const_double_operand (rtx, enum machine_mode);
extern int nonimmediate_operand (rtx, enum machine_mode);
extern int nonmemory_operand (rtx, enum machine_mode);
extern int push_operand (rtx, enum machine_mode);
extern int pop_operand (rtx, enum machine_mode);
extern int memory_operand (rtx, enum machine_mode);
extern int indirect_operand (rtx, enum machine_mode);
extern int mode_independent_operand (rtx, enum machine_mode);
extern int comparison_operator (rtx, enum machine_mode);

extern int offsettable_memref_p (rtx);
extern int offsettable_nonstrict_memref_p (rtx);
extern int offsettable_address_p (int, enum machine_mode, rtx);
extern int mode_dependent_address_p (rtx);

extern int recog (rtx, rtx, int *);
extern void add_clobbers (rtx, int);
extern int added_clobbers_hard_reg_p (int);
extern void insn_extract (rtx);
extern void extract_insn (rtx);
extern void extract_constrain_insn_cached (rtx);
extern void extract_insn_cached (rtx);
extern void preprocess_constraints (void);
extern rtx peep2_next_insn (int);
extern int peep2_regno_dead_p (int, int);
extern int peep2_reg_dead_p (int, rtx);

extern rtx peep2_find_free_register (int, int, const char *, enum machine_mode, HARD_REG_ELT_TYPE *)

                       ;

extern void peephole2_optimize (FILE *);
extern rtx peephole2_insns (rtx, rtx, int *);


extern int volatile_ok;



extern int which_alternative;



struct recog_data
{







  rtx operand[30];


  rtx *operand_loc[30];


  const char *constraints[30];


  enum machine_mode operand_mode[30];


  enum op_type operand_type[30];



  rtx *dup_loc[4];



  char dup_num[4];
# 191 "recog.h"
  char n_operands;


  char n_dups;


  char n_alternatives;


  rtx insn;
};

extern struct recog_data recog_data;



extern struct operand_alternative recog_op_alt[30][30];




typedef int (*insn_operand_predicate_fn) (rtx, enum machine_mode);
typedef const char * (*insn_output_fn) (rtx *, rtx);
typedef rtx (*insn_gen_fn) (rtx, ...);

struct insn_operand_data
{
  const insn_operand_predicate_fn predicate;

  const char *const constraint;

  const unsigned int mode : 16;

  const char strict_low;

  const char eliminable;
};



#define INSN_OUTPUT_FORMAT_NONE 0
#define INSN_OUTPUT_FORMAT_SINGLE 1
#define INSN_OUTPUT_FORMAT_MULTI 2
#define INSN_OUTPUT_FORMAT_FUNCTION 3

struct insn_data
{
  const char *const name;
  const void * output;
  const insn_gen_fn genfun;
  const struct insn_operand_data *const operand;

  const char n_operands;
  const char n_dups;
  const char n_alternatives;
  const char output_format;
};

extern const struct insn_data insn_data[];
# 35 "regrename.c" 2
# 1 "flags.h" 1
# 23 "flags.h"
#define GCC_FLAGS_H 


extern const char *main_input_filename;

enum debug_info_type
{
  NO_DEBUG,
  DBX_DEBUG,
  SDB_DEBUG,
  DWARF_DEBUG,
  DWARF2_DEBUG,
  XCOFF_DEBUG,
  VMS_DEBUG,
  VMS_AND_DWARF2_DEBUG

};


extern enum debug_info_type write_symbols;

enum debug_info_level
{
  DINFO_LEVEL_NONE,
  DINFO_LEVEL_TERSE,
  DINFO_LEVEL_NORMAL,
  DINFO_LEVEL_VERBOSE
};


extern enum debug_info_level debug_info_level;



extern int use_gnu_debug_info_extensions;



extern int optimize;



extern int optimize_size;




extern int quiet_flag;



extern int time_report;




extern int mem_report;



extern int inhibit_warnings;



extern int warn_system_headers;



extern int extra_warnings;





extern void set_Wunused (int setting);

extern int warn_unused_function;
extern int warn_unused_label;
extern int warn_unused_parameter;
extern int warn_unused_variable;
extern int warn_unused_value;



extern int warn_notreached;



extern int warn_inline;



extern int warn_uninitialized;







extern int warn_unknown_pragmas;



extern int warn_shadow;



extern int warn_switch;




extern int warn_return_type;



extern int warn_missing_noreturn;





extern int warn_cast_align;





extern int warn_larger_than;
extern long larger_than_size;




extern int warn_aggregate_return;



extern int warn_packed;



extern int warn_padded;



extern int warn_disabled_optimization;




extern int warn_deprecated_decl;



extern int profile_flag;



extern int profile_arc_flag;



extern int flag_test_coverage;



extern int flag_branch_probabilities;



extern int flag_reorder_blocks;



extern int flag_rename_registers;




extern int pedantic;




extern int in_system_header;




extern int flag_print_asm_name;





extern int flag_signed_char;



extern int flag_short_enums;





extern int flag_caller_saves;



extern int flag_pcc_struct_return;




extern int flag_force_mem;




extern int flag_force_addr;




extern int flag_defer_pop;




extern int flag_float_store;



extern int flag_strength_reduce;






extern int flag_unroll_loops;




extern int flag_unroll_all_loops;




extern int flag_move_all_movables;



extern int flag_prefetch_loop_arrays;




extern int flag_reduce_all_givs;




extern int flag_cse_follow_jumps;




extern int flag_cse_skip_blocks;



extern int flag_expensive_optimizations;




extern int flag_writable_strings;





extern int flag_no_function_cse;




extern int flag_omit_frame_pointer;



extern int flag_no_peephole;



extern int flag_volatile;



extern int flag_volatile_global;



extern int flag_volatile_static;



extern int flag_optimize_sibling_calls;




extern int flag_errno_math;






extern int flag_unsafe_math_optimizations;





extern int flag_trapping_math;





extern int flag_complex_divide_method;



extern int flag_rerun_loop_opt;




extern int flag_inline_functions;





extern int flag_keep_inline_functions;







extern int flag_no_inline;




extern int flag_really_no_inline;



extern int flag_syntax_only;



extern int flag_gen_aux_info;



extern int flag_shared_data;






extern int flag_schedule_insns;
extern int flag_schedule_insns_after_reload;
# 418 "flags.h"
extern int flag_schedule_interblock;
extern int flag_schedule_speculative;
extern int flag_schedule_speculative_load;
extern int flag_schedule_speculative_load_dangerous;



extern int flag_branch_on_count_reg;





extern int flag_single_precision_constant;



extern int flag_delayed_branch;




extern int flag_dump_unnumbered;





extern int flag_pretend_float;




extern int flag_pedantic_errors;




extern int flag_pic;




extern int flag_exceptions;



extern int flag_unwind_tables;



extern int flag_asynchronous_unwind_tables;




extern int flag_no_common;





extern int flag_inhibit_size_directive;




extern int flag_function_sections;



extern int flag_data_sections;
# 498 "flags.h"
extern int flag_verbose_asm;
# 507 "flags.h"
extern int flag_debug_asm;

extern int flag_dump_rtl_in_asm;



extern int flag_gnu_linker;


extern int flag_pack_struct;
# 525 "flags.h"
extern int flag_argument_noalias;





extern int flag_strict_aliasing;



extern int flag_stack_check;


extern int flag_regmove;


extern int flag_instrument_function_entry_exit;


extern int flag_peephole2;


extern int flag_guess_branch_prob;






extern int flag_bounded_pointers;







extern int flag_bounds_check;




extern int flag_merge_constants;




extern int flag_renumber_insns;







extern int frame_pointer_needed;



extern int flag_trapv;


extern int g_switch_value;
extern int g_switch_set;






extern int align_loops;
extern int align_loops_log;
extern int align_loops_max_skip;
extern int align_jumps;
extern int align_jumps_log;
extern int align_jumps_max_skip;
extern int align_labels;
extern int align_labels_log;
extern int align_labels_max_skip;
extern int align_functions;
extern int align_functions_log;


extern int dump_for_graph;


enum graph_dump_types
{
  no_graph = 0,
  vcg
};
extern enum graph_dump_types graph_dump_format;





extern int flag_no_ident;



extern int flag_gcse_lm;



extern int flag_gcse_sm;




extern int flag_eliminate_dwarf2_dups;



extern int flag_detailed_statistics;


extern int flag_non_call_exceptions;
# 36 "regrename.c" 2
# 1 "toplev.h" 1
# 22 "toplev.h"
#define GCC_TOPLEV_H 



#define skip_leading_substring(whole,part) (strncmp (whole, part, strlen (part)) ? NULL : whole + strlen (part))


extern int toplev_main (int, char **);
extern int read_integral_parameter (const char *, const char *, const int)
                 ;
extern int count_error (int);
extern void strip_off_ending (char *, int);
extern void print_time (const char *, long);
extern const char *trim_filename (const char *);
extern void internal_error (const char *, ...)
            __attribute__ ((__noreturn__));
extern void fatal_io_error (const char *, ...)
            __attribute__ ((__noreturn__));
extern void _fatal_insn_not_found (struct rtx_def *, const char *, int, const char *)


            __attribute__ ((__noreturn__));
extern void _fatal_insn (const char *, struct rtx_def *, const char *, int, const char *)



           __attribute__ ((__noreturn__));

#define fatal_insn(msgid,insn) _fatal_insn (msgid, insn, __FILE__, __LINE__, __FUNCTION__)

#define fatal_insn_not_found(insn) _fatal_insn_not_found (insn, __FILE__, __LINE__, __FUNCTION__)





extern void warning (const char *, ...);
extern void error (const char *, ...);
extern void fatal_error (const char *, ...)
            __attribute__ ((__noreturn__));
extern void pedwarn (const char *, ...);
extern void pedwarn_with_file_and_line (const char *, int, const char *, ...)
                          ;
extern void warning_with_file_and_line (const char *, int, const char *, ...)
                          ;
extern void error_with_file_and_line (const char *, int, const char *, ...)
                          ;
extern void sorry (const char *, ...);
extern void report_error_function (const char *);

extern void rest_of_decl_compilation (union tree_node *, const char *, int, int)
                              ;
extern void rest_of_type_compilation (union tree_node *, int);
extern void rest_of_compilation (union tree_node *);

extern void pedwarn_with_decl (union tree_node *, const char *, ...)
                          ;
extern void warning_with_decl (union tree_node *, const char *, ...)
                          ;
extern void error_with_decl (union tree_node *, const char *, ...)
                          ;

extern void announce_function (union tree_node *);

extern void error_for_asm (struct rtx_def *, const char *, ...)
                          ;
extern void warning_for_asm (struct rtx_def *, const char *, ...)
                          ;
extern void warn_deprecated_use (union tree_node *);
extern int do_float_handler (void (*) (void *), void *);


extern void output_quoted_string (FILE *, const char *);
extern void output_file_directive (FILE *, const char *);

extern void do_abort (void) __attribute__ ((__noreturn__));
extern void botch (const char *)
  __attribute__ ((__noreturn__));




extern void fnotice (FILE *, const char *, ...)
            __attribute__ ((__format__ (__printf__, 2, 3)));


extern int wrapup_global_declarations (union tree_node **, int);
extern void check_global_declarations (union tree_node **, int);

extern const char *progname;
extern const char *dump_base_name;


extern struct ht *ident_hash;




extern void set_fast_math_flags (void);
extern void set_no_fast_math_flags (void);





#define exact_log2(N) exact_log2_wide ((unsigned HOST_WIDE_INT) (N))
#define floor_log2(N) floor_log2_wide ((unsigned HOST_WIDE_INT) (N))

extern int exact_log2_wide (unsigned long);
extern int floor_log2_wide (unsigned long);
# 37 "regrename.c" 2
# 1 "obstack.h" 1
# 111 "obstack.h"
#define _OBSTACK_H 1
# 122 "obstack.h"
#define __PTR_TO_INT(P) ((P) - (char *) 0)



#define __INT_TO_PTR(P) ((P) + (char *) 0)
# 136 "obstack.h"
#define PTR_INT_TYPE __PTRDIFF_TYPE__
# 149 "obstack.h"
#define _obstack_memcpy(To,From,N) memcpy ((To), (From), (N))
# 161 "obstack.h"
struct _obstack_chunk
{
  char *limit;
  struct _obstack_chunk *prev;
  char contents[4];
};

struct obstack
{
  long chunk_size;
  struct _obstack_chunk *chunk;
  char *object_base;
  char *next_free;
  char *chunk_limit;
  long int temp;
  int alignment_mask;




  struct _obstack_chunk *(*chunkfun) (void *, long);
  void (*freefun) (void *, struct _obstack_chunk *);
  void *extra_arg;





  unsigned use_extra_arg:1;
  unsigned maybe_empty_object:1;



  unsigned alloc_failed:1;


};




extern void _obstack_newchunk (struct obstack *, int);
extern void _obstack_free (struct obstack *, void *);
extern int _obstack_begin (struct obstack *, int, int,
       void *(*) (long), void (*) (void *));
extern int _obstack_begin_1 (struct obstack *, int, int,
        void *(*) (void *, long),
        void (*) (void *, void *), void *);
extern int _obstack_memory_used (struct obstack *);
# 223 "obstack.h"
void obstack_init (struct obstack *obstack);

void * obstack_alloc (struct obstack *obstack, int size);

void * obstack_copy (struct obstack *obstack, void *address, int size);
void * obstack_copy0 (struct obstack *obstack, void *address, int size);

void obstack_free (struct obstack *obstack, void *block);

void obstack_blank (struct obstack *obstack, int size);

void obstack_grow (struct obstack *obstack, void *data, int size);
void obstack_grow0 (struct obstack *obstack, void *data, int size);

void obstack_1grow (struct obstack *obstack, int data_char);
void obstack_ptr_grow (struct obstack *obstack, void *data);
void obstack_int_grow (struct obstack *obstack, int data);

void * obstack_finish (struct obstack *obstack);

int obstack_object_size (struct obstack *obstack);

int obstack_room (struct obstack *obstack);
void obstack_make_room (struct obstack *obstack, int size);
void obstack_1grow_fast (struct obstack *obstack, int data_char);
void obstack_ptr_grow_fast (struct obstack *obstack, void *data);
void obstack_int_grow_fast (struct obstack *obstack, int data);
void obstack_blank_fast (struct obstack *obstack, int size);

void * obstack_base (struct obstack *obstack);
void * obstack_next_free (struct obstack *obstack);
int obstack_alignment_mask (struct obstack *obstack);
int obstack_chunk_size (struct obstack *obstack);
int obstack_memory_used (struct obstack *obstack);
# 267 "obstack.h"
extern void (*obstack_alloc_failed_handler) (void);





extern int obstack_exit_failure;





#define obstack_base(h) ((h)->object_base)



#define obstack_chunk_size(h) ((h)->chunk_size)



#define obstack_next_free(h) ((h)->next_free)



#define obstack_alignment_mask(h) ((h)->alignment_mask)





#define obstack_init(h) _obstack_begin ((h), 0, 0, (void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free)



#define obstack_begin(h,size) _obstack_begin ((h), (size), 0, (void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free)



#define obstack_specify_allocation(h,size,alignment,chunkfun,freefun) _obstack_begin ((h), (size), (alignment), (void *(*) (long)) (chunkfun), (void (*) (void *)) (freefun))



#define obstack_specify_allocation_with_arg(h,size,alignment,chunkfun,freefun,arg) _obstack_begin_1 ((h), (size), (alignment), (void *(*) (void *, long)) (chunkfun), (void (*) (void *, void *)) (freefun), (arg))




#define obstack_chunkfun(h,newchunkfun) ((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun))


#define obstack_freefun(h,newfreefun) ((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun))
# 346 "obstack.h"
#define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = achar)

#define obstack_blank_fast(h,n) ((h)->next_free += (n))

#define obstack_memory_used(h) _obstack_memory_used (h)
# 365 "obstack.h"
#define obstack_object_size(OBSTACK) __extension__ ({ struct obstack *__o = (OBSTACK); (unsigned) (__o->next_free - __o->object_base); })




#define obstack_room(OBSTACK) __extension__ ({ struct obstack *__o = (OBSTACK); (unsigned) (__o->chunk_limit - __o->next_free); })




#define obstack_make_room(OBSTACK,length) __extension__ ({ struct obstack *__o = (OBSTACK); int __len = (length); if (__o->chunk_limit - __o->next_free < __len) _obstack_newchunk (__o, __len); (void) 0; })







#define obstack_empty_p(OBSTACK) __extension__ ({ struct obstack *__o = (OBSTACK); (__o->chunk->prev == 0 && __o->next_free - __o->chunk->contents == 0); })




#define obstack_grow(OBSTACK,where,length) __extension__ ({ struct obstack *__o = (OBSTACK); int __len = (length); if (__o->next_free + __len > __o->chunk_limit) _obstack_newchunk (__o, __len); _obstack_memcpy (__o->next_free, (where), __len); __o->next_free += __len; (void) 0; })
# 398 "obstack.h"
#define obstack_grow0(OBSTACK,where,length) __extension__ ({ struct obstack *__o = (OBSTACK); int __len = (length); if (__o->next_free + __len + 1 > __o->chunk_limit) _obstack_newchunk (__o, __len + 1); _obstack_memcpy (__o->next_free, (where), __len); __o->next_free += __len; *(__o->next_free)++ = 0; (void) 0; })
# 409 "obstack.h"
#define obstack_1grow(OBSTACK,datum) __extension__ ({ struct obstack *__o = (OBSTACK); if (__o->next_free + 1 > __o->chunk_limit) _obstack_newchunk (__o, 1); *(__o->next_free)++ = (datum); (void) 0; })
# 421 "obstack.h"
#define obstack_ptr_grow(OBSTACK,datum) __extension__ ({ struct obstack *__o = (OBSTACK); if (__o->next_free + sizeof (void *) > __o->chunk_limit) _obstack_newchunk (__o, sizeof (void *)); ((*((void **)__o->next_free) = ((void *)datum)), (__o->next_free += sizeof (void *))); (void) 0; })
# 430 "obstack.h"
#define obstack_int_grow(OBSTACK,datum) __extension__ ({ struct obstack *__o = (OBSTACK); if (__o->next_free + sizeof (int) > __o->chunk_limit) _obstack_newchunk (__o, sizeof (int)); *((int *)__o->next_free)++ = ((int)datum); (void) 0; })







#define obstack_ptr_grow_fast(h,aptr) (*((void **) (h)->next_free)++ = (void *)aptr)
#define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint)

#define obstack_blank(OBSTACK,length) __extension__ ({ struct obstack *__o = (OBSTACK); int __len = (length); if (__o->chunk_limit - __o->next_free < __len) _obstack_newchunk (__o, __len); __o->next_free += __len; (void) 0; })
# 450 "obstack.h"
#define obstack_alloc(OBSTACK,length) __extension__ ({ struct obstack *__h = (OBSTACK); obstack_blank (__h, (length)); obstack_finish (__h); })





#define obstack_copy(OBSTACK,where,length) __extension__ ({ struct obstack *__h = (OBSTACK); obstack_grow (__h, (where), (length)); obstack_finish (__h); })





#define obstack_copy0(OBSTACK,where,length) __extension__ ({ struct obstack *__h = (OBSTACK); obstack_grow0 (__h, (where), (length)); obstack_finish (__h); })







#define obstack_finish(OBSTACK) __extension__ ({ struct obstack *__o1 = (OBSTACK); void *value; value = (void *) __o1->object_base; if (__o1->next_free == value) __o1->maybe_empty_object = 1; __o1->next_free = __INT_TO_PTR ((__PTR_TO_INT (__o1->next_free)+__o1->alignment_mask) & ~ (__o1->alignment_mask)); if (__o1->next_free - (char *)__o1->chunk > __o1->chunk_limit - (char *)__o1->chunk) __o1->next_free = __o1->chunk_limit; __o1->object_base = __o1->next_free; value; })
# 486 "obstack.h"
#define obstack_free(OBSTACK,OBJ) __extension__ ({ struct obstack *__o = (OBSTACK); void *__obj = (OBJ); if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit) __o->next_free = __o->object_base = __obj; else (obstack_free) (__o, __obj); })
# 38 "regrename.c" 2

#define obstack_chunk_alloc xmalloc
#define obstack_chunk_free free


#define REGNO_MODE_OK_FOR_BASE_P(REGNO,MODE) REGNO_OK_FOR_BASE_P (REGNO)



#define REG_MODE_OK_FOR_BASE_P(REGNO,MODE) REG_OK_FOR_BASE_P (REGNO)


static const char *const reg_class_names[] = { "NO_REGS", "AREG", "DREG", "CREG", "BREG", "SIREG", "DIREG", "AD_REGS", "Q_REGS", "NON_Q_REGS", "INDEX_REGS", "LEGACY_REGS", "GENERAL_REGS", "FP_TOP_REG", "FP_SECOND_REG", "FLOAT_REGS", "SSE_REGS", "MMX_REGS", "FP_TOP_SSE_REGS", "FP_SECOND_SSE_REGS", "FLOAT_SSE_REGS", "FLOAT_INT_REGS", "INT_SSE_REGS", "FLOAT_INT_SSE_REGS", "ALL_REGS" };

struct du_chain
{
  struct du_chain *next_chain;
  struct du_chain *next_use;

  rtx insn;
  rtx *loc;
  enum reg_class class;
  unsigned int need_caller_save_reg:1;
  unsigned int earlyclobber:1;
};

enum scan_actions
{
  terminate_all_read,
  terminate_overlapping_read,
  terminate_write,
  terminate_dead,
  mark_read,
  mark_write
};

static const char * const scan_actions_name[] =
{
  "terminate_all_read",
  "terminate_overlapping_read",
  "terminate_write",
  "terminate_dead",
  "mark_read",
  "mark_write"
};

static struct obstack rename_obstack;

static void do_replace (struct du_chain *, int);
static void scan_rtx_reg (rtx, rtx *, enum reg_class, enum scan_actions, enum op_type, int)
                                            ;
static void scan_rtx_address (rtx, rtx *, enum reg_class, enum scan_actions, enum machine_mode)
                                                ;
static void scan_rtx (rtx, rtx *, enum reg_class, enum scan_actions, enum op_type, int)
                                               ;
static struct du_chain *build_def_use (basic_block);
static void dump_def_use_chain (struct du_chain *);
static void note_sets (rtx, rtx, void *);
static void clear_dead_regs (HARD_REG_ELT_TYPE *, enum machine_mode, rtx);
static void merge_overlapping_regs (basic_block, HARD_REG_ELT_TYPE *, struct du_chain *)
                            ;




static void
note_sets (x, set, data)
     rtx x;
     rtx set __attribute__ ((__unused__));
     void *data;
{
  HARD_REG_ELT_TYPE *pset = (HARD_REG_ELT_TYPE *) data;
  unsigned int regno;
  int nregs;
  if (((enum rtx_code) (x)->code) != REG)
    return;
  regno = (((x)->fld[0]).rtuint);
  nregs = (((regno) >= 8 && (regno) <= (8 + 7)) || (((regno) >= (20 + 1) && (regno) <= ((20 + 1) + 7)) || ((regno) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) || ((regno) >= (((20 + 1) + 7) + 1) && (regno) <= ((((20 + 1) + 7) + 1) + 7)) ? (((mode_class[(int) (((enum machine_mode) (x)->mode))]) == MODE_COMPLEX_INT || (mode_class[(int) (((enum machine_mode) (x)->mode))]) == MODE_COMPLEX_FLOAT) ? 2 : 1) : ((((enum machine_mode) (x)->mode)) == TFmode ? ((target_flags & 0x02000000) ? 2 : 3) : (((enum machine_mode) (x)->mode)) == TCmode ? ((target_flags & 0x02000000) ? 4 : 6) : (((mode_size[(int) (((enum machine_mode) (x)->mode))]) + ((target_flags & 0x02000000) ? 8 : 4) - 1) / ((target_flags & 0x02000000) ? 8 : 4))));


  if (regno + nregs > 53)
    fancy_abort ("regrename.c", 119, __FUNCTION__);

  while (nregs-- > 0)
    ((*pset) |= ((HARD_REG_ELT_TYPE) (1)) << (regno + nregs));
}




static void
clear_dead_regs (pset, kind, notes)
     HARD_REG_ELT_TYPE *pset;
     enum machine_mode kind;
     rtx notes;
{
  rtx note;
  for (note = notes; note; note = (((note)->fld[1]).rtx))
    if (((enum reg_note) ((enum machine_mode) (note)->mode)) == kind && (((enum rtx_code) ((((note)->fld[0]).rtx))->code) == REG))
      {
 rtx reg = (((note)->fld[0]).rtx);
 unsigned int regno = (((reg)->fld[0]).rtuint);
 int nregs = (((regno) >= 8 && (regno) <= (8 + 7)) || (((regno) >= (20 + 1) && (regno) <= ((20 + 1) + 7)) || ((regno) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) || ((regno) >= (((20 + 1) + 7) + 1) && (regno) <= ((((20 + 1) + 7) + 1) + 7)) ? (((mode_class[(int) (((enum machine_mode) (reg)->mode))]) == MODE_COMPLEX_INT || (mode_class[(int) (((enum machine_mode) (reg)->mode))]) == MODE_COMPLEX_FLOAT) ? 2 : 1) : ((((enum machine_mode) (reg)->mode)) == TFmode ? ((target_flags & 0x02000000) ? 2 : 3) : (((enum machine_mode) (reg)->mode)) == TCmode ? ((target_flags & 0x02000000) ? 4 : 6) : (((mode_size[(int) (((enum machine_mode) (reg)->mode))]) + ((target_flags & 0x02000000) ? 8 : 4) - 1) / ((target_flags & 0x02000000) ? 8 : 4))));


 if (regno + nregs > 53)
   fancy_abort ("regrename.c", 144, __FUNCTION__);

 while (nregs-- > 0)
   ((*pset) &= ~(((HARD_REG_ELT_TYPE) (1)) << (regno + nregs)));
      }
}




static void
merge_overlapping_regs (b, pset, chain)
     basic_block b;
     HARD_REG_ELT_TYPE *pset;
     struct du_chain *chain;
{
  struct du_chain *t = chain;
  rtx insn;
  HARD_REG_ELT_TYPE live;

  do { ((live) = ((HARD_REG_ELT_TYPE) (0))); reg_set_to_hard_reg_set (&live, b->global_live_at_start); } while (0);
  insn = b->head;
  while (t)
    {


      while (insn != t->insn)
 {
   if (((rtx_class[(int) (((enum rtx_code) (insn)->code))]) == 'i'))
     {
       clear_dead_regs (&live, REG_DEAD, (((insn)->fld[6]).rtx));
       note_stores ((((insn)->fld[3]).rtx), note_sets, (void *) &live);


       if (t != chain)
  ((*pset) |= (live));
       clear_dead_regs (&live, REG_UNUSED, (((insn)->fld[6]).rtx));
     }
   insn = (((insn)->fld[2]).rtx);
 }

      ((*pset) |= (live));




      if (! t->next_use)
 note_stores ((((insn)->fld[3]).rtx), note_sets, (void *) pset);

      t = t->next_use;
    }
}



void
regrename_optimize ()
{
  int tick[53];
  int this_tick = 0;
  int b;
  char *first_obj;

  memset (tick, 0, sizeof tick);

  gcc_obstack_init (&rename_obstack);
  first_obj = (char *) __extension__ ({ struct obstack *__h = (&rename_obstack); __extension__ ({ struct obstack *__o = (__h); int __len = ((0)); if (__o->chunk_limit - __o->next_free < __len) _obstack_newchunk (__o, __len); __o->next_free += __len; (void) 0; }); __extension__ ({ struct obstack *__o1 = (__h); void *value; value = (void *) __o1->object_base; if (__o1->next_free == value) __o1->maybe_empty_object = 1; __o1->next_free = (((((__o1->next_free) - (char *) 0)+__o1->alignment_mask) & ~ (__o1->alignment_mask)) + (char *) 0); if (__o1->next_free - (char *)__o1->chunk > __o1->chunk_limit - (char *)__o1->chunk) __o1->next_free = __o1->chunk_limit; __o1->object_base = __o1->next_free; value; }); });

  for (b = 0; b < n_basic_blocks; b++)
    {
      basic_block bb = (((basic_block_info)->data.bb[(b)]));
      struct du_chain *all_chains = 0;
      HARD_REG_ELT_TYPE unavailable;
      HARD_REG_ELT_TYPE regs_seen;

      ((unavailable) = ((HARD_REG_ELT_TYPE) (0)));

      if (rtl_dump_file)
 fprintf (rtl_dump_file, "\nBasic block %d:\n", b);

      all_chains = build_def_use (bb);

      if (rtl_dump_file)
 dump_def_use_chain (all_chains);

      ((unavailable) = ((HARD_REG_ELT_TYPE) (0)));

      if (frame_pointer_needed)
 {
   int i;

   for (i = (((20) >= 8 && (20) <= (8 + 7)) || (((20) >= (20 + 1) && (20) <= ((20 + 1) + 7)) || ((20) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (20) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) || ((20) >= (((20 + 1) + 7) + 1) && (20) <= ((((20 + 1) + 7) + 1) + 7)) ? (((mode_class[(int) (((target_flags & 0x02000000) ? DImode : SImode))]) == MODE_COMPLEX_INT || (mode_class[(int) (((target_flags & 0x02000000) ? DImode : SImode))]) == MODE_COMPLEX_FLOAT) ? 2 : 1) : ((((target_flags & 0x02000000) ? DImode : SImode)) == TFmode ? ((target_flags & 0x02000000) ? 2 : 3) : (((target_flags & 0x02000000) ? DImode : SImode)) == TCmode ? ((target_flags & 0x02000000) ? 4 : 6) : (((mode_size[(int) (((target_flags & 0x02000000) ? DImode : SImode))]) + ((target_flags & 0x02000000) ? 8 : 4) - 1) / ((target_flags & 0x02000000) ? 8 : 4)))); i--;)
     ((unavailable) |= ((HARD_REG_ELT_TYPE) (1)) << (20 + i));


   for (i = (((6) >= 8 && (6) <= (8 + 7)) || (((6) >= (20 + 1) && (6) <= ((20 + 1) + 7)) || ((6) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (6) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) || ((6) >= (((20 + 1) + 7) + 1) && (6) <= ((((20 + 1) + 7) + 1) + 7)) ? (((mode_class[(int) (((target_flags & 0x02000000) ? DImode : SImode))]) == MODE_COMPLEX_INT || (mode_class[(int) (((target_flags & 0x02000000) ? DImode : SImode))]) == MODE_COMPLEX_FLOAT) ? 2 : 1) : ((((target_flags & 0x02000000) ? DImode : SImode)) == TFmode ? ((target_flags & 0x02000000) ? 2 : 3) : (((target_flags & 0x02000000) ? DImode : SImode)) == TCmode ? ((target_flags & 0x02000000) ? 4 : 6) : (((mode_size[(int) (((target_flags & 0x02000000) ? DImode : SImode))]) + ((target_flags & 0x02000000) ? 8 : 4) - 1) / ((target_flags & 0x02000000) ? 8 : 4)))); i--;)
     ((unavailable) |= ((HARD_REG_ELT_TYPE) (1)) << (6 + i));

 }

      ((regs_seen) = ((HARD_REG_ELT_TYPE) (0)));
      while (all_chains)
 {
   int new_reg, best_new_reg = -1;
   int n_uses;
   struct du_chain *this = all_chains;
   struct du_chain *tmp, *last;
   HARD_REG_ELT_TYPE this_unavailable;
   int reg = (((*this->loc)->fld[0]).rtuint);
   int i;

   all_chains = this->next_chain;
# 266 "regrename.c"
   if (fixed_regs[reg] || global_regs[reg]

       || (frame_pointer_needed && reg == 6)



       )
     continue;

   ((this_unavailable) = (unavailable));




   n_uses = 0;
   for (last = this; last->next_use; last = last->next_use)
     {
       n_uses++;
       ((this_unavailable) |= ~ (reg_class_contents[last->class]))
                                          ;
     }
   if (n_uses < 1)
     continue;

   ((this_unavailable) |= ~ (reg_class_contents[last->class]))
                                      ;

   if (this->need_caller_save_reg)
     ((this_unavailable) |= (call_used_reg_set));

   merge_overlapping_regs (bb, &this_unavailable, this);



   for (new_reg = 0; new_reg < 53; new_reg++)
     {
       int nregs = (((new_reg) >= 8 && (new_reg) <= (8 + 7)) || (((new_reg) >= (20 + 1) && (new_reg) <= ((20 + 1) + 7)) || ((new_reg) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (new_reg) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) || ((new_reg) >= (((20 + 1) + 7) + 1) && (new_reg) <= ((((20 + 1) + 7) + 1) + 7)) ? (((mode_class[(int) (((enum machine_mode) (*this->loc)->mode))]) == MODE_COMPLEX_INT || (mode_class[(int) (((enum machine_mode) (*this->loc)->mode))]) == MODE_COMPLEX_FLOAT) ? 2 : 1) : ((((enum machine_mode) (*this->loc)->mode)) == TFmode ? ((target_flags & 0x02000000) ? 2 : 3) : (((enum machine_mode) (*this->loc)->mode)) == TCmode ? ((target_flags & 0x02000000) ? 4 : 6) : (((mode_size[(int) (((enum machine_mode) (*this->loc)->mode))]) + ((target_flags & 0x02000000) ? 8 : 4) - 1) / ((target_flags & 0x02000000) ? 8 : 4))));

       for (i = nregs - 1; i >= 0; --i)
         if (((this_unavailable) & (((HARD_REG_ELT_TYPE) (1)) << (new_reg + i)))
      || fixed_regs[new_reg + i]
      || global_regs[new_reg + i]

      || (! regs_ever_live[new_reg + i]
   && ! call_used_regs[new_reg + i])







      || ! ((reg + i) < 8 || (reg + i) > (8 + 7))

      )
    break;
       if (i >= 0)
  continue;



       for (tmp = this; tmp; tmp = tmp->next_use)
  if (! ix86_hard_regno_mode_ok ((new_reg), (((enum machine_mode) (*tmp->loc)->mode)))
      || (tmp->need_caller_save_reg
   && ! (0
                                    )
   && (0
                                      )))
    break;
       if (! tmp)
  {
    if (best_new_reg == -1
        || tick[best_new_reg] > tick[new_reg])
      best_new_reg = new_reg;
  }
     }

   if (rtl_dump_file)
     {
       fprintf (rtl_dump_file, "Register %s in insn %d",
         reg_names[reg], (((last->insn)->fld[0]).rtint));
       if (last->need_caller_save_reg)
  fprintf (rtl_dump_file, " crosses a call");
       }

   if (best_new_reg == -1)
     {
       if (rtl_dump_file)
  fprintf (rtl_dump_file, "; no available registers\n");
       continue;
     }

   do_replace (this, best_new_reg);
   tick[best_new_reg] = this_tick++;

   if (rtl_dump_file)
     fprintf (rtl_dump_file, ", renamed as %s\n", reg_names[best_new_reg]);
 }

      __extension__ ({ struct obstack *__o = (&rename_obstack); void *__obj = (first_obj); if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit) __o->next_free = __o->object_base = __obj; else (obstack_free) (__o, __obj); });
    }

  __extension__ ({ struct obstack *__o = (&rename_obstack); void *__obj = (
# 368 "regrename.c" 3 4
 ((void *)0)
# 368 "regrename.c"
 ); if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit) __o->next_free = __o->object_base = __obj; else (obstack_free) (__o, __obj); });

  if (rtl_dump_file)
    fputc ('\n', rtl_dump_file);

  count_or_remove_death_notes (
# 373 "regrename.c" 3 4
                              ((void *)0)
# 373 "regrename.c"
                                  , 1);
  update_life_info (
# 374 "regrename.c" 3 4
                   ((void *)0)
# 374 "regrename.c"
                       , UPDATE_LIFE_LOCAL,
      4 | 1);
}

static void
do_replace (chain, reg)
     struct du_chain *chain;
     int reg;
{
  while (chain)
    {
      unsigned int regno = (((*chain->loc)->fld[1]).rtuint);
      *chain->loc = gen_raw_REG (((enum machine_mode) (*chain->loc)->mode), reg);
      if (regno >= 53)
 (((*chain->loc)->fld[1]).rtuint) = regno;
      chain = chain->next_use;
    }
}


static struct du_chain *open_chains;
static struct du_chain *closed_chains;

static void
scan_rtx_reg (insn, loc, class, action, type, earlyclobber)
     rtx insn;
     rtx *loc;
     enum reg_class class;
     enum scan_actions action;
     enum op_type type;
     int earlyclobber;
{
  struct du_chain **p;
  rtx x = *loc;
  enum machine_mode mode = ((enum machine_mode) (x)->mode);
  int this_regno = (((x)->fld[0]).rtuint);
  int this_nregs = (((this_regno) >= 8 && (this_regno) <= (8 + 7)) || (((this_regno) >= (20 + 1) && (this_regno) <= ((20 + 1) + 7)) || ((this_regno) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (this_regno) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) || ((this_regno) >= (((20 + 1) + 7) + 1) && (this_regno) <= ((((20 + 1) + 7) + 1) + 7)) ? (((mode_class[(int) (mode)]) == MODE_COMPLEX_INT || (mode_class[(int) (mode)]) == MODE_COMPLEX_FLOAT) ? 2 : 1) : ((mode) == TFmode ? ((target_flags & 0x02000000) ? 2 : 3) : (mode) == TCmode ? ((target_flags & 0x02000000) ? 4 : 6) : (((mode_size[(int) (mode)]) + ((target_flags & 0x02000000) ? 8 : 4) - 1) / ((target_flags & 0x02000000) ? 8 : 4))));

  if (action == mark_write)
    {
      if (type == OP_OUT)
 {
   struct du_chain *this = (struct du_chain *)
     __extension__ ({ struct obstack *__h = (&rename_obstack); __extension__ ({ struct obstack *__o = (__h); int __len = ((sizeof (struct du_chain))); if (__o->chunk_limit - __o->next_free < __len) _obstack_newchunk (__o, __len); __o->next_free += __len; (void) 0; }); __extension__ ({ struct obstack *__o1 = (__h); void *value; value = (void *) __o1->object_base; if (__o1->next_free == value) __o1->maybe_empty_object = 1; __o1->next_free = (((((__o1->next_free) - (char *) 0)+__o1->alignment_mask) & ~ (__o1->alignment_mask)) + (char *) 0); if (__o1->next_free - (char *)__o1->chunk > __o1->chunk_limit - (char *)__o1->chunk) __o1->next_free = __o1->chunk_limit; __o1->object_base = __o1->next_free; value; }); });
   this->next_use = 0;
   this->next_chain = open_chains;
   this->loc = loc;
   this->insn = insn;
   this->class = class;
   this->need_caller_save_reg = 0;
   this->earlyclobber = earlyclobber;
   open_chains = this;
 }
      return;
    }

  if ((type == OP_OUT && action != terminate_write)
      || (type != OP_OUT && action == terminate_write))
    return;

  for (p = &open_chains; *p;)
    {
      struct du_chain *this = *p;
# 445 "regrename.c"
      if (*this->loc == (global_rtl[GR_CC0]))
 p = &this->next_chain;
      else
        {
   int regno = (((*this->loc)->fld[0]).rtuint);
   int nregs = (((regno) >= 8 && (regno) <= (8 + 7)) || (((regno) >= (20 + 1) && (regno) <= ((20 + 1) + 7)) || ((regno) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) || ((regno) >= (((20 + 1) + 7) + 1) && (regno) <= ((((20 + 1) + 7) + 1) + 7)) ? (((mode_class[(int) (((enum machine_mode) (*this->loc)->mode))]) == MODE_COMPLEX_INT || (mode_class[(int) (((enum machine_mode) (*this->loc)->mode))]) == MODE_COMPLEX_FLOAT) ? 2 : 1) : ((((enum machine_mode) (*this->loc)->mode)) == TFmode ? ((target_flags & 0x02000000) ? 2 : 3) : (((enum machine_mode) (*this->loc)->mode)) == TCmode ? ((target_flags & 0x02000000) ? 4 : 6) : (((mode_size[(int) (((enum machine_mode) (*this->loc)->mode))]) + ((target_flags & 0x02000000) ? 8 : 4) - 1) / ((target_flags & 0x02000000) ? 8 : 4))));
   int exact_match = (regno == this_regno && nregs == this_nregs);

   if (regno + nregs <= this_regno
       || this_regno + this_nregs <= regno)
     {
       p = &this->next_chain;
       continue;
     }

   if (action == mark_read)
     {
       if (! exact_match)
  fancy_abort ("regrename.c", 463, __FUNCTION__);





       if (class != NO_REGS)
  {
    this = (struct du_chain *)
      __extension__ ({ struct obstack *__h = (&rename_obstack); __extension__ ({ struct obstack *__o = (__h); int __len = ((sizeof (struct du_chain))); if (__o->chunk_limit - __o->next_free < __len) _obstack_newchunk (__o, __len); __o->next_free += __len; (void) 0; }); __extension__ ({ struct obstack *__o1 = (__h); void *value; value = (void *) __o1->object_base; if (__o1->next_free == value) __o1->maybe_empty_object = 1; __o1->next_free = (((((__o1->next_free) - (char *) 0)+__o1->alignment_mask) & ~ (__o1->alignment_mask)) + (char *) 0); if (__o1->next_free - (char *)__o1->chunk > __o1->chunk_limit - (char *)__o1->chunk) __o1->next_free = __o1->chunk_limit; __o1->object_base = __o1->next_free; value; }); });
    this->next_use = 0;
    this->next_chain = (*p)->next_chain;
    this->loc = loc;
    this->insn = insn;
    this->class = class;
    this->need_caller_save_reg = 0;
    while (*p)
      p = &(*p)->next_use;
    *p = this;
    return;
  }
     }

   if (action != terminate_overlapping_read || ! exact_match)
     {
       struct du_chain *next = this->next_chain;





       if ((action == terminate_dead || action == terminate_write)
    && exact_match)
  {
    this->next_chain = closed_chains;
    closed_chains = this;
    if (rtl_dump_file)
      fprintf (rtl_dump_file,
        "Closing chain %s at insn %d (%s)\n",
        reg_names[(((*this->loc)->fld[0]).rtuint)], (((insn)->fld[0]).rtint),
        scan_actions_name[(int) action]);
  }
       else
  {
    if (rtl_dump_file)
      fprintf (rtl_dump_file,
        "Discarding chain %s at insn %d (%s)\n",
        reg_names[(((*this->loc)->fld[0]).rtuint)], (((insn)->fld[0]).rtint),
        scan_actions_name[(int) action]);
  }
       *p = next;
     }
   else
     p = &this->next_chain;
 }
    }
}




static void
scan_rtx_address (insn, loc, class, action, mode)
     rtx insn;
     rtx *loc;
     enum reg_class class;
     enum scan_actions action;
     enum machine_mode mode;
{
  rtx x = *loc;
  enum rtx_code code = ((enum rtx_code) (x)->code);
  const char *fmt;
  int i, j;

  if (action == mark_write)
    return;

  switch (code)
    {
    case PLUS:
      {
 rtx orig_op0 = (((x)->fld[0]).rtx);
 rtx orig_op1 = (((x)->fld[1]).rtx);
 enum rtx_code code0 = ((enum rtx_code) (orig_op0)->code);
 enum rtx_code code1 = ((enum rtx_code) (orig_op1)->code);
 rtx op0 = orig_op0;
 rtx op1 = orig_op1;
 rtx *locI = 
# 550 "regrename.c" 3 4
            ((void *)0)
# 550 "regrename.c"
                ;
 rtx *locB = 
# 551 "regrename.c" 3 4
            ((void *)0)
# 551 "regrename.c"
                ;

 if (((enum rtx_code) (op0)->code) == SUBREG)
   {
     op0 = (((op0)->fld[0]).rtx);
     code0 = ((enum rtx_code) (op0)->code);
   }

 if (((enum rtx_code) (op1)->code) == SUBREG)
   {
     op1 = (((op1)->fld[0]).rtx);
     code1 = ((enum rtx_code) (op1)->code);
   }

 if (code0 == MULT || code0 == SIGN_EXTEND || code0 == TRUNCATE
     || code0 == ZERO_EXTEND || code1 == MEM)
   {
     locI = &(((x)->fld[0]).rtx);
     locB = &(((x)->fld[1]).rtx);
   }
 else if (code1 == MULT || code1 == SIGN_EXTEND || code1 == TRUNCATE
   || code1 == ZERO_EXTEND || code0 == MEM)
   {
     locI = &(((x)->fld[1]).rtx);
     locB = &(((x)->fld[0]).rtx);
   }
 else if (code0 == CONST_INT || code0 == CONST
   || code0 == SYMBOL_REF || code0 == LABEL_REF)
   locB = &(((x)->fld[1]).rtx);
 else if (code1 == CONST_INT || code1 == CONST
   || code1 == SYMBOL_REF || code1 == LABEL_REF)
   locB = &(((x)->fld[0]).rtx);
 else if (code0 == REG && code1 == REG)
   {
     int index_op;

     if ((((((op0)->fld[0]).rtuint)) < 7 || ((((op0)->fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op0)->fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op0)->fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op0)->fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op0)->fld[0]).rtuint))] < 7)
  && (((((op1)->fld[0]).rtuint)) <= 7 || ((((op1)->fld[0]).rtuint)) == 16 || ((((op1)->fld[0]).rtuint)) == 20 || ((((op1)->fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op1)->fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] <= 7))
       index_op = 0;
     else if ((((((op1)->fld[0]).rtuint)) < 7 || ((((op1)->fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op1)->fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] < 7)
       && (((((op0)->fld[0]).rtuint)) <= 7 || ((((op0)->fld[0]).rtuint)) == 16 || ((((op0)->fld[0]).rtuint)) == 20 || ((((op0)->fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op0)->fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op0)->fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op0)->fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op0)->fld[0]).rtuint))] <= 7))
       index_op = 1;
     else if ((((((op1)->fld[0]).rtuint)) <= 7 || ((((op1)->fld[0]).rtuint)) == 16 || ((((op1)->fld[0]).rtuint)) == 20 || ((((op1)->fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op1)->fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] <= 7))
       index_op = 0;
     else if ((((((op0)->fld[0]).rtuint)) <= 7 || ((((op0)->fld[0]).rtuint)) == 16 || ((((op0)->fld[0]).rtuint)) == 20 || ((((op0)->fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op0)->fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op0)->fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op0)->fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op0)->fld[0]).rtuint))] <= 7))
       index_op = 1;
     else if ((((((op1)->fld[0]).rtuint)) < 7 || ((((op1)->fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op1)->fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] < 7))
       index_op = 1;
     else
       index_op = 0;

     locI = &(((x)->fld[index_op]).rtx);
     locB = &(((x)->fld[!index_op]).rtx);
   }
 else if (code0 == REG)
   {
     locI = &(((x)->fld[0]).rtx);
     locB = &(((x)->fld[1]).rtx);
   }
 else if (code1 == REG)
   {
     locI = &(((x)->fld[1]).rtx);
     locB = &(((x)->fld[0]).rtx);
   }

 if (locI)
   scan_rtx_address (insn, locI, INDEX_REGS, action, mode);
 if (locB)
   scan_rtx_address (insn, locB, GENERAL_REGS, action, mode);
 return;
      }

    case POST_INC:
    case POST_DEC:
    case POST_MODIFY:
    case PRE_INC:
    case PRE_DEC:
    case PRE_MODIFY:



      action = terminate_all_read;

      break;

    case MEM:
      scan_rtx_address (insn, &(((x)->fld[0]).rtx),
   GENERAL_REGS, action,
   ((enum machine_mode) (x)->mode));
      return;

    case REG:
      scan_rtx_reg (insn, loc, class, action, OP_IN, 0);
      return;

    default:
      break;
    }

  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 scan_rtx_address (insn, &(((x)->fld[i]).rtx), class, action, mode);
      else if (fmt[i] == 'E')
 for (j = (((((x)->fld[i]).rtvec))->num_elem) - 1; j >= 0; j--)
   scan_rtx_address (insn, &(((((x)->fld[i]).rtvec))->elem[j]), class, action, mode);
    }
}

static void
scan_rtx (insn, loc, class, action, type, earlyclobber)
     rtx insn;
     rtx *loc;
     enum reg_class class;
     enum scan_actions action;
     enum op_type type;
     int earlyclobber;
{
  const char *fmt;
  rtx x = *loc;
  enum rtx_code code = ((enum rtx_code) (x)->code);
  int i, j;

  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case CONST:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case LABEL_REF:
    case CC0:
    case PC:
      return;

    case REG:
      scan_rtx_reg (insn, loc, class, action, type, earlyclobber);
      return;

    case MEM:
      scan_rtx_address (insn, &(((x)->fld[0]).rtx),
   GENERAL_REGS, action,
   ((enum machine_mode) (x)->mode));
      return;

    case SET:
      scan_rtx (insn, &(((x)->fld[1]).rtx), class, action, OP_IN, 0);
      scan_rtx (insn, &(((x)->fld[0]).rtx), class, action, OP_OUT, 0);
      return;

    case STRICT_LOW_PART:
      scan_rtx (insn, &(((x)->fld[0]).rtx), class, action, OP_INOUT, earlyclobber);
      return;

    case ZERO_EXTRACT:
    case SIGN_EXTRACT:
      scan_rtx (insn, &(((x)->fld[0]).rtx), class, action,
  type == OP_IN ? OP_IN : OP_INOUT, earlyclobber);
      scan_rtx (insn, &(((x)->fld[1]).rtx), class, action, OP_IN, 0);
      scan_rtx (insn, &(((x)->fld[2]).rtx), class, action, OP_IN, 0);
      return;

    case POST_INC:
    case PRE_INC:
    case POST_DEC:
    case PRE_DEC:
    case POST_MODIFY:
    case PRE_MODIFY:

      fancy_abort ("regrename.c", 722, __FUNCTION__);

    case CLOBBER:
      scan_rtx (insn, &(((x)->fld[0]).rtx), class, action, OP_OUT, 1);
      return;

    case EXPR_LIST:
      scan_rtx (insn, &(((x)->fld[0]).rtx), class, action, type, 0);
      if ((((x)->fld[1]).rtx))
 scan_rtx (insn, &(((x)->fld[1]).rtx), class, action, type, 0);
      return;

    default:
      break;
    }

  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 scan_rtx (insn, &(((x)->fld[i]).rtx), class, action, type, 0);
      else if (fmt[i] == 'E')
 for (j = (((((x)->fld[i]).rtvec))->num_elem) - 1; j >= 0; j--)
   scan_rtx (insn, &(((((x)->fld[i]).rtvec))->elem[j]), class, action, type, 0);
    }
}



static struct du_chain *
build_def_use (bb)
     basic_block bb;
{
  rtx insn;

  open_chains = closed_chains = 
# 757 "regrename.c" 3 4
                               ((void *)0)
# 757 "regrename.c"
                                   ;

  for (insn = bb->head; ; insn = (((insn)->fld[2]).rtx))
    {
      if (((rtx_class[(int) (((enum rtx_code) (insn)->code))]) == 'i'))
 {
   int n_ops;
   rtx note;
   rtx old_operands[30];
   rtx old_dups[4];
   int i, icode;
   int alt;
   int predicated;
# 787 "regrename.c"
   icode = ((((insn)->fld[4]).rtint) >= 0 ? (((insn)->fld[4]).rtint) : recog_memoized_1 (insn));
   extract_insn (insn);
   constrain_operands (1);
   preprocess_constraints ();
   alt = which_alternative;
   n_ops = recog_data.n_operands;





   predicated = ((enum rtx_code) ((((insn)->fld[3]).rtx))->code) == COND_EXEC;
   for (i = 0; i < n_ops; ++i)
     {
       int matches = recog_op_alt[i][alt].matches;
       if (matches >= 0)
  recog_op_alt[i][alt].class = recog_op_alt[matches][alt].class;
       if (matches >= 0 || recog_op_alt[i][alt].matched >= 0
           || (predicated && recog_data.operand_type[i] == OP_OUT))
  recog_data.operand_type[i] = OP_INOUT;
     }


   for (i = 0; i < n_ops; i++)
     scan_rtx (insn, recog_data.operand_loc[i],
        NO_REGS, terminate_overlapping_read,
        recog_data.operand_type[i], 0);





   for (i = 0; i < n_ops; i++)
     {
       old_operands[i] = recog_data.operand[i];



       if (recog_data.constraints[i][0] == '\0')
  continue;
       *recog_data.operand_loc[i] = (global_rtl[GR_CC0]);
     }
   for (i = 0; i < recog_data.n_dups; i++)
     {
       int dup_num = recog_data.dup_num[i];

       old_dups[i] = *recog_data.dup_loc[i];
       *recog_data.dup_loc[i] = (global_rtl[GR_CC0]);



       if (icode >= 0
    && insn_data[icode].operand[dup_num].eliminable == 0)
  old_dups[i] = recog_data.operand[dup_num];
     }

   scan_rtx (insn, &(((insn)->fld[3]).rtx), NO_REGS, terminate_all_read,
      OP_IN, 0);

   for (i = 0; i < recog_data.n_dups; i++)
     *recog_data.dup_loc[i] = old_dups[i];
   for (i = 0; i < n_ops; i++)
     *recog_data.operand_loc[i] = old_operands[i];


   if (((enum rtx_code) (insn)->code) == CALL_INSN && (((insn)->fld[7]).rtx))
     scan_rtx (insn, &(((insn)->fld[7]).rtx),
        NO_REGS, terminate_all_read, OP_IN, 0);



   if (asm_noperands ((((insn)->fld[3]).rtx)) > 0)
     for (i = 0; i < n_ops; i++)
       {
  rtx *loc = recog_data.operand_loc[i];
  rtx op = *loc;

  if (((enum rtx_code) (op)->code) == REG
      && (((op)->fld[0]).rtuint) == (((op)->fld[1]).rtuint)
      && (recog_data.operand_type[i] == OP_IN
   || recog_data.operand_type[i] == OP_INOUT))
    scan_rtx (insn, loc, NO_REGS, terminate_all_read, OP_IN, 0);
       }


   for (i = 0; i < n_ops + recog_data.n_dups; i++)
     {
       int opn = i < n_ops ? i : recog_data.dup_num[i - n_ops];
       rtx *loc = (i < n_ops
     ? recog_data.operand_loc[opn]
     : recog_data.dup_loc[i - n_ops]);
       enum reg_class class = recog_op_alt[opn][alt].class;
       enum op_type type = recog_data.operand_type[opn];




       if (recog_data.constraints[opn][0] == '\0')
  continue;

       if (recog_op_alt[opn][alt].is_address)
  scan_rtx_address (insn, loc, class, mark_read, VOIDmode);
       else
  scan_rtx (insn, loc, class, mark_read, type, 0);
     }



   for (note = (((insn)->fld[6]).rtx); note; note = (((note)->fld[1]).rtx))
     {
       if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_DEAD)
  scan_rtx (insn, &(((note)->fld[0]).rtx), NO_REGS, terminate_dead,
     OP_IN, 0);
       else if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_INC)
  scan_rtx (insn, &(((note)->fld[0]).rtx), ALL_REGS, mark_read,
     OP_INOUT, 0);
     }



   if (((enum rtx_code) (insn)->code) == CALL_INSN)
     {
       struct du_chain *p;
       for (p = open_chains; p; p = p->next_chain)
  p->need_caller_save_reg = 1;
     }





   for (i = 0; i < n_ops; i++)
     {
       old_operands[i] = recog_data.operand[i];
       if (recog_data.operand_type[i] == OP_INOUT)
  *recog_data.operand_loc[i] = (global_rtl[GR_CC0]);
     }
   for (i = 0; i < recog_data.n_dups; i++)
     {
       int opn = recog_data.dup_num[i];
       old_dups[i] = *recog_data.dup_loc[i];
       if (recog_data.operand_type[opn] == OP_INOUT)
  *recog_data.dup_loc[i] = (global_rtl[GR_CC0]);
     }

   scan_rtx (insn, &(((insn)->fld[3]).rtx), NO_REGS, terminate_write, OP_IN, 0);

   for (i = 0; i < recog_data.n_dups; i++)
     *recog_data.dup_loc[i] = old_dups[i];
   for (i = 0; i < n_ops; i++)
     *recog_data.operand_loc[i] = old_operands[i];







   if (asm_noperands ((((insn)->fld[3]).rtx)) > 0)
     {
       for (i = 0; i < n_ops; i++)
  if (recog_data.operand_type[i] == OP_OUT)
    {
      rtx *loc = recog_data.operand_loc[i];
      rtx op = *loc;
      enum reg_class class = recog_op_alt[i][alt].class;

      if (((enum rtx_code) (op)->code) == REG
          && (((op)->fld[0]).rtuint) == (((op)->fld[1]).rtuint))
        continue;

      scan_rtx (insn, loc, class, mark_write, OP_OUT,
         recog_op_alt[i][alt].earlyclobber);
    }
     }
   else if (((enum rtx_code) (insn)->code) != CALL_INSN)
     for (i = 0; i < n_ops + recog_data.n_dups; i++)
       {
  int opn = i < n_ops ? i : recog_data.dup_num[i - n_ops];
  rtx *loc = (i < n_ops
       ? recog_data.operand_loc[opn]
       : recog_data.dup_loc[i - n_ops]);
  enum reg_class class = recog_op_alt[opn][alt].class;

  if (recog_data.operand_type[opn] == OP_OUT)
    scan_rtx (insn, loc, class, mark_write, OP_OUT,
       recog_op_alt[opn][alt].earlyclobber);
       }



   for (note = (((insn)->fld[6]).rtx); note; note = (((note)->fld[1]).rtx))
     if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_UNUSED)
       scan_rtx (insn, &(((note)->fld[0]).rtx), NO_REGS, terminate_dead,
   OP_IN, 0);
 }
      if (insn == bb->end)
 break;
    }



  return closed_chains;
}




static void
dump_def_use_chain (chains)
     struct du_chain *chains;
{
  while (chains)
    {
      struct du_chain *this = chains;
      int r = (((*this->loc)->fld[0]).rtuint);
      int nregs = (((r) >= 8 && (r) <= (8 + 7)) || (((r) >= (20 + 1) && (r) <= ((20 + 1) + 7)) || ((r) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (r) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) || ((r) >= (((20 + 1) + 7) + 1) && (r) <= ((((20 + 1) + 7) + 1) + 7)) ? (((mode_class[(int) (((enum machine_mode) (*this->loc)->mode))]) == MODE_COMPLEX_INT || (mode_class[(int) (((enum machine_mode) (*this->loc)->mode))]) == MODE_COMPLEX_FLOAT) ? 2 : 1) : ((((enum machine_mode) (*this->loc)->mode)) == TFmode ? ((target_flags & 0x02000000) ? 2 : 3) : (((enum machine_mode) (*this->loc)->mode)) == TCmode ? ((target_flags & 0x02000000) ? 4 : 6) : (((mode_size[(int) (((enum machine_mode) (*this->loc)->mode))]) + ((target_flags & 0x02000000) ? 8 : 4) - 1) / ((target_flags & 0x02000000) ? 8 : 4))));
      fprintf (rtl_dump_file, "Register %s (%d):", reg_names[r], nregs);
      while (this)
 {
   fprintf (rtl_dump_file, " %d [%s]", (((this->insn)->fld[0]).rtint),
     reg_class_names[this->class]);
   this = this->next_use;
 }
      fprintf (rtl_dump_file, "\n");
      chains = chains->next_chain;
    }
}
# 1028 "regrename.c"
struct value_data_entry
{
  enum machine_mode mode;
  unsigned int oldest_regno;
  unsigned int next_regno;
};

struct value_data
{
  struct value_data_entry e[53];
  unsigned int max_value_regs;
};

static void kill_value_regno (unsigned, struct value_data *);
static void kill_value (rtx, struct value_data *);
static void set_value_regno (unsigned, enum machine_mode, struct value_data *)
                              ;
static void init_value_data (struct value_data *);
static void kill_clobbered_value (rtx, rtx, void *);
static void kill_set_value (rtx, rtx, void *);
static int kill_autoinc_value (rtx *, void *);
static void copy_value (rtx, rtx, struct value_data *);
static _Bool mode_change_ok (enum machine_mode, enum machine_mode, unsigned int)
                      ;
static rtx find_oldest_value_reg (enum reg_class, rtx, struct value_data *)
                            ;
static _Bool replace_oldest_value_reg (rtx *, enum reg_class, rtx, struct value_data *)
                                ;
static _Bool replace_oldest_value_addr (rtx *, enum reg_class, enum machine_mode, rtx, struct value_data *)

                                 ;
static _Bool replace_oldest_value_mem (rtx, rtx, struct value_data *);
static _Bool copyprop_hardreg_forward_1 (basic_block, struct value_data *)
                            ;
extern void debug_value_data (struct value_data *);







static void
kill_value_regno (regno, vd)
     unsigned int regno;
     struct value_data *vd;
{
  unsigned int i, next;

  if (vd->e[regno].oldest_regno != regno)
    {
      for (i = vd->e[regno].oldest_regno;
    vd->e[i].next_regno != regno;
    i = vd->e[i].next_regno)
 continue;
      vd->e[i].next_regno = vd->e[regno].next_regno;
    }
  else if ((next = vd->e[regno].next_regno) != (~(unsigned int) 0))
    {
      for (i = next; i != (~(unsigned int) 0); i = vd->e[i].next_regno)
        vd->e[i].oldest_regno = next;
    }

  vd->e[regno].mode = VOIDmode;
  vd->e[regno].oldest_regno = regno;
  vd->e[regno].next_regno = (~(unsigned int) 0);




}




static void
kill_value (x, vd)
     rtx x;
     struct value_data *vd;
{





  if (((enum rtx_code) (x)->code) == SUBREG)
    x = simplify_subreg (((enum machine_mode) (x)->mode), (((x)->fld[0]).rtx),
    ((enum machine_mode) ((((x)->fld[0]).rtx))->mode), (((x)->fld[1]).rtuint));
  if ((((enum rtx_code) (x)->code) == REG))
    {
      unsigned int regno = (((x)->fld[0]).rtuint);
      unsigned int n = (((regno) >= 8 && (regno) <= (8 + 7)) || (((regno) >= (20 + 1) && (regno) <= ((20 + 1) + 7)) || ((regno) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) || ((regno) >= (((20 + 1) + 7) + 1) && (regno) <= ((((20 + 1) + 7) + 1) + 7)) ? (((mode_class[(int) (((enum machine_mode) (x)->mode))]) == MODE_COMPLEX_INT || (mode_class[(int) (((enum machine_mode) (x)->mode))]) == MODE_COMPLEX_FLOAT) ? 2 : 1) : ((((enum machine_mode) (x)->mode)) == TFmode ? ((target_flags & 0x02000000) ? 2 : 3) : (((enum machine_mode) (x)->mode)) == TCmode ? ((target_flags & 0x02000000) ? 4 : 6) : (((mode_size[(int) (((enum machine_mode) (x)->mode))]) + ((target_flags & 0x02000000) ? 8 : 4) - 1) / ((target_flags & 0x02000000) ? 8 : 4))));
      unsigned int i, j;


      for (i = 0; i < n; ++i)
 kill_value_regno (regno + i, vd);


      if (regno < vd->max_value_regs)
 j = 0;
      else
 j = regno - vd->max_value_regs;
      for (; j < regno; ++j)
 {
   if (vd->e[j].mode == VOIDmode)
     continue;
   n = (((j) >= 8 && (j) <= (8 + 7)) || (((j) >= (20 + 1) && (j) <= ((20 + 1) + 7)) || ((j) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (j) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) || ((j) >= (((20 + 1) + 7) + 1) && (j) <= ((((20 + 1) + 7) + 1) + 7)) ? (((mode_class[(int) (vd->e[j].mode)]) == MODE_COMPLEX_INT || (mode_class[(int) (vd->e[j].mode)]) == MODE_COMPLEX_FLOAT) ? 2 : 1) : ((vd->e[j].mode) == TFmode ? ((target_flags & 0x02000000) ? 2 : 3) : (vd->e[j].mode) == TCmode ? ((target_flags & 0x02000000) ? 4 : 6) : (((mode_size[(int) (vd->e[j].mode)]) + ((target_flags & 0x02000000) ? 8 : 4) - 1) / ((target_flags & 0x02000000) ? 8 : 4))));
   if (j + n > regno)
     for (i = 0; i < n; ++i)
       kill_value_regno (j + i, vd);
 }
    }
}



static void
set_value_regno (regno, mode, vd)
     unsigned int regno;
     enum machine_mode mode;
     struct value_data *vd;
{
  unsigned int nregs;

  vd->e[regno].mode = mode;

  nregs = (((regno) >= 8 && (regno) <= (8 + 7)) || (((regno) >= (20 + 1) && (regno) <= ((20 + 1) + 7)) || ((regno) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) || ((regno) >= (((20 + 1) + 7) + 1) && (regno) <= ((((20 + 1) + 7) + 1) + 7)) ? (((mode_class[(int) (mode)]) == MODE_COMPLEX_INT || (mode_class[(int) (mode)]) == MODE_COMPLEX_FLOAT) ? 2 : 1) : ((mode) == TFmode ? ((target_flags & 0x02000000) ? 2 : 3) : (mode) == TCmode ? ((target_flags & 0x02000000) ? 4 : 6) : (((mode_size[(int) (mode)]) + ((target_flags & 0x02000000) ? 8 : 4) - 1) / ((target_flags & 0x02000000) ? 8 : 4))));
  if (nregs > vd->max_value_regs)
    vd->max_value_regs = nregs;
}



static void
init_value_data (vd)
     struct value_data *vd;
{
  int i;
  for (i = 0; i < 53; ++i)
    {
      vd->e[i].mode = VOIDmode;
      vd->e[i].oldest_regno = i;
      vd->e[i].next_regno = (~(unsigned int) 0);
    }
  vd->max_value_regs = 0;
}



static void
kill_clobbered_value (x, set, data)
     rtx x;
     rtx set;
     void *data;
{
  struct value_data *vd = data;
  if (((enum rtx_code) (set)->code) == CLOBBER)
    kill_value (x, vd);
}




static void
kill_set_value (x, set, data)
     rtx x;
     rtx set;
     void *data;
{
  struct value_data *vd = data;
  if (((enum rtx_code) (set)->code) != CLOBBER)
    {
      kill_value (x, vd);
      if ((((enum rtx_code) (x)->code) == REG))
        set_value_regno ((((x)->fld[0]).rtuint), ((enum machine_mode) (x)->mode), vd);
    }
}





static int
kill_autoinc_value (px, data)
     rtx *px;
     void *data;
{
  rtx x = *px;
  struct value_data *vd = data;

  if ((rtx_class[(int) (((enum rtx_code) (x)->code))]) == 'a')
    {
      x = (((x)->fld[0]).rtx);
      kill_value (x, vd);
      set_value_regno ((((x)->fld[0]).rtuint), ((target_flags & 0x02000000) ? DImode : SImode), vd);
      return -1;
    }

  return 0;
}




static void
copy_value (dest, src, vd)
     rtx dest;
     rtx src;
     struct value_data *vd;
{
  unsigned int dr = (((dest)->fld[0]).rtuint);
  unsigned int sr = (((src)->fld[0]).rtuint);
  unsigned int dn, sn;
  unsigned int i;



  if (sr == dr)
    return;



  if (dr == 7)
    return;


  if (frame_pointer_needed && dr == 6)
    return;


  dn = (((dr) >= 8 && (dr) <= (8 + 7)) || (((dr) >= (20 + 1) && (dr) <= ((20 + 1) + 7)) || ((dr) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (dr) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) || ((dr) >= (((20 + 1) + 7) + 1) && (dr) <= ((((20 + 1) + 7) + 1) + 7)) ? (((mode_class[(int) (((enum machine_mode) (dest)->mode))]) == MODE_COMPLEX_INT || (mode_class[(int) (((enum machine_mode) (dest)->mode))]) == MODE_COMPLEX_FLOAT) ? 2 : 1) : ((((enum machine_mode) (dest)->mode)) == TFmode ? ((target_flags & 0x02000000) ? 2 : 3) : (((enum machine_mode) (dest)->mode)) == TCmode ? ((target_flags & 0x02000000) ? 4 : 6) : (((mode_size[(int) (((enum machine_mode) (dest)->mode))]) + ((target_flags & 0x02000000) ? 8 : 4) - 1) / ((target_flags & 0x02000000) ? 8 : 4))));
  sn = (((sr) >= 8 && (sr) <= (8 + 7)) || (((sr) >= (20 + 1) && (sr) <= ((20 + 1) + 7)) || ((sr) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (sr) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) || ((sr) >= (((20 + 1) + 7) + 1) && (sr) <= ((((20 + 1) + 7) + 1) + 7)) ? (((mode_class[(int) (((enum machine_mode) (dest)->mode))]) == MODE_COMPLEX_INT || (mode_class[(int) (((enum machine_mode) (dest)->mode))]) == MODE_COMPLEX_FLOAT) ? 2 : 1) : ((((enum machine_mode) (dest)->mode)) == TFmode ? ((target_flags & 0x02000000) ? 2 : 3) : (((enum machine_mode) (dest)->mode)) == TCmode ? ((target_flags & 0x02000000) ? 4 : 6) : (((mode_size[(int) (((enum machine_mode) (dest)->mode))]) + ((target_flags & 0x02000000) ? 8 : 4) - 1) / ((target_flags & 0x02000000) ? 8 : 4))));
  if ((dr > sr && dr < sr + sn)
      || (sr > dr && sr < dr + dn))
    return;




  if (vd->e[sr].mode == VOIDmode)
    set_value_regno (sr, vd->e[dr].mode, vd);




  else if (sn > (unsigned int) (((sr) >= 8 && (sr) <= (8 + 7)) || (((sr) >= (20 + 1) && (sr) <= ((20 + 1) + 7)) || ((sr) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (sr) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) || ((sr) >= (((20 + 1) + 7) + 1) && (sr) <= ((((20 + 1) + 7) + 1) + 7)) ? (((mode_class[(int) (vd->e[sr].mode)]) == MODE_COMPLEX_INT || (mode_class[(int) (vd->e[sr].mode)]) == MODE_COMPLEX_FLOAT) ? 2 : 1) : ((vd->e[sr].mode) == TFmode ? ((target_flags & 0x02000000) ? 2 : 3) : (vd->e[sr].mode) == TCmode ? ((target_flags & 0x02000000) ? 4 : 6) : (((mode_size[(int) (vd->e[sr].mode)]) + ((target_flags & 0x02000000) ? 8 : 4) - 1) / ((target_flags & 0x02000000) ? 8 : 4)))))
    return;



  vd->e[dr].oldest_regno = vd->e[sr].oldest_regno;

  for (i = sr; vd->e[i].next_regno != (~(unsigned int) 0); i = vd->e[i].next_regno)
    continue;
  vd->e[i].next_regno = dr;




}



static _Bool
mode_change_ok (orig_mode, new_mode, regno)
     enum machine_mode orig_mode, new_mode;
     unsigned int regno __attribute__ ((__unused__));
{
  if ((mode_size[(int) (orig_mode)]) < (mode_size[(int) (new_mode)]))
    return 0;







  return 1;
}





static rtx
find_oldest_value_reg (class, reg, vd)
     enum reg_class class;
     rtx reg;
     struct value_data *vd;
{
  unsigned int regno = (((reg)->fld[0]).rtuint);
  enum machine_mode mode = ((enum machine_mode) (reg)->mode);
  unsigned int i;
# 1330 "regrename.c"
  if (mode != vd->e[regno].mode)
    {
      if ((((regno) >= 8 && (regno) <= (8 + 7)) || (((regno) >= (20 + 1) && (regno) <= ((20 + 1) + 7)) || ((regno) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) || ((regno) >= (((20 + 1) + 7) + 1) && (regno) <= ((((20 + 1) + 7) + 1) + 7)) ? (((mode_class[(int) (mode)]) == MODE_COMPLEX_INT || (mode_class[(int) (mode)]) == MODE_COMPLEX_FLOAT) ? 2 : 1) : ((mode) == TFmode ? ((target_flags & 0x02000000) ? 2 : 3) : (mode) == TCmode ? ((target_flags & 0x02000000) ? 4 : 6) : (((mode_size[(int) (mode)]) + ((target_flags & 0x02000000) ? 8 : 4) - 1) / ((target_flags & 0x02000000) ? 8 : 4))))
   > (((regno) >= 8 && (regno) <= (8 + 7)) || (((regno) >= (20 + 1) && (regno) <= ((20 + 1) + 7)) || ((regno) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) || ((regno) >= (((20 + 1) + 7) + 1) && (regno) <= ((((20 + 1) + 7) + 1) + 7)) ? (((mode_class[(int) (vd->e[regno].mode)]) == MODE_COMPLEX_INT || (mode_class[(int) (vd->e[regno].mode)]) == MODE_COMPLEX_FLOAT) ? 2 : 1) : ((vd->e[regno].mode) == TFmode ? ((target_flags & 0x02000000) ? 2 : 3) : (vd->e[regno].mode) == TCmode ? ((target_flags & 0x02000000) ? 4 : 6) : (((mode_size[(int) (vd->e[regno].mode)]) + ((target_flags & 0x02000000) ? 8 : 4) - 1) / ((target_flags & 0x02000000) ? 8 : 4)))))
 return (rtx) 0;
    }

  for (i = vd->e[regno].oldest_regno; i != regno; i = vd->e[i].next_regno)
    if (((reg_class_contents[class]) & (((HARD_REG_ELT_TYPE) (1)) << (i)))
 && (vd->e[i].mode == mode
     || mode_change_ok (vd->e[i].mode, mode, i)))
      {
 rtx new = gen_rtx_fmt_i0 (REG, (mode), (i));
 (((new)->fld[1]).rtuint) = (((reg)->fld[1]).rtuint);
 return new;
      }

  return (rtx) 0;
}




static _Bool
replace_oldest_value_reg (loc, class, insn, vd)
     rtx *loc;
     enum reg_class class;
     rtx insn;
     struct value_data *vd;
{
  rtx new = find_oldest_value_reg (class, *loc, vd);
  if (new)
    {
      if (rtl_dump_file)
 fprintf (rtl_dump_file, "insn %u: replaced reg %u with %u\n",
   (((insn)->fld[0]).rtint), (((*loc)->fld[0]).rtuint), (((new)->fld[0]).rtuint));

      *loc = new;
      return 1;
    }
  return 0;
}





static _Bool
replace_oldest_value_addr (loc, class, mode, insn, vd)
     rtx *loc;
     enum reg_class class;
     enum machine_mode mode;
     rtx insn;
     struct value_data *vd;
{
  rtx x = *loc;
  enum rtx_code code = ((enum rtx_code) (x)->code);
  const char *fmt;
  int i, j;
  _Bool changed = 0;

  switch (code)
    {
    case PLUS:
      {
 rtx orig_op0 = (((x)->fld[0]).rtx);
 rtx orig_op1 = (((x)->fld[1]).rtx);
 enum rtx_code code0 = ((enum rtx_code) (orig_op0)->code);
 enum rtx_code code1 = ((enum rtx_code) (orig_op1)->code);
 rtx op0 = orig_op0;
 rtx op1 = orig_op1;
 rtx *locI = 
# 1401 "regrename.c" 3 4
            ((void *)0)
# 1401 "regrename.c"
                ;
 rtx *locB = 
# 1402 "regrename.c" 3 4
            ((void *)0)
# 1402 "regrename.c"
                ;

 if (((enum rtx_code) (op0)->code) == SUBREG)
   {
     op0 = (((op0)->fld[0]).rtx);
     code0 = ((enum rtx_code) (op0)->code);
   }

 if (((enum rtx_code) (op1)->code) == SUBREG)
   {
     op1 = (((op1)->fld[0]).rtx);
     code1 = ((enum rtx_code) (op1)->code);
   }

 if (code0 == MULT || code0 == SIGN_EXTEND || code0 == TRUNCATE
     || code0 == ZERO_EXTEND || code1 == MEM)
   {
     locI = &(((x)->fld[0]).rtx);
     locB = &(((x)->fld[1]).rtx);
   }
 else if (code1 == MULT || code1 == SIGN_EXTEND || code1 == TRUNCATE
   || code1 == ZERO_EXTEND || code0 == MEM)
   {
     locI = &(((x)->fld[1]).rtx);
     locB = &(((x)->fld[0]).rtx);
   }
 else if (code0 == CONST_INT || code0 == CONST
   || code0 == SYMBOL_REF || code0 == LABEL_REF)
   locB = &(((x)->fld[1]).rtx);
 else if (code1 == CONST_INT || code1 == CONST
   || code1 == SYMBOL_REF || code1 == LABEL_REF)
   locB = &(((x)->fld[0]).rtx);
 else if (code0 == REG && code1 == REG)
   {
     int index_op;

     if ((((((op0)->fld[0]).rtuint)) < 7 || ((((op0)->fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op0)->fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op0)->fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op0)->fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op0)->fld[0]).rtuint))] < 7)
  && (((((op1)->fld[0]).rtuint)) <= 7 || ((((op1)->fld[0]).rtuint)) == 16 || ((((op1)->fld[0]).rtuint)) == 20 || ((((op1)->fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op1)->fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] <= 7))
       index_op = 0;
     else if ((((((op1)->fld[0]).rtuint)) < 7 || ((((op1)->fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op1)->fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] < 7)
       && (((((op0)->fld[0]).rtuint)) <= 7 || ((((op0)->fld[0]).rtuint)) == 16 || ((((op0)->fld[0]).rtuint)) == 20 || ((((op0)->fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op0)->fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op0)->fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op0)->fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op0)->fld[0]).rtuint))] <= 7))
       index_op = 1;
     else if ((((((op1)->fld[0]).rtuint)) <= 7 || ((((op1)->fld[0]).rtuint)) == 16 || ((((op1)->fld[0]).rtuint)) == 20 || ((((op1)->fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op1)->fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] <= 7))
       index_op = 0;
     else if ((((((op0)->fld[0]).rtuint)) <= 7 || ((((op0)->fld[0]).rtuint)) == 16 || ((((op0)->fld[0]).rtuint)) == 20 || ((((op0)->fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op0)->fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op0)->fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op0)->fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op0)->fld[0]).rtuint))] <= 7))
       index_op = 1;
     else if ((((((op1)->fld[0]).rtuint)) < 7 || ((((op1)->fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op1)->fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op1)->fld[0]).rtuint))] < 7))
       index_op = 1;
     else
       index_op = 0;

     locI = &(((x)->fld[index_op]).rtx);
     locB = &(((x)->fld[!index_op]).rtx);
   }
 else if (code0 == REG)
   {
     locI = &(((x)->fld[0]).rtx);
     locB = &(((x)->fld[1]).rtx);
   }
 else if (code1 == REG)
   {
     locI = &(((x)->fld[1]).rtx);
     locB = &(((x)->fld[0]).rtx);
   }

 if (locI)
   changed |= replace_oldest_value_addr (locI, INDEX_REGS, mode,
             insn, vd);
 if (locB)
   changed |= replace_oldest_value_addr (locB,
      GENERAL_REGS,
      mode, insn, vd);
 return changed;
      }

    case POST_INC:
    case POST_DEC:
    case POST_MODIFY:
    case PRE_INC:
    case PRE_DEC:
    case PRE_MODIFY:
      return 0;

    case MEM:
      return replace_oldest_value_mem (x, insn, vd);

    case REG:
      return replace_oldest_value_reg (loc, class, insn, vd);

    default:
      break;
    }

  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 changed |= replace_oldest_value_addr (&(((x)->fld[i]).rtx), class, mode,
           insn, vd);
      else if (fmt[i] == 'E')
 for (j = (((((x)->fld[i]).rtvec))->num_elem) - 1; j >= 0; j--)
   changed |= replace_oldest_value_addr (&(((((x)->fld[i]).rtvec))->elem[j]), class,
             mode, insn, vd);
    }

  return changed;
}



static _Bool
replace_oldest_value_mem (x, insn, vd)
     rtx x;
     rtx insn;
     struct value_data *vd;
{
  return replace_oldest_value_addr (&(((x)->fld[0]).rtx),
        GENERAL_REGS,
        ((enum machine_mode) (x)->mode), insn, vd);
}



static _Bool
copyprop_hardreg_forward_1 (bb, vd)
     basic_block bb;
     struct value_data *vd;
{
  _Bool changed = 0;
  rtx insn;

  for (insn = bb->head; ; insn = (((insn)->fld[2]).rtx))
    {
      int n_ops, i, alt, predicated;
      _Bool is_asm;
      rtx set;

      if (! ((rtx_class[(int) (((enum rtx_code) (insn)->code))]) == 'i'))
 {
   if (insn == bb->end)
     break;
   else
     continue;
 }

      set = (((rtx_class[(int) (((enum rtx_code) (insn)->code))]) == 'i') ? (((enum rtx_code) ((((insn)->fld[3]).rtx))->code) == SET ? (((insn)->fld[3]).rtx) : single_set_2 (insn, (((insn)->fld[3]).rtx))) : (rtx) 0);
      extract_insn (insn);
      constrain_operands (1);
      preprocess_constraints ();
      alt = which_alternative;
      n_ops = recog_data.n_operands;
      is_asm = asm_noperands ((((insn)->fld[3]).rtx)) >= 0;





      predicated = ((enum rtx_code) ((((insn)->fld[3]).rtx))->code) == COND_EXEC;
      for (i = 0; i < n_ops; ++i)
 {
   int matches = recog_op_alt[i][alt].matches;
   if (matches >= 0)
     recog_op_alt[i][alt].class = recog_op_alt[matches][alt].class;
   if (matches >= 0 || recog_op_alt[i][alt].matched >= 0
       || (predicated && recog_data.operand_type[i] == OP_OUT))
     recog_data.operand_type[i] = OP_INOUT;
 }


      for (i = 0; i < n_ops; i++)
 if (recog_op_alt[i][alt].earlyclobber)
   kill_value (recog_data.operand[i], vd);




      note_stores ((((insn)->fld[3]).rtx), kill_clobbered_value, vd);



      for_each_rtx (&(((insn)->fld[3]).rtx), kill_autoinc_value, vd);


      for (i = 0; i < n_ops; i++)
 if (recog_op_alt[i][alt].earlyclobber)
   kill_value (recog_data.operand[i], vd);



      if (set && (((enum rtx_code) ((((set)->fld[1]).rtx))->code) == REG))
 {
   rtx src = (((set)->fld[1]).rtx);
   unsigned int regno = (((src)->fld[0]).rtuint);
   enum machine_mode mode = ((enum machine_mode) (src)->mode);
   unsigned int i;
   rtx new;



   if (mode != vd->e[regno].mode)
     {
       if ((((regno) >= 8 && (regno) <= (8 + 7)) || (((regno) >= (20 + 1) && (regno) <= ((20 + 1) + 7)) || ((regno) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) || ((regno) >= (((20 + 1) + 7) + 1) && (regno) <= ((((20 + 1) + 7) + 1) + 7)) ? (((mode_class[(int) (mode)]) == MODE_COMPLEX_INT || (mode_class[(int) (mode)]) == MODE_COMPLEX_FLOAT) ? 2 : 1) : ((mode) == TFmode ? ((target_flags & 0x02000000) ? 2 : 3) : (mode) == TCmode ? ((target_flags & 0x02000000) ? 4 : 6) : (((mode_size[(int) (mode)]) + ((target_flags & 0x02000000) ? 8 : 4) - 1) / ((target_flags & 0x02000000) ? 8 : 4))))
    > (((regno) >= 8 && (regno) <= (8 + 7)) || (((regno) >= (20 + 1) && (regno) <= ((20 + 1) + 7)) || ((regno) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) || ((regno) >= (((20 + 1) + 7) + 1) && (regno) <= ((((20 + 1) + 7) + 1) + 7)) ? (((mode_class[(int) (vd->e[regno].mode)]) == MODE_COMPLEX_INT || (mode_class[(int) (vd->e[regno].mode)]) == MODE_COMPLEX_FLOAT) ? 2 : 1) : ((vd->e[regno].mode) == TFmode ? ((target_flags & 0x02000000) ? 2 : 3) : (vd->e[regno].mode) == TCmode ? ((target_flags & 0x02000000) ? 4 : 6) : (((mode_size[(int) (vd->e[regno].mode)]) + ((target_flags & 0x02000000) ? 8 : 4) - 1) / ((target_flags & 0x02000000) ? 8 : 4)))))
  goto no_move_special_case;
     }



   if ((((enum rtx_code) ((((set)->fld[0]).rtx))->code) == REG))
     {
       new = find_oldest_value_reg ((regclass_map[regno]), src, vd);
       if (new && validate_change (insn, &(((set)->fld[1]).rtx), new, 0))
  {
    if (rtl_dump_file)
      fprintf (rtl_dump_file,
        "insn %u: replaced reg %u with %u\n",
        (((insn)->fld[0]).rtint), regno, (((new)->fld[0]).rtuint));
           changed = 1;
    goto did_replacement;
  }
     }


   for (i = vd->e[regno].oldest_regno; i != regno;
        i = vd->e[i].next_regno)
     if (vd->e[i].mode == mode
  || mode_change_ok (vd->e[i].mode, mode, i))
       {
  new = gen_rtx_fmt_i0 (REG, (mode), (i));
  if (validate_change (insn, &(((set)->fld[1]).rtx), new, 0))
    {
      (((new)->fld[1]).rtuint) = (((src)->fld[1]).rtuint);
      if (rtl_dump_file)
        fprintf (rtl_dump_file,
          "insn %u: replaced reg %u with %u\n",
          (((insn)->fld[0]).rtint), regno, (((new)->fld[0]).rtuint));
      changed = 1;
      goto did_replacement;
    }
       }
 }
      no_move_special_case:



      for (i = 0; i < n_ops; i++)
 {
   _Bool replaced = 0;




   if (recog_data.constraints[i][0] == '\0')
     continue;


   if (is_asm && ((enum rtx_code) (recog_data.operand[i])->code) == REG
       && ((((recog_data.operand[i])->fld[0]).rtuint)
    == (((recog_data.operand[i])->fld[1]).rtuint)))
     continue;

   if (recog_data.operand_type[i] == OP_IN)
     {
       if (recog_op_alt[i][alt].is_address)
  replaced
    = replace_oldest_value_addr (recog_data.operand_loc[i],
            recog_op_alt[i][alt].class,
            VOIDmode, insn, vd);
       else if ((((enum rtx_code) (recog_data.operand[i])->code) == REG))
  replaced
    = replace_oldest_value_reg (recog_data.operand_loc[i],
           recog_op_alt[i][alt].class,
           insn, vd);
       else if (((enum rtx_code) (recog_data.operand[i])->code) == MEM)
  replaced = replace_oldest_value_mem (recog_data.operand[i],
           insn, vd);
     }
   else if (((enum rtx_code) (recog_data.operand[i])->code) == MEM)
     replaced = replace_oldest_value_mem (recog_data.operand[i],
              insn, vd);


   if (replaced)
     {
       int j;
       rtx new;

       changed = 1;

       new = *recog_data.operand_loc[i];
       recog_data.operand[i] = new;
       for (j = 0; j < recog_data.n_dups; j++)
  if (recog_data.dup_num[j] == i)
    *recog_data.dup_loc[j] = new;
     }
 }

    did_replacement:

      if (((enum rtx_code) (insn)->code) == CALL_INSN)
 for (i = 0; i < 53; i++)
   if (((regs_invalidated_by_call) & (((HARD_REG_ELT_TYPE) (1)) << (i))))
     kill_value_regno (i, vd);


      note_stores ((((insn)->fld[3]).rtx), kill_set_value, vd);


      if (set && (((enum rtx_code) ((((set)->fld[0]).rtx))->code) == REG) && (((enum rtx_code) ((((set)->fld[1]).rtx))->code) == REG))
 copy_value ((((set)->fld[0]).rtx), (((set)->fld[1]).rtx), vd);

      if (insn == bb->end)
 break;
    }

  return changed;
}



void
copyprop_hardreg_forward ()
{
  struct value_data *all_vd;
  _Bool need_refresh;
  int b;

  need_refresh = 0;

  all_vd = xmalloc (sizeof (struct value_data) * n_basic_blocks);

  for (b = 0; b < n_basic_blocks; b++)
    {
      basic_block bb = (((basic_block_info)->data.bb[(b)]));





      if (bb->pred
   && ! bb->pred->pred_next
   && ! (bb->pred->flags & (4 | 8))
   && bb->pred->src->index != (-1)
   && bb->pred->src->index < b)
 all_vd[b] = all_vd[bb->pred->src->index];
      else
        init_value_data (all_vd + b);

      if (copyprop_hardreg_forward_1 (bb, all_vd + b))
 need_refresh = 1;
    }

  if (need_refresh)
    {
      if (rtl_dump_file)
 fputs ("\n\n", rtl_dump_file);




      delete_noop_moves (get_insns ());
      update_life_info (
# 1763 "regrename.c" 3 4
                       ((void *)0)
# 1763 "regrename.c"
                           , UPDATE_LIFE_GLOBAL_RM_NOTES,
   1
   | 16
   | 8);
    }

  free (all_vd);
}



void
debug_value_data (vd)
     struct value_data *vd;
{
  HARD_REG_ELT_TYPE set;
  unsigned int i, j;

  ((set) = ((HARD_REG_ELT_TYPE) (0)));

  for (i = 0; i < 53; ++i)
    if (vd->e[i].oldest_regno == i)
      {
 if (vd->e[i].mode == VOIDmode)
   {
     if (vd->e[i].next_regno != (~(unsigned int) 0))
       fprintf (
# 1789 "regrename.c" 3 4
               stderr
# 1789 "regrename.c"
                     , "[%u] Bad next_regno for empty chain (%u)\n",
         i, vd->e[i].next_regno);
     continue;
   }

 ((set) |= ((HARD_REG_ELT_TYPE) (1)) << (i));
 fprintf (
# 1795 "regrename.c" 3 4
         stderr
# 1795 "regrename.c"
               , "[%u %s] ", i, (mode_name[(int) (vd->e[i].mode)]));

 for (j = vd->e[i].next_regno;
      j != (~(unsigned int) 0);
      j = vd->e[j].next_regno)
   {
     if (((set) & (((HARD_REG_ELT_TYPE) (1)) << (j))))
       {
  fprintf (
# 1803 "regrename.c" 3 4
          stderr
# 1803 "regrename.c"
                , "[%u] Loop in regno chain\n", j);
  return;
       }

     if (vd->e[j].oldest_regno != i)
       {
  fprintf (
# 1809 "regrename.c" 3 4
          stderr
# 1809 "regrename.c"
                , "[%u] Bad oldest_regno (%u)\n",
    j, vd->e[j].oldest_regno);
  return;
       }
     ((set) |= ((HARD_REG_ELT_TYPE) (1)) << (j));
     fprintf (
# 1814 "regrename.c" 3 4
             stderr
# 1814 "regrename.c"
                   , "[%u %s] ", j, (mode_name[(int) (vd->e[j].mode)]));
   }
 fputc ('\n', 
# 1816 "regrename.c" 3 4
             stderr
# 1816 "regrename.c"
                   );
      }

  for (i = 0; i < 53; ++i)
    if (! ((set) & (((HARD_REG_ELT_TYPE) (1)) << (i)))
 && (vd->e[i].mode != VOIDmode
     || vd->e[i].oldest_regno != i
     || vd->e[i].next_regno != (~(unsigned int) 0)))
      fprintf (
# 1824 "regrename.c" 3 4
              stderr
# 1824 "regrename.c"
                    , "[%u] Non-empty reg in chain (%s %u %i)\n",
        i, (mode_name[(int) (vd->e[i].mode)]), vd->e[i].oldest_regno,
        vd->e[i].next_regno);
}

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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-17  9:38                       ` chenglulu
@ 2024-01-17  9:50                         ` Xi Ruoyao
  2024-01-17  9:57                           ` chenglulu
  0 siblings, 1 reply; 24+ messages in thread
From: Xi Ruoyao @ 2024-01-17  9:50 UTC (permalink / raw)
  To: chenglulu, gcc-patches; +Cc: i, xuchenghua

On Wed, 2024-01-17 at 17:38 +0800, chenglulu wrote:
> 
> 在 2024/1/13 下午9:05, Xi Ruoyao 写道:
> > 在 2024-01-13星期六的 15:01 +0800,chenglulu写道:
> > > 在 2024/1/12 下午7:42, Xi Ruoyao 写道:
> > > > 在 2024-01-12星期五的 09:46 +0800,chenglulu写道:
> > > > 
> > > > > > I found an issue bootstrapping GCC with -mcmodel=extreme in BOOT_CFLAGS:
> > > > > > we need a target hook to tell the generic code
> > > > > > UNSPEC_LA_PCREL_64_PART{1,2} are just a wrapper around symbols, or we'll
> > > > > > see millions lines of messages like
> > > > > > 
> > > > > > ../../gcc/gcc/tree.h:4171:1: note: non-delegitimized UNSPEC
> > > > > > UNSPEC_LA_PCREL_64_PART1 (42) found in variable location
> > > > > I build GCC with -mcmodel=extreme in BOOT_CFLAGS, but I haven't reproduced the problem you mentioned.
> > > > > 
> > > > >       $ ../configure --host=loongarch64-linux-gnu --target=loongarch64-linux-gnu --build=loongarch64-linux-gnu \
> > > > >           --with-arch=loongarch64 --with-abi=lp64d --enable-tls --enable-languages=c,c++,fortran,lto --enable-plugin \
> > > > >           --disable-multilib --disable-host-shared --enable-bootstrap --enable-checking=release
> > > > >       $ make BOOT_FLAGS="-mcmodel=extreme"
> > > > > 
> > > > > What did I do wrong?:-(
> > > > BOOT_CFLAGS, not BOOT_FLAGS :).
> > > > 
> > > This is so strange. My compilation here stopped due to syntax problems,
> > > 
> > > and I still haven't reproduced the information you mentioned about
> > > UNSPEC_LA_PCREL_64_PART1.
> > I used:
> > 
> > ../gcc/configure --with-system-zlib --disable-fixincludes \
> >                   --enable-default-ssp --enable-default-pie \
> >                   --disable-werror --disable-multilib \
> >                   --prefix=/home/xry111/gcc-dev
> > 
> > and then
> > 
> > make STAGE1_{C,CXX}FLAGS="-O2 -g" -j8 \
> >       BOOT_{C,CXX}FLAGS="-O2 -g -mcmodel=extreme" &| tee gcc-build.log
> > 
> > I guess "-g" is needed to reproduce the issue as well as the messages
> > were produced in dwarf generation.
> > 
> I have reproduced this problem, and it can be solved by adding a hook.
> 
> But unfortunately, when using '-mcmodel=extreme -mexplicit-relocs=always'
> 
> to test spec2006 403.gcc, an error will occur. Others have not been 
> tested yet.
> 
> I roughly debugged it, and the problem should be this:
> 
> The problem is that the address of the instruction ‘ldx.d $r12, $r25, 
> $r6’ is wrong.
> 
> Wrong assembly:
> 
>     5826         pcalau12i       $r13,%got_pc_hi20(recog_data)
>   5827         addi.d  $r12,$r0,%got_pc_lo12(recog_data)
>   5828         lu32i.d $r12,%got64_pc_lo20(recog_data)
>   5829         lu52i.d $r12,$r12,%got64_pc_hi12(recog_data)
>   5830         ldx.d   $r12,$r13,$r12
>   5831         ld.b    $r8,$r12,997
>   5832         .loc 1 829 18 discriminator 1 view .LVU1527
>   5833         ble     $r8,$r0,.L476
>   5834         ld.d    $r6,$r3,16
>   5835         ld.d    $r9,$r3,88
>   5836 .LBB189 = .
>   5837         .loc 1 839 24 view .LVU1528
>   5838         alsl.d  $r7,$r19,$r19,2
>   5839         ldx.d   $r12,$r25,$r6
>   5840         addi.d  $r17,$r3,120
>   5841 .LBE189 = .
>   5842         .loc 1 829 18 discriminator 1 view .LVU1529
>   5843         or      $r13,$r0,$r0
>   5844         addi.d  $r4,$r12,992
> 
> Assembly that works fine using macros:
> 
> 3040         la.global       $r12,$r13,recog_data
> 3041         ld.b    $r9,$r12,997
> 3042         ble     $r9,$r0,.L475
> 3043         alsl.d  $r5,$r16,$r16,2
> 3044         la.global       $r15,$r17,recog_data
> 3045         addi.d  $r4,$r12,992
> 3046         addi.d  $r18,$r3,48
> 3047         or      $r13,$r0,$r0
> 
> Comparing the assembly, we can see that lines 5844 and 3045 have the 
> same function,
> 
> but there is a problem with the base address register optimization at 
> line 5844.
> 
> regrename.c.283r.loop2_init:
> 
> (insn 6 497 2741 34 (set (reg:DI 180 [ ivtmp.713D.15724 ])
>          (const_int 0 [0])) "regrename.c":829:18 discrim 1 156 
> {*movdi_64bit}
> (nil))
> (insn 2741 6 2744 34 (parallel [
>              (set (reg:DI 1502)
>                  (unspec:DI [
>                          (symbol_ref:DI ("recog_data") [flags 0xc0]  
> <var_decl 0x7f8c5ffd66c0 recog_data>)
>                      ] UNSPEC_LA_PCREL_64_PART1))
>              (set (reg/f:DI 1479)
>                  (unspec:DI [
>                          (symbol_ref:DI ("recog_data") [flags 0xc0]  
> <var_decl 0x7f8c5ffd66c0 recog_data>)
>                      ] UNSPEC_LA_PCREL_64_PART2))
>          ]) -1
>       (expr_list:REG_UNUSED (reg/f:DI 1479)
> (nil)))
> (insn 2744 2741 2745 34 (set (reg/f:DI 1503)
>          (mem:DI (plus:DI (reg/f:DI 1479)
>                  (reg:DI 1502)) [0  S8 A8])) 156 {*movdi_64bit}
>       (expr_list:REG_EQUAL (symbol_ref:DI ("recog_data") [flags 0xc0] 
> <var_decl 0x7f8c5ffd66c0 recog_data>)
> (nil)))
> 
> 
> Virtual register 1479 will be used in insn 2744, but register 1479 was
> assigned the REG_UNUSED attribute in the previous instruction.
> 
> The attached file is the wrong file.
> The compilation command is as follows:
> 
> $ ./gcc/cc1 -fpreprocessed regrename.i -quiet -dp -dumpbase regrename.c 
> -dumpbase-ext .c -mno-relax -mabi=lp64d -march=loongarch64 -mfpu=64 
> -msimd=lasx -mcmodel=extreme -mtune=loongarch64 -g3 -O2 
> -Wno-int-conversion -Wno-implicit-int -Wno-implicit-function-declaration 
> -Wno-incompatible-pointer-types -version -o regrename.s 
> -mexplicit-relocs=always -fdump-rtl-all-all

I've seen some "guality" test failures in GCC test suite as well. 
Normally I just ignore the guality failures but this time they look very
suspicious.  I'll investigate these issues...

-- 
Xi Ruoyao <xry111@xry111.site>
School of Aerospace Science and Technology, Xidian University

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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-17  9:50                         ` Xi Ruoyao
@ 2024-01-17  9:57                           ` chenglulu
  2024-01-19  5:46                             ` Xi Ruoyao
  0 siblings, 1 reply; 24+ messages in thread
From: chenglulu @ 2024-01-17  9:57 UTC (permalink / raw)
  To: Xi Ruoyao, gcc-patches; +Cc: i, xuchenghua


在 2024/1/17 下午5:50, Xi Ruoyao 写道:
> On Wed, 2024-01-17 at 17:38 +0800, chenglulu wrote:
>> 在 2024/1/13 下午9:05, Xi Ruoyao 写道:
>>> 在 2024-01-13星期六的 15:01 +0800,chenglulu写道:
>>>> 在 2024/1/12 下午7:42, Xi Ruoyao 写道:
>>>>> 在 2024-01-12星期五的 09:46 +0800,chenglulu写道:
>>>>>
>>>>>>> I found an issue bootstrapping GCC with -mcmodel=extreme in BOOT_CFLAGS:
>>>>>>> we need a target hook to tell the generic code
>>>>>>> UNSPEC_LA_PCREL_64_PART{1,2} are just a wrapper around symbols, or we'll
>>>>>>> see millions lines of messages like
>>>>>>>
>>>>>>> ../../gcc/gcc/tree.h:4171:1: note: non-delegitimized UNSPEC
>>>>>>> UNSPEC_LA_PCREL_64_PART1 (42) found in variable location
>>>>>> I build GCC with -mcmodel=extreme in BOOT_CFLAGS, but I haven't reproduced the problem you mentioned.
>>>>>>
>>>>>>        $ ../configure --host=loongarch64-linux-gnu --target=loongarch64-linux-gnu --build=loongarch64-linux-gnu \
>>>>>>            --with-arch=loongarch64 --with-abi=lp64d --enable-tls --enable-languages=c,c++,fortran,lto --enable-plugin \
>>>>>>            --disable-multilib --disable-host-shared --enable-bootstrap --enable-checking=release
>>>>>>        $ make BOOT_FLAGS="-mcmodel=extreme"
>>>>>>
>>>>>> What did I do wrong?:-(
>>>>> BOOT_CFLAGS, not BOOT_FLAGS :).
>>>>>
>>>> This is so strange. My compilation here stopped due to syntax problems,
>>>>
>>>> and I still haven't reproduced the information you mentioned about
>>>> UNSPEC_LA_PCREL_64_PART1.
>>> I used:
>>>
>>> ../gcc/configure --with-system-zlib --disable-fixincludes \
>>>                    --enable-default-ssp --enable-default-pie \
>>>                    --disable-werror --disable-multilib \
>>>                    --prefix=/home/xry111/gcc-dev
>>>
>>> and then
>>>
>>> make STAGE1_{C,CXX}FLAGS="-O2 -g" -j8 \
>>>        BOOT_{C,CXX}FLAGS="-O2 -g -mcmodel=extreme" &| tee gcc-build.log
>>>
>>> I guess "-g" is needed to reproduce the issue as well as the messages
>>> were produced in dwarf generation.
>>>
>> I have reproduced this problem, and it can be solved by adding a hook.
>>
>> But unfortunately, when using '-mcmodel=extreme -mexplicit-relocs=always'
>>
>> to test spec2006 403.gcc, an error will occur. Others have not been
>> tested yet.
>>
>> I roughly debugged it, and the problem should be this:
>>
>> The problem is that the address of the instruction ‘ldx.d $r12, $r25,
>> $r6’ is wrong.
>>
>> Wrong assembly:
>>
>>      5826         pcalau12i       $r13,%got_pc_hi20(recog_data)
>>    5827         addi.d  $r12,$r0,%got_pc_lo12(recog_data)
>>    5828         lu32i.d $r12,%got64_pc_lo20(recog_data)
>>    5829         lu52i.d $r12,$r12,%got64_pc_hi12(recog_data)
>>    5830         ldx.d   $r12,$r13,$r12
>>    5831         ld.b    $r8,$r12,997
>>    5832         .loc 1 829 18 discriminator 1 view .LVU1527
>>    5833         ble     $r8,$r0,.L476
>>    5834         ld.d    $r6,$r3,16
>>    5835         ld.d    $r9,$r3,88
>>    5836 .LBB189 = .
>>    5837         .loc 1 839 24 view .LVU1528
>>    5838         alsl.d  $r7,$r19,$r19,2
>>    5839         ldx.d   $r12,$r25,$r6
>>    5840         addi.d  $r17,$r3,120
>>    5841 .LBE189 = .
>>    5842         .loc 1 829 18 discriminator 1 view .LVU1529
>>    5843         or      $r13,$r0,$r0
>>    5844         addi.d  $r4,$r12,992
>>
>> Assembly that works fine using macros:
>>
>> 3040         la.global       $r12,$r13,recog_data
>> 3041         ld.b    $r9,$r12,997
>> 3042         ble     $r9,$r0,.L475
>> 3043         alsl.d  $r5,$r16,$r16,2
>> 3044         la.global       $r15,$r17,recog_data
>> 3045         addi.d  $r4,$r12,992
>> 3046         addi.d  $r18,$r3,48
>> 3047         or      $r13,$r0,$r0
>>
>> Comparing the assembly, we can see that lines 5844 and 3045 have the
>> same function,
>>
>> but there is a problem with the base address register optimization at
>> line 5844.
>>
>> regrename.c.283r.loop2_init:
>>
>> (insn 6 497 2741 34 (set (reg:DI 180 [ ivtmp.713D.15724 ])
>>           (const_int 0 [0])) "regrename.c":829:18 discrim 1 156
>> {*movdi_64bit}
>> (nil))
>> (insn 2741 6 2744 34 (parallel [
>>               (set (reg:DI 1502)
>>                   (unspec:DI [
>>                           (symbol_ref:DI ("recog_data") [flags 0xc0]
>> <var_decl 0x7f8c5ffd66c0 recog_data>)
>>                       ] UNSPEC_LA_PCREL_64_PART1))
>>               (set (reg/f:DI 1479)
>>                   (unspec:DI [
>>                           (symbol_ref:DI ("recog_data") [flags 0xc0]
>> <var_decl 0x7f8c5ffd66c0 recog_data>)
>>                       ] UNSPEC_LA_PCREL_64_PART2))
>>           ]) -1
>>        (expr_list:REG_UNUSED (reg/f:DI 1479)
>> (nil)))
>> (insn 2744 2741 2745 34 (set (reg/f:DI 1503)
>>           (mem:DI (plus:DI (reg/f:DI 1479)
>>                   (reg:DI 1502)) [0  S8 A8])) 156 {*movdi_64bit}
>>        (expr_list:REG_EQUAL (symbol_ref:DI ("recog_data") [flags 0xc0]
>> <var_decl 0x7f8c5ffd66c0 recog_data>)
>> (nil)))
>>
>>
>> Virtual register 1479 will be used in insn 2744, but register 1479 was
>> assigned the REG_UNUSED attribute in the previous instruction.
>>
>> The attached file is the wrong file.
>> The compilation command is as follows:
>>
>> $ ./gcc/cc1 -fpreprocessed regrename.i -quiet -dp -dumpbase regrename.c
>> -dumpbase-ext .c -mno-relax -mabi=lp64d -march=loongarch64 -mfpu=64
>> -msimd=lasx -mcmodel=extreme -mtune=loongarch64 -g3 -O2
>> -Wno-int-conversion -Wno-implicit-int -Wno-implicit-function-declaration
>> -Wno-incompatible-pointer-types -version -o regrename.s
>> -mexplicit-relocs=always -fdump-rtl-all-all
> I've seen some "guality" test failures in GCC test suite as well.
> Normally I just ignore the guality failures but this time they look very
> suspicious.  I'll investigate these issues...
>
I've also seen this type of failed regression tests and I'll continue to 
look at this issue as well.


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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-17  9:57                           ` chenglulu
@ 2024-01-19  5:46                             ` Xi Ruoyao
  2024-01-19  8:51                               ` chenglulu
  0 siblings, 1 reply; 24+ messages in thread
From: Xi Ruoyao @ 2024-01-19  5:46 UTC (permalink / raw)
  To: chenglulu, gcc-patches; +Cc: i, xuchenghua

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

On Wed, 2024-01-17 at 17:57 +0800, chenglulu wrote:
> > > Virtual register 1479 will be used in insn 2744, but register 1479 was
> > > assigned the REG_UNUSED attribute in the previous instruction.
> > > 
> > > The attached file is the wrong file.
> > > The compilation command is as follows:
> > > 
> > > $ ./gcc/cc1 -fpreprocessed regrename.i -quiet -dp -dumpbase regrename.c
> > > -dumpbase-ext .c -mno-relax -mabi=lp64d -march=loongarch64 -mfpu=64
> > > -msimd=lasx -mcmodel=extreme -mtune=loongarch64 -g3 -O2
> > > -Wno-int-conversion -Wno-implicit-int -Wno-implicit-function-declaration
> > > -Wno-incompatible-pointer-types -version -o regrename.s
> > > -mexplicit-relocs=always -fdump-rtl-all-all
> > I've seen some "guality" test failures in GCC test suite as well.
> > Normally I just ignore the guality failures but this time they look very
> > suspicious.  I'll investigate these issues...
> > 
> I've also seen this type of failed regression tests and I'll continue to 
> look at this issue as well.

The guality regression is simple: I didn't call
delegitimize_mem_from_attrs (the default TARGET_DELEGITIMIZE_ADDRESS) in
the custom implementation.

The failure of this test case was because the compiler believes that two
(UNSPEC_PCREL_64_PART2 [(symbol)]) instances would always produce the
same result, but this isn't true because the result depends on PC.  Thus
(pc) needed to be included in the RTX, like:

  [(set (match_operand:DI 0 "register_operand" "=r")
    (unspec:DI [(match_operand:DI 2 "") (pc)] UNSPEC_LA_PCREL_64_PART1))
   (set (match_operand:DI 1 "register_operand" "=r")
    (unspec:DI [(match_dup 2) (pc)] UNSPEC_LA_PCREL_64_PART2))]

With this the buggy REG_UNUSED notes were gone.  But it then prevented
the CSE when loading the address of __tls_get_addr (i.e. if we address
10 TLE_LD symbols in a function it would emit 10 instances of "la.global
__tls_get_addr") so I added an REG_EQUAL note for it.  For symbols other
than __tls_get_addr such notes are added automatically by optimization
passes.

Updated patch attached.

-- 
Xi Ruoyao <xry111@xry111.site>
School of Aerospace Science and Technology, Xidian University

[-- Attachment #2: v2-0001-LoongArch-Don-t-split-the-instructions-containing.patch --]
[-- Type: text/x-patch, Size: 17753 bytes --]

From e9d789f8dcb52984b0f894fdecc402a49c5ad6d7 Mon Sep 17 00:00:00 2001
From: Xi Ruoyao <xry111@xry111.site>
Date: Fri, 5 Jan 2024 18:40:06 +0800
Subject: [PATCH v2] LoongArch: Don't split the instructions containing relocs
 for extreme code model

The ABI mandates the pcalau12i/addi.d/lu32i.d/lu52i.d instructions for
addressing a symbol to be adjacent.  So model them as "one large
instruction", i.e. define_insn, with two output registers.  The real
address is the sum of these two registers.

The advantage of this approach is the RTL passes can still use ldx/stx
instructions to skip an addi.d instruction.

gcc/ChangeLog:

	* config/loongarch/loongarch.md (unspec): Add
	UNSPEC_LA_PCREL_64_PART1 and UNSPEC_LA_PCREL_64_PART2.
	(la_pcrel64_two_parts): New define_insn.
	* config/loongarch/loongarch.cc (loongarch_tls_symbol): Fix a
	typo in the comment.
	(loongarch_call_tls_get_addr): If TARGET_CMODEL_EXTREME, use
	la_pcrel64_two_parts for addressing the TLS symbol and
	__tls_get_addr.  Emit an REG_EQUAL note to allow CSE addressing
	__tls_get_addr.
	(loongarch_legitimize_tls_address): If TARGET_CMODEL_EXTREME,
	address TLS IE symbols with la_pcrel64_two_parts.
	(loongarch_split_symbol): If TARGET_CMODEL_EXTREME, address
	symbols with la_pcrel64_two_parts.
	(TARGET_DELEGITIMIZE_ADDRESS): Define.
	(loongarch_delegitimize_address): Implement the target hook.

gcc/testsuite/ChangeLog:

	* gcc.target/loongarch/func-call-extreme-1.c (dg-options):
	Use -O2 instead of -O0 to ensure the pcalau12i/addi/lu32i/lu52i
	instruction sequences are not reordered by the compiler.
	(NOIPA): Disallow interprocedural optimizations.
	* gcc.target/loongarch/func-call-extreme-2.c: Remove the content
	duplicated from func-call-extreme-1.c, include it instead.
	(dg-options): Likewise.
	* gcc.target/loongarch/func-call-extreme-3.c (dg-options):
	Likewise.
	* gcc.target/loongarch/func-call-extreme-4.c (dg-options):
	Likewise.
	* gcc.target/loongarch/cmodel-extreme-1.c: New test.
	* gcc.target/loongarch/cmodel-extreme-2.c: New test.
---
 gcc/config/loongarch/loongarch.cc             | 135 +++++++++++-------
 gcc/config/loongarch/loongarch.md             |  21 +++
 .../gcc.target/loongarch/cmodel-extreme-1.c   |  18 +++
 .../gcc.target/loongarch/cmodel-extreme-2.c   |   7 +
 .../loongarch/func-call-extreme-1.c           |  14 +-
 .../loongarch/func-call-extreme-2.c           |  29 +---
 .../loongarch/func-call-extreme-3.c           |   2 +-
 .../loongarch/func-call-extreme-4.c           |   2 +-
 8 files changed, 144 insertions(+), 84 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c
 create mode 100644 gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c

diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc
index 82467474288..358d2f8f3f5 100644
--- a/gcc/config/loongarch/loongarch.cc
+++ b/gcc/config/loongarch/loongarch.cc
@@ -2733,7 +2733,7 @@ loongarch_add_offset (rtx temp, rtx reg, HOST_WIDE_INT offset)
   return plus_constant (Pmode, reg, offset);
 }
 
-/* The __tls_get_attr symbol.  */
+/* The __tls_get_addr symbol.  */
 static GTY (()) rtx loongarch_tls_symbol;
 
 /* Load an entry from the GOT for a TLS GD access.  */
@@ -2791,22 +2791,22 @@ loongarch_call_tls_get_addr (rtx sym, enum loongarch_symbol_type type, rtx v0)
 
   if (la_opt_explicit_relocs != EXPLICIT_RELOCS_NONE)
     {
-      /* Split tls symbol to high and low.  */
-      rtx high = gen_rtx_HIGH (Pmode, copy_rtx (loc));
-      high = loongarch_force_temporary (tmp, high);
-
       if (TARGET_CMODEL_EXTREME)
 	{
-	  gcc_assert (TARGET_EXPLICIT_RELOCS);
+	  rtx part1 = gen_reg_rtx (Pmode);
+	  rtx part2 = gen_reg_rtx (Pmode);
 
-	  rtx tmp1 = gen_reg_rtx (Pmode);
-	  emit_insn (gen_tls_low (Pmode, tmp1, gen_rtx_REG (Pmode, 0), loc));
-	  emit_insn (gen_lui_h_lo20 (tmp1, tmp1, loc));
-	  emit_insn (gen_lui_h_hi12 (tmp1, tmp1, loc));
-	  emit_move_insn (a0, gen_rtx_PLUS (Pmode, high, tmp1));
+	  emit_insn (gen_la_pcrel64_two_parts (part1, part2, loc));
+	  emit_move_insn (a0, gen_rtx_PLUS (Pmode, part1, part2));
 	}
       else
-	emit_insn (gen_tls_low (Pmode, a0, high, loc));
+	{
+	  /* Split tls symbol to high and low.  */
+	  rtx high = gen_rtx_HIGH (Pmode, copy_rtx (loc));
+
+	  high = loongarch_force_temporary (tmp, high);
+	  emit_insn (gen_tls_low (Pmode, a0, high, loc));
+	}
     }
   else
     {
@@ -2883,22 +2883,27 @@ loongarch_call_tls_get_addr (rtx sym, enum loongarch_symbol_type type, rtx v0)
 
 	case CMODEL_EXTREME:
 	    {
-	      gcc_assert (TARGET_EXPLICIT_RELOCS);
-
-	      rtx tmp1 = gen_reg_rtx (Pmode);
-	      rtx high = gen_reg_rtx (Pmode);
-
-	      loongarch_emit_move (high,
-				   gen_rtx_HIGH (Pmode, loongarch_tls_symbol));
-	      loongarch_emit_move (tmp1, gen_rtx_LO_SUM (Pmode,
-							 gen_rtx_REG (Pmode, 0),
-							 loongarch_tls_symbol));
-	      emit_insn (gen_lui_h_lo20 (tmp1, tmp1, loongarch_tls_symbol));
-	      emit_insn (gen_lui_h_hi12 (tmp1, tmp1, loongarch_tls_symbol));
+	      gcc_assert (la_opt_explicit_relocs != EXPLICIT_RELOCS_NONE);
+
+	      rtx part1 = gen_reg_rtx (Pmode);
+	      rtx part2 = gen_reg_rtx (Pmode);
+
+	      emit_insn (gen_la_pcrel64_two_parts (part1, part2,
+						   loongarch_tls_symbol));
 	      loongarch_emit_move (dest,
 				   gen_rtx_MEM (Pmode,
 						gen_rtx_PLUS (Pmode,
-							      high, tmp1)));
+							      part1,
+							      part2)));
+
+	      /* Put an REG_EQUAL note here to allow CSE (storing
+		 part1 + part2, i.e. the address of tls_get_addr into a
+		 saved register and use it for multiple TLS accesses).  */
+	      rtx sum = gen_rtx_UNSPEC (
+		Pmode, gen_rtvec (1, loongarch_tls_symbol),
+		UNSPEC_ADDRESS_FIRST
+		+ loongarch_classify_symbol (loongarch_tls_symbol));
+	      set_unique_reg_note (get_last_insn (), REG_EQUAL, sum);
 	    }
 	  break;
 
@@ -2957,26 +2962,31 @@ loongarch_legitimize_tls_address (rtx loc)
 	  if (la_opt_explicit_relocs != EXPLICIT_RELOCS_NONE)
 	    {
 	      tmp2 = loongarch_unspec_address (loc, SYMBOL_TLS_IE);
-	      tmp3 = gen_reg_rtx (Pmode);
-	      rtx high = gen_rtx_HIGH (Pmode, copy_rtx (tmp2));
-	      high = loongarch_force_temporary (tmp3, high);
 
 	      if (TARGET_CMODEL_EXTREME)
 		{
-		  gcc_assert (TARGET_EXPLICIT_RELOCS);
+		  gcc_assert (la_opt_explicit_relocs
+			      != EXPLICIT_RELOCS_NONE);
+
+		  rtx part1 = gen_reg_rtx (Pmode);
+		  rtx part2 = gen_reg_rtx (Pmode);
 
-		  rtx tmp3 = gen_reg_rtx (Pmode);
-		  emit_insn (gen_tls_low (Pmode, tmp3,
-					  gen_rtx_REG (Pmode, 0), tmp2));
-		  emit_insn (gen_lui_h_lo20 (tmp3, tmp3, tmp2));
-		  emit_insn (gen_lui_h_hi12 (tmp3, tmp3, tmp2));
+		  emit_insn (gen_la_pcrel64_two_parts (part1, part2,
+						       tmp2));
 		  emit_move_insn (tmp1,
 				  gen_rtx_MEM (Pmode,
 					       gen_rtx_PLUS (Pmode,
-							     high, tmp3)));
+							     part1,
+							     part2)));
 		}
 	      else
-		emit_insn (gen_ld_from_got (Pmode, tmp1, high, tmp2));
+		{
+		  tmp3 = gen_reg_rtx (Pmode);
+		  rtx high = gen_rtx_HIGH (Pmode, copy_rtx (tmp2));
+
+		  high = loongarch_force_temporary (tmp3, high);
+		  emit_insn (gen_ld_from_got (Pmode, tmp1, high, tmp2));
+		}
 	    }
 	  else
 	    emit_insn (loongarch_got_load_tls_ie (tmp1, loc));
@@ -3036,7 +3046,8 @@ loongarch_legitimize_tls_address (rtx loc)
 
 	      if (TARGET_CMODEL_EXTREME)
 		{
-		  gcc_assert (TARGET_EXPLICIT_RELOCS);
+		  gcc_assert (la_opt_explicit_relocs
+			      != EXPLICIT_RELOCS_NONE);
 
 		  emit_insn (gen_lui_h_lo20 (tmp1, tmp1, tmp2));
 		  emit_insn (gen_lui_h_hi12 (tmp1, tmp1, tmp2));
@@ -3157,24 +3168,23 @@ loongarch_split_symbol (rtx temp, rtx addr, machine_mode mode, rtx *low_out)
       || !loongarch_split_symbol_type (symbol_type))
     return false;
 
-  rtx high, temp1 = NULL;
+  rtx high;
 
   if (temp == NULL)
     temp = gen_reg_rtx (Pmode);
 
-  /* Get the 12-31 bits of the address.  */
-  high = gen_rtx_HIGH (Pmode, copy_rtx (addr));
-  high = loongarch_force_temporary (temp, high);
-
   if (loongarch_symbol_extreme_p (symbol_type) && can_create_pseudo_p ())
     {
       gcc_assert (la_opt_explicit_relocs != EXPLICIT_RELOCS_NONE);
 
-      temp1 = gen_reg_rtx (Pmode);
-      emit_move_insn (temp1, gen_rtx_LO_SUM (Pmode, gen_rtx_REG (Pmode, 0),
-					     addr));
-      emit_insn (gen_lui_h_lo20 (temp1, temp1, addr));
-      emit_insn (gen_lui_h_hi12 (temp1, temp1, addr));
+      high = gen_reg_rtx (Pmode);
+      emit_insn (gen_la_pcrel64_two_parts (high, temp, addr));
+    }
+  else
+    {
+      /* Get the 12-31 bits of the address.  */
+      high = gen_rtx_HIGH (Pmode, copy_rtx (addr));
+      high = loongarch_force_temporary (temp, high);
     }
 
   if (low_out)
@@ -3183,7 +3193,7 @@ loongarch_split_symbol (rtx temp, rtx addr, machine_mode mode, rtx *low_out)
       case SYMBOL_PCREL64:
 	if (can_create_pseudo_p ())
 	  {
-	    *low_out = gen_rtx_PLUS (Pmode, high, temp1);
+	    *low_out = gen_rtx_PLUS (Pmode, high, temp);
 	    break;
 	  }
 	/* fall through */
@@ -3195,7 +3205,8 @@ loongarch_split_symbol (rtx temp, rtx addr, machine_mode mode, rtx *low_out)
 	/* SYMBOL_GOT_DISP symbols are loaded from the GOT.  */
 	{
 	  if (TARGET_CMODEL_EXTREME && can_create_pseudo_p ())
-	    *low_out = gen_rtx_MEM (Pmode, gen_rtx_PLUS (Pmode, high, temp1));
+	    *low_out = gen_rtx_MEM (Pmode, gen_rtx_PLUS (Pmode, high,
+							 temp));
 	  else
 	    {
 	      rtx low = gen_rtx_LO_SUM (Pmode, high, addr);
@@ -10932,6 +10943,28 @@ loongarch_asm_code_end (void)
 #undef DUMP_FEATURE
 }
 
+static rtx
+loongarch_delegitimize_address (rtx op)
+{
+  /* Call the default address delegitimizer first.  */
+  op = delegitimize_mem_from_attrs (op);
+
+  if (GET_CODE (op) == UNSPEC)
+  {
+    int unspec = XINT (op, 1);
+    switch (unspec)
+      {
+      case UNSPEC_LA_PCREL_64_PART1:
+      case UNSPEC_LA_PCREL_64_PART2:
+	return XVECEXP (op, 0, 0);
+      default:
+	return op;
+      }
+  }
+
+  return op;
+}
+
 /* Initialize the GCC target structure.  */
 #undef TARGET_ASM_ALIGNED_HI_OP
 #define TARGET_ASM_ALIGNED_HI_OP "\t.half\t"
@@ -11197,6 +11230,10 @@ loongarch_asm_code_end (void)
 #define TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT \
   loongarch_builtin_support_vector_misalignment
 
+#undef TARGET_DELEGITIMIZE_ADDRESS
+#define TARGET_DELEGITIMIZE_ADDRESS \
+  loongarch_delegitimize_address
+
 struct gcc_target targetm = TARGET_INITIALIZER;
 
 #include "gt-loongarch.h"
diff --git a/gcc/config/loongarch/loongarch.md b/gcc/config/loongarch/loongarch.md
index dda3cdf8be5..6d8eda4dff4 100644
--- a/gcc/config/loongarch/loongarch.md
+++ b/gcc/config/loongarch/loongarch.md
@@ -85,6 +85,9 @@ (define_c_enum "unspec" [
 
   UNSPEC_SIBCALL_VALUE_MULTIPLE_INTERNAL_1
   UNSPEC_CALL_VALUE_MULTIPLE_INTERNAL_1
+
+  UNSPEC_LA_PCREL_64_PART1
+  UNSPEC_LA_PCREL_64_PART2
 ])
 
 (define_c_enum "unspecv" [
@@ -2185,6 +2188,24 @@ (define_insn_and_split "*movdi_64bit"
   [(set_attr "move_type" "move,const,load,store,mgtf,fpload,mftg,fpstore")
    (set_attr "mode" "DI")])
 
+;; The 64-bit PC-relative part of address loading.
+;; Note that the psABI does not allow splitting it.
+(define_insn "la_pcrel64_two_parts"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+	(unspec:DI [(match_operand:DI 2 "") (pc)] UNSPEC_LA_PCREL_64_PART1))
+   (set (match_operand:DI 1 "register_operand" "=r")
+	(unspec:DI [(match_dup 2) (pc)] UNSPEC_LA_PCREL_64_PART2))]
+  "TARGET_ABI_LP64 && la_opt_explicit_relocs != EXPLICIT_RELOCS_NONE"
+  {
+    return "pcalau12i\t%0,%r2\n\t"
+	   "addi.d\t%1,$r0,%L2\n\t"
+	   "lu32i.d\t%1,%R2\n\t"
+	   "lu52i.d\t%1,%1,%H2";
+  }
+  [(set_attr "move_type" "move")
+   (set_attr "mode" "DI")
+   (set_attr "length" "16")])
+
 ;; 32-bit Integer moves
 
 (define_expand "movsi"
diff --git a/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c b/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c
new file mode 100644
index 00000000000..564ee4017f7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -fno-plt -mexplicit-relocs=always -fdump-rtl-final" } */
+
+int a;
+extern int b;
+__thread int c __attribute__ ((tls_model ("local-exec")));
+__thread int d __attribute__ ((tls_model ("initial-exec")));
+__thread int e __attribute__ ((tls_model ("local-dynamic")));
+__thread int f __attribute__ ((tls_model ("global-dynamic")));
+
+void
+test (void)
+{
+  a = b + c + d + e + f;
+}
+
+/* a, b, d, e, f, and __tls_get_addr.  */
+/* { dg-final { scan-rtl-dump-times "la_pcrel64_two_parts" 6 "final" } } */
diff --git a/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c b/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c
new file mode 100644
index 00000000000..ce834805f38
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -fno-plt -mexplicit-relocs=auto -fdump-rtl-final" } */
+
+#include "cmodel-extreme-1.c"
+
+/* a, b, d, e, f, and __tls_get_addr.  */
+/* { dg-final { scan-rtl-dump-times "la_pcrel64_two_parts" 6 "final" } } */
diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-1.c b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-1.c
index db1e0f85396..fdb4cf1ff7f 100644
--- a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-1.c
+++ b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-1.c
@@ -1,31 +1,33 @@
 /* { dg-do compile } */
-/* { dg-options "-mabi=lp64d -O0 -fno-pic -fno-plt -mexplicit-relocs -mcmodel=extreme" } */
+/* { dg-options "-mabi=lp64d -O2 -fno-pic -fno-plt -mexplicit-relocs -mcmodel=extreme" } */
 /* { dg-final { scan-assembler "test:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
 /* { dg-final { scan-assembler "test1:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
 /* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
 
+#define NOIPA __attribute__ ((noipa))
+
 extern void g (void);
-void
+NOIPA void
 f (void)
 {}
 
-static void
+NOIPA static void
 l (void)
 {}
 
-void
+NOIPA void
 test (void)
 {
   g ();
 }
 
-void
+NOIPA void
 test1 (void)
 {
   f ();
 }
 
-void
+NOIPA void
 test2 (void)
 {
   l ();
diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-2.c b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-2.c
index 21bf81ae837..dfba3882b97 100644
--- a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-2.c
+++ b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-2.c
@@ -1,32 +1,7 @@
 /* { dg-do compile } */
-/* { dg-options "-mabi=lp64d -O0 -fpic -fno-plt -mexplicit-relocs -mcmodel=extreme" } */
+/* { dg-options "-mabi=lp64d -O2 -fpic -fno-plt -mexplicit-relocs -mcmodel=extreme" } */
 /* { dg-final { scan-assembler "test:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
 /* { dg-final { scan-assembler "test1:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
 /* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
 
-extern void g (void);
-void
-f (void)
-{}
-
-static void
-l (void)
-{}
-
-void
-test (void)
-{
-  g ();
-}
-
-void
-test1 (void)
-{
-  f ();
-}
-
-void
-test2 (void)
-{
-  l ();
-}
+#include "func-call-extreme-1.c"
diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-3.c b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-3.c
index a4da44b4a3d..1f5234f83d1 100644
--- a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-3.c
+++ b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-3.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-mabi=lp64d -O0 -fno-pic -fno-plt -mexplicit-relocs=auto -mcmodel=extreme" } */
+/* { dg-options "-mabi=lp64d -O2 -fno-pic -fno-plt -mexplicit-relocs=auto -mcmodel=extreme" } */
 /* { dg-final { scan-assembler "test:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
 /* { dg-final { scan-assembler "test1:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
 /* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-4.c b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-4.c
index 16b00f4c5f2..c4228500635 100644
--- a/gcc/testsuite/gcc.target/loongarch/func-call-extreme-4.c
+++ b/gcc/testsuite/gcc.target/loongarch/func-call-extreme-4.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-mabi=lp64d -O0 -fpic -fno-plt -mexplicit-relocs=auto -mcmodel=extreme" } */
+/* { dg-options "-mabi=lp64d -O2 -fpic -fno-plt -mexplicit-relocs=auto -mcmodel=extreme" } */
 /* { dg-final { scan-assembler "test:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
 /* { dg-final { scan-assembler "test1:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
 /* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
-- 
2.43.0


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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-19  5:46                             ` Xi Ruoyao
@ 2024-01-19  8:51                               ` chenglulu
  2024-01-22  7:27                                 ` chenglulu
  0 siblings, 1 reply; 24+ messages in thread
From: chenglulu @ 2024-01-19  8:51 UTC (permalink / raw)
  To: Xi Ruoyao, gcc-patches; +Cc: i, xuchenghua


在 2024/1/19 下午1:46, Xi Ruoyao 写道:
> On Wed, 2024-01-17 at 17:57 +0800, chenglulu wrote:
>>>> Virtual register 1479 will be used in insn 2744, but register 1479 was
>>>> assigned the REG_UNUSED attribute in the previous instruction.
>>>>
>>>> The attached file is the wrong file.
>>>> The compilation command is as follows:
>>>>
>>>> $ ./gcc/cc1 -fpreprocessed regrename.i -quiet -dp -dumpbase regrename.c
>>>> -dumpbase-ext .c -mno-relax -mabi=lp64d -march=loongarch64 -mfpu=64
>>>> -msimd=lasx -mcmodel=extreme -mtune=loongarch64 -g3 -O2
>>>> -Wno-int-conversion -Wno-implicit-int -Wno-implicit-function-declaration
>>>> -Wno-incompatible-pointer-types -version -o regrename.s
>>>> -mexplicit-relocs=always -fdump-rtl-all-all
>>> I've seen some "guality" test failures in GCC test suite as well.
>>> Normally I just ignore the guality failures but this time they look very
>>> suspicious.  I'll investigate these issues...
>>>
>> I've also seen this type of failed regression tests and I'll continue to
>> look at this issue as well.
> The guality regression is simple: I didn't call
> delegitimize_mem_from_attrs (the default TARGET_DELEGITIMIZE_ADDRESS) in
> the custom implementation.
>
> The failure of this test case was because the compiler believes that two
> (UNSPEC_PCREL_64_PART2 [(symbol)]) instances would always produce the
> same result, but this isn't true because the result depends on PC.  Thus
> (pc) needed to be included in the RTX, like:
>
>    [(set (match_operand:DI 0 "register_operand" "=r")
>      (unspec:DI [(match_operand:DI 2 "") (pc)] UNSPEC_LA_PCREL_64_PART1))
>     (set (match_operand:DI 1 "register_operand" "=r")
>      (unspec:DI [(match_dup 2) (pc)] UNSPEC_LA_PCREL_64_PART2))]
>
> With this the buggy REG_UNUSED notes were gone.  But it then prevented
> the CSE when loading the address of __tls_get_addr (i.e. if we address
> 10 TLE_LD symbols in a function it would emit 10 instances of "la.global
> __tls_get_addr") so I added an REG_EQUAL note for it.  For symbols other
> than __tls_get_addr such notes are added automatically by optimization
> passes.
>
> Updated patch attached.
>
I'm eliminating redundant la.global directives in my macro implementation.

I will be testing this patch.






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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-19  8:51                               ` chenglulu
@ 2024-01-22  7:27                                 ` chenglulu
  2024-01-23 19:36                                   ` Xi Ruoyao
  0 siblings, 1 reply; 24+ messages in thread
From: chenglulu @ 2024-01-22  7:27 UTC (permalink / raw)
  To: Xi Ruoyao, gcc-patches; +Cc: i, xuchenghua


在 2024/1/19 下午4:51, chenglulu 写道:
>
> 在 2024/1/19 下午1:46, Xi Ruoyao 写道:
>> On Wed, 2024-01-17 at 17:57 +0800, chenglulu wrote:
>>>>> Virtual register 1479 will be used in insn 2744, but register 1479 
>>>>> was
>>>>> assigned the REG_UNUSED attribute in the previous instruction.
>>>>>
>>>>> The attached file is the wrong file.
>>>>> The compilation command is as follows:
>>>>>
>>>>> $ ./gcc/cc1 -fpreprocessed regrename.i -quiet -dp -dumpbase 
>>>>> regrename.c
>>>>> -dumpbase-ext .c -mno-relax -mabi=lp64d -march=loongarch64 -mfpu=64
>>>>> -msimd=lasx -mcmodel=extreme -mtune=loongarch64 -g3 -O2
>>>>> -Wno-int-conversion -Wno-implicit-int 
>>>>> -Wno-implicit-function-declaration
>>>>> -Wno-incompatible-pointer-types -version -o regrename.s
>>>>> -mexplicit-relocs=always -fdump-rtl-all-all
>>>> I've seen some "guality" test failures in GCC test suite as well.
>>>> Normally I just ignore the guality failures but this time they look 
>>>> very
>>>> suspicious.  I'll investigate these issues...
>>>>
>>> I've also seen this type of failed regression tests and I'll 
>>> continue to
>>> look at this issue as well.
>> The guality regression is simple: I didn't call
>> delegitimize_mem_from_attrs (the default TARGET_DELEGITIMIZE_ADDRESS) in
>> the custom implementation.
>>
>> The failure of this test case was because the compiler believes that two
>> (UNSPEC_PCREL_64_PART2 [(symbol)]) instances would always produce the
>> same result, but this isn't true because the result depends on PC.  Thus
>> (pc) needed to be included in the RTX, like:
>>
>>    [(set (match_operand:DI 0 "register_operand" "=r")
>>      (unspec:DI [(match_operand:DI 2 "") (pc)] 
>> UNSPEC_LA_PCREL_64_PART1))
>>     (set (match_operand:DI 1 "register_operand" "=r")
>>      (unspec:DI [(match_dup 2) (pc)] UNSPEC_LA_PCREL_64_PART2))]
>>
>> With this the buggy REG_UNUSED notes were gone.  But it then prevented
>> the CSE when loading the address of __tls_get_addr (i.e. if we address
>> 10 TLE_LD symbols in a function it would emit 10 instances of "la.global
>> __tls_get_addr") so I added an REG_EQUAL note for it.  For symbols other
>> than __tls_get_addr such notes are added automatically by optimization
>> passes.
>>
>> Updated patch attached.
>>
> I'm eliminating redundant la.global directives in my macro 
> implementation.
>
> I will be testing this patch.
>
>
>
>
With this patch, spec2006 can pass the test, but spec2017 621 and 654 
tests fail.
I haven't debugged the specific cause of the problem yet.


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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-22  7:27                                 ` chenglulu
@ 2024-01-23 19:36                                   ` Xi Ruoyao
  2024-01-25  0:48                                     ` chenglulu
  0 siblings, 1 reply; 24+ messages in thread
From: Xi Ruoyao @ 2024-01-23 19:36 UTC (permalink / raw)
  To: chenglulu, gcc-patches; +Cc: i, xuchenghua

On Mon, 2024-01-22 at 15:27 +0800, chenglulu wrote:
> > > The failure of this test case was because the compiler believes that two
> > > (UNSPEC_PCREL_64_PART2 [(symbol)]) instances would always produce the
> > > same result, but this isn't true because the result depends on PC.  Thus
> > > (pc) needed to be included in the RTX, like:
> > > 
> > >    [(set (match_operand:DI 0 "register_operand" "=r")
> > >      (unspec:DI [(match_operand:DI 2 "") (pc)] 
> > > UNSPEC_LA_PCREL_64_PART1))
> > >     (set (match_operand:DI 1 "register_operand" "=r")
> > >      (unspec:DI [(match_dup 2) (pc)] UNSPEC_LA_PCREL_64_PART2))]
> > > 
> > > With this the buggy REG_UNUSED notes were gone.  But it then prevented
> > > the CSE when loading the address of __tls_get_addr (i.e. if we address
> > > 10 TLE_LD symbols in a function it would emit 10 instances of "la.global
> > > __tls_get_addr") so I added an REG_EQUAL note for it.  For symbols other
> > > than __tls_get_addr such notes are added automatically by optimization
> > > passes.
> > > 
> > > Updated patch attached.
> > > 
> > I'm eliminating redundant la.global directives in my macro 
> > implementation.
> > 
> > I will be testing this patch.
> > 
> > 
> > 
> > 
> With this patch, spec2006 can pass the test, but spec2017 621 and 654 
> tests fail.
> I haven't debugged the specific cause of the problem yet.

Try removing the TARGET_DELEGITIMIZE_ADDRESS hook?  After eating some
<del>unhealthy</del> food in the midnight I realized the hook only
papers over the same issue caused spec2006 failure.  I tried a bootstrap
with BOOT_CFLAGS=-O2 -g -mcmodel=extreme and TARGET_DELEGITIMIZE_ADDRESS
commented out, and there is no more spurious "note: non-delegitimized
UNSPEC UNSPEC_LA_PCREL_64_PART1 (42) found in variable location" things.
I feel that this hook is still written in a buggy way, so maybe removing
it will solve the spec2017 issue.

-- 
Xi Ruoyao <xry111@xry111.site>
School of Aerospace Science and Technology, Xidian University

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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-23 19:36                                   ` Xi Ruoyao
@ 2024-01-25  0:48                                     ` chenglulu
  2024-01-25  7:59                                       ` Xi Ruoyao
  0 siblings, 1 reply; 24+ messages in thread
From: chenglulu @ 2024-01-25  0:48 UTC (permalink / raw)
  To: Xi Ruoyao, gcc-patches; +Cc: i, xuchenghua


在 2024/1/24 上午3:36, Xi Ruoyao 写道:
> On Mon, 2024-01-22 at 15:27 +0800, chenglulu wrote:
>>>> The failure of this test case was because the compiler believes that two
>>>> (UNSPEC_PCREL_64_PART2 [(symbol)]) instances would always produce the
>>>> same result, but this isn't true because the result depends on PC.  Thus
>>>> (pc) needed to be included in the RTX, like:
>>>>
>>>>     [(set (match_operand:DI 0 "register_operand" "=r")
>>>>       (unspec:DI [(match_operand:DI 2 "") (pc)]
>>>> UNSPEC_LA_PCREL_64_PART1))
>>>>      (set (match_operand:DI 1 "register_operand" "=r")
>>>>       (unspec:DI [(match_dup 2) (pc)] UNSPEC_LA_PCREL_64_PART2))]
>>>>
>>>> With this the buggy REG_UNUSED notes were gone.  But it then prevented
>>>> the CSE when loading the address of __tls_get_addr (i.e. if we address
>>>> 10 TLE_LD symbols in a function it would emit 10 instances of "la.global
>>>> __tls_get_addr") so I added an REG_EQUAL note for it.  For symbols other
>>>> than __tls_get_addr such notes are added automatically by optimization
>>>> passes.
>>>>
>>>> Updated patch attached.
>>>>
>>> I'm eliminating redundant la.global directives in my macro
>>> implementation.
>>>
>>> I will be testing this patch.
>>>
>>>
>>>
>>>
>> With this patch, spec2006 can pass the test, but spec2017 621 and 654
>> tests fail.
>> I haven't debugged the specific cause of the problem yet.
> Try removing the TARGET_DELEGITIMIZE_ADDRESS hook?  After eating some
> <del>unhealthy</del> food in the midnight I realized the hook only
> papers over the same issue caused spec2006 failure.  I tried a bootstrap
> with BOOT_CFLAGS=-O2 -g -mcmodel=extreme and TARGET_DELEGITIMIZE_ADDRESS
> commented out, and there is no more spurious "note: non-delegitimized
> UNSPEC UNSPEC_LA_PCREL_64_PART1 (42) found in variable location" things.
> I feel that this hook is still written in a buggy way, so maybe removing
> it will solve the spec2017 issue.
>
I found the problem. Binutils did not consider the four instructions 
when converting

the type from TLS IE to TLS LE, which caused the conversion error.



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

* Re: [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs.
  2024-01-25  0:48                                     ` chenglulu
@ 2024-01-25  7:59                                       ` Xi Ruoyao
  0 siblings, 0 replies; 24+ messages in thread
From: Xi Ruoyao @ 2024-01-25  7:59 UTC (permalink / raw)
  To: chenglulu, gcc-patches; +Cc: i, xuchenghua, mengqinggang

On Thu, 2024-01-25 at 08:48 +0800, chenglulu wrote:
> 
> 在 2024/1/24 上午3:36, Xi Ruoyao 写道:
> > On Mon, 2024-01-22 at 15:27 +0800, chenglulu wrote:
> > > > > The failure of this test case was because the compiler believes that two
> > > > > (UNSPEC_PCREL_64_PART2 [(symbol)]) instances would always produce the
> > > > > same result, but this isn't true because the result depends on PC.  Thus
> > > > > (pc) needed to be included in the RTX, like:
> > > > > 
> > > > >     [(set (match_operand:DI 0 "register_operand" "=r")
> > > > >       (unspec:DI [(match_operand:DI 2 "") (pc)]
> > > > > UNSPEC_LA_PCREL_64_PART1))
> > > > >      (set (match_operand:DI 1 "register_operand" "=r")
> > > > >       (unspec:DI [(match_dup 2) (pc)] UNSPEC_LA_PCREL_64_PART2))]
> > > > > 
> > > > > With this the buggy REG_UNUSED notes were gone.  But it then prevented
> > > > > the CSE when loading the address of __tls_get_addr (i.e. if we address
> > > > > 10 TLE_LD symbols in a function it would emit 10 instances of "la.global
> > > > > __tls_get_addr") so I added an REG_EQUAL note for it.  For symbols other
> > > > > than __tls_get_addr such notes are added automatically by optimization
> > > > > passes.
> > > > > 
> > > > > Updated patch attached.
> > > > > 
> > > > I'm eliminating redundant la.global directives in my macro
> > > > implementation.
> > > > 
> > > > I will be testing this patch.
> > > > 
> > > > 
> > > > 
> > > > 
> > > With this patch, spec2006 can pass the test, but spec2017 621 and 654
> > > tests fail.
> > > I haven't debugged the specific cause of the problem yet.
> > Try removing the TARGET_DELEGITIMIZE_ADDRESS hook?  After eating some
> > <del>unhealthy</del> food in the midnight I realized the hook only
> > papers over the same issue caused spec2006 failure.  I tried a bootstrap
> > with BOOT_CFLAGS=-O2 -g -mcmodel=extreme and TARGET_DELEGITIMIZE_ADDRESS
> > commented out, and there is no more spurious "note: non-delegitimized
> > UNSPEC UNSPEC_LA_PCREL_64_PART1 (42) found in variable location" things.
> > I feel that this hook is still written in a buggy way, so maybe removing
> > it will solve the spec2017 issue.
> > 
> I found the problem. Binutils did not consider the four instructions 
> when converting the type from TLS IE to TLS LE, which caused the conversion error.

Oooops.  We better fix this quickly as the Binutils 2.42 release is
imminent.

Maybe we can just disable TLS linker optimization once we see an
R_LARCH_TLS_DESC64* or R_LARCH_TLS_IE64*.

-- 
Xi Ruoyao <xry111@xry111.site>
School of Aerospace Science and Technology, Xidian University

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

end of thread, other threads:[~2024-01-25  7:59 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-05  3:40 [PATCH v2 0/2] When cmodel=extreme, add macro support and only support macros Lulu Cheng
2024-01-05  3:40 ` [PATCH v2 1/2] LoongArch: Add the macro implementation of mcmodel=extreme Lulu Cheng
2024-01-05  3:40 ` [PATCH v2 2/2] LoongArch: When the code model is extreme, the symbol address is obtained through macro instructions regardless of the value of -mexplicit-relocs Lulu Cheng
2024-01-05  8:37   ` Xi Ruoyao
2024-01-05  8:51     ` chenglulu
2024-01-05  9:57     ` chenglulu
2024-01-05 10:25       ` Xi Ruoyao
2024-01-05 11:55         ` Xi Ruoyao
2024-01-05 12:45           ` chenglulu
2024-01-05 14:16             ` Xi Ruoyao
2024-01-12  1:46               ` chenglulu
2024-01-12 11:42                 ` Xi Ruoyao
2024-01-13  7:01                   ` chenglulu
2024-01-13 13:05                     ` Xi Ruoyao
2024-01-13 14:05                       ` chenglulu
2024-01-17  9:38                       ` chenglulu
2024-01-17  9:50                         ` Xi Ruoyao
2024-01-17  9:57                           ` chenglulu
2024-01-19  5:46                             ` Xi Ruoyao
2024-01-19  8:51                               ` chenglulu
2024-01-22  7:27                                 ` chenglulu
2024-01-23 19:36                                   ` Xi Ruoyao
2024-01-25  0:48                                     ` chenglulu
2024-01-25  7:59                                       ` Xi Ruoyao

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).