278 lines · plain
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 %s3# 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 %s6 7# CHECK-ASM-AND-OBJ: addi16 a0, a0, 28# CHECK-ASM: encoding: [0x06,0x58]9addi16 a0, a0, 210 11# CHECK-ASM-AND-OBJ: addi16 a0, sp, 412# CHECK-ASM: encoding: [0x01,0x18]13addi16 a0, sp, 414 15# CHECK-ASM-AND-OBJ: addi16 a0, a1, 216# CHECK-ASM: encoding: [0x06,0x59]17addi16 a0, a1, 218 19# CHECK-ASM-AND-OBJ: addi16 sp, sp, 820# CHECK-ASM: encoding: [0x02,0x14]21addi16 sp, sp, 822 23# CHECK-ASM-AND-OBJ: subi16 a0, a0, 224# CHECK-ASM: encoding: [0x07,0x58]25subi16 a0, a0, 226 27# CHECK-ASM-AND-OBJ: subi16 a0, a1, 228# CHECK-ASM: encoding: [0x07,0x59]29subi16 a0, a1, 230 31# CHECK-ASM-AND-OBJ: subi16 sp, sp, 832# CHECK-ASM: encoding: [0x22,0x14]33subi16 sp, sp, 834 35# CHECK-ASM-AND-OBJ: lsli16 a0, a1, 236# CHECK-ASM: encoding: [0x02,0x41]37lsli16 a0, a1, 238 39# CHECK-ASM-AND-OBJ: lsri16 a0, a1, 240# CHECK-ASM: encoding: [0x02,0x49]41lsri16 a0, a1, 242 43# CHECK-ASM-AND-OBJ: asri16 a0, a1, 244# CHECK-ASM: encoding: [0x02,0x51]45asri16 a0, a1, 246 47# CHECK-ASM-AND-OBJ: btsti16 a0, 248# CHECK-ASM: encoding: [0xc2,0x38]49btsti16 a0, 250 51# CHECK-ASM-AND-OBJ: bclri16 a0, 252# CHECK-ASM: encoding: [0x82,0x38]53bclri16 a0, 254 55# CHECK-ASM-AND-OBJ: bseti16 a0, 256# CHECK-ASM: encoding: [0xa2,0x38]57bseti16 a0, 258 59# CHECK-ASM-AND-OBJ: cmpnei16 a0, 260# CHECK-ASM: encoding: [0x42,0x38]61cmpnei16 a0, 262 63# CHECK-ASM-AND-OBJ: cmphsi16 a0, 264# CHECK-ASM: encoding: [0x01,0x38]65cmphsi16 a0, 266 67# CHECK-ASM-AND-OBJ: cmplti16 a0, 268# CHECK-ASM: encoding: [0x21,0x38]69cmplti16 a0, 270 71# CHECK-ASM-AND-OBJ: movi16 a0, 272# CHECK-ASM: encoding: [0x02,0x30]73movi16 a0, 274 75# CHECK-ASM-AND-OBJ: addu16 a3, l0, l176# CHECK-ASM: encoding: [0x74,0x5c]77addu16 a3, l0, l178 79# CHECK-ASM-AND-OBJ: subu16 a3, l0, l180# CHECK-ASM: encoding: [0x75,0x5c]81subu16 a3, l0, l182 83# CHECK-ASM-AND-OBJ: and16 a3, l084# CHECK-ASM: encoding: [0xd0,0x68]85and16 a3, l086 87# CHECK-ASM-AND-OBJ: andn16 a3, l088# CHECK-ASM: encoding: [0xd1,0x68]89andn16 a3, l090 91# CHECK-ASM-AND-OBJ: or16 a3, l092# CHECK-ASM: encoding: [0xd0,0x6c]93or16 a3, l094 95# CHECK-ASM-AND-OBJ: xor16 a3, l096# CHECK-ASM: encoding: [0xd1,0x6c]97xor16 a3, l098 99# CHECK-ASM-AND-OBJ: nor16 a3, l0100# CHECK-ASM: encoding: [0xd2,0x6c]101nor16 a3, l0102 103# CHECK-ASM-AND-OBJ: lsl16 a3, l0104# CHECK-ASM: encoding: [0xd0,0x70]105lsl16 a3, l0106 107# CHECK-ASM-AND-OBJ: rotl16 a3, l0108# CHECK-ASM: encoding: [0xd3,0x70]109rotl16 a3, l0110 111# CHECK-ASM-AND-OBJ: lsr16 a3, l0112# CHECK-ASM: encoding: [0xd1,0x70]113lsr16 a3, l0114 115# CHECK-ASM-AND-OBJ: asr16 a3, l0116# CHECK-ASM: encoding: [0xd2,0x70]117asr16 a3, l0118 119# CHECK-ASM-AND-OBJ: mult16 a3, l0120# CHECK-ASM: encoding: [0xd0,0x7c]121mult16 a3, l0122 123# CHECK-ASM-AND-OBJ: addc16 a3, l0124# CHECK-ASM: encoding: [0xd1,0x60]125addc16 a3, l0126 127# CHECK-ASM-AND-OBJ: subc16 a3, l0128# CHECK-ASM: encoding: [0xd3,0x60]129subc16 a3, l0130 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, l0172# CHECK-ASM: encoding: [0xd2,0x78]173revb16 a3, l0174 175# CHECK-ASM-AND-OBJ: revh16 a3, l0176# CHECK-ASM: encoding: [0xd3,0x78]177revh16 a3, l0178 179# CHECK-ASM-AND-OBJ: mvcv16 a3180# CHECK-ASM: encoding: [0xc3,0x64]181mvcv16 a3182 183# CHECK-ASM-AND-OBJ: cmpne16 a3, l0184# CHECK-ASM: encoding: [0x0e,0x65]185cmpne16 a3, l0186 187# CHECK-ASM-AND-OBJ: cmphs16 a3, l0188# CHECK-ASM: encoding: [0x0c,0x65]189cmphs16 a3, l0190 191# CHECK-ASM-AND-OBJ: cmplt16 a3, l0192# CHECK-ASM: encoding: [0x0d,0x65]193cmplt16 a3, l0194 195# CHECK-ASM-AND-OBJ: tst16 a3, l0196# CHECK-ASM: encoding: [0x0e,0x69]197tst16 a3, l0198 199# CHECK-ASM-AND-OBJ: tstnbz16 a3200# CHECK-ASM: encoding: [0x0f,0x68]201tstnbz16 a3202 203# CHECK-ASM: br16 .L.test204# CHECK-ASM: encoding: [A,0x04'A']205.L.test:206br16 .L.test207 208# CHECK-ASM: bt16 .L.test2209# CHECK-ASM: encoding: [A,0x08'A']210.L.test2:211bt16 .L.test2212 213# CHECK-ASM: bf16 .L.test3214# CHECK-ASM: encoding: [A,0x0c'A']215.L.test3:216bf16 .L.test3217 218# CHECK-ASM-AND-OBJ: jmp16 a3219# CHECK-ASM: encoding: [0x0c,0x78]220jmp16 a3221 222# CHECK-ASM-AND-OBJ: jsr16 a3223# CHECK-ASM: encoding: [0xcd,0x7b]224jsr16 a3225 226# CHECK-ASM: lrw16 a0, [.L.test14]227# CHECK-ASM: encoding: [A,A]228.L.test14:229lrw16 a0, [.L.test14]230 231# RUN: not llvm-mc -triple csky -mattr=+e1 -mattr=+e2 -mattr=+btst16 --defsym=ERR=1 < %s 2>&1 | FileCheck %s232 233.ifdef ERR234 235# oimm8236addi16 a0, 0 # CHECK: :[[#@LINE]]:12: error: immediate must be an integer in the range [1, 256]237 238# oimm5239cmphsi16 a0, 0 # CHECK: :[[#@LINE]]:14: error: immediate must be an integer in the range [1, 32]240 241# uimm5242lsli16 a0, a0, 32 # CHECK: :[[#@LINE]]:16: error: immediate must be an integer in the range [0, 31]243 244# uimm5/uimm5_1/uimm5_2245ld32.b a0, (a0, -1) # CHECK: :[[@LINE]]:17: error: immediate must be an integer in the range [0, 4095]246ld32.h a0, (a0, 4095) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 2 bytes in the range [0, 4094]247ld32.h a0, (a0, 4093) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 2 bytes in the range [0, 4094]248ld32.w a0, (a0, 4093) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 4 bytes in the range [0, 4092]249ld32.w a0, (a0, 2) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 4 bytes in the range [0, 4092]250 251st32.b a0, (a0, -1) # CHECK: :[[@LINE]]:17: error: immediate must be an integer in the range [0, 4095]252st32.h a0, (a0, 4095) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 2 bytes in the range [0, 4094]253st32.h a0, (a0, 4093) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 2 bytes in the range [0, 4094]254st32.w a0, (a0, 4093) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 4 bytes in the range [0, 4092]255st32.w a0, (a0, 2) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 4 bytes in the range [0, 4092]256 257# Invalid mnemonics258subs t0, t2, t1 # CHECK: :[[#@LINE]]:1: error: unrecognized instruction mnemonic259nandi t0, t2, 0 # CHECK: :[[#@LINE]]:1: error: unrecognized instruction mnemonic260 261# Invalid register names262addi16 foo, sp, 10 # CHECK: :[[#@LINE]]:8: error: unknown operand263lsli16 a10, a2, 0x20 # CHECK: :[[#@LINE]]:8: error: unknown operand264asri16 x16, s0, s0 # CHECK: :[[#@LINE]]:8: error: unknown operand265 266# Invalid operand types267lsli16 a0, 22, 220 # CHECK: :[[#@LINE]]:12: error: invalid operand for instruction268subu16 a0, a1, 1 # CHECK: :[[#@LINE]]:16: error: invalid operand for instruction269 270# Too many operands271lsli16 a0, a1, 0x11, 0x60 # CHECK: :[[@LINE]]:22: error: invalid operand for instruction272 273# Too few operands274lsli16 a0 # CHECK: :[[#@LINE]]:1: error: too few operands for instruction275lsl16 a0 # CHECK: :[[#@LINE]]:1: error: too few operands for instruction276 277.endif278