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