diff --git a/gas/ChangeLog b/gas/ChangeLog index 792ba877c6a..403f122cb3a 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2016-08-11 Richard Sandiford + + * config/tc-aarch64.c (parse_aarch64_imm_float): Reject -0.0. + * testsuite/gas/aarch64/illegal.s, testsuite/gas/aarch64/illegal.l: + Add tests for -0.0. Add an end-of-file comment. + 2016-08-05 Nick Clifton PR gas/20429 diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c index e221ef47377..34fdc53e121 100644 --- a/gas/config/tc-aarch64.c +++ b/gas/config/tc-aarch64.c @@ -2240,7 +2240,7 @@ parse_aarch64_imm_float (char **ccp, int *immed, bfd_boolean dp_p) } } - if (aarch64_imm_float_p (fpword) || (fpword & 0x7fffffff) == 0) + if (aarch64_imm_float_p (fpword) || fpword == 0) { *immed = fpword; *ccp = str; diff --git a/gas/testsuite/gas/aarch64/illegal.l b/gas/testsuite/gas/aarch64/illegal.l index 61190655c4d..a0985cea501 100644 --- a/gas/testsuite/gas/aarch64/illegal.l +++ b/gas/testsuite/gas/aarch64/illegal.l @@ -567,4 +567,10 @@ [^:]*:567: Error: .*`mrs x7,S1_1_C16_C6_6' [^:]*:568: Error: .*`mrs x8,S2_2_C15_C16_7' [^:]*:569: Error: .*`mrs x9,S3_3_C14_C15_8' -[^:]*:569: Error: .* +[^:]*:571: Error: .*`fmov s0,#-0\.0' +[^:]*:573: Error: .*`fmov s0,#0x80000000' +[^:]*:575: Error: .*`fmov d0,#-0\.0' +[^:]*:577: Error: .*`fmov d0,#0x8000000000000000' +[^:]*:582: Error: .*`fcmgt v0\.4s,v0\.4s,#-0\.0' +[^:]*:585: Error: .*`fcmgt v0\.2d,v0\.2d,#-0\.0' +[^:]*:587: Error: .* diff --git a/gas/testsuite/gas/aarch64/illegal.s b/gas/testsuite/gas/aarch64/illegal.s index a315a6de859..df31895491b 100644 --- a/gas/testsuite/gas/aarch64/illegal.s +++ b/gas/testsuite/gas/aarch64/illegal.s @@ -567,3 +567,21 @@ one_label: mrs x7, S1_1_C16_C6_6 mrs x8, S2_2_C15_C16_7 mrs x9, S3_3_C14_C15_8 + + fmov s0, #-0.0 + fmov s0, #0x40000000 // OK + fmov s0, #0x80000000 + fmov s0, #0xc0000000 // OK + fmov d0, #-0.0 + fmov d0, #0x4000000000000000 // OK + fmov d0, #0x8000000000000000 + fmov d0, #0xc000000000000000 // OK + + fcmgt v0.4s, v0.4s, #0.0 // OK + fcmgt v0.4s, v0.4s, #0 // OK + fcmgt v0.4s, v0.4s, #-0.0 + fcmgt v0.2d, v0.2d, #0.0 // OK + fcmgt v0.2d, v0.2d, #0 // OK + fcmgt v0.2d, v0.2d, #-0.0 + + // End (for errors during literal pool generation)