OSDN Git Service

* config/mmix/mmix.c: Improve comments.
authorhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 10 Mar 2002 18:09:35 +0000 (18:09 +0000)
committerhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 10 Mar 2002 18:09:35 +0000 (18:09 +0000)
(mmix_target_asm_function_prologue): Drop variable
empty_stack_frame.  Don't allocate unused slot above fp.
(mmix_target_asm_function_epilogue): Mirror prologue changes.
* config/mmix/mmix.h (MMIX_GNU_ABI_REG_ALLOC_ORDER): Don't have
brace in first column.
(enum reg_class): Ditto.
(FIRST_PARM_OFFSET): Now 0.
(USER_LABEL_PREFIX): Remove #if 0:d definition.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@50538 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/mmix/mmix.c
gcc/config/mmix/mmix.h

index e386b75..62d7a91 100644 (file)
@@ -1,3 +1,15 @@
+2002-03-10  Hans-Peter Nilsson  <hp@bitrange.com>
+
+       * config/mmix/mmix.c: Improve comments.
+       (mmix_target_asm_function_prologue): Drop variable
+       empty_stack_frame.  Don't allocate unused slot above fp.
+       (mmix_target_asm_function_epilogue): Mirror prologue changes.
+       * config/mmix/mmix.h (MMIX_GNU_ABI_REG_ALLOC_ORDER): Don't have
+       brace in first column.
+       (enum reg_class): Ditto.
+       (FIRST_PARM_OFFSET): Now 0.
+       (USER_LABEL_PREFIX): Remove #if 0:d definition.
+
 2002-03-10  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * combine.c (make_extraction): Fix error in last change.
index ac37050..cbec2fc 100644 (file)
@@ -414,7 +414,10 @@ mmix_return_addr_rtx (count, frame)
 {
   return count == 0
     ? (MMIX_CFUN_NEEDS_SAVED_EH_RETURN_ADDRESS
-       /* FIXME: Set frame_alias_set on the following.  */
+       /* FIXME: Set frame_alias_set on the following.  (Why?)
+         See mmix_initial_elimination_offset for the reason we can't use
+         get_hard_reg_initial_val for both.  Always using a stack slot
+         and not a register would be suboptimal.  */
        ? validize_mem (gen_rtx_MEM (Pmode, plus_constant (frame_pointer_rtx, -16)))
        : get_hard_reg_initial_val (Pmode, MMIX_INCOMING_RETURN_ADDRESS_REGNUM))
     : NULL_RTX;
@@ -440,7 +443,10 @@ mmix_initial_elimination_offset (fromreg, toreg)
   int fp_sp_offset
     = (get_frame_size () + current_function_outgoing_args_size + 7) & ~7;
 
-  /* There is no actual difference between these two.  */
+  /* There is no actual offset between these two virtual values, but for
+     the frame-pointer, we have the old one in the stack position below
+     it, so the offset for the frame-pointer to the stack-pointer is one
+     octabyte larger.  */
   if (fromreg == MMIX_ARG_POINTER_REGNUM
       && toreg == MMIX_FRAME_POINTER_REGNUM)
     return 0;
@@ -661,14 +667,8 @@ mmix_target_asm_function_prologue (stream, locals_size)
   int stack_space_to_allocate
     = (current_function_outgoing_args_size
        + current_function_pretend_args_size
-       + (int) locals_size + 8 + 7) & ~7;
+       + (int) locals_size + 7) & ~7;
   int offset = -8;
-  int empty_stack_frame
-    = (current_function_outgoing_args_size == 0
-       && locals_size == 0
-       && current_function_pretend_args_size == 0
-       && current_function_varargs == 0
-       && current_function_stdarg == 0);
   int doing_dwarf = dwarf2out_do_frame ();
   long cfa_offset = 0;
 
@@ -752,16 +752,10 @@ mmix_target_asm_function_prologue (stream, locals_size)
        }
     }
 
-  /* In any case, skip over the return-address slot.  FIXME: Not needed
-     now.  */
-  offset -= 8;
-
   /* Store the frame-pointer.  */
 
   if (frame_pointer_needed)
     {
-      empty_stack_frame = 0;
-
       if (offset < 0)
        {
          /* Get 8 less than otherwise, since we need to reach offset + 8.  */
@@ -799,8 +793,9 @@ mmix_target_asm_function_prologue (stream, locals_size)
 
   if (MMIX_CFUN_NEEDS_SAVED_EH_RETURN_ADDRESS)
     {
-      /* Store the return-address, if one is needed on the stack.  */
-      empty_stack_frame = 0;
+      /* Store the return-address, if one is needed on the stack.  We
+        usually store it in a register when needed, but that doesn't work
+        with -fexceptions.  */
 
       if (offset < 0)
        {
@@ -838,8 +833,6 @@ mmix_target_asm_function_prologue (stream, locals_size)
       /* Store the register defining the numbering of local registers, so
         we know how long to unwind the register stack.  */
 
-      empty_stack_frame = 0;
-
       if (offset < 0)
        {
          /* Get 8 less than otherwise, since we need to reach offset + 8.  */
@@ -894,8 +887,6 @@ mmix_target_asm_function_prologue (stream, locals_size)
         && regs_ever_live[regno] && ! call_used_regs[regno])
        || IS_MMIX_EH_RETURN_DATA_REG (regno))
       {
-       empty_stack_frame = 0;
-
        if (offset < 0)
          {
            int stack_chunk;
@@ -950,11 +941,10 @@ mmix_target_asm_function_prologue (stream, locals_size)
        offset -= 8;
       }
 
-  /* Finally, allocate room for local vars (if they weren't allocated for
-     above) and outgoing args.  This might be any number of bytes (well,
-     we assume it fits in a host-int).
-     Don't allocate (the return-address slot) if the stack frame is empty.  */
-  if (stack_space_to_allocate && ! empty_stack_frame)
+  /* Finally, allocate room for outgoing args and local vars if room
+     wasn't allocated above.  This might be any number of bytes (well, we
+     assume it fits in a host-int).  */
+  if (stack_space_to_allocate)
     {
       if (stack_space_to_allocate < 256)
        {
@@ -1006,19 +996,13 @@ mmix_target_asm_function_epilogue (stream, locals_size)
   int stack_space_to_deallocate
     = (current_function_outgoing_args_size
        + current_function_pretend_args_size
-       + (int) locals_size + 8 + 7) & ~7;
+       + (int) locals_size + 7) & ~7;
 
   /* The assumption that locals_size fits in an int is asserted in
      mmix_target_asm_function_prologue.  */
 
   /* The first address to access is beyond the outgoing_args area.  */
   int offset = current_function_outgoing_args_size;
-  int empty_stack_frame
-    = (current_function_outgoing_args_size == 0
-       && locals_size == 0
-       && current_function_pretend_args_size == 0
-       && ! MMIX_CFUN_NEEDS_SAVED_EH_RETURN_ADDRESS
-       && ! MMIX_CFUN_HAS_LANDING_PAD);
 
   /* Add the space for global non-register-stack registers.
      It is assumed that the frame-pointer register can be one of these
@@ -1059,8 +1043,6 @@ mmix_target_asm_function_epilogue (stream, locals_size)
         && regs_ever_live[regno] && !call_used_regs[regno])
        || IS_MMIX_EH_RETURN_DATA_REG (regno))
       {
-       empty_stack_frame = 0;
-
        if (offset > 255)
          {
            if (offset > 65535)
@@ -1106,8 +1088,6 @@ mmix_target_asm_function_epilogue (stream, locals_size)
   /* Get back the old frame-pointer-value.  */
   if (frame_pointer_needed)
     {
-      empty_stack_frame = 0;
-
       if (offset > 255)
        {
          if (offset > 65535)
@@ -1135,27 +1115,22 @@ mmix_target_asm_function_epilogue (stream, locals_size)
       offset += 8;
     }
 
-  /* Do not deallocate the return-address slot if the stack frame is
-     empty, because then it was never allocated.  */
-  if (! empty_stack_frame)
+  /* We do not need to restore pretended incoming args, just add back
+     offset to sp.  */
+  if (stack_space_to_deallocate > 65535)
     {
-      /* We do not need to restore pretended incoming args, just add
-        back offset to sp.  */
-      if (stack_space_to_deallocate > 65535)
-       {
-         /* There's better support for incrementing than decrementing, so
-            we might be able to optimize this as we see a need.  */
-         mmix_output_register_setting (stream, 255,
-                                       stack_space_to_deallocate, 1);
-         fprintf (stream, "\tADDU %s,%s,$255\n",
-                  reg_names[MMIX_STACK_POINTER_REGNUM],
-                  reg_names[MMIX_STACK_POINTER_REGNUM]);
-       }
-      else
-       fprintf (stream, "\tINCL %s,%d\n",
-                reg_names[MMIX_STACK_POINTER_REGNUM],
-                stack_space_to_deallocate);
+      /* There's better support for incrementing than decrementing, so
+        we might be able to optimize this as we see a need.  */
+      mmix_output_register_setting (stream, 255,
+                                   stack_space_to_deallocate, 1);
+      fprintf (stream, "\tADDU %s,%s,$255\n",
+              reg_names[MMIX_STACK_POINTER_REGNUM],
+              reg_names[MMIX_STACK_POINTER_REGNUM]);
     }
+  else if (stack_space_to_deallocate != 0)
+    fprintf (stream, "\tINCL %s,%d\n",
+            reg_names[MMIX_STACK_POINTER_REGNUM],
+            stack_space_to_deallocate);
 
   if (current_function_calls_eh_return)
     /* Adjustment the (normal) stack-pointer to that of the receiver.
@@ -1343,9 +1318,9 @@ void
 mmix_trampoline_template (stream)
      FILE * stream;
 {
-  /* Read a value from to static-chain, jump somewhere.  The static chain
-     is stored at offset 16, and the function address is stored at offset
-     24.  */
+  /* Read a value into the static-chain register and jump somewhere.  The
+     static chain is stored at offset 16, and the function address is
+     stored at offset 24.  */
   /* FIXME: GCC copies this using *intsize* (tetra), when it should use
      register size (octa).  */
   fprintf (stream, "\tGETA $255,1F\n\t");
index 7f41722..53521e8 100644 (file)
@@ -483,7 +483,7 @@ extern int target_flags;
    assuming it is referenced a very limited number of times.  Other global
    and fixed registers come next; they are never allocated.  */
 #define MMIX_GNU_ABI_REG_ALLOC_ORDER           \
- 252, 251, 250, 249, 248, 247, 246,          \
+ { 252, 251, 250, 249, 248, 247, 246,          \
    245, 244, 243, 242, 241, 240, 239, 238,     \
    237, 236, 235, 234, 233, 232, 231,          \
                                                \
@@ -549,10 +549,10 @@ extern int target_flags;
 /* Node: Register Classes */
 
 enum reg_class
-{
-  NO_REGS, GENERAL_REGS, REMAINDER_REG, HIMULT_REG,
-  SYSTEM_REGS, ALL_REGS, LIM_REG_CLASSES
-};
+ {
+   NO_REGS, GENERAL_REGS, REMAINDER_REG, HIMULT_REG,
+   SYSTEM_REGS, ALL_REGS, LIM_REG_CLASSES
+ };
 
 #define N_REG_CLASSES (int) LIM_REG_CLASSES
 
@@ -626,10 +626,7 @@ enum reg_class
 #define STARTING_FRAME_OFFSET \
   mmix_starting_frame_offset ()
 
-/* There is a stack slot between the frame-pointer and the first
-   parameter, where the return address is sometimes stored.  FIXME:
-   Unnecessary.  */
-#define FIRST_PARM_OFFSET(FUNDECL) 8
+#define FIRST_PARM_OFFSET(FUNDECL) 0
 
 #define DYNAMIC_CHAIN_ADDRESS(FRAMEADDR) \
  mmix_dynamic_chain_address (FRAMEADDR)
@@ -1104,10 +1101,6 @@ const_section ()                                         \
 #define PRINT_OPERAND_ADDRESS(STREAM, X) \
  mmix_print_operand_address (STREAM, X)
 
-#if 0
-#define USER_LABEL_PREFIX "_"
-#endif
-
 #define ASM_OUTPUT_REG_PUSH(STREAM, REGNO) \
  mmix_asm_output_reg_push (STREAM, REGNO)