]> gcc.gnu.org Git - gcc.git/commitdiff
Makefile.in (INSN_ATTR_H): New macro.
authorAlexandre Oliva <aoliva@redhat.com>
Fri, 28 Jul 2000 02:17:26 +0000 (02:17 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Fri, 28 Jul 2000 02:17:26 +0000 (02:17 +0000)
* Makefile.in (INSN_ATTR_H): New macro.  Replace all dependencies
on insn-attr.h with it.
* genattr.c: Generate `#include "insn-addr.h"' if HAVE_ATTR_length.
* insn-addr.h: New header.
(insn_addresses_): Renamed from insn_addresses.
(INSN_ADDRESSES_DEFN, INSN_ADDRESSES, INSN_ADDRESSES_ALLOC,
INSN_ADDRESSES_FREE, INSN_ADDRESSES_SET_P, INSN_ADDRESSES_SIZE,
INSN_ADDRESSES_NEW): New macros.
* genattrtab.c (write_test_expr): Use new macros.
* final.c (insn_addresses, init_insn_lengths): Likewise.
(align_fuzz, shorten_branches): Likewise.
(final): Likewise.  Do not reject new insns if their addresses
have been added to INSN_ADDRESSES.
* config/arm/arm.c, config/avr/avr.c: Use new macros.
* config/h8300/h8300.c, config/i370/i370.c: Likewise.
* config/m88k/m88k.c, config/pa/pa.c, config/pa/pa.md: Likewise.
* config/sparc/sparc.c, config/sparc/sparc.md: Likewise.
* config/sh/sh.c: Likewise.
(output_branchy_insn): Use INSN_ADDRESSES_NEW.

From-SVN: r35307

16 files changed:
gcc/ChangeLog
gcc/Makefile.in
gcc/config/arm/arm.c
gcc/config/avr/avr.c
gcc/config/h8300/h8300.c
gcc/config/i370/i370.c
gcc/config/m88k/m88k.c
gcc/config/pa/pa.c
gcc/config/pa/pa.md
gcc/config/sh/sh.c
gcc/config/sparc/sparc.c
gcc/config/sparc/sparc.md
gcc/final.c
gcc/genattr.c
gcc/genattrtab.c
gcc/insn-addr.h [new file with mode: 0644]

index c811552b2f1456a5370d7117a74dc974e392617e..f8e2ea55c9ad799acddde45d36752b6d98672d63 100644 (file)
@@ -1,5 +1,25 @@
 2000-07-27  Alexandre Oliva  <aoliva@redhat.com>
 
+       * Makefile.in (INSN_ATTR_H): New macro.  Replace all dependencies
+       on insn-attr.h with it.
+       * genattr.c: Generate `#include "insn-addr.h"' if HAVE_ATTR_length.
+       * insn-addr.h: New header.
+       (insn_addresses_): Renamed from insn_addresses.
+       (INSN_ADDRESSES_DEFN, INSN_ADDRESSES, INSN_ADDRESSES_ALLOC,
+       INSN_ADDRESSES_FREE, INSN_ADDRESSES_SET_P, INSN_ADDRESSES_SIZE,
+       INSN_ADDRESSES_NEW): New macros.
+       * genattrtab.c (write_test_expr): Use new macros.
+       * final.c (insn_addresses, init_insn_lengths): Likewise.
+       (align_fuzz, shorten_branches): Likewise.
+       (final): Likewise.  Do not reject new insns if their addresses
+       have been added to INSN_ADDRESSES.
+       * config/arm/arm.c, config/avr/avr.c: Use new macros.
+       * config/h8300/h8300.c, config/i370/i370.c: Likewise.
+       * config/m88k/m88k.c, config/pa/pa.c, config/pa/pa.md: Likewise.
+       * config/sparc/sparc.c, config/sparc/sparc.md: Likewise.
+       * config/sh/sh.c: Likewise.
+       (output_branchy_insn): Use INSN_ADDRESSES_NEW.
+
        * Makefile.in (bootstrap): Move -BstageN/ back to the beginning.
 
 2000-07-27  Andrew Cagney  <cagney@b1.cygnus.com>
index 9a773f4f904372c65b7cdf0b7a471ac9d5c50c00..85e33d62fa02a6a1a2115c6e44e645a457375d28 100644 (file)
@@ -777,6 +777,7 @@ LOOP_H = loop.h varray.h bitmap.h
 GCC_H = gcc.h version.h
 GGC_H = ggc.h varray.h
 TIMEVAR_H = timevar.h timevar.def
+INSN_ATTR_H = insn-attr.h $(srcdir)/insn-addr.h $(srcdir)/varray.h
 #\f
 # Language makefile fragments.
 
@@ -1238,9 +1239,9 @@ fold-const.o : fold-const.c $(CONFIG_H) system.h $(TREE_H) flags.h toplev.h \
    $(RTL_H) ggc.h
 diagnostic.o : diagnostic.c diagnostic.h \
    $(CONFIG_H) system.h $(TREE_H) $(RTL_H) tm_p.h flags.h \
-   $(GGC_H) input.h insn-attr.h insn-codes.h insn-config.h toplev.h intl.h 
+   $(GGC_H) input.h $(INSN_ATTR_H) insn-codes.h insn-config.h toplev.h intl.h 
 toplev.o : toplev.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) function.h \
-   flags.h input.h insn-attr.h xcoffout.h defaults.h output.h diagnostic.h \
+   flags.h input.h $(INSN_ATTR_H) xcoffout.h defaults.h output.h diagnostic.h \
    insn-codes.h insn-config.h intl.h $(RECOG_H) Makefile toplev.h dwarfout.h \
    dwarf2out.h sdbout.h dbxout.h $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) \
    graph.h loop.h  except.h regs.h $(TIMEVAR_H) $(lang_options_files)
@@ -1310,7 +1311,7 @@ integrate.o : integrate.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \
    intl.h function.h output.h $(RECOG_H) except.h toplev.h $(LOOP_H)
 jump.o : jump.c $(CONFIG_H) system.h $(RTL_H) flags.h hard-reg-set.h $(REGS_H) \
    insn-config.h insn-flags.h $(RECOG_H) $(EXPR_H) real.h except.h function.h \
-   toplev.h insn-attr.h
+   toplev.h $(INSN_ATTR_H)
 
 simplify-rtx.o : simplify-rtx.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) \
    hard-reg-set.h flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h \
@@ -1324,9 +1325,9 @@ sibcall.o : sibcall.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) function.h \
    hard-reg-set.h flags.h insn-config.h $(RECOG_H) $(BASIC_BLOCK_H)
 resource.o : resource.c $(CONFIG_H) $(RTL_H) hard-reg-set.h system.h \
    $(BASIC_BLOCK_H) $(REGS_H) flags.h output.h resource.h function.h toplev.h \
-   insn-attr.h except.h
+   $(INSN_ATTR_H) except.h
 lcm.o : lcm.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) hard-reg-set.h flags.h \
-   real.h insn-config.h insn-attr.h $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H)
+   real.h insn-config.h $(INSN_ATTR_H) $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H)
 ssa.o : ssa.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) $(BASIC_BLOCK_H) \
    output.h insn-config.h
 conflict.o : conflict.c $(CONFIG_H) system.h $(OBSTACK_H) $(HASHTAB_H) \
@@ -1344,14 +1345,14 @@ flow.o : flow.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h insn-config.h \
    $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \
    insn-flags.h function.h except.h $(EXPR_H)
 combine.o : combine.c $(CONFIG_H) system.h $(RTL_H) flags.h function.h \
-   insn-config.h insn-flags.h insn-codes.h insn-attr.h $(REGS_H) $(EXPR_H) \
+   insn-config.h insn-flags.h insn-codes.h $(INSN_ATTR_H) $(REGS_H) $(EXPR_H) \
    $(BASIC_BLOCK_H) $(RECOG_H) real.h hard-reg-set.h toplev.h
 regclass.o : regclass.c $(CONFIG_H) system.h $(RTL_H) hard-reg-set.h flags.h \
    $(BASIC_BLOCK_H) $(REGS_H) insn-config.h $(RECOG_H) reload.h real.h \
    toplev.h function.h output.h $(GGC_H)
 local-alloc.o : local-alloc.c $(CONFIG_H) system.h $(RTL_H) flags.h \
    $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h insn-config.h $(RECOG_H) \
-   output.h function.h insn-attr.h toplev.h
+   output.h function.h $(INSN_ATTR_H) toplev.h
 bitmap.o : bitmap.c $(CONFIG_H) system.h $(RTL_H) flags.h $(BASIC_BLOCK_H) \
    $(REGS_H)
 global.o : global.c $(CONFIG_H) system.h $(RTL_H) flags.h reload.h function.h \
@@ -1367,7 +1368,7 @@ caller-save.o : caller-save.c $(CONFIG_H) system.h $(RTL_H) flags.h \
    $(REGS_H) hard-reg-set.h insn-config.h $(BASIC_BLOCK_H) function.h \
    $(RECOG_H) reload.h $(EXPR_H) toplev.h
 reorg.o : reorg.c $(CONFIG_H) system.h $(RTL_H) conditions.h hard-reg-set.h \
-   $(BASIC_BLOCK_H) $(REGS_H) insn-config.h insn-attr.h insn-flags.h \
+   $(BASIC_BLOCK_H) $(REGS_H) insn-config.h $(INSN_ATTR_H) insn-flags.h \
    $(RECOG_H) function.h flags.h output.h $(EXPR_H) toplev.h
 alias.o : alias.c $(CONFIG_H) system.h $(RTL_H) flags.h hard-reg-set.h \
    $(REGS_H) toplev.h output.h $(EXPR_H) insn-flags.h $(GGC_H) function.h \
@@ -1377,14 +1378,14 @@ regmove.o : regmove.c $(CONFIG_H) system.h $(RTL_H) insn-config.h \
    $(EXPR_H) insn-flags.h $(BASIC_BLOCK_H) toplev.h
 haifa-sched.o : haifa-sched.c $(CONFIG_H) system.h $(RTL_H) \
    $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \
-   insn-attr.h toplev.h $(RECOG_H) except.h
+   $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h
 final.o : final.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h intl.h \
-   $(REGS_H) $(RECOG_H) conditions.h insn-config.h insn-attr.h function.h \
+   $(REGS_H) $(RECOG_H) conditions.h insn-config.h $(INSN_ATTR_H) function.h \
    real.h output.h hard-reg-set.h insn-flags.h insn-codes.h gstab.h except.h \
    xcoffout.h defaults.h toplev.h reload.h dwarfout.h dwarf2out.h sdbout.h \
    dbxout.h $(BASIC_BLOCK_H)
 recog.o : recog.c $(CONFIG_H) system.h $(RTL_H) function.h $(BASIC_BLOCK_H) \
-   $(REGS_H) $(RECOG_H) hard-reg-set.h flags.h insn-config.h insn-attr.h \
+   $(REGS_H) $(RECOG_H) hard-reg-set.h flags.h insn-config.h $(INSN_ATTR_H) \
    insn-flags.h insn-codes.h real.h toplev.h output.h
 reg-stack.o : reg-stack.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) $(RECOG_H) \
    $(REGS_H) hard-reg-set.h flags.h insn-config.h insn-flags.h toplev.h \
@@ -1405,7 +1406,7 @@ ifcvt.o : ifcvt.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) \
    output.h
 $(out_object_file): $(out_file) $(CONFIG_H) $(TREE_H) $(GGC_H) \
    $(RTL_H) $(REGS_H) hard-reg-set.h real.h insn-config.h conditions.h \
-   insn-flags.h output.h insn-attr.h insn-codes.h system.h toplev.h function.h
+   insn-flags.h output.h $(INSN_ATTR_H) insn-codes.h system.h toplev.h function.h
        $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(out_file)
 
 # Build auxiliary files that support ecoff format.
@@ -1528,7 +1529,7 @@ s-peep : $(md_file) genpeep $(srcdir)/move-if-change
        touch s-peep
 
 insn-attrtab.o : insn-attrtab.c $(CONFIG_H) $(RTL_H) $(REGS_H) real.h \
-    output.h insn-attr.h insn-config.h system.h toplev.h $(RECOG_H)
+    output.h $(INSN_ATTR_H) insn-config.h system.h toplev.h $(RECOG_H)
        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-attrtab.c
 
 insn-attr.h: s-attr ; @true
@@ -1544,7 +1545,7 @@ s-attrtab : $(md_file) genattrtab $(srcdir)/move-if-change
        touch s-attrtab
 
 insn-output.o : insn-output.c $(CONFIG_H) $(RTL_H) $(GGC_H) $(REGS_H) real.h \
-    conditions.h hard-reg-set.h insn-config.h insn-flags.h insn-attr.h \
+    conditions.h hard-reg-set.h insn-config.h insn-flags.h $(INSN_ATTR_H) \
     output.h $(RECOG_H) function.h insn-codes.h system.h toplev.h flags.h
        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-output.c
 
index ec8086356ba3b1bd29b345438db6b2d40ed66bb9..5d83e4b0175d3cf1507192f874e77deec68e5760 100644 (file)
@@ -8570,10 +8570,9 @@ void
 thumb_final_prescan_insn (insn)
      rtx insn;
 {
-  extern int * insn_addresses;
-
   if (flag_print_asm_name)
-    asm_fprintf (asm_out_file, "%@ 0x%04x\n", insn_addresses[INSN_UID (insn)]);
+    asm_fprintf (asm_out_file, "%@ 0x%04x\n",
+                INSN_ADDRESSES (INSN_UID (insn)));
 }
 
 int
index ac07707dddd5111ad8e5d615eaa4e296d7a16cd5..14ea8a9847a390d8414d376b2602bddf82a68e85 100644 (file)
@@ -605,8 +605,8 @@ function_epilogue (FILE *file, int size)
   signal_func_p = signal_function_p (current_function_decl);
   leaf_func_p = leaf_function_p ();
   main_p = ! strcmp ("main", current_function_name);
-  function_size = (insn_addresses[INSN_UID (get_last_insn ())]
-                  - insn_addresses[INSN_UID (get_insns ())]);
+  function_size = (INSN_ADDRESSES (INSN_UID (get_last_insn ()))
+                  - INSN_ADDRESSES (INSN_UID (get_insns ())));
   live_seq = sequent_regs_live ();
   minimize = (TARGET_CALL_PROLOGUES
              && !interrupt_func_p && !signal_func_p && live_seq);
@@ -1089,9 +1089,9 @@ avr_jump_mode (x,insn)
      rtx x;                     /* jump operand */
      rtx insn;                  /* jump insn */
 {
-  int dest_addr = insn_addresses[INSN_UID (GET_MODE (x) == LABEL_REF
-                                           ? XEXP (x, 0) : x)];
-  int cur_addr = insn_addresses[INSN_UID (insn)];
+  int dest_addr = INSN_ADDRESSES (INSN_UID (GET_MODE (x) == LABEL_REF
+                                           ? XEXP (x, 0) : x));
+  int cur_addr = INSN_ADDRESSES (INSN_UID (insn));
   int jump_distance = cur_addr - dest_addr;
   
   if (-63 <= jump_distance && jump_distance <= 62)
@@ -1212,11 +1212,12 @@ final_prescan_insn (insn, operand, num_operands)
 
   if (TARGET_INSN_SIZE_DUMP || TARGET_ALL_DEBUG)
     {
-      fprintf (asm_out_file, "/*DEBUG: 0x%x\t\t%d\t%d */\n", insn_addresses[uid],
-               insn_addresses[uid] - last_insn_address,
-              rtx_cost (PATTERN (insn),INSN));
+      fprintf (asm_out_file, "/*DEBUG: 0x%x\t\t%d\t%d */\n",
+              INSN_ADDRESSES (uid),
+               INSN_ADDRESSES (uid) - last_insn_address,
+              rtx_cost (PATTERN (insn), INSN));
     }
-  last_insn_address = insn_addresses[uid];
+  last_insn_address = INSN_ADDRESSES (uid);
 
   if (TARGET_RTL_DUMP)
     {
@@ -3999,8 +4000,8 @@ jump_over_one_insn_p (insn, dest)
   int uid = INSN_UID (GET_CODE (dest) == LABEL_REF
                      ? XEXP (dest, 0)
                      : dest);
-  int jump_addr = insn_addresses[INSN_UID (insn)];
-  int dest_addr = insn_addresses[uid];
+  int jump_addr = INSN_ADDRESSES (INSN_UID (insn));
+  int dest_addr = INSN_ADDRESSES (uid);
   return dest_addr - jump_addr == 2;
 }
 
index c2d74bfcf4bc3e44f9258f4b8df89b9809bc930b..5c404eb1f986e6599e65c1d8e4646f7d4e92fab3 100644 (file)
@@ -1534,9 +1534,9 @@ final_prescan_insn (insn, operand, num_operands)
 
   if (TARGET_ADDRESSES)
     {
-      fprintf (asm_out_file, "; 0x%x %d\n", insn_addresses[uid],
-              insn_addresses[uid] - last_insn_address);
-      last_insn_address = insn_addresses[uid];
+      fprintf (asm_out_file, "; 0x%x %d\n", INSN_ADDRESSES (uid),
+              INSN_ADDRESSES (uid) - last_insn_address);
+      last_insn_address = INSN_ADDRESSES (uid);
     }
 }
 
index ce13fe76b7e9f2b4d42181ae003a034f7d618101..2aa7d31ee25a84a8de4f4e07c3af3954dffac23d 100644 (file)
@@ -328,7 +328,7 @@ i370_branch_dest (branch)
     dest = XEXP (dest, 1);
   dest = XEXP (dest, 0);
   dest_uid = INSN_UID (dest);
-  dest_addr =  insn_addresses[dest_uid];
+  dest_addr = INSN_ADDRESSES (dest_uid);
 
   /* next, record the address of this insn as the true addr of first ref */
   {
@@ -349,7 +349,7 @@ i370_branch_length (insn)
      rtx insn;
 {
   int here, there;
-  here = insn_addresses[INSN_UID (insn)];
+  here = INSN_ADDRESSES (INSN_UID (insn));
   there = i370_branch_dest (insn);
   return (there - here);
 }
@@ -407,13 +407,13 @@ i370_label_scan ()
 
    for (insn = get_insns(); insn; insn = NEXT_INSN(insn))
      {
-       int here = insn_addresses[INSN_UID (insn)];
+       int here = INSN_ADDRESSES (INSN_UID (insn));
        enum rtx_code code = GET_CODE(insn);
 
        /* ??? adjust for tables embedded in the .text section that
         * the compiler didn't take into account */
        here += tablejump_offset;
-       insn_addresses[INSN_UID (insn)] = here;
+       INSN_ADDRESSES (INSN_UID (insn)) = here;
 
        /* check to see if this insn is a label ... */
        if (CODE_LABEL == code)
index 555d49f23a530d891caf5840b09ebd477d8356f4..ab79bf015feb46357374c6261a874d49f0747aa7 100644 (file)
@@ -853,8 +853,8 @@ output_call (operands, addr)
          rtx low, high;
          const char *last;
          rtx dest = XEXP (SET_SRC (PATTERN (jump)), 0);
-         int delta = 4 * (insn_addresses[INSN_UID (dest)]
-                          - insn_addresses[INSN_UID (seq_insn)]
+         int delta = 4 * (INSN_ADDRESSES (INSN_UID (dest))
+                          - INSN_ADDRESSES (INSN_UID (seq_insn))
                           - 2);
 #if (MONITOR_GCC & 0x2) /* How often do long branches happen?  */
          if ((unsigned) (delta + 0x8000) >= 0x10000)
@@ -1039,8 +1039,8 @@ mostly_false_jump (jump_insn, condition)
     insnj = NEXT_INSN (PREV_INSN (XVECEXP (final_sequence, 0, 0)));
   else
     insnj = jump_insn;
-  if (insn_addresses[INSN_UID (insnj)]
-      > insn_addresses[INSN_UID (target_label)])
+  if (INSN_ADDRESSES (INSN_UID (insnj))
+      > INSN_ADDRESSES (INSN_UID (target_label)))
     return 0;
 
   /* EQ tests are usually false and NE tests are usually true.  Also,
index 88be9b414b957a4b2152c6b0a462e08375347e96..8cdd43e115da4a0f238584737efc4d3e46e26966 100644 (file)
@@ -2910,11 +2910,11 @@ output_function_prologue (file, size)
      we don't need to accumulate the total number of code bytes.  */
   if (TARGET_GAS && ! TARGET_PORTABLE_RUNTIME)
     total_code_bytes = 0;
-  else if (insn_addresses)
+  else if (INSN_ADDRESSES_SET_P ())
     {
       unsigned int old_total = total_code_bytes;
 
-      total_code_bytes += insn_addresses[INSN_UID (get_last_insn())];
+      total_code_bytes += INSN_ADDRESSES (INSN_UID (get_last_insn()));
       total_code_bytes += FUNCTION_BOUNDARY / BITS_PER_UNIT;
 
       /* Be prepared to handle overflows.  */
@@ -4887,9 +4887,9 @@ output_cbranch (operands, nullify, length, negated, insn)
           taken and untaken branches.  */
        else if (dbr_sequence_length () == 0
                 && ! forward_branch_p (insn)
-                && insn_addresses
-                && VAL_14_BITS_P (insn_addresses[INSN_UID (JUMP_LABEL (insn))]
-                                   - insn_addresses[INSN_UID (insn)] - 8))
+                && INSN_ADDRESSES_SET_P ()
+                && VAL_14_BITS_P (INSN_ADDRESSES (INSN_UID (JUMP_LABEL (insn)))
+                                   - INSN_ADDRESSES (INSN_UID (insn)) - 8))
          {
            strcpy (buf, "{com%I2b,|cmp%I2b,}");
            if (GET_MODE (operands[1]) == DImode)
@@ -5104,9 +5104,9 @@ output_bb (operands, nullify, length, negated, insn, which)
           taken and untaken branches.  */
        else if (dbr_sequence_length () == 0
                 && ! forward_branch_p (insn)
-                && insn_addresses
-                && VAL_14_BITS_P (insn_addresses[INSN_UID (JUMP_LABEL (insn))]
-                                   - insn_addresses[INSN_UID (insn)] - 8))
+                && INSN_ADDRESSES_SET_P ()
+                && VAL_14_BITS_P (INSN_ADDRESSES (INSN_UID (JUMP_LABEL (insn)))
+                                   - INSN_ADDRESSES (INSN_UID (insn)) - 8))
          {
            strcpy (buf, "bb,");
            if (GET_MODE (operands[0]) == DImode)
@@ -5252,9 +5252,9 @@ output_bvb (operands, nullify, length, negated, insn, which)
           taken and untaken branches.  */
        else if (dbr_sequence_length () == 0
                 && ! forward_branch_p (insn)
-                && insn_addresses
-                && VAL_14_BITS_P (insn_addresses[INSN_UID (JUMP_LABEL (insn))]
-                                   - insn_addresses[INSN_UID (insn)] - 8))
+                && INSN_ADDRESSES_SET_P ()
+                && VAL_14_BITS_P (INSN_ADDRESSES (INSN_UID (JUMP_LABEL (insn)))
+                                   - INSN_ADDRESSES (INSN_UID (insn)) - 8))
          {
            strcpy (buf, "{bvb,|bb,}");
            if (GET_MODE (operands[0]) == DImode)
@@ -5361,9 +5361,9 @@ output_dbra (operands, insn, which_alternative)
             taken and untaken branches.  */
          else if (dbr_sequence_length () == 0
                   && ! forward_branch_p (insn)
-                  && insn_addresses
-                  && VAL_14_BITS_P (insn_addresses[INSN_UID (JUMP_LABEL (insn))]
-                                     - insn_addresses[INSN_UID (insn)] - 8))
+                  && INSN_ADDRESSES_SET_P ()
+                  && VAL_14_BITS_P (INSN_ADDRESSES (INSN_UID (JUMP_LABEL (insn)))
+                                     - INSN_ADDRESSES (INSN_UID (insn)) - 8))
              return "addib,%C2 %1,%0,%3%#";
 
          /* Handle normal cases.  */
@@ -5469,9 +5469,9 @@ output_movb (operands, insn, which_alternative, reverse_comparison)
             taken and untaken branches.  */
          else if (dbr_sequence_length () == 0
                   && ! forward_branch_p (insn)
-                  && insn_addresses
-                  && VAL_14_BITS_P (insn_addresses[INSN_UID (JUMP_LABEL (insn))]
-                                     - insn_addresses[INSN_UID (insn)] - 8))
+                  && INSN_ADDRESSES_SET_P ()
+                  && VAL_14_BITS_P (INSN_ADDRESSES (INSN_UID (JUMP_LABEL (insn)))
+                                     - INSN_ADDRESSES (INSN_UID (insn)) - 8))
            return "movb,%C2 %1,%0,%3%#";
          /* Handle normal cases.  */
          if (nullify)
@@ -5644,8 +5644,8 @@ output_millicode_call (insn, call_dest)
   /* Use the containing sequence insn's address.  */
   seq_insn = NEXT_INSN (PREV_INSN (XVECEXP (final_sequence, 0, 0)));
 
-  distance = insn_addresses[INSN_UID (JUMP_LABEL (NEXT_INSN (insn)))]
-              - insn_addresses[INSN_UID (seq_insn)] - 8;
+  distance = INSN_ADDRESSES (INSN_UID (JUMP_LABEL (NEXT_INSN (insn))))
+              - INSN_ADDRESSES (INSN_UID (seq_insn)) - 8;
 
   /* If the branch was too far away, emit a normal call followed
      by a nop, followed by the unconditional branch.
@@ -5917,8 +5917,8 @@ output_call (insn, call_dest, sibcall)
   /* Use the containing sequence insn's address.  */
   seq_insn = NEXT_INSN (PREV_INSN (XVECEXP (final_sequence, 0, 0)));
 
-  distance = insn_addresses[INSN_UID (JUMP_LABEL (NEXT_INSN (insn)))]
-              - insn_addresses[INSN_UID (seq_insn)] - 8;
+  distance = INSN_ADDRESSES (INSN_UID (JUMP_LABEL (NEXT_INSN (insn))))
+              - INSN_ADDRESSES (INSN_UID (seq_insn)) - 8;
 
   /* If the branch was too far away, emit a normal call followed
      by a nop, followed by the unconditional branch.
index 45045875ffb7693dc710b7204bf06d5175d1e491..547d4212113c5c851dd1a4657d96d0249a0d8d41 100644 (file)
   /* If we're trying to load the address of a label that happens to be
      close, then we can use a shorter sequence.  */
   if (GET_CODE (operands[1]) == LABEL_REF
-      && insn_addresses
-      && abs (insn_addresses[INSN_UID (XEXP (operands[1], 0))]
-               - insn_addresses[INSN_UID (insn)]) < 8100)
+      && INSN_ADDRESSES_SET_P ()
+      && abs (INSN_ADDRESSES (INSN_UID (XEXP (operands[1], 0)))
+               - INSN_ADDRESSES (INSN_UID (insn))) < 8100)
     {
       /* Prefixing with R% here is wrong, it extracts just 11 bits and is
         always non-negative.  */
index f2c4ef0269088cf0850400a9beda787bfaf362de..c6103de292ee043d9ad12eb8c4c0440f22ab93bd 100644 (file)
@@ -73,10 +73,6 @@ int pragma_nosave_low_regs;
    sh_expand_prologue.  */
 int current_function_anonymous_args;
 
-/* Global variables from toplev.c and final.c that are used within, but
-   not declared in any header file.  */
-extern int *insn_addresses;
-
 /* Global variables for machine-dependent things. */
 
 /* Which cpu are we scheduling for.  */
@@ -696,7 +692,7 @@ output_far_jump (insn, op)
   struct { rtx lab, reg, op; } this;
   const char *jump;
   int far;
-  int offset = branch_dest (insn) - insn_addresses[INSN_UID (insn)];
+  int offset = branch_dest (insn) - INSN_ADDRESSES (INSN_UID (insn));
 
   this.lab = gen_label_rtx ();
 
@@ -818,12 +814,15 @@ output_branchy_insn (code, template, insn, operands)
          /* Following branch not taken */
          operands[9] = gen_label_rtx ();
          emit_label_after (operands[9], next_insn);
+         INSN_ADDRESSES_NEW (operands[9],
+                             INSN_ADDRESSES (INSN_UID (next_insn))
+                             + get_attr_length (next_insn));
          return template;
        }
       else
        {
          int offset = (branch_dest (next_insn)
-                       - insn_addresses[INSN_UID (next_insn)] + 4);
+                       - INSN_ADDRESSES (INSN_UID (next_insn)) + 4);
          if (offset >= -252 && offset <= 258)
            {
              if (GET_CODE (src) == IF_THEN_ELSE)
@@ -836,6 +835,9 @@ output_branchy_insn (code, template, insn, operands)
     }
   operands[9] = gen_label_rtx ();
   emit_label_after (operands[9], insn);
+  INSN_ADDRESSES_NEW (operands[9],
+                     INSN_ADDRESSES (INSN_UID (insn))
+                     + get_attr_length (insn));
   return template;
 }
 
@@ -2502,7 +2504,7 @@ gen_block_redirect (jump, addr, need_block)
   dest = XEXP (SET_SRC (PATTERN (jump)), 0);
   /* If the branch is out of range, try to find a scratch register for it.  */
   if (optimize
-      && (insn_addresses[INSN_UID (dest)] - addr + 4092U > 4092 + 4098))
+      && (INSN_ADDRESSES (INSN_UID (dest)) - addr + 4092U > 4092 + 4098))
     {
       rtx scan;
       /* Don't look for the stack pointer as a scratch register,
@@ -2578,8 +2580,9 @@ gen_block_redirect (jump, addr, need_block)
        {
          dest = JUMP_LABEL (next);
          if (dest
-             && insn_addresses[INSN_UID (dest)] - addr + 4092U > 4092 + 4098)
-           gen_block_redirect (next, insn_addresses[INSN_UID (next)], -1);
+             && (INSN_ADDRESSES (INSN_UID (dest)) - addr + 4092U
+                 > 4092 + 4098))
+           gen_block_redirect (next, INSN_ADDRESSES (INSN_UID (next)), -1);
        }
     }
 
@@ -3231,7 +3234,7 @@ machine_dependent_reorg (first)
     }
 
   mdep_reorg_phase = SH_SHORTEN_BRANCHES1;
-  insn_addresses = 0;
+  INSN_ADDRESSES_FREE ();
   split_branches (first);
 
   /* The INSN_REFERENCES_ARE_DELAYED in sh.h is problematic because it
@@ -3330,7 +3333,7 @@ split_branches (first)
              {
                rtx src = SET_SRC (PATTERN (insn));
                rtx olabel = XEXP (XEXP (src, 1), 0);
-               int addr = insn_addresses[INSN_UID (insn)];
+               int addr = INSN_ADDRESSES (INSN_UID (insn));
                rtx label = 0;
                int dest_uid = get_dest_uid (olabel, max_uid);
                struct far_branch *bp = uid_branch[dest_uid];
@@ -3409,11 +3412,12 @@ split_branches (first)
                            == JUMP_INSN))
                    && GET_CODE (PATTERN (beyond)) == SET
                    && recog_memoized (beyond) == CODE_FOR_jump
-                   && ((insn_addresses[INSN_UID (XEXP (SET_SRC (PATTERN (beyond)), 0))]
-                        - insn_addresses[INSN_UID (insn)] + 252U)
+                   && ((INSN_ADDRESSES
+                        (INSN_UID (XEXP (SET_SRC (PATTERN (beyond)), 0)))
+                        - INSN_ADDRESSES (INSN_UID (insn)) + 252U)
                        > 252 + 258 + 2))
                  gen_block_redirect (beyond,
-                                     insn_addresses[INSN_UID (beyond)], 1);
+                                     INSN_ADDRESSES (INSN_UID (beyond)), 1);
              }
     
            next = next_active_insn (insn);
@@ -3422,14 +3426,15 @@ split_branches (first)
                 || GET_CODE (next = next_active_insn (next)) == JUMP_INSN)
                && GET_CODE (PATTERN (next)) == SET
                && recog_memoized (next) == CODE_FOR_jump
-               && ((insn_addresses[INSN_UID (XEXP (SET_SRC (PATTERN (next)), 0))]
-                    - insn_addresses[INSN_UID (insn)] + 252U)
+               && ((INSN_ADDRESSES
+                    (INSN_UID (XEXP (SET_SRC (PATTERN (next)), 0)))
+                    - INSN_ADDRESSES (INSN_UID (insn)) + 252U)
                    > 252 + 258 + 2))
-             gen_block_redirect (next, insn_addresses[INSN_UID (next)], 1);
+             gen_block_redirect (next, INSN_ADDRESSES (INSN_UID (next)), 1);
          }
        else if (type == TYPE_JUMP || type == TYPE_RETURN)
          {
-           int addr = insn_addresses[INSN_UID (insn)];
+           int addr = INSN_ADDRESSES (INSN_UID (insn));
            rtx far_label = 0;
            int dest_uid = 0;
            struct far_branch *bp;
@@ -3524,7 +3529,7 @@ final_prescan_insn (insn, opvec, noperands)
      int noperands ATTRIBUTE_UNUSED;
 {
   if (TARGET_DUMPISIZE)
-    fprintf (asm_out_file, "\n! at %04x\n", insn_addresses[INSN_UID (insn)]);
+    fprintf (asm_out_file, "\n! at %04x\n", INSN_ADDRESSES (INSN_UID (insn)));
 
   if (TARGET_RELAX)
     {
@@ -4792,7 +4797,7 @@ branch_dest (branch)
     dest = XEXP (dest, 1);
   dest = XEXP (dest, 0);
   dest_uid = INSN_UID (dest);
-  return insn_addresses[dest_uid];
+  return INSN_ADDRESSES (dest_uid);
 }
 \f
 /* Return non-zero if REG is not used after INSN.
index 2b44d2f1bc14e5f432547602743120e37c572383..f6a354dfab2e6562bd23846815aa3d2d7f353f83 100644 (file)
@@ -2625,7 +2625,7 @@ int
 short_branch (uid1, uid2)
      int uid1, uid2;
 {
-  int delta = insn_addresses[uid1] - insn_addresses[uid2];
+  int delta = INSN_ADDRESSES (uid1) - INSN_ADDRESSES (uid2);
 
   /* Leave a few words of "slop".  */
   if (delta >= -1023 && delta <= 1022)
index eca1a73098dfa3c3a5457e4441356eb089c5403a..8fb4b941d4ee20e92f7198d822c62949688f6fca 100644 (file)
      instead.  */
 
   if (! TARGET_V9 && flag_delayed_branch
-      && (insn_addresses[INSN_UID (operands[0])]
-         == insn_addresses[INSN_UID (insn)]))
+      && (INSN_ADDRESSES (INSN_UID (operands[0]))
+         == INSN_ADDRESSES (INSN_UID (insn))))
     return \"b\\t%l0%#\";
   else
     return TARGET_V9 ? \"ba,pt%*\\t%%xcc, %l0%(\" : \"b%*\\t%l0%(\";
index e655637644f097b3804fc9426ca8f8a31b204519..1fc72c9402b86b202dbe679e277b34d58ad07b23 100644 (file)
@@ -612,7 +612,10 @@ dbr_sequence_length ()
    `insn_current_length'.  */
 
 static short *insn_lengths;
-int *insn_addresses;
+
+#ifdef HAVE_ATTR_length
+varray_type insn_addresses_;
+#endif
 
 /* Max uid for which the above arrays are valid.  */
 static int insn_lengths_max_uid;
@@ -665,11 +668,9 @@ init_insn_lengths ()
       insn_lengths = 0;
       insn_lengths_max_uid = 0;
     }
-  if (insn_addresses)
-    {
-      free (insn_addresses);
-      insn_addresses = 0;
-    }
+#ifdef HAVE_ATTR_length
+  INSN_ADDRESSES_FREE ();
+#endif
   if (uid_align)
     {
       free (uid_align);
@@ -889,7 +890,7 @@ align_fuzz (start, end, known_align_log, growth)
       int align_addr, new_align;
 
       uid = INSN_UID (align_label);
-      align_addr = insn_addresses[uid] - insn_lengths[uid];
+      align_addr = INSN_ADDRESSES (uid) - insn_lengths[uid];
       if (uid_shuid[uid] > end_shuid)
        break;
       known_align_log = LABEL_TO_ALIGNMENT (align_label);
@@ -1135,7 +1136,7 @@ shorten_branches (first)
   insn_lengths_max_uid = max_uid;
   /* Syntax errors can lead to labels being outside of the main insn stream.
      Initialize insn_addresses, so that we get reproducible results.  */
-  insn_addresses = (int *) xcalloc (max_uid, sizeof (int));
+  INSN_ADDRESSES_ALLOC (max_uid);
 
   varying_length = (char *) xcalloc (max_uid, sizeof (char));
 
@@ -1242,7 +1243,7 @@ shorten_branches (first)
            }
        }
 
-      insn_addresses[uid] = insn_current_address;
+      INSN_ADDRESSES (uid) = insn_current_address;
       
       if (GET_CODE (insn) == NOTE || GET_CODE (insn) == BARRIER
          || GET_CODE (insn) == CODE_LABEL)
@@ -1298,8 +1299,8 @@ shorten_branches (first)
                  if ((varying_length[inner_uid]
                       = insn_variable_length_p (inner_insn)) != 0)
                    varying_length[uid] = 1;
-                 insn_addresses[inner_uid] = (insn_current_address +
-                                              insn_lengths[uid]);
+                 INSN_ADDRESSES (inner_uid) = (insn_current_address
+                                               + insn_lengths[uid]);
                }
              else
                varying_length[inner_uid] = 0;
@@ -1353,7 +1354,7 @@ shorten_branches (first)
                }
              else
                insn_lengths[uid] = 0;
-             insn_addresses[uid] = insn_current_address;
+             INSN_ADDRESSES (uid) = insn_current_address;
              continue;
            }
 
@@ -1361,8 +1362,8 @@ shorten_branches (first)
          if (length_align < insn_current_align)
            insn_current_align = length_align;
 
-         insn_last_address = insn_addresses[uid];
-         insn_addresses[uid] = insn_current_address;
+         insn_last_address = INSN_ADDRESSES (uid);
+         INSN_ADDRESSES (uid) = insn_current_address;
 
 #ifdef CASE_VECTOR_SHORTEN_MODE
          if (optimize && GET_CODE (insn) == JUMP_INSN
@@ -1374,9 +1375,9 @@ shorten_branches (first)
              rtx min_lab = XEXP (XEXP (body, 2), 0);
              rtx max_lab = XEXP (XEXP (body, 3), 0);
              addr_diff_vec_flags flags = ADDR_DIFF_VEC_FLAGS (body);
-             int rel_addr = insn_addresses[INSN_UID (rel_lab)];
-             int min_addr = insn_addresses[INSN_UID (min_lab)];
-             int max_addr = insn_addresses[INSN_UID (max_lab)];
+             int rel_addr = INSN_ADDRESSES (INSN_UID (rel_lab));
+             int min_addr = INSN_ADDRESSES (INSN_UID (min_lab));
+             int max_addr = INSN_ADDRESSES (INSN_UID (max_lab));
              rtx prev;
              int rel_align = 0;
 
@@ -1491,7 +1492,7 @@ shorten_branches (first)
                  int inner_uid = INSN_UID (inner_insn);
                  int inner_length;
 
-                 insn_addresses[inner_uid] = insn_current_address;
+                 INSN_ADDRESSES (inner_uid) = insn_current_address;
 
                  /* insn_current_length returns 0 for insns with a
                     non-varying length.  */
@@ -2018,7 +2019,7 @@ final (first, file, optimize, prescan)
   for (insn = NEXT_INSN (first); insn;)
     {
 #ifdef HAVE_ATTR_length
-      if (INSN_UID (insn) >= insn_lengths_max_uid)
+      if (INSN_UID (insn) >= INSN_ADDRESSES_SIZE ())
        {
 #ifdef STACK_REGS
          /* Irritatingly, the reg-stack pass is creating new instructions
@@ -2032,7 +2033,7 @@ final (first, file, optimize, prescan)
 #endif
        }
       else
-       insn_current_address = insn_addresses[INSN_UID (insn)];
+       insn_current_address = INSN_ADDRESSES (INSN_UID (insn));
 #endif /* HAVE_ATTR_length */
 
       insn = final_scan_insn (insn, file, optimize, prescan, 0);
index 6a593edeb21ad5b5849ea53d4d83a42e5e94b3f9..770379a53d52318402d6878f7cd40b41fc6aef5b 100644 (file)
@@ -126,8 +126,7 @@ gen_attr (attr)
       printf ("extern int insn_default_length PARAMS ((rtx));\n");
       printf ("extern int insn_variable_length_p PARAMS ((rtx));\n");
       printf ("extern int insn_current_length PARAMS ((rtx));\n\n");
-      printf ("extern int *insn_addresses;\n");
-      printf ("extern int insn_current_address;\n\n");
+      printf ("#include \"insn-addr.h\"\n\n");
     }
 }
 
index 5b4d656d0b10db8359d92f59957cde2adc14aeef..153c2786734a3f3f57dc500cbcde8c69c8c82ead 100644 (file)
@@ -4662,7 +4662,7 @@ write_test_expr (exp, flags)
 
     /* The address of the branch target.  */
     case MATCH_DUP:
-      printf ("insn_addresses[INSN_UID (GET_CODE (operands[%d]) == LABEL_REF ? XEXP (operands[%d], 0) : operands[%d])]",
+      printf ("INSN_ADDRESSES (INSN_UID (GET_CODE (operands[%d]) == LABEL_REF ? XEXP (operands[%d], 0) : operands[%d]))",
              XINT (exp, 0), XINT (exp, 0), XINT (exp, 0));
       break;
 
diff --git a/gcc/insn-addr.h b/gcc/insn-addr.h
new file mode 100644 (file)
index 0000000..4ae59f7
--- /dev/null
@@ -0,0 +1,46 @@
+/* Macros to support INSN_ADDRESSES
+   Copyright (C) 2000 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU CC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef _INSN_ADDR_H
+#define _INSN_ADDR_H 1
+
+#include "varray.h"
+
+extern varray_type insn_addresses_;
+extern int insn_current_address;
+
+#define INSN_ADDRESSES_DEFN() varray_type insn_addresses_
+#define INSN_ADDRESSES(id) VARRAY_INT (insn_addresses_, (id))
+#define INSN_ADDRESSES_ALLOC(size) \
+  VARRAY_INT_INIT (insn_addresses_, (size), "insn_addresses")
+#define INSN_ADDRESSES_FREE() VARRAY_FREE (insn_addresses_)
+#define INSN_ADDRESSES_SET_P() (insn_addresses_ != 0)
+#define INSN_ADDRESSES_SIZE() VARRAY_SIZE (insn_addresses_)
+#define INSN_ADDRESSES_NEW(insn,addr) do {                             \
+  int insn_uid__ = INSN_UID ((insn)), insn_addr__ = (addr);            \
+                                                                       \
+  if (INSN_ADDRESSES_SET_P()) {                                                \
+    if (INSN_ADDRESSES_SIZE() <= insn_uid__)                           \
+      insn_addresses_ = VARRAY_GROW (insn_addresses_, insn_uid__ + 1); \
+    INSN_ADDRESSES (insn_uid__) = insn_addr__;                         \
+  }                                                                    \
+} while (0)
+
+#endif /* _INSN_ADDR_H */
This page took 0.119794 seconds and 5 git commands to generate.