[ gas/ChangeLog ]
authorChris Demetriou <cgd@google.com>
Wed, 2 Apr 2003 18:43:16 +0000 (18:43 +0000)
committerChris Demetriou <cgd@google.com>
Wed, 2 Apr 2003 18:43:16 +0000 (18:43 +0000)
2003-04-02  Chris Demetriou  <cgd@broadcom.com>

        * config/tc-mips.c (macro2): Adjust implementation of
        M_ULH, M_ULHU, M_ULW, and M_ULD so that they work properly
        in the case where the source and destination registers
        are the same.

[ gas/testsuite/ChangeLog ]
2003-04-02  Chris Demetriou  <cgd@broadcom.com>

        * gas/mips/ulh.d: Adjust for ulh and ulhu macro assembly changes.

        * gas/mips/mips.exp: Define new "gpr_ilocks" architecture
        property, and add it to mips2 (and later) chips and r3900.
        * gas/mips/uld2.s: New test source file.
        * gas/mips/ulh2.s: Likewise.
        * gas/mips/ulw2.s: Likewise.
        * gas/mips/uld2.l: New test stderr listing.
        * gas/mips/ulh2.l: Likewise.
        * gas/mips/ulw2.l: Likewise.
        * gas/mips/uld2-eb.d: New test.
        * gas/mips/uld2-el.d: Likewise.
        * gas/mips/ulh2-eb.d: Likewise.
        * gas/mips/ulh2-el.d: Likewise.
        * gas/mips/ulw2-eb-ilocks.d: Likewise.
        * gas/mips/ulw2-eb.d: Likewise.
        * gas/mips/ulw2-el-ilocks.d: Likewise.
        * gas/mips/ulw2-el.d: Likewise.
        * gas/mips/mips.exp: Run new tests for appropriate architectures.

19 files changed:
gas/ChangeLog
gas/config/tc-mips.c
gas/testsuite/ChangeLog
gas/testsuite/gas/mips/mips.exp
gas/testsuite/gas/mips/uld2-eb.d [new file with mode: 0644]
gas/testsuite/gas/mips/uld2-el.d [new file with mode: 0644]
gas/testsuite/gas/mips/uld2.l [new file with mode: 0644]
gas/testsuite/gas/mips/uld2.s [new file with mode: 0644]
gas/testsuite/gas/mips/ulh.d
gas/testsuite/gas/mips/ulh2-eb.d [new file with mode: 0644]
gas/testsuite/gas/mips/ulh2-el.d [new file with mode: 0644]
gas/testsuite/gas/mips/ulh2.l [new file with mode: 0644]
gas/testsuite/gas/mips/ulh2.s [new file with mode: 0644]
gas/testsuite/gas/mips/ulw2-eb-ilocks.d [new file with mode: 0644]
gas/testsuite/gas/mips/ulw2-eb.d [new file with mode: 0644]
gas/testsuite/gas/mips/ulw2-el-ilocks.d [new file with mode: 0644]
gas/testsuite/gas/mips/ulw2-el.d [new file with mode: 0644]
gas/testsuite/gas/mips/ulw2.l [new file with mode: 0644]
gas/testsuite/gas/mips/ulw2.s [new file with mode: 0644]

index 5462dd59b284284d24a7bd24ed6b2f11c6304e91..b8df657d1baa0837e246645b10f3b0bb7f79e8ba 100644 (file)
@@ -1,3 +1,10 @@
+2003-04-02  Chris Demetriou  <cgd@broadcom.com>
+
+       * config/tc-mips.c (macro2): Adjust implementation of
+       M_ULH, M_ULHU, M_ULW, and M_ULD so that they work properly
+       in the case where the source and destination registers
+       are the same.
+
 2003-04-01  Bob Wilson  <bob.wilson@acm.org>
 
         * Makefile.am (CPU_TYPES): Add xtensa.
index 239ed6dc27c59919a54bebb8f8467f21b4709d3b..2e114f4f542f8a3e1a1e941f751c50c59b424161 100644 (file)
@@ -7554,19 +7554,18 @@ macro2 (ip)
     ulh:
       if (offset_expr.X_add_number >= 0x7fff)
        as_bad (_("operand overflow"));
-      /* avoid load delay */
       if (! target_big_endian)
        ++offset_expr.X_add_number;
-      macro_build ((char *) NULL, &icnt, &offset_expr, s, "t,o(b)", treg,
+      macro_build ((char *) NULL, &icnt, &offset_expr, s, "t,o(b)", AT,
                   (int) BFD_RELOC_LO16, breg);
       if (! target_big_endian)
        --offset_expr.X_add_number;
       else
        ++offset_expr.X_add_number;
-      macro_build ((char *) NULL, &icnt, &offset_expr, "lbu", "t,o(b)", AT,
+      macro_build ((char *) NULL, &icnt, &offset_expr, "lbu", "t,o(b)", treg,
                   (int) BFD_RELOC_LO16, breg);
       macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "sll", "d,w,<",
-                  treg, treg, 8);
+                  AT, AT, 8);
       macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "or", "d,v,t",
                   treg, treg, AT);
       break;
@@ -7583,17 +7582,29 @@ macro2 (ip)
     ulw:
       if (offset_expr.X_add_number >= 0x8000 - off)
        as_bad (_("operand overflow"));
+      if (treg != breg)
+       tempreg = treg;
+      else
+       tempreg = AT;
       if (! target_big_endian)
        offset_expr.X_add_number += off;
-      macro_build ((char *) NULL, &icnt, &offset_expr, s, "t,o(b)", treg,
+      macro_build ((char *) NULL, &icnt, &offset_expr, s, "t,o(b)", tempreg,
                   (int) BFD_RELOC_LO16, breg);
       if (! target_big_endian)
        offset_expr.X_add_number -= off;
       else
        offset_expr.X_add_number += off;
-      macro_build ((char *) NULL, &icnt, &offset_expr, s2, "t,o(b)", treg,
+      macro_build ((char *) NULL, &icnt, &offset_expr, s2, "t,o(b)", tempreg,
                   (int) BFD_RELOC_LO16, breg);
-      return;
+
+      /* If necessary, move the result in tempreg the final destination.  */
+      if (treg == tempreg)
+        return;
+      /* Protect second load's delay slot.  */
+      if (!gpr_interlocks)
+       macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "nop", "");
+      move_register (&icnt, treg, tempreg);
+      break;
 
     case M_ULD_A:
       s = "ldl";
index 5582d168c16aa450a18d179340d526465d26c0fc..0a0dba1475c913d25dcd2ef9332ad13745264468 100644 (file)
@@ -1,3 +1,25 @@
+2003-04-02  Chris Demetriou  <cgd@broadcom.com>
+
+       * gas/mips/ulh.d: Adjust for ulh and ulhu macro assembly changes.
+
+       * gas/mips/mips.exp: Define new "gpr_ilocks" architecture
+       property, and add it to mips2 (and later) chips and r3900.
+       * gas/mips/uld2.s: New test source file.
+       * gas/mips/ulh2.s: Likewise.
+       * gas/mips/ulw2.s: Likewise.
+       * gas/mips/uld2.l: New test stderr listing.
+       * gas/mips/ulh2.l: Likewise.
+       * gas/mips/ulw2.l: Likewise.
+       * gas/mips/uld2-eb.d: New test.
+       * gas/mips/uld2-el.d: Likewise.
+       * gas/mips/ulh2-eb.d: Likewise.
+       * gas/mips/ulh2-el.d: Likewise.
+       * gas/mips/ulw2-eb-ilocks.d: Likewise.
+       * gas/mips/ulw2-eb.d: Likewise.
+       * gas/mips/ulw2-el-ilocks.d: Likewise.
+       * gas/mips/ulw2-el.d: Likewise.
+       * gas/mips/mips.exp: Run new tests for appropriate architectures.
+
 2003-04-01  Bob Wilson  <bob.wilson@acm.org>
 
         * gas/xtensa/all.exp: New file.
index eaf7d37e1d55deb2548dcec857d1795acf887f09..aa6857300cda45528c76de8216d7a15995442c96 100644 (file)
 #              The architecture includes the instructions defined
 #              by that MIPS ISA.
 #
+#      gpr_ilocks
+#              The architecture interlocks GPRs accesses.  (That is,
+#              there are no load delay slots.)
+#
 #      mips3d  The architecture includes the MIPS-3D ASE.
 #
 #      ror     The architecture includes hardware rotate instructions.
@@ -332,7 +336,7 @@ proc run_list_test_arches { name opts arch_list } {
 # to any architecture.
 mips_arch_create mips1         32      {}      {} \
                        { -march=mips1 -mtune=mips1 } { -mmips:3000 }
-mips_arch_create mips2         32      mips1   {} \
+mips_arch_create mips2         32      mips1   { gpr_ilocks } \
                        { -march=mips2 -mtune=mips2 } { -mmips:6000 }
 mips_arch_create mips3         64      mips2   {} \
                        { -march=mips3 -mtune=mips3 } { -mmips:4000 }
@@ -352,7 +356,7 @@ mips_arch_create mips64     64      mips5   { mips32 } \
                        { mipsisa64-*-* mipsisa64el-*-* }
 mips_arch_create r3000         32      mips1   {} \
                        { -march=r3000 -mtune=r3000 } { -mmips:3000 }
-mips_arch_create r3900         32      mips1   {} \
+mips_arch_create r3900         32      mips1   { gpr_ilocks } \
                        { -march=r3900 -mtune=r3900 } { -mmips:3900 } \
                        { mipstx39-*-* mipstx39el-*-* }
 mips_arch_create r4000         64      mips3   {} \
@@ -492,6 +496,8 @@ if { [istarget mips*-*-*] } then {
     if !$aout { run_dump_test "sb" }
     run_dump_test "trunc"
     if !$aout { run_dump_test "ulh" }
+    run_dump_test_arches "ulh2-eb"     [mips_arch_list_matching mips1]
+    run_dump_test_arches "ulh2-el"     [mips_arch_list_matching mips1]
     if $elf { run_dump_test "ulh-svr4pic" }
     if $elf { run_dump_test "ulh-xgot" }
     if $ecoff { run_dump_test "ulh-empic" }
@@ -502,6 +508,14 @@ if { [istarget mips*-*-*] } then {
        run_dump_test "usw"
        run_dump_test "usd"
     }
+    run_dump_test_arches "ulw2-eb"     [mips_arch_list_matching !gpr_ilocks]
+    run_dump_test_arches "ulw2-eb-ilocks" [mips_arch_list_matching gpr_ilocks]
+    run_dump_test_arches "ulw2-el"     [mips_arch_list_matching !gpr_ilocks]
+    run_dump_test_arches "ulw2-el-ilocks" [mips_arch_list_matching gpr_ilocks]
+
+    run_dump_test_arches "uld2-eb" [mips_arch_list_matching mips3]
+    run_dump_test_arches "uld2-el" [mips_arch_list_matching mips3]
+
     # The mips16 test can only be run on ELF, because only ELF
     # supports the necessary mips16 reloc.
     if { $elf && !$no_mips16 } {
diff --git a/gas/testsuite/gas/mips/uld2-eb.d b/gas/testsuite/gas/mips/uld2-eb.d
new file mode 100644 (file)
index 0000000..90681da
--- /dev/null
@@ -0,0 +1,26 @@
+#as: -EB
+#objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=numeric
+#name: uld2 -EB
+#source: uld2.s
+#stderr: uld2.l
+
+# Further checks of uld macro.
+# XXX: note: when 'move' is changed to use 'or' rather than daddu, the
+# XXX: 'move' opcodes shown here (whose raw instruction fields are daddu)
+# XXX: should be changed to be 'or' instructions and this comment should be
+# XXX: removed.
+
+.*: +file format .*mips.*
+
+Disassembly of section .text:
+0+0000 <[^>]*> 68a40000        ldl     \$4,0\(\$5\)
+0+0004 <[^>]*> 6ca40007        ldr     \$4,7\(\$5\)
+0+0008 <[^>]*> 68a40001        ldl     \$4,1\(\$5\)
+0+000c <[^>]*> 6ca40008        ldr     \$4,8\(\$5\)
+0+0010 <[^>]*> 68a10000        ldl     \$1,0\(\$5\)
+0+0014 <[^>]*> 6ca10007        ldr     \$1,7\(\$5\)
+0+0018 <[^>]*> 0020282d        move    \$5,\$1
+0+001c <[^>]*> 68a10001        ldl     \$1,1\(\$5\)
+0+0020 <[^>]*> 6ca10008        ldr     \$1,8\(\$5\)
+0+0024 <[^>]*> 0020282d        move    \$5,\$1
+       \.\.\.
diff --git a/gas/testsuite/gas/mips/uld2-el.d b/gas/testsuite/gas/mips/uld2-el.d
new file mode 100644 (file)
index 0000000..08a53a7
--- /dev/null
@@ -0,0 +1,26 @@
+#as: -EL
+#objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=numeric
+#name: uld2 -EL
+#source: uld2.s
+#stderr: uld2.l
+
+# Further checks of uld macro.
+# XXX: note: when 'move' is changed to use 'or' rather than daddu, the
+# XXX: 'move' opcodes shown here (whose raw instruction fields are daddu)
+# XXX: should be changed to be 'or' instructions and this comment should be
+# XXX: removed.
+
+.*: +file format .*mips.*
+
+Disassembly of section .text:
+0+0000 <[^>]*> 68a40007        ldl     \$4,7\(\$5\)
+0+0004 <[^>]*> 6ca40000        ldr     \$4,0\(\$5\)
+0+0008 <[^>]*> 68a40008        ldl     \$4,8\(\$5\)
+0+000c <[^>]*> 6ca40001        ldr     \$4,1\(\$5\)
+0+0010 <[^>]*> 68a10007        ldl     \$1,7\(\$5\)
+0+0014 <[^>]*> 6ca10000        ldr     \$1,0\(\$5\)
+0+0018 <[^>]*> 0020282d        move    \$5,\$1
+0+001c <[^>]*> 68a10008        ldl     \$1,8\(\$5\)
+0+0020 <[^>]*> 6ca10001        ldr     \$1,1\(\$5\)
+0+0024 <[^>]*> 0020282d        move    \$5,\$1
+       \.\.\.
diff --git a/gas/testsuite/gas/mips/uld2.l b/gas/testsuite/gas/mips/uld2.l
new file mode 100644 (file)
index 0000000..1ab29b5
--- /dev/null
@@ -0,0 +1,3 @@
+.*: Assembler messages:
+.*:11: Warning: Macro used \$at after "\.set noat"
+.*:12: Warning: Macro used \$at after "\.set noat"
diff --git a/gas/testsuite/gas/mips/uld2.s b/gas/testsuite/gas/mips/uld2.s
new file mode 100644 (file)
index 0000000..5b0d99b
--- /dev/null
@@ -0,0 +1,15 @@
+# Source file used to test the uld macro (harder).
+       
+       .set noat
+       
+       .text
+text_label:
+
+       uld     $4,0($5)
+       uld     $4,1($5)
+
+       uld     $5,0($5)        # warns
+       uld     $5,1($5)        # warns
+
+# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ...
+       .space  8
index 264885ad551f19041d367bd535d72190a6113793..df5a57b73696643eda7a3b95c224fa883f1f89e1 100644 (file)
@@ -7,22 +7,22 @@
 .*: +file format .*mips.*
 
 Disassembly of section .text:
-0+0000 <[^>]*> lb      a0,[01]\(zero\)
-0+0004 <[^>]*> lbu     at,[01]\(zero\)
-0+0008 <[^>]*> sll     a0,a0,0x8
+0+0000 <[^>]*> lb      at,[01]\(zero\)
+0+0004 <[^>]*> lbu     a0,[01]\(zero\)
+0+0008 <[^>]*> sll     at,at,0x8
 0+000c <[^>]*> or      a0,a0,at
-0+0010 <[^>]*> lb      a0,[12]\(zero\)
-0+0014 <[^>]*> lbu     at,[12]\(zero\)
-0+0018 <[^>]*> sll     a0,a0,0x8
+0+0010 <[^>]*> lb      at,[12]\(zero\)
+0+0014 <[^>]*> lbu     a0,[12]\(zero\)
+0+0018 <[^>]*> sll     at,at,0x8
 0+001c <[^>]*> or      a0,a0,at
 0+0020 <[^>]*> li      at,0x8000
 0+0024 <[^>]*> lb      a0,[01]\(at\)
 0+0028 <[^>]*> lbu     at,[01]\(at\)
 0+002c <[^>]*> sll     a0,a0,0x8
 0+0030 <[^>]*> or      a0,a0,at
-0+0034 <[^>]*> lb      a0,-3276[78]\(zero\)
-0+0038 <[^>]*> lbu     at,-3276[78]\(zero\)
-0+003c <[^>]*> sll     a0,a0,0x8
+0+0034 <[^>]*> lb      at,-3276[78]\(zero\)
+0+0038 <[^>]*> lbu     a0,-3276[78]\(zero\)
+0+003c <[^>]*> sll     at,at,0x8
 0+0040 <[^>]*> or      a0,a0,at
 0+0044 <[^>]*> lui     at,0x1
 0+0048 <[^>]*> lb      a0,[01]\(at\)
@@ -35,13 +35,13 @@ Disassembly of section .text:
 0+0064 <[^>]*> lbu     at,[01]\(at\)
 0+0068 <[^>]*> sll     a0,a0,0x8
 0+006c <[^>]*> or      a0,a0,at
-0+0070 <[^>]*> lb      a0,[01]\(a1\)
-0+0074 <[^>]*> lbu     at,[01]\(a1\)
-0+0078 <[^>]*> sll     a0,a0,0x8
+0+0070 <[^>]*> lb      at,[01]\(a1\)
+0+0074 <[^>]*> lbu     a0,[01]\(a1\)
+0+0078 <[^>]*> sll     at,at,0x8
 0+007c <[^>]*> or      a0,a0,at
-0+0080 <[^>]*> lb      a0,[12]\(a1\)
-0+0084 <[^>]*> lbu     at,[12]\(a1\)
-0+0088 <[^>]*> sll     a0,a0,0x8
+0+0080 <[^>]*> lb      at,[12]\(a1\)
+0+0084 <[^>]*> lbu     a0,[12]\(a1\)
+0+0088 <[^>]*> sll     at,at,0x8
 0+008c <[^>]*> or      a0,a0,at
 0+0090 <[^>]*> lui     at,[-0-9x]+
 [      ]*90: [A-Z0-9_]*HI[A-Z0-9_]*    .data.*
@@ -367,8 +367,8 @@ Disassembly of section .text:
 0+045c <[^>]*> lbu     at,[01]\(at\)
 0+0460 <[^>]*> sll     a0,a0,0x8
 0+0464 <[^>]*> or      a0,a0,at
-0+0468 <[^>]*> lbu     a0,[01]\(zero\)
-0+046c <[^>]*> lbu     at,[01]\(zero\)
-0+0470 <[^>]*> sll     a0,a0,0x8
+0+0468 <[^>]*> lbu     at,[01]\(zero\)
+0+046c <[^>]*> lbu     a0,[01]\(zero\)
+0+0470 <[^>]*> sll     at,at,0x8
 0+0474 <[^>]*> or      a0,a0,at
        ...
diff --git a/gas/testsuite/gas/mips/ulh2-eb.d b/gas/testsuite/gas/mips/ulh2-eb.d
new file mode 100644 (file)
index 0000000..d822fce
--- /dev/null
@@ -0,0 +1,44 @@
+#as: -EB
+#objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=numeric
+#name: ulh2 -EB
+#source: ulh2.s
+#stderr: ulh2.l
+
+# Further checks of ulh/ulhu macros.
+
+.*: +file format .*mips.*
+
+Disassembly of section .text:
+0+0000 <[^>]*> 80a10000        lb      \$1,0\(\$5\)
+0+0004 <[^>]*> 90a40001        lbu     \$4,1\(\$5\)
+0+0008 <[^>]*> 00010a00        sll     \$1,\$1,0x8
+0+000c <[^>]*> 00812025        or      \$4,\$4,\$1
+0+0010 <[^>]*> 80a10001        lb      \$1,1\(\$5\)
+0+0014 <[^>]*> 90a40002        lbu     \$4,2\(\$5\)
+0+0018 <[^>]*> 00010a00        sll     \$1,\$1,0x8
+0+001c <[^>]*> 00812025        or      \$4,\$4,\$1
+0+0020 <[^>]*> 80a10000        lb      \$1,0\(\$5\)
+0+0024 <[^>]*> 90a50001        lbu     \$5,1\(\$5\)
+0+0028 <[^>]*> 00010a00        sll     \$1,\$1,0x8
+0+002c <[^>]*> 00a12825        or      \$5,\$5,\$1
+0+0030 <[^>]*> 80a10001        lb      \$1,1\(\$5\)
+0+0034 <[^>]*> 90a50002        lbu     \$5,2\(\$5\)
+0+0038 <[^>]*> 00010a00        sll     \$1,\$1,0x8
+0+003c <[^>]*> 00a12825        or      \$5,\$5,\$1
+0+0040 <[^>]*> 90a10000        lbu     \$1,0\(\$5\)
+0+0044 <[^>]*> 90a40001        lbu     \$4,1\(\$5\)
+0+0048 <[^>]*> 00010a00        sll     \$1,\$1,0x8
+0+004c <[^>]*> 00812025        or      \$4,\$4,\$1
+0+0050 <[^>]*> 90a10001        lbu     \$1,1\(\$5\)
+0+0054 <[^>]*> 90a40002        lbu     \$4,2\(\$5\)
+0+0058 <[^>]*> 00010a00        sll     \$1,\$1,0x8
+0+005c <[^>]*> 00812025        or      \$4,\$4,\$1
+0+0060 <[^>]*> 90a10000        lbu     \$1,0\(\$5\)
+0+0064 <[^>]*> 90a50001        lbu     \$5,1\(\$5\)
+0+0068 <[^>]*> 00010a00        sll     \$1,\$1,0x8
+0+006c <[^>]*> 00a12825        or      \$5,\$5,\$1
+0+0070 <[^>]*> 90a10001        lbu     \$1,1\(\$5\)
+0+0074 <[^>]*> 90a50002        lbu     \$5,2\(\$5\)
+0+0078 <[^>]*> 00010a00        sll     \$1,\$1,0x8
+0+007c <[^>]*> 00a12825        or      \$5,\$5,\$1
+       \.\.\.
diff --git a/gas/testsuite/gas/mips/ulh2-el.d b/gas/testsuite/gas/mips/ulh2-el.d
new file mode 100644 (file)
index 0000000..0f5d369
--- /dev/null
@@ -0,0 +1,44 @@
+#as: -EL
+#objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=numeric
+#name: ulh2 -EL
+#source: ulh2.s
+#stderr: ulh2.l
+
+# Further checks of ulh/ulhu macros.
+
+.*: +file format .*mips.*
+
+Disassembly of section .text:
+0+0000 <[^>]*> 80a10001        lb      \$1,1\(\$5\)
+0+0004 <[^>]*> 90a40000        lbu     \$4,0\(\$5\)
+0+0008 <[^>]*> 00010a00        sll     \$1,\$1,0x8
+0+000c <[^>]*> 00812025        or      \$4,\$4,\$1
+0+0010 <[^>]*> 80a10002        lb      \$1,2\(\$5\)
+0+0014 <[^>]*> 90a40001        lbu     \$4,1\(\$5\)
+0+0018 <[^>]*> 00010a00        sll     \$1,\$1,0x8
+0+001c <[^>]*> 00812025        or      \$4,\$4,\$1
+0+0020 <[^>]*> 80a10001        lb      \$1,1\(\$5\)
+0+0024 <[^>]*> 90a50000        lbu     \$5,0\(\$5\)
+0+0028 <[^>]*> 00010a00        sll     \$1,\$1,0x8
+0+002c <[^>]*> 00a12825        or      \$5,\$5,\$1
+0+0030 <[^>]*> 80a10002        lb      \$1,2\(\$5\)
+0+0034 <[^>]*> 90a50001        lbu     \$5,1\(\$5\)
+0+0038 <[^>]*> 00010a00        sll     \$1,\$1,0x8
+0+003c <[^>]*> 00a12825        or      \$5,\$5,\$1
+0+0040 <[^>]*> 90a10001        lbu     \$1,1\(\$5\)
+0+0044 <[^>]*> 90a40000        lbu     \$4,0\(\$5\)
+0+0048 <[^>]*> 00010a00        sll     \$1,\$1,0x8
+0+004c <[^>]*> 00812025        or      \$4,\$4,\$1
+0+0050 <[^>]*> 90a10002        lbu     \$1,2\(\$5\)
+0+0054 <[^>]*> 90a40001        lbu     \$4,1\(\$5\)
+0+0058 <[^>]*> 00010a00        sll     \$1,\$1,0x8
+0+005c <[^>]*> 00812025        or      \$4,\$4,\$1
+0+0060 <[^>]*> 90a10001        lbu     \$1,1\(\$5\)
+0+0064 <[^>]*> 90a50000        lbu     \$5,0\(\$5\)
+0+0068 <[^>]*> 00010a00        sll     \$1,\$1,0x8
+0+006c <[^>]*> 00a12825        or      \$5,\$5,\$1
+0+0070 <[^>]*> 90a10002        lbu     \$1,2\(\$5\)
+0+0074 <[^>]*> 90a50001        lbu     \$5,1\(\$5\)
+0+0078 <[^>]*> 00010a00        sll     \$1,\$1,0x8
+0+007c <[^>]*> 00a12825        or      \$5,\$5,\$1
+       \.\.\.
diff --git a/gas/testsuite/gas/mips/ulh2.l b/gas/testsuite/gas/mips/ulh2.l
new file mode 100644 (file)
index 0000000..4bab367
--- /dev/null
@@ -0,0 +1,9 @@
+.*: Assembler messages:
+.*:8: Warning: Macro used \$at after "\.set noat"
+.*:9: Warning: Macro used \$at after "\.set noat"
+.*:11: Warning: Macro used \$at after "\.set noat"
+.*:12: Warning: Macro used \$at after "\.set noat"
+.*:14: Warning: Macro used \$at after "\.set noat"
+.*:15: Warning: Macro used \$at after "\.set noat"
+.*:17: Warning: Macro used \$at after "\.set noat"
+.*:18: Warning: Macro used \$at after "\.set noat"
diff --git a/gas/testsuite/gas/mips/ulh2.s b/gas/testsuite/gas/mips/ulh2.s
new file mode 100644 (file)
index 0000000..3aa1cff
--- /dev/null
@@ -0,0 +1,21 @@
+# Source file used to test the ulh and ulhu macros (harder).
+
+       .set noat
+       
+       .text
+text_label:
+
+       ulh     $4,0($5)                # warns
+       ulh     $4,1($5)                # warns
+
+       ulh     $5,0($5)                # warns
+       ulh     $5,1($5)                # warns
+
+       ulhu    $4,0($5)                # warns
+       ulhu    $4,1($5)                # warns
+
+       ulhu    $5,0($5)                # warns
+       ulhu    $5,1($5)                # warns
+
+# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ...
+       .space  8
diff --git a/gas/testsuite/gas/mips/ulw2-eb-ilocks.d b/gas/testsuite/gas/mips/ulw2-eb-ilocks.d
new file mode 100644 (file)
index 0000000..7526909
--- /dev/null
@@ -0,0 +1,26 @@
+#as: -EB
+#objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=numeric
+#name: ulw2 -EB interlocked
+#source: ulw2.s
+#stderr: ulw2.l
+
+# Further checks of ulw macro.
+# XXX: note: when 'move' is changed to use 'or' rather than addu/daddu, the
+# XXX: 'move' opcodes shown here (whose raw instruction fields are addu/daddu)
+# XXX: should be changed to be 'or' instructions and this comment should be
+# XXX: removed.
+
+.*: +file format .*mips.*
+
+Disassembly of section .text:
+0+0000 <[^>]*> 88a40000        lwl     \$4,0\(\$5\)
+0+0004 <[^>]*> 98a40003        lwr     \$4,3\(\$5\)
+0+0008 <[^>]*> 88a40001        lwl     \$4,1\(\$5\)
+0+000c <[^>]*> 98a40004        lwr     \$4,4\(\$5\)
+0+0010 <[^>]*> 88a10000        lwl     \$1,0\(\$5\)
+0+0014 <[^>]*> 98a10003        lwr     \$1,3\(\$5\)
+0+0018 <[^>]*> 0020282[1d]     move    \$5,\$1
+0+001c <[^>]*> 88a10001        lwl     \$1,1\(\$5\)
+0+0020 <[^>]*> 98a10004        lwr     \$1,4\(\$5\)
+0+0024 <[^>]*> 0020282[1d]     move    \$5,\$1
+       \.\.\.
diff --git a/gas/testsuite/gas/mips/ulw2-eb.d b/gas/testsuite/gas/mips/ulw2-eb.d
new file mode 100644 (file)
index 0000000..cb7cae6
--- /dev/null
@@ -0,0 +1,28 @@
+#as: -EB
+#objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=numeric
+#name: ulw2 -EB non-interlocked
+#source: ulw2.s
+#stderr: ulw2.l
+
+# Further checks of ulw macro.
+# XXX: note: when 'move' is changed to use 'or' rather than addu/daddu, the
+# XXX: 'move' opcodes shown here (whose raw instruction fields are addu/daddu)
+# XXX: should be changed to be 'or' instructions and this comment should be
+# XXX: removed.
+
+.*: +file format .*mips.*
+
+Disassembly of section .text:
+0+0000 <[^>]*> 88a40000        lwl     \$4,0\(\$5\)
+0+0004 <[^>]*> 98a40003        lwr     \$4,3\(\$5\)
+0+0008 <[^>]*> 88a40001        lwl     \$4,1\(\$5\)
+0+000c <[^>]*> 98a40004        lwr     \$4,4\(\$5\)
+0+0010 <[^>]*> 88a10000        lwl     \$1,0\(\$5\)
+0+0014 <[^>]*> 98a10003        lwr     \$1,3\(\$5\)
+0+0018 <[^>]*> 00000000        nop
+0+001c <[^>]*> 0020282[1d]     move    \$5,\$1
+0+0020 <[^>]*> 88a10001        lwl     \$1,1\(\$5\)
+0+0024 <[^>]*> 98a10004        lwr     \$1,4\(\$5\)
+0+0028 <[^>]*> 00000000        nop
+0+002c <[^>]*> 0020282[1d]     move    \$5,\$1
+       \.\.\.
diff --git a/gas/testsuite/gas/mips/ulw2-el-ilocks.d b/gas/testsuite/gas/mips/ulw2-el-ilocks.d
new file mode 100644 (file)
index 0000000..cce9fb7
--- /dev/null
@@ -0,0 +1,26 @@
+#as: -EL
+#objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=numeric
+#name: ulw2 -EL interlocked
+#source: ulw2.s
+#stderr: ulw2.l
+
+# Further checks of ulw macro.
+# XXX: note: when 'move' is changed to use 'or' rather than addu/daddu, the
+# XXX: 'move' opcodes shown here (whose raw instruction fields are addu/daddu)
+# XXX: should be changed to be 'or' instructions and this comment should be
+# XXX: removed.
+
+.*: +file format .*mips.*
+
+Disassembly of section .text:
+0+0000 <[^>]*> 88a40003        lwl     \$4,3\(\$5\)
+0+0004 <[^>]*> 98a40000        lwr     \$4,0\(\$5\)
+0+0008 <[^>]*> 88a40004        lwl     \$4,4\(\$5\)
+0+000c <[^>]*> 98a40001        lwr     \$4,1\(\$5\)
+0+0010 <[^>]*> 88a10003        lwl     \$1,3\(\$5\)
+0+0014 <[^>]*> 98a10000        lwr     \$1,0\(\$5\)
+0+0018 <[^>]*> 0020282[1d]     move    \$5,\$1
+0+001c <[^>]*> 88a10004        lwl     \$1,4\(\$5\)
+0+0020 <[^>]*> 98a10001        lwr     \$1,1\(\$5\)
+0+0024 <[^>]*> 0020282[1d]     move    \$5,\$1
+       \.\.\.
diff --git a/gas/testsuite/gas/mips/ulw2-el.d b/gas/testsuite/gas/mips/ulw2-el.d
new file mode 100644 (file)
index 0000000..59039a8
--- /dev/null
@@ -0,0 +1,28 @@
+#as: -EL
+#objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=numeric
+#name: ulw2 -EL non-interlocked
+#source: ulw2.s
+#stderr: ulw2.l
+
+# Further checks of ulw macro.
+# XXX: note: when 'move' is changed to use 'or' rather than addu/daddu, the
+# XXX: 'move' opcodes shown here (whose raw instruction fields are addu/daddu)
+# XXX: should be changed to be 'or' instructions and this comment should be
+# XXX: removed.
+
+.*: +file format .*mips.*
+
+Disassembly of section .text:
+0+0000 <[^>]*> 88a40003        lwl     \$4,3\(\$5\)
+0+0004 <[^>]*> 98a40000        lwr     \$4,0\(\$5\)
+0+0008 <[^>]*> 88a40004        lwl     \$4,4\(\$5\)
+0+000c <[^>]*> 98a40001        lwr     \$4,1\(\$5\)
+0+0010 <[^>]*> 88a10003        lwl     \$1,3\(\$5\)
+0+0014 <[^>]*> 98a10000        lwr     \$1,0\(\$5\)
+0+0018 <[^>]*> 00000000        nop
+0+001c <[^>]*> 0020282[1d]     move    \$5,\$1
+0+0020 <[^>]*> 88a10004        lwl     \$1,4\(\$5\)
+0+0024 <[^>]*> 98a10001        lwr     \$1,1\(\$5\)
+0+0028 <[^>]*> 00000000        nop
+0+002c <[^>]*> 0020282[1d]     move    \$5,\$1
+       \.\.\.
diff --git a/gas/testsuite/gas/mips/ulw2.l b/gas/testsuite/gas/mips/ulw2.l
new file mode 100644 (file)
index 0000000..1ab29b5
--- /dev/null
@@ -0,0 +1,3 @@
+.*: Assembler messages:
+.*:11: Warning: Macro used \$at after "\.set noat"
+.*:12: Warning: Macro used \$at after "\.set noat"
diff --git a/gas/testsuite/gas/mips/ulw2.s b/gas/testsuite/gas/mips/ulw2.s
new file mode 100644 (file)
index 0000000..f4373dc
--- /dev/null
@@ -0,0 +1,15 @@
+# Source file used to test the ulw macro (harder).
+       
+       .set noat
+       
+       .text
+text_label:
+
+       ulw     $4,0($5)
+       ulw     $4,1($5)
+
+       ulw     $5,0($5)        # warns
+       ulw     $5,1($5)        # warns
+
+# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ...
+       .space  8