1*9880d681SAndroid Build Coastguard Worker// RUN: llvm-mc -triple aarch64-none-linux-gnu -mattr=+neon -show-encoding < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker// Check that the assembler can handle the documented syntax for AArch64 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 7*9880d681SAndroid Build Coastguard Worker// Vector Move Immediate Shifted 8*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 9*9880d681SAndroid Build Coastguard Worker movi v0.2s, #1 10*9880d681SAndroid Build Coastguard Worker movi v1.2s, #0 11*9880d681SAndroid Build Coastguard Worker movi v15.2s, #1, lsl #8 12*9880d681SAndroid Build Coastguard Worker movi v16.2s, #1, lsl #16 13*9880d681SAndroid Build Coastguard Worker movi v31.2s, #1, lsl #24 14*9880d681SAndroid Build Coastguard Worker movi v0.4s, #1 15*9880d681SAndroid Build Coastguard Worker movi v0.4s, #1, lsl #8 16*9880d681SAndroid Build Coastguard Worker movi v0.4s, #1, lsl #16 17*9880d681SAndroid Build Coastguard Worker movi v0.4s, #1, lsl #24 18*9880d681SAndroid Build Coastguard Worker movi v0.4h, #1 19*9880d681SAndroid Build Coastguard Worker movi v0.4h, #1, lsl #8 20*9880d681SAndroid Build Coastguard Worker movi v0.8h, #1 21*9880d681SAndroid Build Coastguard Worker movi v0.8h, #1, lsl #8 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker// CHECK: movi v0.2s, #{{0x1|1}} // encoding: [0x20,0x04,0x00,0x0f] 24*9880d681SAndroid Build Coastguard Worker// CHECK: movi v1.2s, #{{0x0|0}} // encoding: [0x01,0x04,0x00,0x0f] 25*9880d681SAndroid Build Coastguard Worker// CHECK: movi v15.2s, #{{0x1|1}}, lsl #8 // encoding: [0x2f,0x24,0x00,0x0f] 26*9880d681SAndroid Build Coastguard Worker// CHECK: movi v16.2s, #{{0x1|1}}, lsl #16 // encoding: [0x30,0x44,0x00,0x0f] 27*9880d681SAndroid Build Coastguard Worker// CHECK: movi v31.2s, #{{0x1|1}}, lsl #24 // encoding: [0x3f,0x64,0x00,0x0f] 28*9880d681SAndroid Build Coastguard Worker// CHECK: movi v0.4s, #{{0x1|1}} // encoding: [0x20,0x04,0x00,0x4f] 29*9880d681SAndroid Build Coastguard Worker// CHECK: movi v0.4s, #{{0x1|1}}, lsl #8 // encoding: [0x20,0x24,0x00,0x4f] 30*9880d681SAndroid Build Coastguard Worker// CHECK: movi v0.4s, #{{0x1|1}}, lsl #16 // encoding: [0x20,0x44,0x00,0x4f] 31*9880d681SAndroid Build Coastguard Worker// CHECK: movi v0.4s, #{{0x1|1}}, lsl #24 // encoding: [0x20,0x64,0x00,0x4f] 32*9880d681SAndroid Build Coastguard Worker// CHECK: movi v0.4h, #{{0x1|1}} // encoding: [0x20,0x84,0x00,0x0f] 33*9880d681SAndroid Build Coastguard Worker// CHECK: movi v0.4h, #{{0x1|1}}, lsl #8 // encoding: [0x20,0xa4,0x00,0x0f] 34*9880d681SAndroid Build Coastguard Worker// CHECK: movi v0.8h, #{{0x1|1}} // encoding: [0x20,0x84,0x00,0x4f] 35*9880d681SAndroid Build Coastguard Worker// CHECK: movi v0.8h, #{{0x1|1}}, lsl #8 // encoding: [0x20,0xa4,0x00,0x4f] 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 38*9880d681SAndroid Build Coastguard Worker// Vector Move Inverted Immediate Shifted 39*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 40*9880d681SAndroid Build Coastguard Worker mvni v0.2s, #1 41*9880d681SAndroid Build Coastguard Worker mvni v1.2s, #0 42*9880d681SAndroid Build Coastguard Worker mvni v0.2s, #1, lsl #8 43*9880d681SAndroid Build Coastguard Worker mvni v0.2s, #1, lsl #16 44*9880d681SAndroid Build Coastguard Worker mvni v0.2s, #1, lsl #24 45*9880d681SAndroid Build Coastguard Worker mvni v0.4s, #1 46*9880d681SAndroid Build Coastguard Worker mvni v15.4s, #1, lsl #8 47*9880d681SAndroid Build Coastguard Worker mvni v16.4s, #1, lsl #16 48*9880d681SAndroid Build Coastguard Worker mvni v31.4s, #1, lsl #24 49*9880d681SAndroid Build Coastguard Worker mvni v0.4h, #1 50*9880d681SAndroid Build Coastguard Worker mvni v0.4h, #1, lsl #8 51*9880d681SAndroid Build Coastguard Worker mvni v0.8h, #1 52*9880d681SAndroid Build Coastguard Worker mvni v0.8h, #1, lsl #8 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Worker// CHECK: mvni v0.2s, #{{0x1|1}} // encoding: [0x20,0x04,0x00,0x2f] 55*9880d681SAndroid Build Coastguard Worker// CHECK: mvni v1.2s, #{{0x0|0}} // encoding: [0x01,0x04,0x00,0x2f] 56*9880d681SAndroid Build Coastguard Worker// CHECK: mvni v0.2s, #{{0x1|1}}, lsl #8 // encoding: [0x20,0x24,0x00,0x2f] 57*9880d681SAndroid Build Coastguard Worker// CHECK: mvni v0.2s, #{{0x1|1}}, lsl #16 // encoding: [0x20,0x44,0x00,0x2f] 58*9880d681SAndroid Build Coastguard Worker// CHECK: mvni v0.2s, #{{0x1|1}}, lsl #24 // encoding: [0x20,0x64,0x00,0x2f] 59*9880d681SAndroid Build Coastguard Worker// CHECK: mvni v0.4s, #{{0x1|1}} // encoding: [0x20,0x04,0x00,0x6f] 60*9880d681SAndroid Build Coastguard Worker// CHECK: mvni v15.4s, #{{0x1|1}}, lsl #8 // encoding: [0x2f,0x24,0x00,0x6f] 61*9880d681SAndroid Build Coastguard Worker// CHECK: mvni v16.4s, #{{0x1|1}}, lsl #16 // encoding: [0x30,0x44,0x00,0x6f] 62*9880d681SAndroid Build Coastguard Worker// CHECK: mvni v31.4s, #{{0x1|1}}, lsl #24 // encoding: [0x3f,0x64,0x00,0x6f] 63*9880d681SAndroid Build Coastguard Worker// CHECK: mvni v0.4h, #{{0x1|1}} // encoding: [0x20,0x84,0x00,0x2f] 64*9880d681SAndroid Build Coastguard Worker// CHECK: mvni v0.4h, #{{0x1|1}}, lsl #8 // encoding: [0x20,0xa4,0x00,0x2f] 65*9880d681SAndroid Build Coastguard Worker// CHECK: mvni v0.8h, #{{0x1|1}} // encoding: [0x20,0x84,0x00,0x6f] 66*9880d681SAndroid Build Coastguard Worker// CHECK: mvni v0.8h, #{{0x1|1}}, lsl #8 // encoding: [0x20,0xa4,0x00,0x6f] 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 69*9880d681SAndroid Build Coastguard Worker// Vector Bitwise Bit Clear (AND NOT) - immediate 70*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 71*9880d681SAndroid Build Coastguard Worker bic v0.2s, #1 72*9880d681SAndroid Build Coastguard Worker bic v1.2s, #0 73*9880d681SAndroid Build Coastguard Worker bic v0.2s, #1, lsl #8 74*9880d681SAndroid Build Coastguard Worker bic v0.2s, #1, lsl #16 75*9880d681SAndroid Build Coastguard Worker bic v0.2s, #1, lsl #24 76*9880d681SAndroid Build Coastguard Worker bic v0.4s, #1 77*9880d681SAndroid Build Coastguard Worker bic v0.4s, #1, lsl #8 78*9880d681SAndroid Build Coastguard Worker bic v0.4s, #1, lsl #16 79*9880d681SAndroid Build Coastguard Worker bic v0.4s, #1, lsl #24 80*9880d681SAndroid Build Coastguard Worker bic v15.4h, #1 81*9880d681SAndroid Build Coastguard Worker bic v16.4h, #1, lsl #8 82*9880d681SAndroid Build Coastguard Worker bic v0.8h, #1 83*9880d681SAndroid Build Coastguard Worker bic v31.8h, #1, lsl #8 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Worker// CHECK: bic v0.2s, #{{0x1|1}} // encoding: [0x20,0x14,0x00,0x2f] 86*9880d681SAndroid Build Coastguard Worker// CHECK: bic v1.2s, #{{0x0|0}} // encoding: [0x01,0x14,0x00,0x2f] 87*9880d681SAndroid Build Coastguard Worker// CHECK: bic v0.2s, #{{0x1|1}}, lsl #8 // encoding: [0x20,0x34,0x00,0x2f] 88*9880d681SAndroid Build Coastguard Worker// CHECK: bic v0.2s, #{{0x1|1}}, lsl #16 // encoding: [0x20,0x54,0x00,0x2f] 89*9880d681SAndroid Build Coastguard Worker// CHECK: bic v0.2s, #{{0x1|1}}, lsl #24 // encoding: [0x20,0x74,0x00,0x2f] 90*9880d681SAndroid Build Coastguard Worker// CHECK: bic v0.4s, #{{0x1|1}} // encoding: [0x20,0x14,0x00,0x6f] 91*9880d681SAndroid Build Coastguard Worker// CHECK: bic v0.4s, #{{0x1|1}}, lsl #8 // encoding: [0x20,0x34,0x00,0x6f] 92*9880d681SAndroid Build Coastguard Worker// CHECK: bic v0.4s, #{{0x1|1}}, lsl #16 // encoding: [0x20,0x54,0x00,0x6f] 93*9880d681SAndroid Build Coastguard Worker// CHECK: bic v0.4s, #{{0x1|1}}, lsl #24 // encoding: [0x20,0x74,0x00,0x6f] 94*9880d681SAndroid Build Coastguard Worker// CHECK: bic v15.4h, #{{0x1|1}} // encoding: [0x2f,0x94,0x00,0x2f] 95*9880d681SAndroid Build Coastguard Worker// CHECK: bic v16.4h, #{{0x1|1}}, lsl #8 // encoding: [0x30,0xb4,0x00,0x2f] 96*9880d681SAndroid Build Coastguard Worker// CHECK: bic v0.8h, #{{0x1|1}} // encoding: [0x20,0x94,0x00,0x6f] 97*9880d681SAndroid Build Coastguard Worker// CHECK: bic v31.8h, #{{0x1|1}}, lsl #8 // encoding: [0x3f,0xb4,0x00,0x6f] 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 100*9880d681SAndroid Build Coastguard Worker// Vector Bitwise OR - immedidate 101*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 102*9880d681SAndroid Build Coastguard Worker orr v0.2s, #1 103*9880d681SAndroid Build Coastguard Worker orr v1.2s, #0 104*9880d681SAndroid Build Coastguard Worker orr v0.2s, #1, lsl #8 105*9880d681SAndroid Build Coastguard Worker orr v0.2s, #1, lsl #16 106*9880d681SAndroid Build Coastguard Worker orr v0.2s, #1, lsl #24 107*9880d681SAndroid Build Coastguard Worker orr v0.4s, #1 108*9880d681SAndroid Build Coastguard Worker orr v0.4s, #1, lsl #8 109*9880d681SAndroid Build Coastguard Worker orr v0.4s, #1, lsl #16 110*9880d681SAndroid Build Coastguard Worker orr v0.4s, #1, lsl #24 111*9880d681SAndroid Build Coastguard Worker orr v31.4h, #1 112*9880d681SAndroid Build Coastguard Worker orr v15.4h, #1, lsl #8 113*9880d681SAndroid Build Coastguard Worker orr v0.8h, #1 114*9880d681SAndroid Build Coastguard Worker orr v16.8h, #1, lsl #8 115*9880d681SAndroid Build Coastguard Worker 116*9880d681SAndroid Build Coastguard Worker// CHECK: orr v0.2s, #{{0x1|1}} // encoding: [0x20,0x14,0x00,0x0f] 117*9880d681SAndroid Build Coastguard Worker// CHECK: orr v1.2s, #{{0x0|0}} // encoding: [0x01,0x14,0x00,0x0f] 118*9880d681SAndroid Build Coastguard Worker// CHECK: orr v0.2s, #{{0x1|1}}, lsl #8 // encoding: [0x20,0x34,0x00,0x0f] 119*9880d681SAndroid Build Coastguard Worker// CHECK: orr v0.2s, #{{0x1|1}}, lsl #16 // encoding: [0x20,0x54,0x00,0x0f] 120*9880d681SAndroid Build Coastguard Worker// CHECK: orr v0.2s, #{{0x1|1}}, lsl #24 // encoding: [0x20,0x74,0x00,0x0f] 121*9880d681SAndroid Build Coastguard Worker// CHECK: orr v0.4s, #{{0x1|1}} // encoding: [0x20,0x14,0x00,0x4f] 122*9880d681SAndroid Build Coastguard Worker// CHECK: orr v0.4s, #{{0x1|1}}, lsl #8 // encoding: [0x20,0x34,0x00,0x4f] 123*9880d681SAndroid Build Coastguard Worker// CHECK: orr v0.4s, #{{0x1|1}}, lsl #16 // encoding: [0x20,0x54,0x00,0x4f] 124*9880d681SAndroid Build Coastguard Worker// CHECK: orr v0.4s, #{{0x1|1}}, lsl #24 // encoding: [0x20,0x74,0x00,0x4f] 125*9880d681SAndroid Build Coastguard Worker// CHECK: orr v31.4h, #{{0x1|1}} // encoding: [0x3f,0x94,0x00,0x0f] 126*9880d681SAndroid Build Coastguard Worker// CHECK: orr v15.4h, #{{0x1|1}}, lsl #8 // encoding: [0x2f,0xb4,0x00,0x0f] 127*9880d681SAndroid Build Coastguard Worker// CHECK: orr v0.8h, #{{0x1|1}} // encoding: [0x20,0x94,0x00,0x4f] 128*9880d681SAndroid Build Coastguard Worker// CHECK: orr v16.8h, #{{0x1|1}}, lsl #8 // encoding: [0x30,0xb4,0x00,0x4f] 129*9880d681SAndroid Build Coastguard Worker 130*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 131*9880d681SAndroid Build Coastguard Worker// Vector Move Immediate Masked 132*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 133*9880d681SAndroid Build Coastguard Worker movi v0.2s, #1, msl #8 134*9880d681SAndroid Build Coastguard Worker movi v1.2s, #1, msl #16 135*9880d681SAndroid Build Coastguard Worker movi v0.4s, #1, msl #8 136*9880d681SAndroid Build Coastguard Worker movi v31.4s, #1, msl #16 137*9880d681SAndroid Build Coastguard Worker 138*9880d681SAndroid Build Coastguard Worker// CHECK: movi v0.2s, #{{0x1|1}}, msl #8 // encoding: [0x20,0xc4,0x00,0x0f] 139*9880d681SAndroid Build Coastguard Worker// CHECK: movi v1.2s, #{{0x1|1}}, msl #16 // encoding: [0x21,0xd4,0x00,0x0f] 140*9880d681SAndroid Build Coastguard Worker// CHECK: movi v0.4s, #{{0x1|1}}, msl #8 // encoding: [0x20,0xc4,0x00,0x4f] 141*9880d681SAndroid Build Coastguard Worker// CHECK: movi v31.4s, #{{0x1|1}}, msl #16 // encoding: [0x3f,0xd4,0x00,0x4f] 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 144*9880d681SAndroid Build Coastguard Worker// Vector Move Inverted Immediate Masked 145*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 146*9880d681SAndroid Build Coastguard Worker mvni v1.2s, #0x1, msl #8 147*9880d681SAndroid Build Coastguard Worker mvni v0.2s, #0x1, msl #16 148*9880d681SAndroid Build Coastguard Worker mvni v31.4s, #0x1, msl #8 149*9880d681SAndroid Build Coastguard Worker mvni v0.4s, #0x1, msl #16 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Worker// CHECK: mvni v1.2s, #{{0x1|1}}, msl #8 // encoding: [0x21,0xc4,0x00,0x2f] 152*9880d681SAndroid Build Coastguard Worker// CHECK: mvni v0.2s, #{{0x1|1}}, msl #16 // encoding: [0x20,0xd4,0x00,0x2f] 153*9880d681SAndroid Build Coastguard Worker// CHECK: mvni v31.4s, #{{0x1|1}}, msl #8 // encoding: [0x3f,0xc4,0x00,0x6f] 154*9880d681SAndroid Build Coastguard Worker// CHECK: mvni v0.4s, #{{0x1|1}}, msl #16 // encoding: [0x20,0xd4,0x00,0x6f] 155*9880d681SAndroid Build Coastguard Worker 156*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 157*9880d681SAndroid Build Coastguard Worker// Vector Immediate - per byte 158*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 159*9880d681SAndroid Build Coastguard Worker movi v0.8b, #0 160*9880d681SAndroid Build Coastguard Worker movi v31.8b, #0xff 161*9880d681SAndroid Build Coastguard Worker movi v15.16b, #0xf 162*9880d681SAndroid Build Coastguard Worker movi v31.16b, #0x1f 163*9880d681SAndroid Build Coastguard Worker 164*9880d681SAndroid Build Coastguard Worker// CHECK: movi v0.8b, #{{0x0|0}} // encoding: [0x00,0xe4,0x00,0x0f] 165*9880d681SAndroid Build Coastguard Worker// CHECK: movi v31.8b, #{{0xff|255}} // encoding: [0xff,0xe7,0x07,0x0f] 166*9880d681SAndroid Build Coastguard Worker// CHECK: movi v15.16b, #{{0xf|15}} // encoding: [0xef,0xe5,0x00,0x4f] 167*9880d681SAndroid Build Coastguard Worker// CHECK: movi v31.16b, #{{0x1f|31}} // encoding: [0xff,0xe7,0x00,0x4f] 168*9880d681SAndroid Build Coastguard Worker 169*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 170*9880d681SAndroid Build Coastguard Worker// Vector Move Immediate - bytemask, per doubleword 171*9880d681SAndroid Build Coastguard Worker//--------------------------------------------------------------------- 172*9880d681SAndroid Build Coastguard Worker movi v0.2d, #0xff00ff00ff00ff00 173*9880d681SAndroid Build Coastguard Worker 174*9880d681SAndroid Build Coastguard Worker// CHECK: movi v0.2d, #0xff00ff00ff00ff00 // encoding: [0x40,0xe5,0x05,0x6f] 175*9880d681SAndroid Build Coastguard Worker 176*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 177*9880d681SAndroid Build Coastguard Worker// Vector Move Immediate - bytemask, one doubleword 178*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 179*9880d681SAndroid Build Coastguard Worker movi d0, #0xff00ff00ff00ff00 180*9880d681SAndroid Build Coastguard Worker 181*9880d681SAndroid Build Coastguard Worker// CHECK: movi d0, #0xff00ff00ff00ff00 // encoding: [0x40,0xe5,0x05,0x2f] 182*9880d681SAndroid Build Coastguard Worker 183*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 184*9880d681SAndroid Build Coastguard Worker// Vector Floating Point Move Immediate 185*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 186*9880d681SAndroid Build Coastguard Worker fmov v1.2s, #1.0 187*9880d681SAndroid Build Coastguard Worker fmov v15.4s, #1.0 188*9880d681SAndroid Build Coastguard Worker fmov v31.2d, #1.0 189*9880d681SAndroid Build Coastguard Worker 190*9880d681SAndroid Build Coastguard Worker// CHECK: fmov v1.2s, #{{1.00000000|1.000000e\+00}} // encoding: [0x01,0xf6,0x03,0x0f] 191*9880d681SAndroid Build Coastguard Worker// CHECK: fmov v15.4s, #{{1.00000000|1.000000e\+00}} // encoding: [0x0f,0xf6,0x03,0x4f] 192*9880d681SAndroid Build Coastguard Worker// CHECK: fmov v31.2d, #{{1.00000000|1.000000e\+00}} // encoding: [0x1f,0xf6,0x03,0x6f] 193*9880d681SAndroid Build Coastguard Worker 194*9880d681SAndroid Build Coastguard Worker 195*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 196*9880d681SAndroid Build Coastguard Worker// Vector Move - register 197*9880d681SAndroid Build Coastguard Worker//---------------------------------------------------------------------- 198*9880d681SAndroid Build Coastguard Worker 199*9880d681SAndroid Build Coastguard Worker mov v0.8b, v31.8b 200*9880d681SAndroid Build Coastguard Worker mov v15.16b, v16.16b 201*9880d681SAndroid Build Coastguard Worker orr v0.8b, v31.8b, v31.8b 202*9880d681SAndroid Build Coastguard Worker orr v15.16b, v16.16b, v16.16b 203*9880d681SAndroid Build Coastguard Worker 204*9880d681SAndroid Build Coastguard Worker// CHECK: mov v0.8b, v31.8b // encoding: [0xe0,0x1f,0xbf,0x0e] 205*9880d681SAndroid Build Coastguard Worker// CHECK: mov v15.16b, v16.16b // encoding: [0x0f,0x1e,0xb0,0x4e] 206*9880d681SAndroid Build Coastguard Worker// CHECK: mov v0.8b, v31.8b // encoding: [0xe0,0x1f,0xbf,0x0e] 207*9880d681SAndroid Build Coastguard Worker// CHECK: mov v15.16b, v16.16b // encoding: [0x0f,0x1e,0xb0,0x4e] 208*9880d681SAndroid Build Coastguard Worker 209