PR29991, MicroMIPS flag erased after align directives
authorAlan Modra <amodra@gmail.com>
Thu, 12 Jan 2023 23:09:19 +0000 (09:39 +1030)
committerAlan Modra <amodra@gmail.com>
Mon, 16 Jan 2023 12:52:48 +0000 (23:22 +1030)
PR 29991
* config/tc-mips.c (s_align): Call file_mips_check_options and
mips_mark_labels.
* testsuite/gas/mips/align-after-label.s,
* testsuite/gas/mips/mips-align-after-label.d,
* testsuite/gas/mips/micromips-align-after-label.d: New test.
* testsuite/gas/mips/mips.exp: Run it.

gas/config/tc-mips.c
gas/testsuite/gas/mips/align-after-label.s [new file with mode: 0644]
gas/testsuite/gas/mips/micromips-align-after-label.d [new file with mode: 0644]
gas/testsuite/gas/mips/mips-align-after-label.d [new file with mode: 0644]
gas/testsuite/gas/mips/mips.exp

index 077993cf7cb22ce0b5a6915daa3fe282ff4ac3f2..e59021ee1916c195f7c67acfc23adf276796de16 100644 (file)
@@ -16262,6 +16262,8 @@ s_align (int x ATTRIBUTE_UNUSED)
   int temp, fill_value, *fill_ptr;
   long max_alignment = 28;
 
+  file_mips_check_options ();
+
   /* o Note that the assembler pulls down any immediately preceding label
        to the aligned address.
      o It's not documented but auto alignment is reinstated by
@@ -16286,6 +16288,9 @@ s_align (int x ATTRIBUTE_UNUSED)
     }
   else
     fill_ptr = 0;
+
+  mips_mark_labels ();
+
   if (temp)
     {
       segment_info_type *si = seg_info (now_seg);
diff --git a/gas/testsuite/gas/mips/align-after-label.s b/gas/testsuite/gas/mips/align-after-label.s
new file mode 100644 (file)
index 0000000..75e1c1b
--- /dev/null
@@ -0,0 +1,3 @@
+seg1:
+       .align 2
+       ADDIU $0, $0, 1
diff --git a/gas/testsuite/gas/mips/micromips-align-after-label.d b/gas/testsuite/gas/mips/micromips-align-after-label.d
new file mode 100644 (file)
index 0000000..9358b91
--- /dev/null
@@ -0,0 +1,13 @@
+#objdump: -dr --show-raw-insn
+#name: microMIPSr3 (align after label)
+#as: -mips32r3 -32 -mmicromips -EB
+#source: align-after-label.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <seg1>:
+[ 0-9a-f]+:    4c02            addiu   zero,zero,1
+[ 0-9a-f]+:    0c00            nop
+#pass
diff --git a/gas/testsuite/gas/mips/mips-align-after-label.d b/gas/testsuite/gas/mips/mips-align-after-label.d
new file mode 100644 (file)
index 0000000..8f3d40d
--- /dev/null
@@ -0,0 +1,12 @@
+#objdump: -dr --show-raw-insn
+#name: MIPS32r3 (align after label)
+#as: -mips32r3 -32 -mno-micromips -EB
+#source: align-after-label.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <seg1>:
+[ 0-9a-f]+:    24000001        li      zero,1
+#pass
index fafed2dcc0c952b5a68d9ecb747198082be44db5..e358c9716a66740ab5fb1c222d41fa49a91290ad 100644 (file)
@@ -1518,6 +1518,8 @@ if { [istarget mips*-*-vxworks*] } {
     run_dump_test "align2"
     run_dump_test "align2-el"
     run_dump_test "align3"
+    run_dump_test "mips-align-after-label"
+    run_dump_test "micromips-align-after-label"
     run_dump_test "odd-float"
     run_dump_test "insn-opts"