mips.c (mips_va_arg): Apply big-endianness address offset before loading address...
authorAlexandre Oliva <aoliva@redhat.com>
Sat, 9 Mar 2002 05:48:21 +0000 (05:48 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Sat, 9 Mar 2002 05:48:21 +0000 (05:48 +0000)
* config/mips/mips.c (mips_va_arg): Apply big-endianness address
offset before loading address of argument passed by transparent
reference.

From-SVN: r50478

gcc/ChangeLog
gcc/config/mips/mips.c

index c48695f..c9bf259 100644 (file)
@@ -1,3 +1,9 @@
+2002-03-09  Alexandre Oliva  <aoliva@redhat.com>
+
+       * config/mips/mips.c (mips_va_arg): Apply big-endianness address
+       offset before loading address of argument passed by transparent
+       reference.
+
 2002-03-08  John David Anglin  <dave@hiauly1.hia.nrc.ca>
 
        * t-pa64 (LIB1ASMFUNCS, LIB1ASMSRC): Delete.
index 683e33a..6cdbda5 100644 (file)
@@ -4726,17 +4726,17 @@ mips_va_arg (valist, type)
           emit_queue();
           emit_label (lab_over);
 
+         if (BYTES_BIG_ENDIAN && rsize != size)
+           addr_rtx = plus_constant (addr_rtx, rsize - size);
+
           if (indirect)
            {
-                     r = gen_rtx_MEM (Pmode, addr_rtx);
+             addr_rtx = force_reg (Pmode, addr_rtx);
+             r = gen_rtx_MEM (Pmode, addr_rtx);
              set_mem_alias_set (r, get_varargs_alias_set ());
              emit_move_insn (addr_rtx, r);
            }
-         else
-           {
-             if (BYTES_BIG_ENDIAN && rsize != size)
-             addr_rtx = plus_constant (addr_rtx, rsize - size);
-           }
+
          return addr_rtx;
        }
     }