]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
arm, as: Support case incensitive VLDR/VSTR SYSREG
authorAndre Vieira <andre.simoesdiasvieira@arm.com>
Wed, 31 Dec 2025 16:14:29 +0000 (16:14 +0000)
committerAndre Vieira <andre.simoesdiasvieira@arm.com>
Wed, 31 Dec 2025 16:14:48 +0000 (16:14 +0000)
To be consistent with VMRS/VMSR this changes VLDR/VSTR SYSREG to support case
insensitive system register operands.

gas/config/tc-arm.c
gas/testsuite/gas/arm/archv8m_1m-cmse-main.d
gas/testsuite/gas/arm/archv8m_1m-cmse-main.s

index abad78a742f2bc70b16d97df7e4dfd3ca0c67d30..7fdf482495747e0e8dc5b76669f02e535a86e8df 100644 (file)
@@ -6412,19 +6412,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;
index 1ed543a04e8602a0c6dfed28c0ec6ae455722af0..b451258808d8fdcea052b5a63c50cdfd3c420b72 100644 (file)
@@ -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\]
 #...
index 9a20e1e4fe7ab1e497d83da13f288f1efcfc6a0c..402f4ee2e552f981988f4e7325bb8e0f0b130f0a 100644 (file)
@@ -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