binutils 2.18: don't emit symbols for neon registers
authorKoen Kooi <koen@openembedded.org>
Wed, 22 Jul 2009 16:36:17 +0000 (18:36 +0200)
committerKoen Kooi <koen@openembedded.org>
Wed, 22 Jul 2009 16:36:17 +0000 (18:36 +0200)
* this fixes building in NEON code into binaries that do runtime detection but are compiled for non-NEON platforms (e.g. pixman)

recipes/binutils/binutils-2.18/parse-neon-vmov.diff [new file with mode: 0644]
recipes/binutils/binutils_2.18.bb

diff --git a/recipes/binutils/binutils-2.18/parse-neon-vmov.diff b/recipes/binutils/binutils-2.18/parse-neon-vmov.diff
new file mode 100644 (file)
index 0000000..e14b2a7
--- /dev/null
@@ -0,0 +1,41 @@
+===================================================================
+RCS file: /cvs/src/src/gas/config/tc-arm.c,v
+retrieving revision 1.353
+retrieving revision 1.354
+diff -u -r1.353 -r1.354
+--- src/gas/config/tc-arm.c    2008/03/27 14:12:15     1.353
++++ src/gas/config/tc-arm.c    2008/03/28 18:13:52     1.354
+@@ -5209,16 +5209,6 @@
+               inst.operands[i].present = 1;
+             }
+         }
+-      else if (parse_qfloat_immediate (&ptr, &inst.operands[i].imm) == SUCCESS)
+-          /* Case 2: VMOV<c><q>.<dt> <Qd>, #<float-imm>
+-             Case 3: VMOV<c><q>.<dt> <Dd>, #<float-imm>
+-             Case 10: VMOV.F32 <Sd>, #<imm>
+-             Case 11: VMOV.F64 <Dd>, #<imm>  */
+-        inst.operands[i].immisfloat = 1;
+-      else if (parse_big_immediate (&ptr, i) == SUCCESS)
+-          /* Case 2: VMOV<c><q>.<dt> <Qd>, #<imm>
+-             Case 3: VMOV<c><q>.<dt> <Dd>, #<imm>  */
+-        ;
+       else if ((val = arm_typed_reg_parse (&ptr, REG_TYPE_NSDQ, &rtype,
+                                            &optype)) != FAIL)
+         {
+@@ -5258,6 +5248,16 @@
+               inst.operands[i++].present = 1;
+             }
+         }
++      else if (parse_qfloat_immediate (&ptr, &inst.operands[i].imm) == SUCCESS)
++          /* Case 2: VMOV<c><q>.<dt> <Qd>, #<float-imm>
++             Case 3: VMOV<c><q>.<dt> <Dd>, #<float-imm>
++             Case 10: VMOV.F32 <Sd>, #<imm>
++             Case 11: VMOV.F64 <Dd>, #<imm>  */
++        inst.operands[i].immisfloat = 1;
++      else if (parse_big_immediate (&ptr, i) == SUCCESS)
++          /* Case 2: VMOV<c><q>.<dt> <Qd>, #<imm>
++             Case 3: VMOV<c><q>.<dt> <Dd>, #<imm>  */
++        ;
+       else
+         {
+           first_error (_("expected <Rm> or <Dm> or <Qm> operand"));
index 159d97f..b1ae402 100644 (file)
@@ -1,4 +1,4 @@
-INC_PR = "r7"
+INC_PR = "r8"
 PR = "${INC_PR}.1"
 
 require binutils.inc
@@ -16,6 +16,7 @@ SRC_URI = "\
      file://binutils-uclibc-gas-needs-libm.patch;patch=1 \
      file://binutils-x86_64_i386_biarch.patch;patch=1 \
      file://binutils-section-in-segment.patch;patch=1;pnum=0 \
+     file://parse-neon-vmov.diff;patch=1 \
      "
 
 # powerpc patches