From 0900a05b4ce11a11fafbb691d94745bb65ac4980 Mon Sep 17 00:00:00 2001 From: Jiong Wang Date: Tue, 13 Jan 2015 15:44:47 +0000 Subject: [PATCH] [ARM] vcmp/vcmpe should accept #0x0 as an operand gas/ 2015-01-13 Matthew Wahab * config/tc-arm.c (parse_ifimm_zero): Accept #0x0 as a synonym for #0, restoring previous behaviour. gas/testsuite/ 2015-01-13 Matthew Wahab * gas/arm/ual-vcmp.s: Add vcmp, vcmpe with #0x0 operand. * gas/ual/vcmp.d: Update expected output. * gas/ual/vcmp-zero-bad.l: Likewise --- gas/ChangeLog | 5 +++++ gas/config/tc-arm.c | 10 ++++++++++ gas/testsuite/ChangeLog | 6 ++++++ gas/testsuite/gas/arm/ual-vcmp.d | 20 ++++++++++++-------- gas/testsuite/gas/arm/ual-vcmp.s | 4 ++++ gas/testsuite/gas/arm/vcmp-zero-bad.l | 2 +- 6 files changed, 38 insertions(+), 9 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 78501edc333..ef0af898cd1 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2015-01-13 Matthew Wahab + + * config/tc-arm.c (parse_ifimm_zero): Accept #0x0 as a synonym for + #0, restoring previous behaviour. + 2015-01-12 Jan Beulich * gas/dw2gencfi.c (cfi_add_label, dot_cfi_label): New. diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index e0de0d2b132..b17ea6c42b7 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -4961,6 +4961,16 @@ parse_ifimm_zero (char **in) return FALSE; ++*in; + + /* Accept #0x0 as a synonym for #0. */ + if (strncmp (*in, "0x", 2) == 0) + { + int val; + if (parse_immediate (in, &val, 0, 0, TRUE) == FAIL) + return FALSE; + return TRUE; + } + error_code = atof_generic (in, ".", EXP_CHARS, &generic_floating_point_number); diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 54d9c6e8ed7..a63ebd115db 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2015-01-13 Matthew Wahab + + * gas/arm/ual-vcmp.s: Add vcmp, vcmpe with #0x0 operand. + * gas/ual/vcmp.d: Update expected output. + * gas/ual/vcmp-zero-bad.l: Likewise + 2015-01-12 Jan Beulich gas/cfi/cfi-label.d, gas/cfi/cfi-label.s: New. diff --git a/gas/testsuite/gas/arm/ual-vcmp.d b/gas/testsuite/gas/arm/ual-vcmp.d index 2e9fb3d5076..5b1b6ce5954 100644 --- a/gas/testsuite/gas/arm/ual-vcmp.d +++ b/gas/testsuite/gas/arm/ual-vcmp.d @@ -14,11 +14,15 @@ Disassembly of section .text: 0+014 <[^>]*> eeb53a40 vcmp.f32 s6, #0.0 0+018 <[^>]*> eef53ac0 vcmpe.f32 s7, #0.0 0+01c <[^>]*> eeb54ac0 vcmpe.f32 s8, #0.0 -0+020 <[^>]*> eeb50b40 vcmp.f64 d0, #0.0 -0+024 <[^>]*> eeb51b40 vcmp.f64 d1, #0.0 -0+028 <[^>]*> eeb52bc0 vcmpe.f64 d2, #0.0 -0+02c <[^>]*> eeb53bc0 vcmpe.f64 d3, #0.0 -0+030 <[^>]*> eeb54b40 vcmp.f64 d4, #0.0 -0+034 <[^>]*> eeb55b40 vcmp.f64 d5, #0.0 -0+038 <[^>]*> eeb56bc0 vcmpe.f64 d6, #0.0 -0+03c <[^>]*> eeb57bc0 vcmpe.f64 d7, #0.0 \ No newline at end of file +0+020 <[^>]*> eef54a40 vcmp.f32 s9, #0.0 +0+024 <[^>]*> eeb55ac0 vcmpe.f32 s10, #0.0 +0+028 <[^>]*> eeb50b40 vcmp.f64 d0, #0.0 +0+02c <[^>]*> eeb51b40 vcmp.f64 d1, #0.0 +0+030 <[^>]*> eeb52bc0 vcmpe.f64 d2, #0.0 +0+034 <[^>]*> eeb53bc0 vcmpe.f64 d3, #0.0 +0+038 <[^>]*> eeb54b40 vcmp.f64 d4, #0.0 +0+03c <[^>]*> eeb55b40 vcmp.f64 d5, #0.0 +0+040 <[^>]*> eeb56bc0 vcmpe.f64 d6, #0.0 +0+044 <[^>]*> eeb57bc0 vcmpe.f64 d7, #0.0 +0+048 <[^>]*> eeb58b40 vcmp.f64 d8, #0.0 +0+04c <[^>]*> eeb59bc0 vcmpe.f64 d9, #0.0 \ No newline at end of file diff --git a/gas/testsuite/gas/arm/ual-vcmp.s b/gas/testsuite/gas/arm/ual-vcmp.s index 79efa4e79a5..5fc5ebed306 100644 --- a/gas/testsuite/gas/arm/ual-vcmp.s +++ b/gas/testsuite/gas/arm/ual-vcmp.s @@ -10,6 +10,8 @@ vcmp.f32 s5, #0.0e2 vcmp.f32 s6, #0e-3 vcmpe.f32 s7, #0.0000 vcmpe.f32 s8, #.0 +vcmp.f32 s9, #0x0 +vcmpe.f32 s10, #0x0 vcmp.f64 d0, #0.0 vcmp.f64 d1, #0 @@ -19,3 +21,5 @@ vcmp.f64 d4, #0.0e5 vcmp.f64 d5, #0e-2 vcmpe.f64 d6, #0.00 vcmpe.f64 d7, #.0 +vcmp.f64 d8, #0x0 +vcmpe.f64 d9, #0x0 diff --git a/gas/testsuite/gas/arm/vcmp-zero-bad.l b/gas/testsuite/gas/arm/vcmp-zero-bad.l index 975d02b8c07..bce8e4ac4ef 100644 --- a/gas/testsuite/gas/arm/vcmp-zero-bad.l +++ b/gas/testsuite/gas/arm/vcmp-zero-bad.l @@ -4,5 +4,5 @@ [^:]*:7: Error: only floating point zero is allowed as immediate value -- `vcmpe.f32 s3,5' [^:]*:8: Error: only floating point zero is allowed as immediate value -- `vcmpe.f32 s4,#-0.0' [^:]*:10: Error: only floating point zero is allowed as immediate value -- `vcmp.f64 d0,#-1' -[^:]*:11: Error: garbage following instruction -- `vcmpe.f64 d3,#0x35' +[^:]*:11: Error: only floating point zero is allowed as immediate value -- `vcmpe.f64 d3,#0x35' [^:]*:12: Error: only floating point zero is allowed as immediate value -- `vcmpe.f64 d4,0xf' -- 2.30.2