mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-23 17:29:19 +00:00
The ARM NEON vector compare instructions take three arguments. However, the
assembler should also accept a two arg form, as the docuemntation specifies that the first (destination) register is optional. This patch uses TwoOperandAliasConstraint to add the two argument form. It also fixes an 80-column formatting problem in: test/MC/ARM/neon-bitwise-encoding <rdar://problem/12909419> Clang rejects ARM NEON assembly instructions git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175221 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d6f19c7163
commit
48e841d41c
@ -4264,6 +4264,7 @@ def VCEQfd : N3VD<0,0,0b00,0b1110,0, IIC_VBIND, "vceq", "f32", v2i32, v2f32,
|
||||
def VCEQfq : N3VQ<0,0,0b00,0b1110,0, IIC_VBINQ, "vceq", "f32", v4i32, v4f32,
|
||||
NEONvceq, 1>;
|
||||
|
||||
let TwoOperandAliasConstraint = "$Vm = $Vd" in
|
||||
defm VCEQz : N2V_QHS_cmp<0b11, 0b11, 0b01, 0b00010, 0, "vceq", "i",
|
||||
"$Vd, $Vm, #0", NEONvceqz>;
|
||||
|
||||
@ -4277,10 +4278,12 @@ def VCGEfd : N3VD<1,0,0b00,0b1110,0, IIC_VBIND, "vcge", "f32", v2i32, v2f32,
|
||||
def VCGEfq : N3VQ<1,0,0b00,0b1110,0, IIC_VBINQ, "vcge", "f32", v4i32, v4f32,
|
||||
NEONvcge, 0>;
|
||||
|
||||
let TwoOperandAliasConstraint = "$Vm = $Vd" in {
|
||||
defm VCGEz : N2V_QHS_cmp<0b11, 0b11, 0b01, 0b00001, 0, "vcge", "s",
|
||||
"$Vd, $Vm, #0", NEONvcgez>;
|
||||
defm VCLEz : N2V_QHS_cmp<0b11, 0b11, 0b01, 0b00011, 0, "vcle", "s",
|
||||
"$Vd, $Vm, #0", NEONvclez>;
|
||||
}
|
||||
|
||||
// VCGT : Vector Compare Greater Than
|
||||
defm VCGTs : N3V_QHS<0, 0, 0b0011, 0, IIC_VSUBi4D, IIC_VSUBi4D, IIC_VSUBi4Q,
|
||||
@ -4292,10 +4295,12 @@ def VCGTfd : N3VD<1,0,0b10,0b1110,0, IIC_VBIND, "vcgt", "f32", v2i32, v2f32,
|
||||
def VCGTfq : N3VQ<1,0,0b10,0b1110,0, IIC_VBINQ, "vcgt", "f32", v4i32, v4f32,
|
||||
NEONvcgt, 0>;
|
||||
|
||||
let TwoOperandAliasConstraint = "$Vm = $Vd" in {
|
||||
defm VCGTz : N2V_QHS_cmp<0b11, 0b11, 0b01, 0b00000, 0, "vcgt", "s",
|
||||
"$Vd, $Vm, #0", NEONvcgtz>;
|
||||
defm VCLTz : N2V_QHS_cmp<0b11, 0b11, 0b01, 0b00100, 0, "vclt", "s",
|
||||
"$Vd, $Vm, #0", NEONvcltz>;
|
||||
}
|
||||
|
||||
// VACGE : Vector Absolute Compare Greater Than or Equal (aka VCAGE)
|
||||
def VACGEd : N3VDInt<1, 0, 0b00, 0b1110, 1, N3RegFrm, IIC_VBIND, "vacge",
|
||||
|
@ -1,4 +1,5 @@
|
||||
@ RUN: llvm-mc -mcpu=cortex-a8 -triple arm-unknown-unknown -show-encoding < %s | FileCheck %s
|
||||
@ RUN: llvm-mc -mcpu=cortex-a8 -triple arm-unknown-unknown -show-encoding < %s \
|
||||
@ RUN: | FileCheck %s
|
||||
|
||||
vand d16, d17, d16
|
||||
vand q8, q8, q9
|
||||
@ -255,6 +256,42 @@
|
||||
veor.f q8, q2
|
||||
veor.i64 q8, q2
|
||||
|
||||
vclt.s16 q5, #0
|
||||
vclt.s16 d5, #0
|
||||
|
||||
vceq.s16 q5, q3
|
||||
vceq.s16 d5, d3
|
||||
|
||||
vcgt.s16 q5, q3
|
||||
vcgt.s16 d5, d3
|
||||
|
||||
vcge.s16 q5, q3
|
||||
vcge.s16 d5, d3
|
||||
|
||||
vcgt.s16 q5, #0
|
||||
vcgt.s16 d5, #0
|
||||
|
||||
vcge.s16 q5, #0
|
||||
vcge.s16 d5, #0
|
||||
|
||||
vceq.s16 q5, #0
|
||||
vceq.s16 d5, #0
|
||||
|
||||
vcle.s16 q5, #0
|
||||
vcle.s16 d5, #0
|
||||
|
||||
vacge.f32 d5, d30
|
||||
vacge.f32 q5, q3
|
||||
|
||||
vacgt.f32 d5, d30
|
||||
vacgt.f32 q5, q3
|
||||
|
||||
@ FIXME: We don't have an alias that reverses the operands
|
||||
@ vacle.f32 d5, d30
|
||||
@ vacle.f32 q5, q3
|
||||
@ vaclt.f32 d5, d30
|
||||
@ vaclt.f32 q5, q3
|
||||
|
||||
@ CHECK: vand q6, q6, q5 @ encoding: [0x5a,0xc1,0x0c,0xf2]
|
||||
@ CHECK: vand q6, q6, q5 @ encoding: [0x5a,0xc1,0x0c,0xf2]
|
||||
@ CHECK: vand q7, q7, q1 @ encoding: [0x52,0xe1,0x0e,0xf2]
|
||||
@ -272,3 +309,32 @@
|
||||
@ CHECK: veor q7, q7, q1 @ encoding: [0x52,0xe1,0x0e,0xf3]
|
||||
@ CHECK: veor q8, q8, q2 @ encoding: [0xd4,0x01,0x40,0xf3]
|
||||
@ CHECK: veor q8, q8, q2 @ encoding: [0xd4,0x01,0x40,0xf3]
|
||||
@ CHECK: vclt.s16 q5, q5, #0 @ encoding: [0x4a,0xa2,0xb5,0xf3]
|
||||
@ CHECK: vclt.s16 d5, d5, #0 @ encoding: [0x05,0x52,0xb5,0xf3]
|
||||
|
||||
@ CHECK: vceq.i16 q5, q5, q3 @ encoding: [0x56,0xa8,0x1a,0xf3]
|
||||
@ CHECK: vceq.i16 d5, d5, d3 @ encoding: [0x13,0x58,0x15,0xf3]
|
||||
|
||||
@ CHECK: vcgt.s16 q5, q5, q3 @ encoding: [0x46,0xa3,0x1a,0xf2]
|
||||
@ CHECK: vcgt.s16 d5, d5, d3 @ encoding: [0x03,0x53,0x15,0xf2]
|
||||
|
||||
@ CHECK: vcge.s16 q5, q5, q3 @ encoding: [0x56,0xa3,0x1a,0xf2]
|
||||
@ CHECK: vcge.s16 d5, d5, d3 @ encoding: [0x13,0x53,0x15,0xf2]
|
||||
|
||||
@ CHECK: vcgt.s16 q5, q5, #0 @ encoding: [0x4a,0xa0,0xb5,0xf3]
|
||||
@ CHECK: vcgt.s16 d5, d5, #0 @ encoding: [0x05,0x50,0xb5,0xf3]
|
||||
|
||||
@ CHECK: vcge.s16 q5, q5, #0 @ encoding: [0xca,0xa0,0xb5,0xf3]
|
||||
@ CHECK: vcge.s16 d5, d5, #0 @ encoding: [0x85,0x50,0xb5,0xf3]
|
||||
|
||||
@ CHECK: vceq.i16 q5, q5, #0 @ encoding: [0x4a,0xa1,0xb5,0xf3]
|
||||
@ CHECK: vceq.i16 d5, d5, #0 @ encoding: [0x05,0x51,0xb5,0xf3]
|
||||
|
||||
@ CHECK: vcle.s16 q5, q5, #0 @ encoding: [0xca,0xa1,0xb5,0xf3]
|
||||
@ CHECK: vcle.s16 d5, d5, #0 @ encoding: [0x85,0x51,0xb5,0xf3]
|
||||
|
||||
@ CHECK: vacge.f32 d5, d5, d30 @ encoding: [0x3e,0x5e,0x05,0xf3]
|
||||
@ CHECK: vacge.f32 q5, q5, q3 @ encoding: [0x56,0xae,0x0a,0xf3]
|
||||
|
||||
@ CHECK: vacgt.f32 d5, d5, d30 @ encoding: [0x3e,0x5e,0x25,0xf3]
|
||||
@ CHECK: vacgt.f32 q5, q5, q3 @ encoding: [0x56,0xae,0x2a,0xf3]
|
||||
|
Loading…
Reference in New Issue
Block a user