diff options
| author | David Peixotto <dpeixott@codeaurora.org> | 2014-01-07 18:19:23 +0000 |
|---|---|---|
| committer | David Peixotto <dpeixott@codeaurora.org> | 2014-01-07 18:19:23 +0000 |
| commit | a872e0e0a6e8e60273ae5f3234ce9ba6153b28bd (patch) | |
| tree | d16c73b67bbe2eda5daa3ec3e311b1fc308e449a /llvm/test/MC/ARM/simple-fp-encoding.s | |
| parent | 2da1021355394805fccfef5a0a83718be1e6b925 (diff) | |
| download | bcm5719-llvm-a872e0e0a6e8e60273ae5f3234ce9ba6153b28bd.tar.gz bcm5719-llvm-a872e0e0a6e8e60273ae5f3234ce9ba6153b28bd.zip | |
Add ARM fconsts/fconstd aliases for vmov.f32/vmov.f64
This commit adds the pre-UAL aliases of fconsts and fconstd for
vmov.f32 and vmov.f64. They use an InstAlias rather than a
MnemonicAlias to properly support the predicate operand.
We need to support encoded 8-bit constants in order to implement the
pre-UAL fconsts/fconstd aliases for vmov.f32/vmov.f64, so this
commit also fixes parsing of encoded floating point constants used
in vmov.f32/vmov.f64 instructions. Now we can support assembly code
like this:
fconsts s0, #0x70
which is equivalent to vmov.f32 s0, #1.0.
Most of the code was already in place to support this feature.
Previously the code was trying to accept encoded 8-bit float
constants for the vmov.f32/vmov.f64 instructions. It looks like the
support for parsing encoded floats was lost in a refactoring in
commit r148556 and we did not have any tests in place to catch it.
The change in this commit is to keep the parsed value as a 32-bit
float instead of a 64-bit double because that is what the isFPImm()
function expects to find. There is no loss of precision by using a
32-bit float here because we are still limited to an 8-bit encoded
value in the end.
Additionally, we explicitly reject encoded 8-bit floats for
vmovf.32/64. This is the same as the current behavior, but we now do
it explicitly rather than accidently.
llvm-svn: 198697
Diffstat (limited to 'llvm/test/MC/ARM/simple-fp-encoding.s')
| -rw-r--r-- | llvm/test/MC/ARM/simple-fp-encoding.s | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/llvm/test/MC/ARM/simple-fp-encoding.s b/llvm/test/MC/ARM/simple-fp-encoding.s index d840e9cd798..539dd2c4d97 100644 --- a/llvm/test/MC/ARM/simple-fp-encoding.s +++ b/llvm/test/MC/ARM/simple-fp-encoding.s @@ -395,3 +395,46 @@ @ CHECK: vmov.i32 d4, #0x0 @ encoding: [0x10,0x40,0x80,0xf2] @ CHECK: vmov.i32 d4, #0x42000000 @ encoding: [0x12,0x46,0x84,0xf2] + +@ Test encoding of floating point constants for vmov functions +@ vfp3 + vmov.f32 s5, #1.0 + vmov.f32 s5, #0.125 + vmov.f32 s5, #-1.875 + vmov.f32 s5, #-0.59375 + + vmov.f64 d6, #1.0 + vmov.f64 d6, #0.125 + vmov.f64 d6, #-1.875 + vmov.f64 d6, #-0.59375 + +@ neon + vmov.f32 d7, #1.0 + vmov.f32 d7, #0.125 + vmov.f32 d7, #-1.875 + vmov.f32 d7, #-0.59375 + + vmov.f32 q8, #1.0 + vmov.f32 q8, #0.125 + vmov.f32 q8, #-1.875 + vmov.f32 q8, #-0.59375 + +@ CHECK: vmov.f32 s5, #1.000000e+00 @ encoding: [0x00,0x2a,0xf7,0xee] +@ CHECK: vmov.f32 s5, #1.250000e-01 @ encoding: [0x00,0x2a,0xf4,0xee] +@ CHECK: vmov.f32 s5, #-1.875000e+00 @ encoding: [0x0e,0x2a,0xff,0xee] +@ CHECK: vmov.f32 s5, #-5.937500e-01 @ encoding: [0x03,0x2a,0xfe,0xee] + +@ CHECK: vmov.f64 d6, #1.000000e+00 @ encoding: [0x00,0x6b,0xb7,0xee] +@ CHECK: vmov.f64 d6, #1.250000e-01 @ encoding: [0x00,0x6b,0xb4,0xee] +@ CHECK: vmov.f64 d6, #-1.875000e+00 @ encoding: [0x0e,0x6b,0xbf,0xee] +@ CHECK: vmov.f64 d6, #-5.937500e-01 @ encoding: [0x03,0x6b,0xbe,0xee] + +@ CHECK: vmov.f32 d7, #1.000000e+00 @ encoding: [0x10,0x7f,0x87,0xf2] +@ CHECK: vmov.f32 d7, #1.250000e-01 @ encoding: [0x10,0x7f,0x84,0xf2] +@ CHECK: vmov.f32 d7, #-1.875000e+00 @ encoding: [0x1e,0x7f,0x87,0xf3] +@ CHECK: vmov.f32 d7, #-5.937500e-01 @ encoding: [0x13,0x7f,0x86,0xf3] + +@ CHECK: vmov.f32 q8, #1.000000e+00 @ encoding: [0x50,0x0f,0xc7,0xf2] +@ CHECK: vmov.f32 q8, #1.250000e-01 @ encoding: [0x50,0x0f,0xc4,0xf2] +@ CHECK: vmov.f32 q8, #-1.875000e+00 @ encoding: [0x5e,0x0f,0xc7,0xf3] +@ CHECK: vmov.f32 q8, #-5.937500e-01 @ encoding: [0x53,0x0f,0xc6,0xf3] |

