[PATCH] arm: permit certain VMOV kinds without suffix
Richard Earnshaw
rearnsha@arm.com
Mon Apr 8 15:28:00 GMT 2013
On 08/04/13 15:03, Jan Beulich wrote:
> The specification explicitly permits VMOV without size/data type suffix for
> the case of moving between scalar and core register. The easiest way to deal
> with that appeared to be to fake the suffix if none was specified.
>
> gas/
> 2013-04-08 Jan Beulich <jbeulich@suse.com>
>
> * gas/config/tc-arm.c (do_neon_mov): Fake an instruction suffix
> if there was none specified for moves between scalar and core
> register.
>
> --- 2013-04-08/gas/config/tc-arm.c
> +++ 2013-04-08/gas/config/tc-arm.c
> @@ -15360,6 +15360,16 @@ do_neon_mov (void)
> unsigned dn = NEON_SCALAR_REG (inst.operands[0].reg);
> unsigned x = NEON_SCALAR_INDEX (inst.operands[0].reg);
>
> + /* .<size> is optional here, defaulting to .32. */
> + if (inst.vectype.elems == 0
> + && inst.operands[0].vectype.type == NT_invtype
> + && inst.operands[1].vectype.type == NT_invtype)
> + {
> + inst.vectype.el[0].type = NT_untyped;
> + inst.vectype.el[0].size = 32;
> + inst.vectype.elems = 1;
> + }
> +
> et = neon_check_type (2, NS_NULL, N_8 | N_16 | N_32 | N_KEY, N_EQK);
> logsize = neon_logbits (et.size);
>
> @@ -15409,6 +15419,16 @@ do_neon_mov (void)
> unsigned x = NEON_SCALAR_INDEX (inst.operands[1].reg);
> unsigned abcdebits = 0;
>
> + /* .<dt> is optional here, defaulting to .32. */
> + if (inst.vectype.elems == 0
> + && inst.operands[0].vectype.type == NT_invtype
> + && inst.operands[1].vectype.type == NT_invtype)
> + {
> + inst.vectype.el[0].type = NT_untyped;
> + inst.vectype.el[0].size = 32;
> + inst.vectype.elems = 1;
> + }
> +
> et = neon_check_type (2, NS_NULL,
> N_EQK, N_S8 | N_S16 | N_U8 | N_U16 | N_32 | N_KEY);
> logsize = neon_logbits (et.size);
>
>
This needs some tests, please, probably in neon-omit.[sd].
R.
More information about the Binutils
mailing list