gas,arm: Support case incensitive VLDR/VSTR SYSREG
Andre Vieira (lists)
andre.simoesdiasvieira@arm.com
Wed Aug 13 10:45:35 GMT 2025
To be consistent with VMRS/VMSR this changes VLDR/VSTR SYSREG to support
case insensitive system register operands.
Regression tested on arm-none-eabi.
OK for trunk?
-------------- next part --------------
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 217864bc09bfa6dd228ed608289646dfee5b1f60..482b1c8ecc00a36e21100b9e0a00d11973f6e34d 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -6416,19 +6416,15 @@ parse_sys_vldr_vstr (char **str)
{"P0", 0x5, 0x1},
{"FPCXTNS", 0x6, 0x1},
{"FPCXT_NS", 0x6, 0x1},
- {"fpcxtns", 0x6, 0x1},
- {"fpcxt_ns", 0x6, 0x1},
{"FPCXTS", 0x7, 0x1},
{"FPCXT_S", 0x7, 0x1},
- {"fpcxts", 0x7, 0x1},
- {"fpcxt_s", 0x7, 0x1}
};
char *op_end = strchr (*str, ',');
size_t op_strlen = op_end - *str;
for (i = 0; i < sizeof (sysregs) / sizeof (sysregs[0]); i++)
{
- if (!strncmp (*str, sysregs[i].name, op_strlen))
+ if (!strncasecmp (*str, sysregs[i].name, op_strlen))
{
val = sysregs[i].regl | (sysregs[i].regh << 3);
*str = op_end;
diff --git a/gas/testsuite/gas/arm/archv8m_1m-cmse-main.d b/gas/testsuite/gas/arm/archv8m_1m-cmse-main.d
index 1ed543a04e8602a0c6dfed28c0ec6ae455722af0..b451258808d8fdcea052b5a63c50cdfd3c420b72 100644
--- a/gas/testsuite/gas/arm/archv8m_1m-cmse-main.d
+++ b/gas/testsuite/gas/arm/archv8m_1m-cmse-main.d
@@ -54,4 +54,38 @@ Disassembly of section .text:
0+.* <[^>]*> edc3 ef80 vstr FPCXTS, \[r3\]
0+.* <[^>]*> bfa8 it ge
0+.* <[^>]*> edc3 ef80 vstrge FPCXTS, \[r3\]
+0+.* <[^>]*> ed92 2f80 vldr FPSCR, \[r2\]
+0+.* <[^>]*> ed92 2f82 vldr FPSCR, \[r2, #8\]
+0+.* <[^>]*> ed92 2f82 vldr FPSCR, \[r2, #8\]
+0+.* <[^>]*> ed12 2f82 vldr FPSCR, \[r2, #-8\]
+0+.* <[^>]*> edb2 2f82 vldr FPSCR, \[r2, #8\]!
+0+.* <[^>]*> edb2 2f82 vldr FPSCR, \[r2, #8\]!
+0+.* <[^>]*> ed32 2f82 vldr FPSCR, \[r2, #-8\]!
+0+.* <[^>]*> ecb2 2f82 vldr FPSCR, \[r2\], #8
+0+.* <[^>]*> ecb2 2f82 vldr FPSCR, \[r2\], #8
+0+.* <[^>]*> ec32 2f82 vldr FPSCR, \[r2\], #-8
+0+.* <[^>]*> ed93 4f80 vldr FPSCR_nzcvqc, \[r3\]
+0+.* <[^>]*> edd3 8f80 vldr VPR, \[r3\]
+0+.* <[^>]*> edd3 af80 vldr P0, \[r3\]
+0+.* <[^>]*> edd3 cf80 vldr FPCXTNS, \[r3\]
+0+.* <[^>]*> edd3 ef80 vldr FPCXTS, \[r3\]
+0+.* <[^>]*> bfa8 it ge
+0+.* <[^>]*> edd3 ef80 vldrge FPCXTS, \[r3\]
+0+.* <[^>]*> ed82 2f80 vstr FPSCR, \[r2\]
+0+.* <[^>]*> ed82 2f82 vstr FPSCR, \[r2, #8\]
+0+.* <[^>]*> ed82 2f82 vstr FPSCR, \[r2, #8\]
+0+.* <[^>]*> ed02 2f82 vstr FPSCR, \[r2, #-8\]
+0+.* <[^>]*> eda2 2f82 vstr FPSCR, \[r2, #8\]!
+0+.* <[^>]*> eda2 2f82 vstr FPSCR, \[r2, #8\]!
+0+.* <[^>]*> ed22 2f82 vstr FPSCR, \[r2, #-8\]!
+0+.* <[^>]*> eca2 2f82 vstr FPSCR, \[r2\], #8
+0+.* <[^>]*> eca2 2f82 vstr FPSCR, \[r2\], #8
+0+.* <[^>]*> ec22 2f82 vstr FPSCR, \[r2\], #-8
+0+.* <[^>]*> ed83 4f80 vstr FPSCR_nzcvqc, \[r3\]
+0+.* <[^>]*> edc3 8f80 vstr VPR, \[r3\]
+0+.* <[^>]*> edc3 af80 vstr P0, \[r3\]
+0+.* <[^>]*> edc3 cf80 vstr FPCXTNS, \[r3\]
+0+.* <[^>]*> edc3 ef80 vstr FPCXTS, \[r3\]
+0+.* <[^>]*> bfa8 it ge
+0+.* <[^>]*> edc3 ef80 vstrge FPCXTS, \[r3\]
#...
diff --git a/gas/testsuite/gas/arm/archv8m_1m-cmse-main.s b/gas/testsuite/gas/arm/archv8m_1m-cmse-main.s
index 9a20e1e4fe7ab1e497d83da13f288f1efcfc6a0c..402f4ee2e552f981988f4e7325bb8e0f0b130f0a 100644
--- a/gas/testsuite/gas/arm/archv8m_1m-cmse-main.s
+++ b/gas/testsuite/gas/arm/archv8m_1m-cmse-main.s
@@ -52,3 +52,37 @@ vstr P0, [r3] @ Accepts P0 system register
vstr FPCXTNS, [r3] @ Accepts FPCXTNS system register
vstr FPCXTS, [r3] @ Accepts FPCXTS system register
vstrge FPCXTS, [r3] @ Accepts conditional execution
+
+vldr fpscr, [r2] @ Accepts offset variant without immediate
+vldr fpscr, [r2, #8] @ Likewise but with immediate without sign
+vldr fpscr, [r2, #+8] @ Likewise but with positive sign
+vldr fpscr, [r2, #-8] @ Likewise but with negative sign
+vldr fpscr, [r2, #8]! @ Accepts pre-index variant with immediate without sign
+vldr fpscr, [r2, #+8]! @ Likewise but with positive sign
+vldr fpscr, [r2, #-8]! @ Likewise but with negative sign
+vldr fpscr, [r2], #8 @ Accepts post-index variant with immediate without sign
+vldr fpscr, [r2], #+8 @ Likewise but with positive sign
+vldr fpscr, [r2], #-8 @ Likewise but with negative sign
+vldr fpscr_nzcvqc, [r3] @ Accepts FPSCR_nzcvqc system register
+vldr vpr, [r3] @ Accepts VPR system register
+vldr p0, [r3] @ Accepts P0 system register
+vldr fpcxtns, [r3] @ Accepts FPCXTNS system register
+vldr fpcxts, [r3] @ Accepts FPCXTS system register
+vldrge fpcxts, [r3] @ Accepts conditional execution
+
+vstr fpscr, [r2] @ Accepts offset variant without immediate
+vstr fpscr, [r2, #8] @ Likewise but with immediate without sign
+vstr fpscr, [r2, #+8] @ Likewise but with positive sign
+vstr fpscr, [r2, #-8] @ Likewise but with negative sign
+vstr fpscr, [r2, #8]! @ Accepts pre-index variant with immediate without sign
+vstr fpscr, [r2, #+8]! @ Likewise but with positive sign
+vstr fpscr, [r2, #-8]! @ Likewise but with negative sign
+vstr fpscr, [r2], #8 @ Accepts post-index variant with immediate without sign
+vstr fpscr, [r2], #+8 @ Likewise but with positive sign
+vstr fpscr, [r2], #-8 @ Likewise but with negative sign
+vstr fpscr_nzcvqc, [r3] @ Accepts FPSCR_nzcvqc system register
+vstr vpr, [r3] @ Accepts VPR system register
+vstr p0, [r3] @ Accepts P0 system register
+vstr fpcxtns, [r3] @ Accepts FPCXTNS system register
+vstr fpcxts, [r3] @ Accepts FPCXTS system register
+vstrge fpcxts, [r3] @ Accepts conditional execution
More information about the Binutils
mailing list