1# RUN: llvm-mc %s -triple=riscv64 -M no-aliases \ 2# RUN: | FileCheck -check-prefixes=CHECK-EXPAND,CHECK-INST,CHECK-ASM-NOALIAS %s 3# RUN: llvm-mc %s -triple=riscv64 \ 4# RUN: | FileCheck -check-prefixes=CHECK-EXPAND,CHECK-ALIAS,CHECK-ASM %s 5# RUN: llvm-mc -filetype=obj -triple riscv64 < %s \ 6# RUN: | llvm-objdump --no-print-imm-hex -M no-aliases -d - \ 7# RUN: | FileCheck -check-prefixes=CHECK-OBJ-NOALIAS,CHECK-EXPAND,CHECK-INST %s 8# RUN: llvm-mc -filetype=obj -triple riscv64 < %s \ 9# RUN: | llvm-objdump --no-print-imm-hex -d - \ 10# RUN: | FileCheck -check-prefixes=CHECK-EXPAND,CHECK-ALIAS %s 11 12# The following check prefixes are used in this test: 13# CHECK-INST.....Match the canonical instr (tests alias to instr. mapping) 14# CHECK-ALIAS....Match the alias (tests instr. to alias mapping) 15# CHECK-EXPAND...Match canonical instr. unconditionally (tests alias expansion) 16 17# TODO ld 18# TODO sd 19 20# Needed for testing valid %pcrel_lo expressions 21.Lpcrel_hi0: auipc a0, %pcrel_hi(foo) 22 23# Needed for testing li with a symbol difference 24.Lbuf: .skip 8 25.Lbuf_end: 26 27# CHECK-INST: addi a0, zero, 0 28# CHECK-ALIAS: li a0, 0 29li x10, 0 30# CHECK-INST: addi a0, zero, 1 31# CHECK-ALIAS: li a0, 1 32li x10, 1 33# CHECK-INST: addi a0, zero, -1 34# CHECK-ALIAS: li a0, -1 35li x10, -1 36# CHECK-INST: addi a0, zero, 2047 37# CHECK-ALIAS: li a0, 2047 38li x10, 2047 39# CHECK-INST: addi a0, zero, -2047 40# CHECK-ALIAS: li a0, -2047 41li x10, -2047 42# CHECK-INST: addi a1, zero, 1 43# CHECK-INST: slli a1, a1, 11 44# CHECK-ALIAS: li a1, 1 45# CHECK-ALIAS: slli a1, a1, 11 46li x11, 2048 47# CHECK-INST: addi a1, zero, -2048 48# CHECK-ALIAS: li a1, -2048 49li x11, -2048 50# CHECK-EXPAND: lui a1, 1 51# CHECK-EXPAND: addiw a1, a1, -2047 52li x11, 2049 53# CHECK-EXPAND: lui a1, 1048575 54# CHECK-EXPAND: addiw a1, a1, 2047 55li x11, -2049 56# CHECK-EXPAND: lui a1, 1 57# CHECK-EXPAND: addiw a1, a1, -1 58li x11, 4095 59# CHECK-EXPAND: lui a1, 1048575 60# CHECK-EXPAND: addiw a1, a1, 1 61li x11, -4095 62# CHECK-EXPAND: lui a2, 1 63li x12, 4096 64# CHECK-EXPAND: lui a2, 1048575 65li x12, -4096 66# CHECK-EXPAND: lui a2, 1 67# CHECK-EXPAND-NEXT: addiw a2, a2, 1 68li x12, 4097 69# CHECK-EXPAND: lui a2, 1048575 70# CHECK-EXPAND: addiw a2, a2, -1 71li x12, -4097 72# CHECK-EXPAND: lui a2, 524288 73# CHECK-EXPAND-NEXT: addiw a2, a2, -1 74li x12, 2147483647 75# CHECK-EXPAND: lui a2, 524288 76# CHECK-EXPAND-NEXT: addiw a2, a2, 1 77li x12, -2147483647 78# CHECK-EXPAND: lui a2, 524288 79li x12, -2147483648 80# CHECK-EXPAND: lui a2, 524288 81li x12, -0x80000000 82 83# CHECK-INST: addi a2, zero, 1 84# CHECK-INST-NEXT: slli a2, a2, 31 85# CHECK-ALIAS: li a2, 1 86# CHECK-ALIAS-NEXT: slli a2, a2, 31 87li x12, 0x80000000 88# CHECK-INST: addi a2, zero, -1 89# CHECK-INST-NEXT: srli a2, a2, 32 90# CHECK-ALIAS: li a2, -1 91# CHECK-ALIAS-NEXT: srli a2, a2, 32 92li x12, 0xFFFFFFFF 93 94# CHECK-INST: addi t0, zero, 1 95# CHECK-INST-NEXT: slli t0, t0, 32 96# CHECK-ALIAS: li t0, 1 97# CHECK-ALIAS-NEXT: slli t0, t0, 32 98li t0, 0x100000000 99# CHECK-INST: addi t1, zero, -1 100# CHECK-INST-NEXT: slli t1, t1, 63 101# CHECK-ALIAS: li t1, -1 102# CHECK-ALIAS-NEXT: slli t1, t1, 63 103li t1, 0x8000000000000000 104# CHECK-INST: addi t1, zero, -1 105# CHECK-INST-NEXT: slli t1, t1, 63 106# CHECK-ALIAS: li t1, -1 107# CHECK-ALIAS-NEXT: slli t1, t1, 63 108li t1, -0x8000000000000000 109# CHECK-EXPAND: lui t2, 9321 110# CHECK-EXPAND-NEXT: addiw t2, t2, -1329 111# CHECK-EXPAND-NEXT: slli t2, t2, 35 112li t2, 0x1234567800000000 113# CHECK-INST: addi t3, zero, 7 114# CHECK-INST-NEXT: slli t3, t3, 36 115# CHECK-INST-NEXT: addi t3, t3, 11 116# CHECK-INST-NEXT: slli t3, t3, 24 117# CHECK-INST-NEXT: addi t3, t3, 15 118# CHECK-ALIAS: li t3, 7 119# CHECK-ALIAS-NEXT: slli t3, t3, 36 120# CHECK-ALIAS-NEXT: addi t3, t3, 11 121# CHECK-ALIAS-NEXT: slli t3, t3, 24 122# CHECK-ALIAS-NEXT: addi t3, t3, 15 123li t3, 0x700000000B00000F 124# CHECK-EXPAND: lui t4, 583 125# CHECK-EXPAND-NEXT: addiw t4, t4, -1875 126# CHECK-EXPAND-NEXT: slli t4, t4, 14 127# CHECK-EXPAND-NEXT: addi t4, t4, -947 128# CHECK-EXPAND-NEXT: slli t4, t4, 12 129# CHECK-EXPAND-NEXT: addi t4, t4, 1511 130# CHECK-EXPAND-NEXT: slli t4, t4, 13 131# CHECK-EXPAND-NEXT: addi t4, t4, -272 132li t4, 0x123456789abcdef0 133# CHECK-INST: addi t5, zero, -1 134# CHECK-ALIAS: li t5, -1 135li t5, 0xFFFFFFFFFFFFFFFF 136# CHECK-EXPAND: lui t6, 262145 137# CHECK-EXPAND-NEXT: slli t6, t6, 1 138li t6, 0x80002000 139# CHECK-EXPAND: lui t0, 262145 140# CHECK-EXPAND-NEXT: slli t0, t0, 2 141li x5, 0x100004000 142# CHECK-EXPAND: lui t1, 4097 143# CHECK-EXPAND-NEXT: slli t1, t1, 20 144li x6, 0x100100000000 145# CHECK-EXPAND: lui t2, 983056 146# CHECK-EXPAND-NEXT: srli t2, t2, 16 147li x7, 0xFFFFFFFFF001 148# CHECK-EXPAND: lui s0, 1044481 149# CHECK-EXPAND-NEXT: slli s0, s0, 12 150# CHECK-EXPAND-NEXT: srli s0, s0, 24 151li x8, 0xFFFFFFF001 152# CHECK-EXPAND: lui s1, 4097 153# CHECK-EXPAND-NEXT: slli s1, s1, 20 154# CHECK-EXPAND-NEXT: addi s1, s1, -3 155li x9, 0x1000FFFFFFFD 156# CHECK-INST: lui a0, 983040 157# CHECK-INST-NEXT: srli a0, a0, 3 158# CHECK-INST-NEXT: xori a0, a0, -1 159# CHECK-ALIAS: lui a0, 983040 160# CHECK-ALIAS-NEXT: srli a0, a0, 3 161# CHECK-ALIAS-NEXT: not a0, a0 162li x10, 0xE000000001FFFFFF 163# CHECK-INST: addi a1, zero, -2047 164# CHECK-INST-NEXT: slli a1, a1, 39 165# CHECK-INST-NEXT: addi a1, a1, -2048 166# CHECK-INST-NEXT: addi a1, a1, -1 167# CHECK-ALIAS: li a1, -2047 168# CHECK-ALIAS-NEXT: slli a1, a1, 39 169# CHECK-ALIAS-NEXT: addi a1, a1, -2048 170# CHECK-ALIAS-NEXT: addi a1, a1, -1 171li x11, 0xFFFC007FFFFFF7FF 172 173# CHECK-INST: lui a2, 349525 174# CHECK-INST-NEXT: addiw a2, a2, 1365 175# CHECK-INST-NEXT: slli a2, a2, 1 176# CHECK-ALIAS: lui a2, 349525 177# CHECK-ALIAS-NEXT: addiw a2, a2, 1365 178# CHECK-ALIAS-NEXT: slli a2, a2, 1 179li x12, 0xaaaaaaaa 180 181# CHECK-INST: lui a3, 699051 182# CHECK-INST-NEXT: addiw a3, a3, -1365 183# CHECK-INST-NEXT: slli a3, a3, 1 184# CHECK-ALIAS: lui a3, 699051 185# CHECK-ALIAS-NEXT: addiw a3, a3, -1365 186# CHECK-ALIAS-NEXT: slli a3, a3, 1 187li x13, 0xffffffff55555556 188 189# CHECK-S-OBJ-NOALIAS: lui t0, 524288 190# CHECK-S-OBJ-NOALIAS-NEXT: addi t0, t0, -1365 191# CHECK-S-OBJ: lui t0, 524288 192# CHECK-S-OBJ-NEXT: addi t0, t0, -1365 193li x5, -2147485013 194 195# CHECK-INST: addi a0, zero, 1110 196# CHECK-ALIAS: li a0, 1110 197li a0, %lo(0x123456) 198 199# CHECK-OBJ-NOALIAS: addi a0, zero, 0 200# CHECK-OBJ: R_RISCV_LO12 201li a0, %lo(foo) 202# CHECK-OBJ-NOALIAS: addi a0, zero, 0 203# CHECK-OBJ: R_RISCV_PCREL_LO12 204li a0, %pcrel_lo(.Lpcrel_hi0) 205 206.equ CONST, 0x123456 207# CHECK-EXPAND: lui a0, 291 208# CHECK-EXPAND: addiw a0, a0, 1110 209li a0, CONST 210 211.equ CONST, 0x654321 212# CHECK-EXPAND: lui a0, 1620 213# CHECK-EXPAND: addiw a0, a0, 801 214li a0, CONST 215 216.equ CONST, .Lbuf_end - .Lbuf 217# CHECK-ASM: li a0, CONST 218# CHECK-ASM-NOALIAS: addi a0, zero, CONST 219# CHECK-OBJ-NOALIAS: addi a0, zero, 8 220li a0, CONST 221 222# CHECK-ASM: addi a0, zero, .Lbuf_end-.Lbuf 223# CHECK-ASM-NOALIAS: addi a0, zero, .Lbuf_end-.Lbuf 224# CHECK-OBJ-NOALIAS: addi a0, zero, 8 225li a0, .Lbuf_end - .Lbuf 226 227# CHECK-INST: addi a0, zero, 0 228# CHECK-ALIAS: li a0, 0 229la x10, 0 230lla x10, 0 231# CHECK-INST: addi a0, zero, 1 232# CHECK-ALIAS: li a0, 1 233la x10, 1 234lla x10, 1 235# CHECK-INST: addi a0, zero, -1 236# CHECK-ALIAS: li a0, -1 237la x10, -1 238lla x10, -1 239# CHECK-INST: addi a0, zero, 2047 240# CHECK-ALIAS: li a0, 2047 241la x10, 2047 242lla x10, 2047 243# CHECK-INST: addi a0, zero, -2047 244# CHECK-ALIAS: li a0, -2047 245la x10, -2047 246lla x10, -2047 247# CHECK-INST: addi a1, zero, 1 248# CHECK-INST: slli a1, a1, 11 249# CHECK-ALIAS: li a1, 1 250# CHECK-ALIAS: slli a1, a1, 11 251la x11, 2048 252lla x11, 2048 253# CHECK-INST: addi a1, zero, -2048 254# CHECK-ALIAS: li a1, -2048 255la x11, -2048 256lla x11, -2048 257# CHECK-EXPAND: lui a1, 1 258# CHECK-EXPAND: addiw a1, a1, -2047 259la x11, 2049 260lla x11, 2049 261# CHECK-EXPAND: lui a1, 1048575 262# CHECK-EXPAND: addiw a1, a1, 2047 263la x11, -2049 264lla x11, -2049 265# CHECK-EXPAND: lui a1, 1 266# CHECK-EXPAND: addiw a1, a1, -1 267la x11, 4095 268lla x11, 4095 269# CHECK-EXPAND: lui a1, 1048575 270# CHECK-EXPAND: addiw a1, a1, 1 271la x11, -4095 272lla x11, -4095 273# CHECK-EXPAND: lui a2, 1 274la x12, 4096 275lla x12, 4096 276# CHECK-EXPAND: lui a2, 1048575 277la x12, -4096 278lla x12, -4096 279# CHECK-EXPAND: lui a2, 1 280# CHECK-EXPAND: addiw a2, a2, 1 281la x12, 4097 282lla x12, 4097 283# CHECK-EXPAND: lui a2, 1048575 284# CHECK-EXPAND: addiw a2, a2, -1 285la x12, -4097 286lla x12, -4097 287# CHECK-EXPAND: lui a2, 524288 288# CHECK-EXPAND: addiw a2, a2, -1 289la x12, 2147483647 290lla x12, 2147483647 291# CHECK-EXPAND: lui a2, 524288 292# CHECK-EXPAND: addiw a2, a2, 1 293la x12, -2147483647 294lla x12, -2147483647 295# CHECK-EXPAND: lui a2, 524288 296la x12, -2147483648 297lla x12, -2147483648 298# CHECK-EXPAND: lui a2, 524288 299la x12, -0x80000000 300lla x12, -0x80000000 301 302# CHECK-INST: addi a2, zero, 1 303# CHECK-INST-NEXT: slli a2, a2, 31 304# CHECK-ALIAS: li a2, 1 305# CHECK-ALIAS-NEXT: slli a2, a2, 31 306la x12, 0x80000000 307lla x12, 0x80000000 308# CHECK-INST: addi a2, zero, -1 309# CHECK-INST-NEXT: srli a2, a2, 32 310# CHECK-ALIAS: li a2, -1 311# CHECK-ALIAS-NEXT: srli a2, a2, 32 312la x12, 0xFFFFFFFF 313lla x12, 0xFFFFFFFF 314 315# CHECK-INST: addi t0, zero, 1 316# CHECK-INST-NEXT: slli t0, t0, 32 317# CHECK-ALIAS: li t0, 1 318# CHECK-ALIAS-NEXT: slli t0, t0, 32 319la t0, 0x100000000 320lla t0, 0x100000000 321# CHECK-INST: addi t1, zero, -1 322# CHECK-INST-NEXT: slli t1, t1, 63 323# CHECK-ALIAS: li t1, -1 324# CHECK-ALIAS-NEXT: slli t1, t1, 63 325la t1, 0x8000000000000000 326lla t1, 0x8000000000000000 327# CHECK-INST: addi t1, zero, -1 328# CHECK-INST-NEXT: slli t1, t1, 63 329# CHECK-ALIAS: li t1, -1 330# CHECK-ALIAS-NEXT: slli t1, t1, 63 331la t1, -0x8000000000000000 332lla t1, -0x8000000000000000 333# CHECK-EXPAND: lui t2, 9321 334# CHECK-EXPAND-NEXT: addiw t2, t2, -1329 335# CHECK-EXPAND-NEXT: slli t2, t2, 35 336la t2, 0x1234567800000000 337lla t2, 0x1234567800000000 338# CHECK-INST: addi t3, zero, 7 339# CHECK-INST-NEXT: slli t3, t3, 36 340# CHECK-INST-NEXT: addi t3, t3, 11 341# CHECK-INST-NEXT: slli t3, t3, 24 342# CHECK-INST-NEXT: addi t3, t3, 15 343# CHECK-ALIAS: li t3, 7 344# CHECK-ALIAS-NEXT: slli t3, t3, 36 345# CHECK-ALIAS-NEXT: addi t3, t3, 11 346# CHECK-ALIAS-NEXT: slli t3, t3, 24 347# CHECK-ALIAS-NEXT: addi t3, t3, 15 348la t3, 0x700000000B00000F 349lla t3, 0x700000000B00000F 350# CHECK-EXPAND: lui t4, 583 351# CHECK-EXPAND-NEXT: addiw t4, t4, -1875 352# CHECK-EXPAND-NEXT: slli t4, t4, 14 353# CHECK-EXPAND-NEXT: addi t4, t4, -947 354# CHECK-EXPAND-NEXT: slli t4, t4, 12 355# CHECK-EXPAND-NEXT: addi t4, t4, 1511 356# CHECK-EXPAND-NEXT: slli t4, t4, 13 357# CHECK-EXPAND-NEXT: addi t4, t4, -272 358la t4, 0x123456789abcdef0 359lla t4, 0x123456789abcdef0 360# CHECK-INST: addi t5, zero, -1 361# CHECK-ALIAS: li t5, -1 362la t5, 0xFFFFFFFFFFFFFFFF 363lla t5, 0xFFFFFFFFFFFFFFFF 364# CHECK-EXPAND: lui t6, 262145 365# CHECK-EXPAND-NEXT: slli t6, t6, 1 366la t6, 0x80002000 367lla t6, 0x80002000 368# CHECK-EXPAND: lui t0, 262145 369# CHECK-EXPAND-NEXT: slli t0, t0, 2 370la x5, 0x100004000 371lla x5, 0x100004000 372# CHECK-EXPAND: lui t1, 4097 373# CHECK-EXPAND-NEXT: slli t1, t1, 20 374la x6, 0x100100000000 375lla x6, 0x100100000000 376# CHECK-EXPAND: lui t2, 983056 377# CHECK-EXPAND-NEXT: srli t2, t2, 16 378la x7, 0xFFFFFFFFF001 379lla x7, 0xFFFFFFFFF001 380# CHECK-EXPAND: lui s0, 1044481 381# CHECK-EXPAND-NEXT: slli s0, s0, 12 382# CHECK-EXPAND-NEXT: srli s0, s0, 24 383la x8, 0xFFFFFFF001 384lla x8, 0xFFFFFFF001 385# CHECK-EXPAND: lui s1, 4097 386# CHECK-EXPAND-NEXT: slli s1, s1, 20 387# CHECK-EXPAND-NEXT: addi s1, s1, -3 388la x9, 0x1000FFFFFFFD 389lla x9, 0x1000FFFFFFFD 390# CHECK-INST: lui a0, 983040 391# CHECK-INST-NEXT: srli a0, a0, 3 392# CHECK-INST-NEXT: xori a0, a0, -1 393# CHECK-ALIAS: lui a0, 983040 394# CHECK-ALIAS-NEXT: srli a0, a0, 3 395# CHECK-ALIAS-NEXT: not a0, a0 396la x10, 0xE000000001FFFFFF 397lla x10, 0xE000000001FFFFFF 398# CHECK-INST: addi a1, zero, -2047 399# CHECK-INST-NEXT: slli a1, a1, 39 400# CHECK-INST-NEXT: addi a1, a1, -2048 401# CHECK-INST-NEXT: addi a1, a1, -1 402# CHECK-ALIAS: li a1, -2047 403# CHECK-ALIAS-NEXT: slli a1, a1, 39 404# CHECK-ALIAS-NEXT: addi a1, a1, -2048 405# CHECK-ALIAS-NEXT: addi a1, a1, -1 406la x11, 0xFFFC007FFFFFF7FF 407lla x11, 0xFFFC007FFFFFF7FF 408 409# CHECK-INST: lui a2, 349525 410# CHECK-INST-NEXT: addiw a2, a2, 1365 411# CHECK-INST-NEXT: slli a2, a2, 1 412# CHECK-ALIAS: lui a2, 349525 413# CHECK-ALIAS-NEXT: addiw a2, a2, 1365 414# CHECK-ALIAS-NEXT: slli a2, a2, 1 415la x12, 0xaaaaaaaa 416lla x12, 0xaaaaaaaa 417 418# CHECK-INST: lui a3, 699051 419# CHECK-INST-NEXT: addiw a3, a3, -1365 420# CHECK-INST-NEXT: slli a3, a3, 1 421# CHECK-ALIAS: lui a3, 699051 422# CHECK-ALIAS-NEXT: addiw a3, a3, -1365 423# CHECK-ALIAS-NEXT: slli a3, a3, 1 424la x13, 0xffffffff55555556 425lla x13, 0xffffffff55555556 426 427# CHECK-S-OBJ-NOALIAS: lui t0, 524288 428# CHECK-S-OBJ-NOALIAS-NEXT: addi t0, t0, -1365 429# CHECK-S-OBJ: lui t0, 524288 430# CHECK-S-OBJ-NEXT: addi t0, t0, -1365 431la x5, -2147485013 432lla x5, -2147485013 433 434.equ CONSTANT, 0x123456 435# CHECK-EXPAND: lui a0, 291 436# CHECK-EXPAND: addiw a0, a0, 1110 437la a0, CONSTANT 438lla a0, CONSTANT 439 440.equ CONSTANT, 0x654321 441# CHECK-EXPAND: lui a0, 1620 442# CHECK-EXPAND: addiw a0, a0, 801 443la a0, CONSTANT 444lla a0, CONSTANT 445 446# CHECK-INST: subw t6, zero, ra 447# CHECK-ALIAS: negw t6, ra 448negw x31, x1 449# CHECK-INST: addiw t6, ra, 0 450# CHECK-ALIAS: sext.w t6, ra 451sext.w x31, x1 452 453# The following aliases are accepted as input but the canonical form 454# of the instruction will always be printed. 455# CHECK-INST: addiw a2, a3, 4 456# CHECK-ALIAS: addiw a2, a3, 4 457addw a2,a3,4 458 459# CHECK-INST: slliw a2, a3, 4 460# CHECK-ALIAS: slliw a2, a3, 4 461sllw a2,a3,4 462 463# CHECK-INST: srliw a2, a3, 4 464# CHECK-ALIAS: srliw a2, a3, 4 465srlw a2,a3,4 466 467# CHECK-INST: sraiw a2, a3, 4 468# CHECK-ALIAS: sraiw a2, a3, 4 469sraw a2,a3,4 470 471# CHECK-EXPAND: lwu a0, 0(a1) 472lwu x10, (x11) 473# CHECK-EXPAND: ld a0, 0(a1) 474ld x10, (x11) 475# CHECK-EXPAND: sd a0, 0(a1) 476sd x10, (x11) 477 478# CHECK-EXPAND: slli a0, a1, 56 479# CHECK-EXPAND: srai a0, a0, 56 480sext.b x10, x11 481 482# CHECK-EXPAND: slli a0, a1, 48 483# CHECK-EXPAND: srai a0, a0, 48 484sext.h x10, x11 485 486# CHECK-INST: andi a0, a1, 255 487# CHECK-ALIAS: andi a0, a1, 255 488zext.b x10, x11 489 490# CHECK-EXPAND: slli a0, a1, 48 491# CHECK-EXPAND: srli a0, a0, 48 492zext.h x10, x11 493 494# CHECK-EXPAND: slli a0, a1, 32 495# CHECK-EXPAND: srli a0, a0, 32 496zext.w x10, x11 497