1# RUN: llvm-mc %s -triple=csky -show-encoding -csky-no-aliases -mattr=+e2 -mattr=+2e3 \ 2# RUN: -mattr=+mp1e2 | FileCheck -check-prefixes=CHECK-ASM,CHECK-ASM-AND-OBJ %s 3# RUN: llvm-mc -filetype=obj -triple=csky -mattr=+e2 -mattr=+2e3 -mattr=+mp1e2 < %s \ 4# RUN: | llvm-objdump --mattr=+e2 --mattr=+2e3 --mattr=+mp1e2 -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: addi32 a0, sp, 2 8# CHECK-ASM: encoding: [0x0e,0xe4,0x01,0x00] 9addi32 a0, sp, 2 10 11# CHECK-ASM-AND-OBJ: subi32 a0, sp, 2 12# CHECK-ASM: encoding: [0x0e,0xe4,0x01,0x10] 13subi32 a0, sp, 2 14 15# CHECK-ASM-AND-OBJ: andi32 a0, sp, 2 16# CHECK-ASM: encoding: [0x0e,0xe4,0x02,0x20] 17andi32 a0, sp, 2 18 19# CHECK-ASM-AND-OBJ: andni32 a0, sp, 2 20# CHECK-ASM: encoding: [0x0e,0xe4,0x02,0x30] 21andni32 a0, sp, 2 22 23# CHECK-ASM-AND-OBJ: xori32 a0, sp, 2 24# CHECK-ASM: encoding: [0x0e,0xe4,0x02,0x40] 25xori32 a0, sp, 2 26 27# CHECK-ASM-AND-OBJ: lsli32 a0, sp, 2 28# CHECK-ASM: encoding: [0x4e,0xc4,0x20,0x48] 29lsli32 a0, sp, 2 30 31# CHECK-ASM-AND-OBJ: lsri32 a0, sp, 2 32# CHECK-ASM: encoding: [0x4e,0xc4,0x40,0x48] 33lsri32 a0, sp, 2 34 35# CHECK-ASM-AND-OBJ: asri32 a0, sp, 2 36# CHECK-ASM: encoding: [0x4e,0xc4,0x80,0x48] 37asri32 a0, sp, 2 38 39# CHECK-ASM-AND-OBJ: ori32 a0, sp, 2 40# CHECK-ASM: encoding: [0x0e,0xec,0x02,0x00] 41ori32 a0, sp, 2 42 43# CHECK-ASM-AND-OBJ: rotli32 a0, sp, 2 44# CHECK-ASM: encoding: [0x4e,0xc4,0x00,0x49] 45rotli32 a0, sp, 2 46 47# CHECK-ASM-AND-OBJ: incf32 a0, sp, 2 48# CHECK-ASM: encoding: [0x0e,0xc4,0x22,0x0c] 49incf32 a0, sp, 2 50 51# CHECK-ASM-AND-OBJ: inct32 a0, sp, 2 52# CHECK-ASM: encoding: [0x0e,0xc4,0x42,0x0c] 53inct32 a0, sp, 2 54 55# CHECK-ASM-AND-OBJ: decf32 a0, sp, 2 56# CHECK-ASM: encoding: [0x0e,0xc4,0x82,0x0c] 57decf32 a0, sp, 2 58 59# CHECK-ASM-AND-OBJ: dect32 a0, sp, 2 60# CHECK-ASM: encoding: [0x0e,0xc4,0x02,0x0d] 61dect32 a0, sp, 2 62 63# CHECK-ASM-AND-OBJ: decgt32 a0, sp, 2 64# CHECK-ASM: encoding: [0x4e,0xc4,0x20,0x10] 65decgt32 a0, sp, 2 66 67# CHECK-ASM-AND-OBJ: declt32 a0, sp, 2 68# CHECK-ASM: encoding: [0x4e,0xc4,0x40,0x10] 69declt32 a0, sp, 2 70 71# CHECK-ASM-AND-OBJ: decne32 a0, sp, 2 72# CHECK-ASM: encoding: [0x4e,0xc4,0x80,0x10] 73decne32 a0, sp, 2 74 75# CHECK-ASM-AND-OBJ: btsti32 a0, 2 76# CHECK-ASM: encoding: [0x40,0xc4,0x80,0x28] 77btsti32 a0, 2 78 79# CHECK-ASM-AND-OBJ: bclri32 a0, sp, 2 80# CHECK-ASM: encoding: [0x4e,0xc4,0x20,0x28] 81bclri32 a0, sp, 2 82 83# CHECK-ASM-AND-OBJ: bseti32 a0, sp, 2 84# CHECK-ASM: encoding: [0x4e,0xc4,0x40,0x28] 85bseti32 a0, sp, 2 86 87# CHECK-ASM-AND-OBJ: cmpnei32 a0, 2 88# CHECK-ASM: encoding: [0x40,0xeb,0x02,0x00] 89cmpnei32 a0, 2 90 91# CHECK-ASM-AND-OBJ: cmphsi32 a0, 2 92# CHECK-ASM: encoding: [0x00,0xeb,0x01,0x00] 93cmphsi32 a0, 2 94 95# CHECK-ASM-AND-OBJ: cmplti32 a0, 2 96# CHECK-ASM: encoding: [0x20,0xeb,0x01,0x00] 97cmplti32 a0, 2 98 99# CHECK-ASM-AND-OBJ: movi32 a0, 2 100# CHECK-ASM: encoding: [0x00,0xea,0x02,0x00] 101movi32 a0, 2 102 103# CHECK-ASM-AND-OBJ: movih32 a0, 2 104# CHECK-ASM: encoding: [0x20,0xea,0x02,0x00] 105movih32 a0, 2 106 107# CHECK-ASM-AND-OBJ: addu32 a3, l0, l1 108# CHECK-ASM: encoding: [0xa4,0xc4,0x23,0x00] 109addu32 a3, l0, l1 110 111# CHECK-ASM-AND-OBJ: subu32 a3, l0, l1 112# CHECK-ASM: encoding: [0xa4,0xc4,0x83,0x00] 113subu32 a3, l0, l1 114 115# CHECK-ASM-AND-OBJ: and32 a3, l0, l1 116# CHECK-ASM: encoding: [0xa4,0xc4,0x23,0x20] 117and32 a3, l0, l1 118 119# CHECK-ASM-AND-OBJ: andn32 a3, l0, l1 120# CHECK-ASM: encoding: [0xa4,0xc4,0x43,0x20] 121andn32 a3, l0, l1 122 123# CHECK-ASM-AND-OBJ: or32 a3, l0, l1 124# CHECK-ASM: encoding: [0xa4,0xc4,0x23,0x24] 125or32 a3, l0, l1 126 127# CHECK-ASM-AND-OBJ: xor32 a3, l0, l1 128# CHECK-ASM: encoding: [0xa4,0xc4,0x43,0x24] 129xor32 a3, l0, l1 130 131# CHECK-ASM-AND-OBJ: nor32 a3, l0, l1 132# CHECK-ASM: encoding: [0xa4,0xc4,0x83,0x24] 133nor32 a3, l0, l1 134 135# CHECK-ASM-AND-OBJ: lsl32 a3, l0, l1 136# CHECK-ASM: encoding: [0xa4,0xc4,0x23,0x40] 137lsl32 a3, l0, l1 138 139# CHECK-ASM-AND-OBJ: rotl32 a3, l0, l1 140# CHECK-ASM: encoding: [0xa4,0xc4,0x03,0x41] 141rotl32 a3, l0, l1 142 143# CHECK-ASM-AND-OBJ: lsr32 a3, l0, l1 144# CHECK-ASM: encoding: [0xa4,0xc4,0x43,0x40] 145lsr32 a3, l0, l1 146 147# CHECK-ASM-AND-OBJ: asr32 a3, l0, l1 148# CHECK-ASM: encoding: [0xa4,0xc4,0x83,0x40] 149asr32 a3, l0, l1 150 151# CHECK-ASM-AND-OBJ: lslc32 a0, sp, 2 152# CHECK-ASM: encoding: [0x2e,0xc4,0x20,0x4c] 153lslc32 a0, sp, 2 154 155# CHECK-ASM-AND-OBJ: lsrc32 a0, sp, 2 156# CHECK-ASM: encoding: [0x2e,0xc4,0x40,0x4c] 157lsrc32 a0, sp, 2 158 159# CHECK-ASM-AND-OBJ: asrc32 a0, sp, 2 160# CHECK-ASM: encoding: [0x2e,0xc4,0x80,0x4c] 161asrc32 a0, sp, 2 162 163# CHECK-ASM-AND-OBJ: xsr32 a0, sp, 2 164# CHECK-ASM: encoding: [0x2e,0xc4,0x00,0x4d] 165xsr32 a0, sp, 2 166 167# CHECK-ASM-AND-OBJ: bmaski32 a3, 17 168# CHECK-ASM: encoding: [0x00,0xc6,0x23,0x50] 169bmaski32 a3, 17 170 171# CHECK-ASM-AND-OBJ: mult32 a3, l0, l1 172# CHECK-ASM: encoding: [0xa4,0xc4,0x23,0x84] 173mult32 a3, l0, l1 174 175# CHECK-ASM-AND-OBJ: divs32 a3, l0, l1 176# CHECK-ASM: encoding: [0xa4,0xc4,0x43,0x80] 177divs32 a3, l0, l1 178 179# CHECK-ASM-AND-OBJ: divu32 a3, l0, l1 180# CHECK-ASM: encoding: [0xa4,0xc4,0x23,0x80] 181divu32 a3, l0, l1 182 183# CHECK-ASM-AND-OBJ: ixh32 a3, l0, l1 184# CHECK-ASM: encoding: [0xa4,0xc4,0x23,0x08] 185ixh32 a3, l0, l1 186 187# CHECK-ASM-AND-OBJ: ixw32 a3, l0, l1 188# CHECK-ASM: encoding: [0xa4,0xc4,0x43,0x08] 189ixw32 a3, l0, l1 190 191# CHECK-ASM-AND-OBJ: ixd32 a3, l0, l1 192# CHECK-ASM: encoding: [0xa4,0xc4,0x83,0x08] 193ixd32 a3, l0, l1 194 195# CHECK-ASM-AND-OBJ: addc32 a3, l0, l1 196# CHECK-ASM: encoding: [0xa4,0xc4,0x43,0x00] 197addc32 a3, l0, l1 198 199# CHECK-ASM-AND-OBJ: subc32 a3, l0, l1 200# CHECK-ASM: encoding: [0xa4,0xc4,0x03,0x01] 201subc32 a3, l0, l1 202 203# CHECK-OBJ: ld32.b a0, (sp, 0x2) 204# CHECK-ASM: ld32.b a0, (sp, 2) 205# CHECK-ASM: encoding: [0x0e,0xd8,0x02,0x00] 206ld32.b a0, (sp, 2) 207 208# CHECK-OBJ: ld32.bs a0, (sp, 0x2) 209# CHECK-ASM: ld32.bs a0, (sp, 2) 210# CHECK-ASM: encoding: [0x0e,0xd8,0x02,0x40] 211ld32.bs a0, (sp, 2) 212 213# CHECK-OBJ: ld32.h a0, (sp, 0x2) 214# CHECK-ASM: ld32.h a0, (sp, 2) 215# CHECK-ASM: encoding: [0x0e,0xd8,0x01,0x10] 216ld32.h a0, (sp, 2) 217 218# CHECK-OBJ: ld32.hs a0, (sp, 0x2) 219# CHECK-ASM: ld32.hs a0, (sp, 2) 220# CHECK-ASM: encoding: [0x0e,0xd8,0x01,0x50] 221ld32.hs a0, (sp, 2) 222 223# CHECK-OBJ: ld32.w a0, (sp, 0x4) 224# CHECK-ASM: ld32.w a0, (sp, 4) 225# CHECK-ASM: encoding: [0x0e,0xd8,0x01,0x20] 226ld32.w a0, (sp, 4) 227 228# CHECK-ASM-AND-OBJ: ldr32.b a0, (sp, l1 << 2) 229# CHECK-ASM: encoding: [0xae,0xd0,0x80,0x00] 230ldr32.b a0, (sp, l1 << 2) 231 232# CHECK-OBJ: ldex32.w a0, (sp, 0x4) 233# CHECK-ASM: ldex32.w a0, (sp, 4) 234# CHECK-ASM: encoding: [0x0e,0xd8,0x01,0x70] 235ldex32.w a0, (sp, 4) 236 237# CHECK-ASM-AND-OBJ: ldr32.bs a0, (sp, l1 << 2) 238# CHECK-ASM: encoding: [0xae,0xd0,0x80,0x10] 239ldr32.bs a0, (sp, l1 << 2) 240 241# CHECK-ASM-AND-OBJ: ldr32.h a0, (sp, l1 << 3) 242# CHECK-ASM: encoding: [0xae,0xd0,0x00,0x05] 243ldr32.h a0, (sp, l1 << 3) 244 245# CHECK-ASM-AND-OBJ: ldr32.hs a0, (sp, l1 << 3) 246# CHECK-ASM: encoding: [0xae,0xd0,0x00,0x15] 247ldr32.hs a0, (sp, l1 << 3) 248 249# CHECK-ASM-AND-OBJ: ldr32.w a0, (sp, l1 << 3) 250# CHECK-ASM: encoding: [0xae,0xd0,0x00,0x09] 251ldr32.w a0, (sp, l1 << 3) 252 253# CHECK-OBJ: st32.b a0, (sp, 0x2) 254# CHECK-ASM: st32.b a0, (sp, 2) 255# CHECK-ASM: encoding: [0x0e,0xdc,0x02,0x00] 256st32.b a0, (sp, 2) 257 258# CHECK-OBJ: st32.h a0, (sp, 0x2) 259# CHECK-ASM: st32.h a0, (sp, 2) 260# CHECK-ASM: encoding: [0x0e,0xdc,0x01,0x10] 261st32.h a0, (sp, 2) 262 263# CHECK-OBJ: st32.w a0, (sp, 0x4) 264# CHECK-ASM: st32.w a0, (sp, 4) 265# CHECK-ASM: encoding: [0x0e,0xdc,0x01,0x20] 266st32.w a0, (sp, 4) 267 268# CHECK-OBJ: stex32.w a0, (sp, 0x4) 269# CHECK-ASM: stex32.w a0, (sp, 4) 270# CHECK-ASM: encoding: [0x0e,0xdc,0x01,0x70] 271stex32.w a0, (sp, 4) 272 273# CHECK-ASM-AND-OBJ: str32.b a0, (sp, l1 << 2) 274# CHECK-ASM: encoding: [0xae,0xd4,0x80,0x00] 275str32.b a0, (sp, l1 << 2) 276 277# CHECK-ASM-AND-OBJ: str32.h a0, (sp, l1 << 3) 278# CHECK-ASM: encoding: [0xae,0xd4,0x00,0x05] 279str32.h a0, (sp, l1 << 3) 280 281# CHECK-ASM-AND-OBJ: str32.w a0, (sp, l1 << 3) 282# CHECK-ASM: encoding: [0xae,0xd4,0x00,0x09] 283str32.w a0, (sp, l1 << 3) 284 285# CHECK-ASM-AND-OBJ: ldm32 a1-a2, (a0) 286# CHECK-ASM: encoding: [0x20,0xd0,0x21,0x1c] 287ldm32 a1-a2, (a0) 288 289# CHECK-ASM-AND-OBJ: stm32 a1-a2, (a0) 290# CHECK-ASM: encoding: [0x20,0xd4,0x21,0x1c] 291stm32 a1-a2, (a0) 292 293# CHECK-ASM-AND-OBJ: ldm32 l0-l3, (a0) 294# CHECK-ASM: encoding: [0x80,0xd0,0x23,0x1c] 295ldq32 r4-r7, (a0) 296 297# CHECK-ASM-AND-OBJ: stm32 l0-l3, (a0) 298# CHECK-ASM: encoding: [0x80,0xd4,0x23,0x1c] 299stq32 r4-r7, (a0) 300 301# CHECK-ASM-AND-OBJ: brev32 a3, l0 302# CHECK-ASM: encoding: [0x04,0xc4,0x03,0x62] 303brev32 a3, l0 304 305# CHECK-ASM-AND-OBJ: abs32 a3, l0 306# CHECK-ASM: encoding: [0x04,0xc4,0x03,0x02] 307abs32 a3, l0 308 309# CHECK-ASM-AND-OBJ: bgenr32 a3, l0 310# CHECK-ASM: encoding: [0x04,0xc4,0x43,0x50] 311bgenr32 a3, l0 312 313# CHECK-ASM-AND-OBJ: revb32 a3, l0 314# CHECK-ASM: encoding: [0x04,0xc4,0x83,0x60] 315revb32 a3, l0 316 317# CHECK-ASM-AND-OBJ: revh32 a3, l0 318# CHECK-ASM: encoding: [0x04,0xc4,0x03,0x61] 319revh32 a3, l0 320 321# CHECK-ASM-AND-OBJ: ff0.32 a3, l0 322# CHECK-ASM: encoding: [0x04,0xc4,0x23,0x7c] 323ff0.32 a3, l0 324 325# CHECK-ASM-AND-OBJ: ff1.32 a3, l0 326# CHECK-ASM: encoding: [0x04,0xc4,0x43,0x7c] 327ff1.32 a3, l0 328 329# CHECK-ASM-AND-OBJ: xtrb0.32 a3, l0 330# CHECK-ASM: encoding: [0x04,0xc4,0x23,0x70] 331xtrb0.32 a3, l0 332 333# CHECK-ASM-AND-OBJ: xtrb1.32 a3, l0 334# CHECK-ASM: encoding: [0x04,0xc4,0x43,0x70] 335xtrb1.32 a3, l0 336 337# CHECK-ASM-AND-OBJ: xtrb2.32 a3, l0 338# CHECK-ASM: encoding: [0x04,0xc4,0x83,0x70] 339xtrb2.32 a3, l0 340 341# CHECK-ASM-AND-OBJ: xtrb3.32 a3, l0 342# CHECK-ASM: encoding: [0x04,0xc4,0x03,0x71] 343xtrb3.32 a3, l0 344 345# CHECK-ASM-AND-OBJ: mvc32 a3 346# CHECK-ASM: encoding: [0x00,0xc4,0x03,0x05] 347mvc32 a3 348 349# CHECK-ASM-AND-OBJ: mvcv32 a3 350# CHECK-ASM: encoding: [0x00,0xc4,0x03,0x06] 351mvcv32 a3 352 353# CHECK-ASM-AND-OBJ: cmpne32 a3, l0 354# CHECK-ASM: encoding: [0x83,0xc4,0x80,0x04] 355cmpne32 a3, l0 356 357# CHECK-ASM-AND-OBJ: cmphs32 a3, l0 358# CHECK-ASM: encoding: [0x83,0xc4,0x20,0x04] 359cmphs32 a3, l0 360 361# CHECK-ASM-AND-OBJ: cmplt32 a3, l0 362# CHECK-ASM: encoding: [0x83,0xc4,0x40,0x04] 363cmplt32 a3, l0 364 365# CHECK-ASM-AND-OBJ: zext32 a3, l0, 7, 0 366# CHECK-ASM: encoding: [0x04,0xc4,0xe3,0x54] 367zext32 a3, l0, 7, 0 368 369# CHECK-ASM-AND-OBJ: sext32 a3, l0, 7, 0 370# CHECK-ASM: encoding: [0x04,0xc4,0xe3,0x58] 371sext32 a3, l0, 7, 0 372 373# CHECK-ASM-AND-OBJ: ldm32 l1-l3, (a0) 374# CHECK-ASM: encoding: [0xa0,0xd0,0x22,0x1c] 375ldm32 r5-r7, (a0) 376 377# CHECK-ASM-AND-OBJ: stm32 l1-l3, (a0) 378# CHECK-ASM: encoding: [0xa0,0xd4,0x22,0x1c] 379stm32 r5-r7, (a0) 380 381# CHECK-ASM-AND-OBJ: setc32 382# CHECK-ASM: encoding: [0x00,0xc4,0x20,0x04] 383setc32 384 385# CHECK-ASM-AND-OBJ: clrc32 386# CHECK-ASM: encoding: [0x00,0xc4,0x80,0x04] 387clrc32 388 389# CHECK-ASM-AND-OBJ: tst32 a3, l0 390# CHECK-ASM: encoding: [0x83,0xc4,0x80,0x20] 391tst32 a3, l0 392 393# CHECK-ASM-AND-OBJ: tstnbz32 a3 394# CHECK-ASM: encoding: [0x03,0xc4,0x00,0x21] 395tstnbz32 a3 396 397# CHECK-ASM-AND-OBJ: clrf32 a3 398# CHECK-ASM: encoding: [0x60,0xc4,0x20,0x2c] 399clrf32 a3 400 401# CHECK-ASM-AND-OBJ: clrt32 a3 402# CHECK-ASM: encoding: [0x60,0xc4,0x40,0x2c] 403clrt32 a3 404 405# CHECK-ASM-AND-OBJ: bar.brwarw 406# CHECK-ASM: encoding: [0x00,0xc0,0x2f,0x84] 407bar.brwarw 408 409# CHECK-ASM-AND-OBJ: bar.brwarws 410# CHECK-ASM: encoding: [0x00,0xc2,0x2f,0x84] 411bar.brwarws 412 413# CHECK-ASM-AND-OBJ: bar.brarw 414# CHECK-ASM: encoding: [0x00,0xc0,0x27,0x84] 415bar.brarw 416 417# CHECK-ASM-AND-OBJ: bar.brarws 418# CHECK-ASM: encoding: [0x00,0xc2,0x27,0x84] 419bar.brarws 420 421# CHECK-ASM-AND-OBJ: bar.brwaw 422# CHECK-ASM: encoding: [0x00,0xc0,0x2e,0x84] 423bar.brwaw 424 425# CHECK-ASM-AND-OBJ: bar.brwaws 426# CHECK-ASM: encoding: [0x00,0xc2,0x2e,0x84] 427bar.brwaws 428 429# CHECK-ASM-AND-OBJ: bar.brar 430# CHECK-ASM: encoding: [0x00,0xc0,0x25,0x84] 431bar.brar 432 433# CHECK-ASM-AND-OBJ: bar.brars 434# CHECK-ASM: encoding: [0x00,0xc2,0x25,0x84] 435bar.brars 436 437# CHECK-ASM-AND-OBJ: bar.bwaw 438# CHECK-ASM: encoding: [0x00,0xc0,0x2a,0x84] 439bar.bwaw 440 441# CHECK-ASM-AND-OBJ: bar.bwaws 442# CHECK-ASM: encoding: [0x00,0xc2,0x2a,0x84] 443bar.bwaws 444 445# CHECK-ASM-AND-OBJ: sync32 446# CHECK-ASM: encoding: [0x00,0xc0,0x20,0x04] 447sync32 448 449# CHECK-ASM-AND-OBJ: sync32.s 450# CHECK-ASM: encoding: [0x00,0xc2,0x20,0x04] 451sync32.s 452 453# CHECK-ASM-AND-OBJ: sync32.i 454# CHECK-ASM: encoding: [0x20,0xc0,0x20,0x04] 455sync32.i 456 457# CHECK-ASM-AND-OBJ: sync32.is 458# CHECK-ASM: encoding: [0x20,0xc2,0x20,0x04] 459sync32.is 460 461# CHECK-ASM-AND-OBJ: rfi32 462# CHECK-ASM: encoding: [0x00,0xc0,0x20,0x44] 463rfi32 464 465# CHECK-ASM-AND-OBJ: stop32 466# CHECK-ASM: encoding: [0x00,0xc0,0x20,0x48] 467stop32 468 469# CHECK-ASM-AND-OBJ: wait32 470# CHECK-ASM: encoding: [0x00,0xc0,0x20,0x4c] 471wait32 472 473# CHECK-ASM-AND-OBJ: doze32 474# CHECK-ASM: encoding: [0x00,0xc0,0x20,0x50] 475doze32 476 477# CHECK-ASM: br32 .L.test 478# CHECK-ASM: encoding: [A,0xe8'A',A,A] 479# CHECK-ASM: fixup A - offset: 0, value: .L.test, kind: fixup_csky_pcrel_imm16_scale2 480.L.test: 481br32 .L.test 482 483# CHECK-ASM: bt32 .L.test2 484# CHECK-ASM: encoding: [0x60'A',0xe8'A',A,A] 485# CHECK-ASM: fixup A - offset: 0, value: .L.test2, kind: fixup_csky_pcrel_imm16_scale2 486.L.test2: 487bt32 .L.test2 488 489# CHECK-ASM: bf32 .L.test3 490# CHECK-ASM: encoding: [0x40'A',0xe8'A',A,A] 491# CHECK-ASM: fixup A - offset: 0, value: .L.test3, kind: fixup_csky_pcrel_imm16_scale2 492.L.test3: 493bf32 .L.test3 494 495# CHECK-ASM: bez32 a0, .L.test4 496# CHECK-ASM: encoding: [A,0xe9'A',A,A] 497# CHECK-ASM: fixup A - offset: 0, value: .L.test4, kind: fixup_csky_pcrel_imm16_scale2 498.L.test4: 499bez32 a0, .L.test4 500 501# CHECK-ASM: bnez32 a0, .L.test5 502# CHECK-ASM: encoding: [0x20'A',0xe9'A',A,A] 503# CHECK-ASM: fixup A - offset: 0, value: .L.test5, kind: fixup_csky_pcrel_imm16_scale2 504.L.test5: 505bnez32 a0, .L.test5 506 507# CHECK-ASM: bhz32 a0, .L.test6 508# CHECK-ASM: encoding: [0x40'A',0xe9'A',A,A] 509# CHECK-ASM: fixup A - offset: 0, value: .L.test6, kind: fixup_csky_pcrel_imm16_scale2 510.L.test6: 511bhz32 a0, .L.test6 512 513# CHECK-ASM: blsz32 a0, .L.test7 514# CHECK-ASM: encoding: [0x60'A',0xe9'A',A,A] 515# CHECK-ASM: fixup A - offset: 0, value: .L.test7, kind: fixup_csky_pcrel_imm16_scale2 516.L.test7: 517blsz32 a0, .L.test7 518 519# CHECK-ASM: blz32 a0, .L.test8 520# CHECK-ASM: encoding: [0x80'A',0xe9'A',A,A] 521# CHECK-ASM: fixup A - offset: 0, value: .L.test8, kind: fixup_csky_pcrel_imm16_scale2 522.L.test8: 523blz32 a0, .L.test8 524 525# CHECK-ASM: bhsz32 a0, .L.test9 526# CHECK-ASM: encoding: [0xa0'A',0xe9'A',A,A] 527# CHECK-ASM: fixup A - offset: 0, value: .L.test9, kind: fixup_csky_pcrel_imm16_scale2 528.L.test9: 529bhsz32 a0, .L.test9 530 531# CHECK-ASM: jmp32 a3 532# CHECK-ASM: encoding: [0xc3,0xe8,0x00,0x00] 533jmp32 a3 534 535# CHECK-ASM: jmpi32 [.L.test10] 536# CHECK-ASM: encoding: [0xc0'A',0xea'A',A,A] 537# CHECK-ASM: fixup A - offset: 0, value: .L.test10, kind: fixup_csky_pcrel_uimm16_scale4 538.L.test10: 539jmpi32 [.L.test10] 540 541# CHECK-ASM: bsr32 .L.test11 542# CHECK-ASM: encoding: [A,0xe0'A',A,A] 543# CHECK-ASM: fixup A - offset: 0, value: .L.test11, kind: fixup_csky_pcrel_imm26_scale2 544.L.test11: 545bsr32 .L.test11 546 547# CHECK-ASM: jsr32 a3 548# CHECK-ASM: encoding: [0xe3,0xe8,0x00,0x00] 549jsr32 a3 550 551# CHECK-ASM: jsri32 [.L.test12] 552# CHECK-ASM: encoding: [0xe0'A',0xea'A',A,A] 553# CHECK-ASM: fixup A - offset: 0, value: .L.test12, kind: fixup_csky_pcrel_uimm16_scale4 554.L.test12: 555jsri32 [.L.test12] 556 557# CHECK-ASM: grs32 a0, .L.test13 558# CHECK-ASM: encoding: [0x0c'A',0xcc'A',A,A] 559# CHECK-ASM: fixup A - offset: 0, value: .L.test13, kind: fixup_csky_pcrel_imm18_scale2 560.L.test13: 561grs32 a0, .L.test13 562 563# CHECK-ASM: lrw32 a0, [.L.test14] 564# CHECK-ASM: encoding: [0x80'A',0xea'A',A,A] 565# CHECK-ASM: fixup A - offset: 0, value: .L.test14, kind: fixup_csky_pcrel_uimm16_scale4 566.L.test14: 567lrw32 a0, [.L.test14] 568 569# RUN: not llvm-mc -triple csky -mattr=+e2 -mattr=+2e3 --defsym=ERR=1 < %s 2>&1 | FileCheck %s 570 571.ifdef ERR 572 573# uimm12/oimm12/nimm12 574addi32 a0, a0, 0 # CHECK: :[[#@LINE]]:16: error: immediate must be an integer in the range [1, 4096] 575subi32 a0, a0, 4097 # CHECK: :[[#@LINE]]:16: error: immediate must be an integer in the range [1, 4096] 576andi32 a0, a0, 4096 # CHECK: :[[#@LINE]]:16: error: immediate must be an integer in the range [0, 4095] 577andni32 a0, a0, 4096 # CHECK: :[[#@LINE]]:17: error: immediate must be an integer in the range [0, 4095] 578xori32 a0, a0, 4096 # CHECK: :[[#@LINE]]:16: error: immediate must be an integer in the range [0, 4095] 579 580 581# uimm5 582lsli32 a0, a0, 32 # CHECK: :[[#@LINE]]:16: error: immediate must be an integer in the range [0, 31] 583lsri32 a0, a0, 32 # CHECK: :[[#@LINE]]:16: error: immediate must be an integer in the range [0, 31] 584asri32 a0, a0, 32 # CHECK: :[[#@LINE]]:16: error: immediate must be an integer in the range [0, 31] 585rotli32 a0, a0, 32 # CHECK: :[[@LINE]]:17: error: immediate must be an integer in the range [0, 31] 586 587# uimm12(shift0)/uimm12_1/uimm12_2 588ld32.b a0, (a0, -1) # CHECK: :[[@LINE]]:17: error: immediate must be an integer in the range [0, 4095] 589ld32.h a0, (a0, 4095) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 2 bytes in the range [0, 4094] 590ld32.h a0, (a0, 4093) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 2 bytes in the range [0, 4094] 591ld32.w a0, (a0, 4093) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 4 bytes in the range [0, 4092] 592ld32.w a0, (a0, 2) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 4 bytes in the range [0, 4092] 593ldr32.b a0, (a0, a1 << 4) # CHECK: :[[@LINE]]:24: error: immediate must be an integer in the range [0, 3] 594ldr32.bs a0, (a0, a1 << 4) # CHECK: :[[@LINE]]:25: error: immediate must be an integer in the range [0, 3] 595ldr32.h a0, (a0, a1 << -1) # CHECK: :[[@LINE]]:24: error: immediate must be an integer in the range [0, 3] 596ldr32.hs a0, (a0, a1 << 4) # CHECK: :[[@LINE]]:25: error: immediate must be an integer in the range [0, 3] 597ldr32.w a0, (a0, a1 << 4) # CHECK: :[[@LINE]]:24: error: immediate must be an integer in the range [0, 3] 598 599st32.b a0, (a0, -1) # CHECK: :[[@LINE]]:17: error: immediate must be an integer in the range [0, 4095] 600st32.h a0, (a0, 4095) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 2 bytes in the range [0, 4094] 601st32.h a0, (a0, 4093) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 2 bytes in the range [0, 4094] 602st32.w a0, (a0, 4093) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 4 bytes in the range [0, 4092] 603st32.w a0, (a0, 2) # CHECK: :[[@LINE]]:17: error: immediate must be a multiple of 4 bytes in the range [0, 4092] 604 605str32.b a0, (a0, a1 << 4) # CHECK: :[[@LINE]]:24: error: immediate must be an integer in the range [0, 3] 606str32.h a0, (a0, a1 << -1) # CHECK: :[[@LINE]]:24: error: immediate must be an integer in the range [0, 3] 607str32.w a0, (a0, a1 << 4) # CHECK: :[[@LINE]]:24: error: immediate must be an integer in the range [0, 3] 608 609# uimm16/oimm16 610ori32 a0, a0, 0x10000 # CHECK: :[[@LINE]]:15: error: immediate must be an integer in the range [0, 65535] 611cmpnei32 a0, 0x10000 # CHECK: :[[@LINE]]:14: error: immediate must be an integer in the range [0, 65535] 612cmphsi32 a0, 0x10001 # CHECK: :[[@LINE]]:14: error: immediate must be an integer in the range [1, 65536] 613cmplti32 a0, 0 # CHECK: :[[@LINE]]:14: error: immediate must be an integer in the range [1, 65536] 614movi32 a0, 0x10000 # CHECK: :[[@LINE]]:12: error: immediate must be an integer in the range [0, 65535] 615movih32 a0, 0x10000 # CHECK: :[[@LINE]]:13: error: immediate must be an integer in the range [0, 65535] 616 617# Invalid mnemonics 618subs t0, t2, t1 # CHECK: :[[#@LINE]]:1: error: unrecognized instruction mnemonic 619nandi t0, t2, 0 # CHECK: :[[#@LINE]]:1: error: unrecognized instruction mnemonic 620 621# Invalid register names 622addi32 foo, sp, 10 # CHECK: :[[#@LINE]]:8: error: unknown operand 623lsli32 a10, a2, 0x20 # CHECK: :[[#@LINE]]:8: error: unknown operand 624asri32 x32, s0, s0 # CHECK: :[[#@LINE]]:8: error: unknown operand 625 626# Invalid operand types 627xori32 sp, 22, 220 # CHECK: :[[#@LINE]]:12: error: invalid operand for instruction 628subu32 t0, t2, 1 # CHECK: :[[#@LINE]]:16: error: invalid operand for instruction 629 630# Too many operands 631subi32 t2, t3, 0x50, 0x60 # CHECK: :[[@LINE]]:22: error: invalid operand for instruction 632 633# Too few operands 634xori32 a0, a1 # CHECK: :[[#@LINE]]:1: error: too few operands for instruction 635xor32 a0, a2 # CHECK: :[[#@LINE]]:1: error: too few operands for instruction 636 637ldm32 a1-a33, (a1) # CHECK: :[[#@LINE]]:10: error: invalid register 638stm32 a1-a33, (a1) # CHECK: :[[#@LINE]]:10: error: invalid register 639 640ldq32 a1-a2, (a1) # CHECK: :[[#@LINE]]:1: error: Register sequence is not valid. 'r4-r7' expected 641stq32 a1-a3, (a1) # CHECK: :[[#@LINE]]:1: error: Register sequence is not valid. 'r4-r7' expected 642 643.endif