1# RUN: llvm-mc %s -triple=mips64el-unknown-linux -show-encoding -mcpu=mips64r2 | FileCheck %s 2 3# Check that signed negative 32-bit immediates are loaded correctly: 4 li $10, ~(0x101010) 5# CHECK: lui $10, 65519 # encoding: [0xef,0xff,0x0a,0x3c] 6# CHECK: ori $10, $10, 61423 # encoding: [0xef,0xef,0x4a,0x35] 7# CHECK-NOT: dsll 8 9# Test bne with an immediate as the 2nd operand. 10 bne $2, 0x100010001, 1332 11# CHECK: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24] 12# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 13# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 14# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 15# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 16# CHECK: bne $2, $1, 1332 # encoding: [0x4d,0x01,0x41,0x14] 17# CHECK: nop # encoding: [0x00,0x00,0x00,0x00] 18 19 bne $2, 0x1000100010001, 1332 20# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c] 21# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 22# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 23# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 24# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 25# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 26# CHECK: bne $2, $1, 1332 # encoding: [0x4d,0x01,0x41,0x14] 27# CHECK: nop # encoding: [0x00,0x00,0x00,0x00] 28 29 bne $2, -0x100010001, 1332 30# CHECK: addiu $1, $zero, -2 # encoding: [0xfe,0xff,0x01,0x24] 31# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 32# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 33# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 34# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 35# CHECK: bne $2, $1, 1332 # encoding: [0x4d,0x01,0x41,0x14] 36# CHECK: nop # encoding: [0x00,0x00,0x00,0x00] 37 38 bne $2, -0x1000100010001, 1332 39# CHECK: lui $1, 65534 # encoding: [0xfe,0xff,0x01,0x3c] 40# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 41# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 42# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 43# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 44# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 45# CHECK: bne $2, $1, 1332 # encoding: [0x4d,0x01,0x41,0x14] 46# CHECK: nop # encoding: [0x00,0x00,0x00,0x00] 47 48# Test beq with an immediate as the 2nd operand. 49 beq $2, 0x100010001, 1332 50# CHECK: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24] 51# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 52# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 53# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 54# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 55# CHECK: beq $2, $1, 1332 # encoding: [0x4d,0x01,0x41,0x10] 56# CHECK: nop # encoding: [0x00,0x00,0x00,0x00] 57 58 beq $2, 0x1000100010001, 1332 59# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c] 60# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 61# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 62# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 63# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 64# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 65# CHECK: beq $2, $1, 1332 # encoding: [0x4d,0x01,0x41,0x10] 66# CHECK: nop # encoding: [0x00,0x00,0x00,0x00] 67 68 beq $2, -0x100010001, 1332 69# CHECK: addiu $1, $zero, -2 # encoding: [0xfe,0xff,0x01,0x24] 70# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 71# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 72# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 73# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 74# CHECK: beq $2, $1, 1332 # encoding: [0x4d,0x01,0x41,0x10] 75# CHECK: nop # encoding: [0x00,0x00,0x00,0x00] 76 77 beq $2, -0x1000100010001, 1332 78# CHECK: lui $1, 65534 # encoding: [0xfe,0xff,0x01,0x3c] 79# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 80# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 81# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 82# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 83# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 84# CHECK: beq $2, $1, 1332 # encoding: [0x4d,0x01,0x41,0x10] 85# CHECK: nop # encoding: [0x00,0x00,0x00,0x00] 86 87# Test one with a symbol in the third operand. 88sym: 89 bne $2, 0x100010001, sym 90# CHECK: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24] 91# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 92# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 93# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 94# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 95# CHECK: bne $2, $1, sym # encoding: [A,A,0x41,0x14] 96# CHECK: nop # encoding: [0x00,0x00,0x00,0x00] 97 98# Test ulhu with 64-bit immediate addresses. 99 ulhu $8, 0x100010001 100# CHECK: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24] 101# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 102# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 103# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 104# CHECK: lbu $8, 1($1) # encoding: [0x01,0x00,0x28,0x90] 105# CHECK: lbu $1, 0($1) # encoding: [0x00,0x00,0x21,0x90] 106# CHECK: sll $8, $8, 8 # encoding: [0x00,0x42,0x08,0x00] 107# CHECK: or $8, $8, $1 # encoding: [0x25,0x40,0x01,0x01] 108 109 ulhu $8, 0x1000100010001 110# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c] 111# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 112# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 113# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 114# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 115# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 116# CHECK: lbu $8, 1($1) # encoding: [0x01,0x00,0x28,0x90] 117# CHECK: lbu $1, 0($1) # encoding: [0x00,0x00,0x21,0x90] 118# CHECK: sll $8, $8, 8 # encoding: [0x00,0x42,0x08,0x00] 119# CHECK: or $8, $8, $1 # encoding: [0x25,0x40,0x01,0x01] 120 121 ulhu $8, -0x100010001 122# CHECK: addiu $1, $zero, -2 # encoding: [0xfe,0xff,0x01,0x24] 123# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 124# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 125# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 126# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 127# CHECK: lbu $8, 1($1) # encoding: [0x01,0x00,0x28,0x90] 128# CHECK: lbu $1, 0($1) # encoding: [0x00,0x00,0x21,0x90] 129# CHECK: sll $8, $8, 8 # encoding: [0x00,0x42,0x08,0x00] 130# CHECK: or $8, $8, $1 # encoding: [0x25,0x40,0x01,0x01] 131 132 ulhu $8, -0x1000100010001 133# CHECK: lui $1, 65534 # encoding: [0xfe,0xff,0x01,0x3c] 134# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 135# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 136# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 137# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 138# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 139# CHECK: lbu $8, 1($1) # encoding: [0x01,0x00,0x28,0x90] 140# CHECK: lbu $1, 0($1) # encoding: [0x00,0x00,0x21,0x90] 141# CHECK: sll $8, $8, 8 # encoding: [0x00,0x42,0x08,0x00] 142# CHECK: or $8, $8, $1 # encoding: [0x25,0x40,0x01,0x01] 143 144# Test ulhu with source register and 64-bit immediate offset. 145 ulhu $8, 0x100010001($9) 146# CHECK: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24] 147# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 148# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 149# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 150# CHECK: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00] 151# CHECK: lbu $8, 1($1) # encoding: [0x01,0x00,0x28,0x90] 152# CHECK: lbu $1, 0($1) # encoding: [0x00,0x00,0x21,0x90] 153# CHECK: sll $8, $8, 8 # encoding: [0x00,0x42,0x08,0x00] 154# CHECK: or $8, $8, $1 # encoding: [0x25,0x40,0x01,0x01] 155 156 ulhu $8, 0x1000100010001($9) 157# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c] 158# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 159# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 160# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 161# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 162# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 163# CHECK: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00] 164# CHECK: lbu $8, 1($1) # encoding: [0x01,0x00,0x28,0x90] 165# CHECK: lbu $1, 0($1) # encoding: [0x00,0x00,0x21,0x90] 166# CHECK: sll $8, $8, 8 # encoding: [0x00,0x42,0x08,0x00] 167# CHECK: or $8, $8, $1 # encoding: [0x25,0x40,0x01,0x01] 168 169 ulhu $8, -0x100010001($9) 170# CHECK: addiu $1, $zero, -2 # encoding: [0xfe,0xff,0x01,0x24] 171# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 172# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 173# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 174# CHECK: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00] 175# CHECK: lbu $8, 1($1) # encoding: [0x01,0x00,0x28,0x90] 176# CHECK: lbu $1, 0($1) # encoding: [0x00,0x00,0x21,0x90] 177# CHECK: sll $8, $8, 8 # encoding: [0x00,0x42,0x08,0x00] 178# CHECK: or $8, $8, $1 # encoding: [0x25,0x40,0x01,0x01] 179 180 ulhu $8, -0x1000100010001($9) 181# CHECK: lui $1, 65534 # encoding: [0xfe,0xff,0x01,0x3c] 182# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 183# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 184# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 185# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 186# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 187# CHECK: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00] 188# CHECK: lbu $8, 1($1) # encoding: [0x01,0x00,0x28,0x90] 189# CHECK: lbu $1, 0($1) # encoding: [0x00,0x00,0x21,0x90] 190# CHECK: sll $8, $8, 8 # encoding: [0x00,0x42,0x08,0x00] 191# CHECK: or $8, $8, $1 # encoding: [0x25,0x40,0x01,0x01] 192 193# Test ulw with 64-bit immediate addresses. 194 ulw $8, 0x100010001 195# CHECK: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24] 196# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 197# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 198# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 199# CHECK: lwl $8, 3($1) # encoding: [0x03,0x00,0x28,0x88] 200# CHECK: lwr $8, 0($1) # encoding: [0x00,0x00,0x28,0x98] 201 202 ulw $8, 0x1000100010001 203# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c] 204# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 205# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 206# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 207# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 208# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 209# CHECK: lwl $8, 3($1) # encoding: [0x03,0x00,0x28,0x88] 210# CHECK: lwr $8, 0($1) # encoding: [0x00,0x00,0x28,0x98] 211 212 ulw $8, -0x100010001 213# CHECK: addiu $1, $zero, -2 # encoding: [0xfe,0xff,0x01,0x24] 214# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 215# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 216# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 217# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 218# CHECK: lwl $8, 3($1) # encoding: [0x03,0x00,0x28,0x88] 219# CHECK: lwr $8, 0($1) # encoding: [0x00,0x00,0x28,0x98] 220 221 ulw $8, -0x1000100010001 222# CHECK: lui $1, 65534 # encoding: [0xfe,0xff,0x01,0x3c] 223# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 224# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 225# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 226# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 227# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 228# CHECK: lwl $8, 3($1) # encoding: [0x03,0x00,0x28,0x88] 229# CHECK: lwr $8, 0($1) # encoding: [0x00,0x00,0x28,0x98] 230 231# Test ulw with source register and 64-bit immediate offset. 232 ulw $8, 0x100010001($9) 233# CHECK: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24] 234# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 235# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 236# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 237# CHECK: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00] 238# CHECK: lwl $8, 3($1) # encoding: [0x03,0x00,0x28,0x88] 239# CHECK: lwr $8, 0($1) # encoding: [0x00,0x00,0x28,0x98] 240 241 ulw $8, 0x1000100010001($9) 242# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c] 243# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 244# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 245# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 246# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 247# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 248# CHECK: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00] 249# CHECK: lwl $8, 3($1) # encoding: [0x03,0x00,0x28,0x88] 250# CHECK: lwr $8, 0($1) # encoding: [0x00,0x00,0x28,0x98] 251 252 ulw $8, -0x100010001($9) 253# CHECK: addiu $1, $zero, -2 # encoding: [0xfe,0xff,0x01,0x24] 254# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 255# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 256# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 257# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 258# CHECK: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00] 259# CHECK: lwl $8, 3($1) # encoding: [0x03,0x00,0x28,0x88] 260# CHECK: lwr $8, 0($1) # encoding: [0x00,0x00,0x28,0x98] 261 262 ulw $8, -0x1000100010001($9) 263# CHECK: lui $1, 65534 # encoding: [0xfe,0xff,0x01,0x3c] 264# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 265# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 266# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 267# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 268# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 269# CHECK: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00] 270# CHECK: lwl $8, 3($1) # encoding: [0x03,0x00,0x28,0x88] 271# CHECK: lwr $8, 0($1) # encoding: [0x00,0x00,0x28,0x98] 272