1# RUN: llvm-mc %s -triple=csky -show-encoding -csky-no-aliases -mattr=+e1 \ 2# RUN: -mattr=+e2 -mattr=+btst16 | FileCheck -check-prefixes=CHECK-ASM,CHECK-ASM-AND-OBJ %s 3# RUN: llvm-mc -filetype=obj -triple=csky -mattr=+e1 -mattr=+e2 -mattr=+btst16 < %s \ 4# RUN: | llvm-objdump --mattr=+e1 --mattr=+e2 --mattr=+btst16 -M no-aliases -M abi-names -d -r - \ 5# RUN: | FileCheck -check-prefixes=CHECK-ASM-AND-OBJ,CHECK-OBJ %s 6 7# CHECK-ASM-AND-OBJ: addi16 a0, a0, 2 8# CHECK-ASM: encoding: [0x06,0x58] 9addi16 a0, a0, 2 10 11# CHECK-ASM-AND-OBJ: addi16 a0, sp, 4 12# CHECK-ASM: encoding: [0x01,0x18] 13addi16 a0, sp, 4 14 15# CHECK-ASM-AND-OBJ: addi16 a0, a1, 2 16# CHECK-ASM: encoding: [0x06,0x59] 17addi16 a0, a1, 2 18 19# CHECK-ASM-AND-OBJ: addi16 sp, sp, 8 20# CHECK-ASM: encoding: [0x02,0x14] 21addi16 sp, sp, 8 22 23# CHECK-ASM-AND-OBJ: subi16 a0, a0, 2 24# CHECK-ASM: encoding: [0x07,0x58] 25subi16 a0, a0, 2 26 27# CHECK-ASM-AND-OBJ: subi16 a0, a1, 2 28# CHECK-ASM: encoding: [0x07,0x59] 29subi16 a0, a1, 2 30 31# CHECK-ASM-AND-OBJ: subi16 sp, sp, 8 32# CHECK-ASM: encoding: [0x22,0x14] 33subi16 sp, sp, 8 34 35# CHECK-ASM-AND-OBJ: lsli16 a0, a1, 2 36# CHECK-ASM: encoding: [0x02,0x41] 37lsli16 a0, a1, 2 38 39# CHECK-ASM-AND-OBJ: lsri16 a0, a1, 2 40# CHECK-ASM: encoding: [0x02,0x49] 41lsri16 a0, a1, 2 42 43# CHECK-ASM-AND-OBJ: asri16 a0, a1, 2 44# CHECK-ASM: encoding: [0x02,0x51] 45asri16 a0, a1, 2 46 47# CHECK-ASM-AND-OBJ: btsti16 a0, 2 48# CHECK-ASM: encoding: [0xc2,0x38] 49btsti16 a0, 2 50 51# CHECK-ASM-AND-OBJ: bclri16 a0, 2 52# CHECK-ASM: encoding: [0x82,0x38] 53bclri16 a0, 2 54 55# CHECK-ASM-AND-OBJ: bseti16 a0, 2 56# CHECK-ASM: encoding: [0xa2,0x38] 57bseti16 a0, 2 58 59# CHECK-ASM-AND-OBJ: cmpnei16 a0, 2 60# CHECK-ASM: encoding: [0x42,0x38] 61cmpnei16 a0, 2 62 63# CHECK-ASM-AND-OBJ: cmphsi16 a0, 2 64# CHECK-ASM: encoding: [0x01,0x38] 65cmphsi16 a0, 2 66 67# CHECK-ASM-AND-OBJ: cmplti16 a0, 2 68# CHECK-ASM: encoding: [0x21,0x38] 69cmplti16 a0, 2 70 71# CHECK-ASM-AND-OBJ: movi16 a0, 2 72# CHECK-ASM: encoding: [0x02,0x30] 73movi16 a0, 2 74 75# CHECK-ASM-AND-OBJ: addu16 a3, l0, l1 76# CHECK-ASM: encoding: [0x74,0x5c] 77addu16 a3, l0, l1 78 79# CHECK-ASM-AND-OBJ: subu16 a3, l0, l1 80# CHECK-ASM: encoding: [0x75,0x5c] 81subu16 a3, l0, l1 82 83# CHECK-ASM-AND-OBJ: and16 a3, l0 84# CHECK-ASM: encoding: [0xd0,0x68] 85and16 a3, l0 86 87# CHECK-ASM-AND-OBJ: andn16 a3, l0 88# CHECK-ASM: encoding: [0xd1,0x68] 89andn16 a3, l0 90 91# CHECK-ASM-AND-OBJ: or16 a3, l0 92# CHECK-ASM: encoding: [0xd0,0x6c] 93or16 a3, l0 94 95# CHECK-ASM-AND-OBJ: xor16 a3, l0 96# CHECK-ASM: encoding: [0xd1,0x6c] 97xor16 a3, l0 98 99# CHECK-ASM-AND-OBJ: nor16 a3, l0 100# CHECK-ASM: encoding: [0xd2,0x6c] 101nor16 a3, l0 102 103# CHECK-ASM-AND-OBJ: lsl16 a3, l0 104# CHECK-ASM: encoding: [0xd0,0x70] 105lsl16 a3, l0 106 107# CHECK-ASM-AND-OBJ: rotl16 a3, l0 108# CHECK-ASM: encoding: [0xd3,0x70] 109rotl16 a3, l0 110 111# CHECK-ASM-AND-OBJ: lsr16 a3, l0 112# CHECK-ASM: encoding: [0xd1,0x70] 113lsr16 a3, l0 114 115# CHECK-ASM-AND-OBJ: asr16 a3, l0 116# CHECK-ASM: encoding: [0xd2,0x70] 117asr16 a3, l0 118 119# CHECK-ASM-AND-OBJ: mult16 a3, l0 120# CHECK-ASM: encoding: [0xd0,0x7c] 121mult16 a3, l0 122 123# CHECK-ASM-AND-OBJ: addc16 a3, l0 124# CHECK-ASM: encoding: [0xd1,0x60] 125addc16 a3, l0 126 127# CHECK-ASM-AND-OBJ: subc16 a3, l0 128# CHECK-ASM: encoding: [0xd3,0x60] 129subc16 a3, l0 130 131# CHECK-OBJ: ld16.b a0, (a0, 0x2) 132# CHECK-ASM: ld16.b a0, (a0, 2) 133# CHECK-ASM: encoding: [0x02,0x80] 134ld16.b a0, (a0, 2) 135 136# CHECK-OBJ: ld16.h a0, (a0, 0x2) 137# CHECK-ASM: ld16.h a0, (a0, 2) 138# CHECK-ASM: encoding: [0x01,0x88] 139ld16.h a0, (a0, 2) 140 141# CHECK-OBJ: ld16.w a0, (a0, 0x4) 142# CHECK-ASM: ld16.w a0, (a0, 4) 143# CHECK-ASM: encoding: [0x01,0x90] 144ld16.w a0, (a0, 4) 145 146# CHECK-OBJ: ld16.w a0, (sp, 0x4) 147# CHECK-ASM: ld16.w a0, (sp, 4) 148# CHECK-ASM: encoding: [0x01,0x98] 149ld16.w a0, (sp, 4) 150 151# CHECK-OBJ: st16.b a0, (a0, 0x2) 152# CHECK-ASM: st16.b a0, (a0, 2) 153# CHECK-ASM: encoding: [0x02,0xa0] 154st16.b a0, (a0, 2) 155 156# CHECK-OBJ: st16.h a0, (a0, 0x2) 157# CHECK-ASM: st16.h a0, (a0, 2) 158# CHECK-ASM: encoding: [0x01,0xa8] 159st16.h a0, (a0, 2) 160 161# CHECK-OBJ: st16.w a0, (a0, 0x4) 162# CHECK-ASM: st16.w a0, (a0, 4) 163# CHECK-ASM: encoding: [0x01,0xb0] 164st16.w a0, (a0, 4) 165 166# CHECK-OBJ: st16.w a0, (sp, 0x4) 167# CHECK-ASM: st16.w a0, (sp, 4) 168# CHECK-ASM: encoding: [0x01,0xb8] 169st16.w a0, (sp, 4) 170 171# CHECK-ASM-AND-OBJ: revb16 a3, l0 172# CHECK-ASM: encoding: [0xd2,0x78] 173revb16 a3, l0 174 175# CHECK-ASM-AND-OBJ: revh16 a3, l0 176# CHECK-ASM: encoding: [0xd3,0x78] 177revh16 a3, l0 178 179# CHECK-ASM-AND-OBJ: mvcv16 a3 180# CHECK-ASM: encoding: [0xc3,0x64] 181mvcv16 a3 182 183# CHECK-ASM-AND-OBJ: cmpne16 a3, l0 184# CHECK-ASM: encoding: [0x0e,0x65] 185cmpne16 a3, l0 186 187# CHECK-ASM-AND-OBJ: cmphs16 a3, l0 188# CHECK-ASM: encoding: [0x0c,0x65] 189cmphs16 a3, l0 190 191# CHECK-ASM-AND-OBJ: cmplt16 a3, l0 192# CHECK-ASM: encoding: [0x0d,0x65] 193cmplt16 a3, l0 194 195# CHECK-ASM-AND-OBJ: tst16 a3, l0 196# CHECK-ASM: encoding: [0x0e,0x69] 197tst16 a3, l0 198 199# CHECK-ASM-AND-OBJ: tstnbz16 a3 200# CHECK-ASM: encoding: [0x0f,0x68] 201tstnbz16 a3 202 203# CHECK-ASM: br16 .L.test 204# CHECK-ASM: encoding: [A,0x04'A'] 205# CHECK-ASM: fixup A - offset: 0, value: .L.test, kind: fixup_csky_pcrel_imm10_scale2 206.L.test: 207br16 .L.test 208 209# CHECK-ASM: bt16 .L.test2 210# CHECK-ASM: encoding: [A,0x08'A'] 211# CHECK-ASM: fixup A - offset: 0, value: .L.test2, kind: fixup_csky_pcrel_imm10_scale2 212.L.test2: 213bt16 .L.test2 214 215# CHECK-ASM: bf16 .L.test3 216# CHECK-ASM: encoding: [A,0x0c'A'] 217# CHECK-ASM: fixup A - offset: 0, value: .L.test3, kind: fixup_csky_pcrel_imm10_scale2 218.L.test3: 219bf16 .L.test3 220 221# CHECK-ASM-AND-OBJ: jmp16 a3 222# CHECK-ASM: encoding: [0x0c,0x78] 223jmp16 a3 224 225# CHECK-ASM-AND-OBJ: jsr16 a3 226# CHECK-ASM: encoding: [0xcd,0x7b] 227jsr16 a3 228 229# CHECK-ASM: lrw16 a0, [.L.test14] 230# CHECK-ASM: encoding: [A,A] 231# CHECK-ASM: fixup A - offset: 0, value: .L.test14, kind: fixup_csky_pcrel_uimm7_scale4 232.L.test14: 233lrw16 a0, [.L.test14] 234 235# RUN: not llvm-mc -triple csky -mattr=+e1 -mattr=+e2 -mattr=+btst16 --defsym=ERR=1 < %s 2>&1 | FileCheck %s 236 237.ifdef ERR 238 239# oimm8 240addi16 a0, 0 # CHECK: :[[#@LINE]]:12: error: immediate must be an integer in the range [1, 256] 241 242# oimm5 243cmphsi16 a0, 0 # CHECK: :[[#@LINE]]:14: error: immediate must be an integer in the range [1, 32] 244 245# uimm5 246lsli16 a0, a0, 32 # CHECK: :[[#@LINE]]:16: error: immediate must be an integer in the range [0, 31] 247 248# uimm5/uimm5_1/uimm5_2 249ld32.b a0, (a0, -1) # CHECK: :[[@LINE]]:17: error: immediate must be an integer in the range [0, 4095] 250ld32.h a0, (a0, 4095) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 2 bytes in the range [0, 4094] 251ld32.h a0, (a0, 4093) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 2 bytes in the range [0, 4094] 252ld32.w a0, (a0, 4093) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 4 bytes in the range [0, 4092] 253ld32.w a0, (a0, 2) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 4 bytes in the range [0, 4092] 254 255st32.b a0, (a0, -1) # CHECK: :[[@LINE]]:17: error: immediate must be an integer in the range [0, 4095] 256st32.h a0, (a0, 4095) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 2 bytes in the range [0, 4094] 257st32.h a0, (a0, 4093) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 2 bytes in the range [0, 4094] 258st32.w a0, (a0, 4093) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 4 bytes in the range [0, 4092] 259st32.w a0, (a0, 2) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 4 bytes in the range [0, 4092] 260 261# Invalid mnemonics 262subs t0, t2, t1 # CHECK: :[[#@LINE]]:1: error: unrecognized instruction mnemonic 263nandi t0, t2, 0 # CHECK: :[[#@LINE]]:1: error: unrecognized instruction mnemonic 264 265# Invalid register names 266addi16 foo, sp, 10 # CHECK: :[[#@LINE]]:8: error: unknown operand 267lsli16 a10, a2, 0x20 # CHECK: :[[#@LINE]]:8: error: unknown operand 268asri16 x16, s0, s0 # CHECK: :[[#@LINE]]:8: error: unknown operand 269 270# Invalid operand types 271lsli16 a0, 22, 220 # CHECK: :[[#@LINE]]:12: error: invalid operand for instruction 272subu16 a0, a1, 1 # CHECK: :[[#@LINE]]:16: error: invalid operand for instruction 273 274# Too many operands 275lsli16 a0, a1, 0x11, 0x60 # CHECK: :[[@LINE]]:22: error: invalid operand for instruction 276 277# Too few operands 278lsli16 a0 # CHECK: :[[#@LINE]]:1: error: too few operands for instruction 279lsl16 a0 # CHECK: :[[#@LINE]]:1: error: too few operands for instruction 280 281.endif 282