* aarch64-opc.c (aarch64_logical_immediate_p): Return FALSE if the
authorNick Clifton <nickc@redhat.com>
Wed, 28 Aug 2013 10:25:36 +0000 (10:25 +0000)
committerNick Clifton <nickc@redhat.com>
Wed, 28 Aug 2013 10:25:36 +0000 (10:25 +0000)
immediate is not suitable for the 32-bit ABI.

* gas/aarch64/illegal.s: Add illegal constant for logical
operation.
* gas/aarch64/illegal.l: Add expected error message.

gas/testsuite/ChangeLog
gas/testsuite/gas/aarch64/illegal.l
gas/testsuite/gas/aarch64/illegal.s
opcodes/ChangeLog
opcodes/aarch64-opc.c

index eb39f6b..dd0fe72 100644 (file)
@@ -1,3 +1,9 @@
+2013-08-28  Nick Clifton  <nickc@redhat.com>
+
+       * gas/aarch64/illegal.s: Add illegal constant for logical
+       operation.
+       * gas/aarch64/illegal.l: Add expected error message.
+
 2013-08-23  Maciej W. Rozycki  <macro@codesourcery.com>
 
        * gas/testsuite/gas/mips/micromips-insn32.d: Adjust for delay
index d7740b9..e36b8fe 100644 (file)
 [^:]*:543: Error: .*`fmov s0,#0x11'
 [^:]*:544: Error: .*`fmov s0,#0xC0280000C1400000'
 [^:]*:545: Error: .*`fmov d0,#0xC02f800000000000'
-[^:]*:550: Error: .*
+[^:]*:550: Error: .*`ands w0,w24,#0xffeefffffffffffd'
+[^:]*:553: Error: .*
index d2bc08a..a46946e 100644 (file)
        // No 16-byte relocation
        ldr     q0, =one_label
 
+       ands    w0, w24, #0xffeefffffffffffd
+
 one_label:
+       
index ce6aebe..6966b95 100644 (file)
@@ -1,3 +1,8 @@
+2013-08-28  Nick Clifton  <nickc@redhat.com>
+
+       * aarch64-opc.c (aarch64_logical_immediate_p): Return FALSE if the
+       immediate is not suitable for the 32-bit ABI.
+
 2013-08-23  Maciej W. Rozycki  <macro@codesourcery.com>
 
        * micromips-opc.c (micromips_opcodes): Use RD_4 for "alnv.ps",
index 74f2826..f32ee5e 100644 (file)
@@ -1063,7 +1063,8 @@ aarch64_logical_immediate_p (uint64_t value, int is32, aarch64_insn *encoding)
       /* Allow all zeros or all ones in top 32-bits, so that
         constant expressions like ~1 are permitted.  */
       if (value >> 32 != 0 && value >> 32 != 0xffffffff)
-       return 0xffffffff;
+       return FALSE;
+
       /* Replicate the 32 lower bits to the 32 upper bits.  */
       value &= 0xffffffff;
       value |= value << 32;