Commit 58ed5c38 authored by Tamar Christina's avatar Tamar Christina

Allow integer immediate for VFP vmov instructions.

This patch fixes the case where you want to use an integer value the
floating point immediate to a VFP vmov instruction such as
vmovmi.f32 s27, #11.

If the immediate is not a float we convert it and copy it's representation
into the imm field and then carry on validating as if we originally entered
a floating point immediate.

The is considered a QoL improvement for hand assembly writers and allows more
code portability between assembler.

gas/
	* gas/config/tc-arm.c (do_neon_mov): Allow integer literal for float
	immediate.
	* testsuite/gas/arm/vfp-mov-enc.s: New.
	* testsuite/gas/arm/vfp-mov-enc.d: New.
parent 190852c8
2018-05-10 Tamar Christina <tamar.christina@arm.com>
* gas/config/tc-arm.c (do_neon_mov): Allow integer literal for float
immediate.
* testsuite/gas/arm/vfp-mov-enc.s: New.
* testsuite/gas/arm/vfp-mov-enc.d: New.
2018-05-09 Max Filippov <jcmvbkbc@gmail.com>
* config/tc-xtensa.c (xtensa_is_init_fini): New function.
......
......@@ -16691,6 +16691,14 @@ do_neon_mov (void)
case NS_FI: /* case 10 (fconsts). */
ldconst = "fconsts";
encode_fconstd:
if (!inst.operands[1].immisfloat)
{
/* Immediate has to fit in 8 bits so float is enough. */
float imm = (float)inst.operands[1].imm;
memcpy (&inst.operands[1].imm, &imm, sizeof (float));
inst.operands[1].immisfloat = 1;
}
if (is_quarter_float (inst.operands[1].imm))
{
inst.operands[1].imm = neon_qfloat_bits (inst.operands[1].imm);
......
# name: VFP check vmov supports integer immediates
# as: -mcpu=cortex-a8 -mfpu=vfpv3
# objdump: -dr --prefix-addresses --show-raw-insn
.*: +file format .*arm.*
Disassembly of section .text:
0[0-9a-f]+ <[^>]+> 4ef2da06 vmovmi.f32 s27, #38 ; 0x41300000 11.0
0[0-9a-f]+ <[^>]+> 4ef2da06 vmovmi.f32 s27, #38 ; 0x41300000 11.0
0[0-9a-f]+ <[^>]+> 4ef7da00 vmovmi.f32 s27, #112 ; 0x3f800000 1.0
0[0-9a-f]+ <[^>]+> 4ef7da00 vmovmi.f32 s27, #112 ; 0x3f800000 1.0
0[0-9a-f]+ <[^>]+> cebb1b04 vmovgt.f64 d1, #180 ; 0xc1a00000 -20.0
0[0-9a-f]+ <[^>]+> ceb81b00 vmovgt.f64 d1, #128 ; 0xc0000000 -2.0
VMOVMI.F32 s27,#11
VMOVMI.F32 s27,#11.0
VMOVMI.F32 s27,#1
VMOVMI.F32 s27,#1.0
VMOVGT.F64 d1,#-20
VMOVGT.F64 d1,#-2
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment