Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 May 2017 05:07:41 +0000 (UTC)
From:      Michal Meloun <mmel@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r318135 - head/contrib/binutils/gas/config
Message-ID:  <201705100507.v4A57fbi050552@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mmel
Date: Wed May 10 05:07:41 2017
New Revision: 318135
URL: https://svnweb.freebsd.org/changeset/base/318135

Log:
  Fix parsing of 'vmov Q<n>.F32,Q<n>.F32' instruction.
  
  parse_qfloat_immediate() accidentaly parses register with size
  qualifier as immediate constant (It takes '<n>.' substring as
  valid floating point constant).
  
  Due to this, slightly reorder cases in parse_neon_mov() and move parsing of
  vmov with immediate constant to last place.
  
  MFC after:	2 weeks

Modified:
  head/contrib/binutils/gas/config/tc-arm.c

Modified: head/contrib/binutils/gas/config/tc-arm.c
==============================================================================
--- head/contrib/binutils/gas/config/tc-arm.c	Wed May 10 05:05:21 2017	(r318134)
+++ head/contrib/binutils/gas/config/tc-arm.c	Wed May 10 05:07:41 2017	(r318135)
@@ -5211,12 +5211,6 @@ parse_neon_mov (char **str, int *which_o
               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 ((val = arm_typed_reg_parse (&ptr, REG_TYPE_NSDQ, &rtype,
                                            &optype)) != FAIL)
         {
@@ -5253,9 +5247,15 @@ parse_neon_mov (char **str, int *which_o
               
               inst.operands[i].reg = val;
               inst.operands[i].isreg = 1;
-              inst.operands[i++].present = 1;
+              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>  */
@@ -5337,7 +5337,7 @@ parse_neon_mov (char **str, int *which_o
           inst.operands[i].isvec = 1;
           inst.operands[i].issingle = 1;
           inst.operands[i].vectype = optype;
-          inst.operands[i++].present = 1;
+          inst.operands[i].present = 1;
         }
     }
   else



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201705100507.v4A57fbi050552>