Skip to content

Commit

Permalink
Allow integer immediate for VFP vmov instructions.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
TamarChristinaArm committed May 10, 2018
1 parent 190852c commit 58ed5c3
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 0 deletions.
7 changes: 7 additions & 0 deletions gas/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
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.
Expand Down
8 changes: 8 additions & 0 deletions gas/config/tc-arm.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
13 changes: 13 additions & 0 deletions gas/testsuite/gas/arm/vfp-mov-enc.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# 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
6 changes: 6 additions & 0 deletions gas/testsuite/gas/arm/vfp-mov-enc.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
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

0 comments on commit 58ed5c3

Please sign in to comment.