* config/tc-mips.c (macro): Correct handling of constant in M_LI_D
authorIan Lance Taylor <ian@airs.com>
Wed, 22 Oct 1997 16:52:46 +0000 (16:52 +0000)
committerIan Lance Taylor <ian@airs.com>
Wed, 22 Oct 1997 16:52:46 +0000 (16:52 +0000)
case in little endian mode.

gas/ChangeLog
gas/config/tc-mips.c

index 433e8b210387f9c575091a64a10ec12b2c327df5..4035b38824319fa626271eb334e9c0d0a86a6346 100644 (file)
@@ -1,3 +1,8 @@
+Wed Oct 22 12:51:18 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * config/tc-mips.c (macro): Correct handling of constant in M_LI_D
+       case in little endian mode.
+
 Tue Oct 21 10:20:11 1997  Doug Evans  <devans@canuck.cygnus.com>
 
        * config/tc-sparc.c (md_apply_fix3, cases ..._H44, ..._HIX22): Leave
index 567758d4e5a387e82079b7c3d948b5386e268c89..6eecede995fc032d6b094eb5c0459659f1fca217 100644 (file)
@@ -4976,16 +4976,35 @@ macro (ip)
          or in offset_expr.  */
       if (imm_expr.X_op == O_constant || imm_expr.X_op == O_big)
        {
-         load_register (&icnt, treg, &imm_expr, mips_opts.isa >= 3);
-         if (mips_opts.isa < 3 && treg != 31)
+         if (mips_opts.isa >= 3)
+           load_register (&icnt, treg, &imm_expr, 1);
+         else
            {
-             if (offset_expr.X_op == O_absent)
-               macro_build ((char *) NULL, &icnt, NULL, "move", "d,s",
-                            treg + 1, 0);
+             int hreg, lreg;
+
+             if (target_big_endian)
+               {
+                 hreg = treg;
+                 lreg = treg + 1;
+               }
              else
                {
-                 assert (offset_expr.X_op == O_constant);
-                 load_register (&icnt, treg + 1, &offset_expr, 0);
+                 hreg = treg + 1;
+                 lreg = treg;
+               }
+
+             if (hreg <= 31)
+               load_register (&icnt, hreg, &imm_expr, 0);
+             if (lreg <= 31)
+               {
+                 if (offset_expr.X_op == O_absent)
+                   macro_build ((char *) NULL, &icnt, NULL, "move", "d,s",
+                                lreg, 0);
+                 else
+                   {
+                     assert (offset_expr.X_op == O_constant);
+                     load_register (&icnt, lreg, &offset_expr, 0);
+                   }
                }
            }
          return;