1# RUN: llvm-mc %s -triple=mips64el-unknown-linux -mcpu=mips64r2 -mattr=-xgot \ 2# RUN: -show-encoding | FileCheck --check-prefixes=CHECK,GOT %s 3# RUN: llvm-mc %s -triple=mips64el-unknown-linux -mcpu=mips64r2 -mattr=+xgot \ 4# RUN: -show-encoding | FileCheck --check-prefixes=CHECK,XGOT %s 5 6 7# 8# The GNU assembler implements 'dli' and 'dla' variants on 'li' and 'la' 9# supporting double-word lengths. Test that not only are they present, bu 10# that they also seem to handle 64-bit values. 11# 12# XXXRW: Does using powers of ten make me a bad person? 13# 14# CHECK-DLA: lui $12, %highest(function) # encoding: [A,A,0x0c,0x3c] 15# CHECK-DLA: fixup A - offset: 0, value: function@HIGHEST, kind: fixup_Mips_HIGHEST 16# CHECK-DLA: lui $1, %hi(function) # encoding: [A,A,0x01,0x3c] 17# CHECK-DLA: fixup A - offset: 0, value: function@ABS_HI, kind: fixup_Mips_HI16 18# CHECK-DLA: daddiu $12, $12, %higher(function) # encoding: [A,A,0x8c,0x65] 19# CHECK-DLA: fixup A - offset: 0, value: function@HIGHER, kind: fixup_Mips_HIGHER 20# CHECK-DLA: daddiu $1, $1, %lo(function) # encoding: [A,A,0x21,0x64] 21# CHECK-DLA: fixup A - offset: 0, value: function@ABS_LO, kind: fixup_Mips_LO16 22# CHECK-DLA: dsll32 $12, $12, 0 # encoding: [0x3c,0x60,0x0c,0x00] 23# CHECK-DLA: daddu $12, $12, $1 # encoding: [0x2d,0x60,0x81,0x01] 24# CHECK-DLA: lui $12, %highest(symbol) # encoding: [A,A,0x0c,0x3c] 25# CHECK-DLA: fixup A - offset: 0, value: symbol@HIGHEST, kind: fixup_Mips_HIGHEST 26# CHECK-DLA: daddiu $12, $12, %higher(symbol) # encoding: [A,A,0x8c,0x65] 27# CHECK-DLA: fixup A - offset: 0, value: symbol@HIGHER, kind: fixup_Mips_HIGHER 28# CHECK-DLA: dsll $12, $12, 16 # encoding: [0x38,0x64,0x0c,0x00] 29# CHECK-DLA: daddiu $12, $12, %hi(symbol) # encoding: [A,A,0x8c,0x65] 30# CHECK-DLA: fixup A - offset: 0, value: symbol@ABS_HI, kind: fixup_Mips_HI16 31# CHECK-DLA: dsll $12, $12, 16 # encoding: [0x38,0x64,0x0c,0x00] 32# CHECK-DLA: daddiu $12, $12, %lo(symbol) # encoding: [A,A,0x8c,0x65] 33# CHECK-DLA: fixup A - offset: 0, value: symbol@ABS_LO, kind: fixup_Mips_LO16 34 35 36 37 dla $t0, symbol 38.set noat 39 dla $t0, symbol 40.set at 41 42 43# Test the 'dli' and 'dla' 64-bit variants of 'li' and 'la'. 44 45# Immediate is <= 32 bits. 46 dli $5, 123 47# CHECK: addiu $5, $zero, 123 # encoding: [0x7b,0x00,0x05,0x24] 48 49 dli $6, -2345 50# CHECK: addiu $6, $zero, -2345 # encoding: [0xd7,0xf6,0x06,0x24] 51 52 dli $7, 65538 53# CHECK: lui $7, 1 # encoding: [0x01,0x00,0x07,0x3c] 54# CHECK: ori $7, $7, 2 # encoding: [0x02,0x00,0xe7,0x34] 55 56 dli $8, ~7 57# CHECK: addiu $8, $zero, -8 # encoding: [0xf8,0xff,0x08,0x24] 58 59 dli $9, 0x10000 60# CHECK: lui $9, 1 # encoding: [0x01,0x00,0x09,0x3c] 61# CHECK-NOT: ori $9, $9, 0 # encoding: [0x00,0x00,0x29,0x35] 62 63 64# Positive immediate which is > 48 bits. 65 dli $8, 0x1000000000000 66# CHECK: ori $8, $zero, 32768 # encoding: [0x00,0x80,0x08,0x34] 67# CHECK: dsll $8, $8, 33 # encoding: [0x7c,0x40,0x08,0x00] 68 69# Check that signed negative 32-bit immediates are loaded correctly: 70 li $10, ~(0x101010) 71# CHECK: lui $10, 65519 # encoding: [0xef,0xff,0x0a,0x3c] 72# CHECK: ori $10, $10, 61423 # encoding: [0xef,0xef,0x4a,0x35] 73# CHECK-NOT: dsll 74 75# Test bne with an immediate as the 2nd operand. 76 bne $2, 0x100010001, 1332 77# CHECK: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24] 78# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 79# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 80# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 81# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 82# CHECK: bne $2, $1, 1332 # encoding: [0x4d,0x01,0x41,0x14] 83# CHECK: nop # encoding: [0x00,0x00,0x00,0x00] 84 85 bne $2, 0x1000100010001, 1332 86# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c] 87# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 88# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 89# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 90# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 91# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 92# CHECK: bne $2, $1, 1332 # encoding: [0x4d,0x01,0x41,0x14] 93# CHECK: nop # encoding: [0x00,0x00,0x00,0x00] 94 95 bne $2, -0x100010001, 1332 96# CHECK: addiu $1, $zero, -2 # encoding: [0xfe,0xff,0x01,0x24] 97# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 98# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 99# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 100# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 101# CHECK: bne $2, $1, 1332 # encoding: [0x4d,0x01,0x41,0x14] 102# CHECK: nop # encoding: [0x00,0x00,0x00,0x00] 103 104 bne $2, -0x1000100010001, 1332 105# CHECK: lui $1, 65534 # encoding: [0xfe,0xff,0x01,0x3c] 106# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 107# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 108# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 109# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 110# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 111# CHECK: bne $2, $1, 1332 # encoding: [0x4d,0x01,0x41,0x14] 112# CHECK: nop # encoding: [0x00,0x00,0x00,0x00] 113 114# Test beq with an immediate as the 2nd operand. 115 beq $2, 0x100010001, 1332 116# CHECK: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24] 117# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 118# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 119# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 120# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 121# CHECK: beq $2, $1, 1332 # encoding: [0x4d,0x01,0x41,0x10] 122# CHECK: nop # encoding: [0x00,0x00,0x00,0x00] 123 124 beq $2, 0x1000100010001, 1332 125# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c] 126# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 127# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 128# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 129# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 130# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 131# CHECK: beq $2, $1, 1332 # encoding: [0x4d,0x01,0x41,0x10] 132# CHECK: nop # encoding: [0x00,0x00,0x00,0x00] 133 134 beq $2, -0x100010001, 1332 135# CHECK: addiu $1, $zero, -2 # encoding: [0xfe,0xff,0x01,0x24] 136# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 137# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 138# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 139# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 140# CHECK: beq $2, $1, 1332 # encoding: [0x4d,0x01,0x41,0x10] 141# CHECK: nop # encoding: [0x00,0x00,0x00,0x00] 142 143 beq $2, -0x1000100010001, 1332 144# CHECK: lui $1, 65534 # encoding: [0xfe,0xff,0x01,0x3c] 145# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 146# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 147# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 148# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 149# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 150# CHECK: beq $2, $1, 1332 # encoding: [0x4d,0x01,0x41,0x10] 151# CHECK: nop # encoding: [0x00,0x00,0x00,0x00] 152 153# Test one with a symbol in the third operand. 154sym: 155 bne $2, 0x100010001, sym 156# CHECK: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24] 157# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 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: bne $2, $1, sym # encoding: [A,A,0x41,0x14] 162# CHECK: nop # encoding: [0x00,0x00,0x00,0x00] 163 164# Test ulhu with 64-bit immediate addresses. 165 ulhu $8, 0x100010001 166# CHECK: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24] 167# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 168# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 169# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 170# CHECK: lbu $8, 1($1) # encoding: [0x01,0x00,0x28,0x90] 171# CHECK: lbu $1, 0($1) # encoding: [0x00,0x00,0x21,0x90] 172# CHECK: sll $8, $8, 8 # encoding: [0x00,0x42,0x08,0x00] 173# CHECK: or $8, $8, $1 # encoding: [0x25,0x40,0x01,0x01] 174 175 ulhu $8, 0x1000100010001 176# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c] 177# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 178# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 179# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 180# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 181# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 182# CHECK: lbu $8, 1($1) # encoding: [0x01,0x00,0x28,0x90] 183# CHECK: lbu $1, 0($1) # encoding: [0x00,0x00,0x21,0x90] 184# CHECK: sll $8, $8, 8 # encoding: [0x00,0x42,0x08,0x00] 185# CHECK: or $8, $8, $1 # encoding: [0x25,0x40,0x01,0x01] 186 187 ulhu $8, -0x100010001 188# CHECK: addiu $1, $zero, -2 # encoding: [0xfe,0xff,0x01,0x24] 189# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 190# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 191# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 192# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 193# CHECK: lbu $8, 1($1) # encoding: [0x01,0x00,0x28,0x90] 194# CHECK: lbu $1, 0($1) # encoding: [0x00,0x00,0x21,0x90] 195# CHECK: sll $8, $8, 8 # encoding: [0x00,0x42,0x08,0x00] 196# CHECK: or $8, $8, $1 # encoding: [0x25,0x40,0x01,0x01] 197 198 ulhu $8, -0x1000100010001 199# CHECK: lui $1, 65534 # encoding: [0xfe,0xff,0x01,0x3c] 200# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 201# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 202# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 203# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 204# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 205# CHECK: lbu $8, 1($1) # encoding: [0x01,0x00,0x28,0x90] 206# CHECK: lbu $1, 0($1) # encoding: [0x00,0x00,0x21,0x90] 207# CHECK: sll $8, $8, 8 # encoding: [0x00,0x42,0x08,0x00] 208# CHECK: or $8, $8, $1 # encoding: [0x25,0x40,0x01,0x01] 209 210# Test ulhu with source register and 64-bit immediate offset. 211 ulhu $8, 0x100010001($9) 212# CHECK: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24] 213# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 214# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 215# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 216# CHECK: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00] 217# CHECK: lbu $8, 1($1) # encoding: [0x01,0x00,0x28,0x90] 218# CHECK: lbu $1, 0($1) # encoding: [0x00,0x00,0x21,0x90] 219# CHECK: sll $8, $8, 8 # encoding: [0x00,0x42,0x08,0x00] 220# CHECK: or $8, $8, $1 # encoding: [0x25,0x40,0x01,0x01] 221 222 ulhu $8, 0x1000100010001($9) 223# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c] 224# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 225# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 226# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 227# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 228# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 229# CHECK: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00] 230# CHECK: lbu $8, 1($1) # encoding: [0x01,0x00,0x28,0x90] 231# CHECK: lbu $1, 0($1) # encoding: [0x00,0x00,0x21,0x90] 232# CHECK: sll $8, $8, 8 # encoding: [0x00,0x42,0x08,0x00] 233# CHECK: or $8, $8, $1 # encoding: [0x25,0x40,0x01,0x01] 234 235 ulhu $8, -0x100010001($9) 236# CHECK: addiu $1, $zero, -2 # encoding: [0xfe,0xff,0x01,0x24] 237# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 238# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 239# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 240# CHECK: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00] 241# CHECK: lbu $8, 1($1) # encoding: [0x01,0x00,0x28,0x90] 242# CHECK: lbu $1, 0($1) # encoding: [0x00,0x00,0x21,0x90] 243# CHECK: sll $8, $8, 8 # encoding: [0x00,0x42,0x08,0x00] 244# CHECK: or $8, $8, $1 # encoding: [0x25,0x40,0x01,0x01] 245 246 ulhu $8, -0x1000100010001($9) 247# CHECK: lui $1, 65534 # encoding: [0xfe,0xff,0x01,0x3c] 248# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 249# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 250# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 251# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 252# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 253# CHECK: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00] 254# CHECK: lbu $8, 1($1) # encoding: [0x01,0x00,0x28,0x90] 255# CHECK: lbu $1, 0($1) # encoding: [0x00,0x00,0x21,0x90] 256# CHECK: sll $8, $8, 8 # encoding: [0x00,0x42,0x08,0x00] 257# CHECK: or $8, $8, $1 # encoding: [0x25,0x40,0x01,0x01] 258 259# Test ulw with 64-bit immediate addresses. 260 ulw $8, 0x100010001 261# CHECK: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24] 262# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 263# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 264# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 265# CHECK: lwl $8, 3($1) # encoding: [0x03,0x00,0x28,0x88] 266# CHECK: lwr $8, 0($1) # encoding: [0x00,0x00,0x28,0x98] 267 268 ulw $8, 0x1000100010001 269# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c] 270# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 271# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 272# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 273# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 274# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 275# CHECK: lwl $8, 3($1) # encoding: [0x03,0x00,0x28,0x88] 276# CHECK: lwr $8, 0($1) # encoding: [0x00,0x00,0x28,0x98] 277 278 ulw $8, -0x100010001 279# CHECK: addiu $1, $zero, -2 # encoding: [0xfe,0xff,0x01,0x24] 280# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 281# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 282# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 283# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 284# CHECK: lwl $8, 3($1) # encoding: [0x03,0x00,0x28,0x88] 285# CHECK: lwr $8, 0($1) # encoding: [0x00,0x00,0x28,0x98] 286 287 ulw $8, -0x1000100010001 288# CHECK: lui $1, 65534 # encoding: [0xfe,0xff,0x01,0x3c] 289# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 290# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 291# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 292# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 293# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 294# CHECK: lwl $8, 3($1) # encoding: [0x03,0x00,0x28,0x88] 295# CHECK: lwr $8, 0($1) # encoding: [0x00,0x00,0x28,0x98] 296 297# Test ulw with source register and 64-bit immediate offset. 298 ulw $8, 0x100010001($9) 299# CHECK: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24] 300# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 301# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 302# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 303# CHECK: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00] 304# CHECK: lwl $8, 3($1) # encoding: [0x03,0x00,0x28,0x88] 305# CHECK: lwr $8, 0($1) # encoding: [0x00,0x00,0x28,0x98] 306 307 ulw $8, 0x1000100010001($9) 308# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c] 309# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 310# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 311# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 312# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 313# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34] 314# CHECK: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00] 315# CHECK: lwl $8, 3($1) # encoding: [0x03,0x00,0x28,0x88] 316# CHECK: lwr $8, 0($1) # encoding: [0x00,0x00,0x28,0x98] 317 318 ulw $8, -0x100010001($9) 319# CHECK: addiu $1, $zero, -2 # encoding: [0xfe,0xff,0x01,0x24] 320# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 321# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 322# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 323# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 324# CHECK: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00] 325# CHECK: lwl $8, 3($1) # encoding: [0x03,0x00,0x28,0x88] 326# CHECK: lwr $8, 0($1) # encoding: [0x00,0x00,0x28,0x98] 327 328 ulw $8, -0x1000100010001($9) 329# CHECK: lui $1, 65534 # encoding: [0xfe,0xff,0x01,0x3c] 330# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 331# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 332# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34] 333# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00] 334# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34] 335# CHECK: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00] 336# CHECK: lwl $8, 3($1) # encoding: [0x03,0x00,0x28,0x88] 337# CHECK: lwr $8, 0($1) # encoding: [0x00,0x00,0x28,0x98] 338 339# Test lb/sb/ld/sd/lld with offsets exceeding 16-bits in size. 340 341 ld $4, 0x8000 342# CHECK: lui $4, 1 343# CHECK-NEXT: ld $4, -32768($4) 344 345 ld $4, 0x20008($3) 346# CHECK: lui $4, 2 347# CHECK-NEXT: addu $4, $4, $3 348# CHECK-NEXT: ld $4, 8($4) 349 350 ld $4,0x100010004 351# CHECK: addiu $4, $zero, 1 352# CHECK-NEXT: dsll $4, $4, 16 353# CHECK-NEXT: ori $4, $4, 1 354# CHECK-NEXT: dsll $4, $4, 16 355# CHECK-NEXT: ld $4, 4($4) 356 357 ld $4,0x1800180018004 358# CHECK: lui $4, 1 359# CHECK-NEXT: ori $4, $4, 32769 360# CHECK-NEXT: dsll $4, $4, 16 361# CHECK-NEXT: ori $4, $4, 32770 362# CHECK-NEXT: dsll $4, $4, 16 363# CHECK-NEXT: ld $4, -32764($4) 364 365 ld $4,0x1800180018004($3) 366# CHECK: lui $4, 1 367# CHECK-NEXT: ori $4, $4, 32769 368# CHECK-NEXT: dsll $4, $4, 16 369# CHECK-NEXT: ori $4, $4, 32770 370# CHECK-NEXT: dsll $4, $4, 16 371# CHECK-NEXT: daddu $4, $4, $3 372# CHECK-NEXT: ld $4, -32764($4) 373 374 sd $4, 0x8000 375# CHECK: lui $1, 1 376# CHECK-NEXT: sd $4, -32768($1) 377 378 sd $4, 0x20008($3) 379# CHECK: lui $1, 2 380# CHECK-NEXT: addu $1, $1, $3 381# CHECK-NEXT: sd $4, 8($1) 382 383 sd $4,0x100010004 384# CHECK: addiu $1, $zero, 1 385# CHECK-NEXT: dsll $1, $1, 16 386# CHECK-NEXT: ori $1, $1, 1 387# CHECK-NEXT: dsll $1, $1, 16 388# CHECK-NEXT: sd $4, 4($1) 389 390 sd $4,0x1800180018004 391# CHECK: lui $1, 1 392# CHECK-NEXT: ori $1, $1, 32769 393# CHECK-NEXT: dsll $1, $1, 16 394# CHECK-NEXT: ori $1, $1, 32770 395# CHECK-NEXT: dsll $1, $1, 16 396# CHECK-NEXT: sd $4, -32764($1) 397 398 sd $4,0x1800180018004($3) 399# CHECK: lui $1, 1 400# CHECK-NEXT: ori $1, $1, 32769 401# CHECK-NEXT: dsll $1, $1, 16 402# CHECK-NEXT: ori $1, $1, 32770 403# CHECK-NEXT: dsll $1, $1, 16 404# CHECK-NEXT: daddu $1, $1, $3 405# CHECK-NEXT: sd $4, -32764($1) 406 407 lld $4, 0x8000 408# CHECK: lui $4, 1 409# CHECK-NEXT: lld $4, -32768($4) 410 411 lld $4, 0x20008($3) 412# CHECK: lui $4, 2 413# CHECK-NEXT: addu $4, $4, $3 414# CHECK-NEXT: lld $4, 8($4) 415 416 lld $4,0x100010004 417# CHECK: addiu $4, $zero, 1 418# CHECK-NEXT: dsll $4, $4, 16 419# CHECK-NEXT: ori $4, $4, 1 420# CHECK-NEXT: dsll $4, $4, 16 421# CHECK-NEXT: lld $4, 4($4) 422 423 lld $4,0x1800180018004 424# CHECK: lui $4, 1 425# CHECK-NEXT: ori $4, $4, 32769 426# CHECK-NEXT: dsll $4, $4, 16 427# CHECK-NEXT: ori $4, $4, 32770 428# CHECK-NEXT: dsll $4, $4, 16 429# CHECK-NEXT: lld $4, -32764($4) 430 431 lld $4,0x1800180018004($3) 432# CHECK: lui $4, 1 433# CHECK-NEXT: ori $4, $4, 32769 434# CHECK-NEXT: dsll $4, $4, 16 435# CHECK-NEXT: ori $4, $4, 32770 436# CHECK-NEXT: dsll $4, $4, 16 437# CHECK-NEXT: daddu $4, $4, $3 438# CHECK-NEXT: lld $4, -32764($4) 439 440 lb $4,0x100010004 441# CHECK: addiu $4, $zero, 1 442# CHECK-NEXT: dsll $4, $4, 16 443# CHECK-NEXT: ori $4, $4, 1 444# CHECK-NEXT: dsll $4, $4, 16 445# CHECK-NEXT: lb $4, 4($4) 446 447 lb $4,0x1800180018004 448# CHECK: lui $4, 1 449# CHECK-NEXT: ori $4, $4, 32769 450# CHECK-NEXT: dsll $4, $4, 16 451# CHECK-NEXT: ori $4, $4, 32770 452# CHECK-NEXT: dsll $4, $4, 16 453# CHECK-NEXT: lb $4, -32764($4) 454 455 lb $4,0x1800180018004($3) 456# CHECK: lui $4, 1 457# CHECK-NEXT: ori $4, $4, 32769 458# CHECK-NEXT: dsll $4, $4, 16 459# CHECK-NEXT: ori $4, $4, 32770 460# CHECK-NEXT: dsll $4, $4, 16 461# CHECK-NEXT: daddu $4, $4, $3 462# CHECK-NEXT: lb $4, -32764($4) 463 464 sb $4,0x100010004 465# CHECK: addiu $1, $zero, 1 466# CHECK-NEXT: dsll $1, $1, 16 467# CHECK-NEXT: ori $1, $1, 1 468# CHECK-NEXT: dsll $1, $1, 16 469# CHECK-NEXT: sb $4, 4($1) 470 471 sb $4,0x1800180018004 472# CHECK: lui $1, 1 473# CHECK-NEXT: ori $1, $1, 32769 474# CHECK-NEXT: dsll $1, $1, 16 475# CHECK-NEXT: ori $1, $1, 32770 476# CHECK-NEXT: dsll $1, $1, 16 477# CHECK-NEXT: sb $4, -32764($1) 478 479 sb $4,0x1800180018004($3) 480# CHECK: lui $1, 1 481# CHECK-NEXT: ori $1, $1, 32769 482# CHECK-NEXT: dsll $1, $1, 16 483# CHECK-NEXT: ori $1, $1, 32770 484# CHECK-NEXT: dsll $1, $1, 16 485# CHECK-NEXT: daddu $1, $1, $3 486# CHECK-NEXT: sb $4, -32764($1) 487 488 lh $4,0x100010004 489# CHECK: addiu $4, $zero, 1 490# CHECK-NEXT: dsll $4, $4, 16 491# CHECK-NEXT: ori $4, $4, 1 492# CHECK-NEXT: dsll $4, $4, 16 493# CHECK-NEXT: lh $4, 4($4) 494 495 lh $4,0x1800180018004 496# CHECK: lui $4, 1 497# CHECK-NEXT: ori $4, $4, 32769 498# CHECK-NEXT: dsll $4, $4, 16 499# CHECK-NEXT: ori $4, $4, 32770 500# CHECK-NEXT: dsll $4, $4, 16 501# CHECK-NEXT: lh $4, -32764($4) 502 503 lh $4,0x1800180018004($3) 504# CHECK: lui $4, 1 505# CHECK-NEXT: ori $4, $4, 32769 506# CHECK-NEXT: dsll $4, $4, 16 507# CHECK-NEXT: ori $4, $4, 32770 508# CHECK-NEXT: dsll $4, $4, 16 509# CHECK-NEXT: daddu $4, $4, $3 510# CHECK-NEXT: lh $4, -32764($4) 511 512 lhu $4,0x100010004 513# CHECK: addiu $4, $zero, 1 514# CHECK-NEXT: dsll $4, $4, 16 515# CHECK-NEXT: ori $4, $4, 1 516# CHECK-NEXT: dsll $4, $4, 16 517# CHECK-NEXT: lhu $4, 4($4) 518 519 lhu $4,0x1800180018004 520# CHECK: lui $4, 1 521# CHECK-NEXT: ori $4, $4, 32769 522# CHECK-NEXT: dsll $4, $4, 16 523# CHECK-NEXT: ori $4, $4, 32770 524# CHECK-NEXT: dsll $4, $4, 16 525# CHECK-NEXT: lhu $4, -32764($4) 526 527 lhu $4,0x1800180018004($3) 528# CHECK: lui $4, 1 529# CHECK-NEXT: ori $4, $4, 32769 530# CHECK-NEXT: dsll $4, $4, 16 531# CHECK-NEXT: ori $4, $4, 32770 532# CHECK-NEXT: dsll $4, $4, 16 533# CHECK-NEXT: daddu $4, $4, $3 534# CHECK-NEXT: lhu $4, -32764($4) 535 536# LW/SW and LDC1/SDC1 of symbol address, done by MipsAsmParser::expandMemInst(): 537 .option pic2 538 lw $10, symbol($4) 539# GOT: ld $10, %got_disp(symbol)($gp) # encoding: [A,A,0x8a,0xdf] 540# GOT-NEXT: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP 541# GOT-NEXT: daddu $10, $10, $4 # encoding: [0x2d,0x50,0x44,0x01] 542# GOT-NEXT: lw $10, 0($10) # encoding: [0x00,0x00,0x4a,0x8d] 543 544# XGOT: lui $10, %got_hi(symbol) # encoding: [A,A,0x0a,0x3c] 545# XGOT-NEXT: # fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16 546# XGOT-NEXT: daddu $10, $10, $gp # encoding: [0x2d,0x50,0x5c,0x01] 547# XGOT-NEXT: ld $10, %got_lo(symbol)($10) # encoding: [A,A,0x4a,0xdd] 548# XGOT-NEXT: # fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16 549# XGOT-NEXT: daddu $10, $10, $4 # encoding: [0x2d,0x50,0x44,0x01] 550# XGOT-NEXT: lw $10, 0($10) # encoding: [0x00,0x00,0x4a,0x8d] 551 552 sw $10, symbol($9) 553# GOT: ld $1, %got_disp(symbol)($gp) # encoding: [A,A,0x81,0xdf] 554# GOT-NEXT: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP 555# GOT-NEXT: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00] 556# GOT-NEXT: sw $10, 0($1) # encoding: [0x00,0x00,0x2a,0xac] 557 558# XGOT: lui $1, %got_hi(symbol) # encoding: [A,A,0x01,0x3c] 559# XGOT-NEXT: # fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16 560# XGOT-NEXT: daddu $1, $1, $gp # encoding: [0x2d,0x08,0x3c,0x00] 561# XGOT-NEXT: ld $1, %got_lo(symbol)($1) # encoding: [A,A,0x21,0xdc] 562# XGOT-NEXT: # fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16 563# XGOT-NEXT: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00] 564# XGOT-NEXT: sw $10, 0($1) # encoding: [0x00,0x00,0x2a,0xac] 565 566 lw $8, sym+8 567# GOT: ld $8, %got_disp(sym)($gp) # encoding: [A,A,0x88,0xdf] 568# GOT-NEXT: # fixup A - offset: 0, value: %got_disp(sym), kind: fixup_Mips_GOT_DISP 569# GOT-NEXT: lw $8, 8($8) # encoding: [0x08,0x00,0x08,0x8d] 570 571# XGOT: ld $8, %got_disp(sym)($gp) # encoding: [A,A,0x88,0xdf] 572# XGOT-NEXT: # fixup A - offset: 0, value: %got_disp(sym), kind: fixup_Mips_GOT_DISP 573# XGOT-NEXT: lw $8, 8($8) # encoding: [0x08,0x00,0x08,0x8d] 574 575 sw $8, sym+8 576# GOT: ld $1, %got_disp(sym)($gp) # encoding: [A,A,0x81,0xdf] 577# GOT-NEXT: # fixup A - offset: 0, value: %got_disp(sym), kind: fixup_Mips_GOT_DISP 578# GOT-NEXT: sw $8, 8($1) # encoding: [0x08,0x00,0x28,0xac] 579 580# XGOT: ld $1, %got_disp(sym)($gp) # encoding: [A,A,0x81,0xdf] 581# XGOT-NEXT: # fixup A - offset: 0, value: %got_disp(sym), kind: fixup_Mips_GOT_DISP 582# XGOT-NEXT: sw $8, 8($1) # encoding: [0x08,0x00,0x28,0xac] 583 584 lw $10, 655483($4) 585# GOT: lui $10, 10 # encoding: [0x0a,0x00,0x0a,0x3c] 586# GOT-NEXT: daddu $10, $10, $4 # encoding: [0x2d,0x50,0x44,0x01] 587# GOT-NEXT: lw $10, 123($10) # encoding: [0x7b,0x00,0x4a,0x8d] 588 589# XGOT: lui $10, 10 # encoding: [0x0a,0x00,0x0a,0x3c] 590# XGOT-NEXT: daddu $10, $10, $4 # encoding: [0x2d,0x50,0x44,0x01] 591# XGOT-NEXT: lw $10, 123($10) # encoding: [0x7b,0x00,0x4a,0x8d] 592 sw $10, 123456($9) 593# GOT: lui $1, 2 # encoding: [0x02,0x00,0x01,0x3c] 594# GOT-NEXT: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00] 595# GOT-NEXT: sw $10, -7616($1) # encoding: [0x40,0xe2,0x2a,0xac] 596 597# XGOT: lui $1, 2 # encoding: [0x02,0x00,0x01,0x3c] 598# XGOT-NEXT: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00] 599# XGOT-NEXT: sw $10, -7616($1) # encoding: [0x40,0xe2,0x2a,0xac] 600 601 lw $8, symbol+8 602# GOT: ld $8, %got_disp(symbol)($gp) # encoding: [A,A,0x88,0xdf] 603# GOT-NEXT: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP 604# GOT-NEXT: lw $8, 8($8) # encoding: [0x08,0x00,0x08,0x8d] 605 606# XGOT: lui $8, %got_hi(symbol) # encoding: [A,A,0x08,0x3c] 607# XGOT-NEXT: # fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16 608# XGOT-NEXT: daddu $8, $8, $gp # encoding: [0x2d,0x40,0x1c,0x01] 609# XGOT-NEXT: ld $8, %got_lo(symbol)($8) # encoding: [A,A,0x08,0xdd] 610# XGOT-NEXT: # fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16 611# XGOT-NEXT: lw $8, 8($8) # encoding: [0x08,0x00,0x08,0x8d] 612 613 sw $8, symbol+8 614# GOT: ld $1, %got_disp(symbol)($gp) # encoding: [A,A,0x81,0xdf] 615# GOT-NEXT: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP 616# GOT-NEXT: sw $8, 8($1) # encoding: [0x08,0x00,0x28,0xac] 617 618# XGOT: lui $1, %got_hi(symbol) # encoding: [A,A,0x01,0x3c] 619# XGOT-NEXT: # fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16 620# XGOT-NEXT: daddu $1, $1, $gp # encoding: [0x2d,0x08,0x3c,0x00] 621# XGOT-NEXT: ld $1, %got_lo(symbol)($1) # encoding: [A,A,0x21,0xdc] 622# XGOT-NEXT: # fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16 623# XGOT-NEXT: sw $8, 8($1) # encoding: [0x08,0x00,0x28,0xac] 624 625 ldc1 $f0, symbol 626# GOT: ld $1, %got_disp(symbol)($gp) # encoding: [A,A,0x81,0xdf] 627# GOT-NEXT: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP 628# GOT-NEXT: ldc1 $f0, 0($1) # encoding: [0x00,0x00,0x20,0xd4] 629 630# XGOT: lui $1, %got_hi(symbol) # encoding: [A,A,0x01,0x3c] 631# XGOT-NEXT: # fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16 632# XGOT-NEXT: daddu $1, $1, $gp # encoding: [0x2d,0x08,0x3c,0x00] 633# XGOT-NEXT: ld $1, %got_lo(symbol)($1) # encoding: [A,A,0x21,0xdc] 634# XGOT-NEXT: # fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16 635# XGOT-NEXT: ldc1 $f0, 0($1) # encoding: [0x00,0x00,0x20,0xd4] 636 637 sdc1 $f0, symbol 638# GOT: ld $1, %got_disp(symbol)($gp) # encoding: [A,A,0x81,0xdf] 639# GOT-NEXT: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP 640# GOT-NEXT: sdc1 $f0, 0($1) # encoding: [0x00,0x00,0x20,0xf4] 641 642# XGOT: lui $1, %got_hi(symbol) # encoding: [A,A,0x01,0x3c] 643# XGOT-NEXT: # fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16 644# XGOT-NEXT: daddu $1, $1, $gp # encoding: [0x2d,0x08,0x3c,0x00] 645# XGOT-NEXT: ld $1, %got_lo(symbol)($1) # encoding: [A,A,0x21,0xdc] 646# XGOT-NEXT: # fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16 647# XGOT-NEXT: sdc1 $f0, 0($1) # encoding: [0x00,0x00,0x20,0xf4] 648