Skip to content

Commit

Permalink
[mips] [IAS] Add support for the DLA pseudo-instruction and fix probl…
Browse files Browse the repository at this point in the history
…ems with DLI

Summary: It is the same as LA, except that it can also load 64-bit addresses and it only works on 64-bit MIPS architectures.

Reviewers: tomatabacu, seanbruno, vkalintiris

Subscribers: brooks, seanbruno, emaste, llvm-commits

Differential Revision: http://reviews.llvm.org/D9524

llvm-svn: 245208
  • Loading branch information
dsandersllvm committed Aug 17, 2015
1 parent adc4e9c commit a39ef1c
Show file tree
Hide file tree
Showing 9 changed files with 1,534 additions and 431 deletions.
485 changes: 272 additions & 213 deletions llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp
Expand Up @@ -107,6 +107,10 @@ unsigned MipsABIInfo::GetNullPtr() const {
return ArePtrs64bit() ? Mips::ZERO_64 : Mips::ZERO;
}

unsigned MipsABIInfo::GetZeroReg() const {
return AreGprs64bit() ? Mips::ZERO_64 : Mips::ZERO;
}

unsigned MipsABIInfo::GetPtrAdduOp() const {
return ArePtrs64bit() ? Mips::DADDu : Mips::ADDu;
}
Expand Down
2 changes: 2 additions & 0 deletions llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.h
Expand Up @@ -67,10 +67,12 @@ class MipsABIInfo {
unsigned GetFramePtr() const;
unsigned GetBasePtr() const;
unsigned GetNullPtr() const;
unsigned GetZeroReg() const;
unsigned GetPtrAdduOp() const;
unsigned GetPtrAddiuOp() const;
unsigned GetGPRMoveOp() const;
inline bool ArePtrs64bit() const { return IsN64(); }
inline bool AreGprs64bit() const { return IsN32() || IsN64(); }

unsigned GetEhDataReg(unsigned I) const;
};
Expand Down
5 changes: 5 additions & 0 deletions llvm/lib/Target/Mips/Mips64InstrInfo.td
Expand Up @@ -630,3 +630,8 @@ class LoadImmediate64<string instr_asm, Operand Od, RegisterOperand RO> :
MipsAsmPseudoInst<(outs RO:$rt), (ins Od:$imm64),
!strconcat(instr_asm, "\t$rt, $imm64")> ;
def LoadImm64 : LoadImmediate64<"dli", imm64, GPR64Opnd>;

def LoadAddrReg64 : MipsAsmPseudoInst<(outs GPR64Opnd:$rt), (ins mem:$addr),
"dla\t$rt, $addr">;
def LoadAddrImm64 : MipsAsmPseudoInst<(outs GPR64Opnd:$rt), (ins imm64:$imm64),
"dla\t$rt, $imm64">;
684 changes: 684 additions & 0 deletions llvm/test/MC/Mips/macro-dla.s

Large diffs are not rendered by default.

534 changes: 534 additions & 0 deletions llvm/test/MC/Mips/macro-dli.s

Large diffs are not rendered by default.

24 changes: 15 additions & 9 deletions llvm/test/MC/Mips/macro-la-bad.s
@@ -1,17 +1,23 @@
# RUN: not llvm-mc %s -arch=mips -mcpu=mips32r2 2>%t1
# RUN: FileCheck %s < %t1 --check-prefix=32-BIT
# RUN: FileCheck %s < %t1 --check-prefix=O32
# RUN: not llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n32 2>&1 | \
# RUN: FileCheck %s --check-prefix=64-BIT --check-prefix=N32-ONLY
# RUN: FileCheck %s --check-prefix=N32
# RUN: not llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 2>&1 | \
# RUN: FileCheck %s --check-prefix=64-BIT --check-prefix=N64-ONLY
# RUN: FileCheck %s --check-prefix=N64

.text
la $5, 0x100000000
# 32-BIT: :[[@LINE-1]]:3: error: instruction requires a 32-bit immediate
# 64-BIT: :[[@LINE-2]]:3: error: instruction requires a 32-bit immediate
# O32: :[[@LINE-1]]:3: error: instruction requires a 32-bit immediate
# N32: :[[@LINE-2]]:3: error: instruction requires a 32-bit immediate
# N64: :[[@LINE-3]]:3: error: la used to load 64-bit address

la $5, 0x100000000($6)
# 32-BIT: :[[@LINE-1]]:3: error: instruction requires a 32-bit immediate
# 64-BIT: :[[@LINE-2]]:3: error: instruction requires a 32-bit immediate
# O32: :[[@LINE-1]]:3: error: instruction requires a 32-bit immediate
# N32: :[[@LINE-2]]:3: error: instruction requires a 32-bit immediate
# N64: :[[@LINE-3]]:3: error: la used to load 64-bit address

# FIXME: These should be warnings but we lack la -> dla promotion at the
# moment.
la $5, symbol
# N64-ONLY: :[[@LINE-1]]:3: warning: instruction loads the 32-bit address of a 64-bit symbol
# N32-ONLY-NOT: :[[@LINE-2]]:3: warning: instruction loads the 32-bit address of a 64-bit symbol
# N32-NOT: :[[@LINE-1]]:3: error: la used to load 64-bit address
# N64: :[[@LINE-2]]:3: error: la used to load 64-bit address
6 changes: 4 additions & 2 deletions llvm/test/MC/Mips/macro-la.s
Expand Up @@ -2,11 +2,13 @@
# RUN: FileCheck %s
# RUN: llvm-mc %s -triple=mips-unknown-linux -show-encoding -mcpu=mips32r6 | \
# RUN: FileCheck %s
# RUN: llvm-mc %s -triple=mips64-unknown-linux -show-encoding -mcpu=mips64r2 | \
# RUN: llvm-mc %s -triple=mips64-unknown-linux -show-encoding -mcpu=mips64r2 -target-abi=n32 | \
# RUN: FileCheck %s
# RUN: llvm-mc %s -triple=mips64-unknown-linux -show-encoding -mcpu=mips64r6 | \
# RUN: llvm-mc %s -triple=mips64-unknown-linux -show-encoding -mcpu=mips64r6 -target-abi=n32 | \
# RUN: FileCheck %s

# N64 should be acceptable too but we cannot convert la to dla yet.

la $5, 0x00000001 # CHECK: addiu $5, $zero, 1 # encoding: [0x24,0x05,0x00,0x01]
la $5, 0x00000002 # CHECK: addiu $5, $zero, 2 # encoding: [0x24,0x05,0x00,0x02]
la $5, 0x00004000 # CHECK: addiu $5, $zero, 16384 # encoding: [0x24,0x05,0x40,0x00]
Expand Down
221 changes: 14 additions & 207 deletions llvm/test/MC/Mips/mips64-expansions.s
@@ -1,202 +1,15 @@
# RUN: llvm-mc %s -triple=mips64el-unknown-linux -show-encoding -mcpu=mips64r2 | FileCheck %s
#
# Test the 'dli' and 'dla' 64-bit variants of 'li' and 'la'.

# Immediate is <= 32 bits.
dli $5, 123
# CHECK: addiu $5, $zero, 123 # encoding: [0x7b,0x00,0x05,0x24]

dli $6, -2345
# CHECK: addiu $6, $zero, -2345 # encoding: [0xd7,0xf6,0x06,0x24]

dli $7, 65538
# CHECK: lui $7, 1 # encoding: [0x01,0x00,0x07,0x3c]
# CHECK: ori $7, $7, 2 # encoding: [0x02,0x00,0xe7,0x34]

dli $8, ~7
# CHECK: addiu $8, $zero, -8 # encoding: [0xf8,0xff,0x08,0x24]

dli $9, 0x10000
# CHECK: lui $9, 1 # encoding: [0x01,0x00,0x09,0x3c]
# CHECK-NOT: ori $9, $9, 0 # encoding: [0x00,0x00,0x29,0x35]


# Positive immediate which is => 32 bits and <= 48 bits.
dli $8, 0x100000000
# CHECK: lui $8, 1 # encoding: [0x01,0x00,0x08,0x3c]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]

dli $8, 0x100000001
# CHECK: lui $8, 1 # encoding: [0x01,0x00,0x08,0x3c]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35]

dli $8, 0x100010000
# CHECK: lui $8, 1 # encoding: [0x01,0x00,0x08,0x3c]
# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]

dli $8, 0x100010001
# CHECK: lui $8, 1 # encoding: [0x01,0x00,0x08,0x3c]
# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35]


# Positive immediate which is > 48 bits.
dli $8, 0x1000000000000
# CHECK: lui $8, 1 # encoding: [0x01,0x00,0x08,0x3c]
# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00]

dli $8, 0x1000000000001
# CHECK: lui $8, 1 # encoding: [0x01,0x00,0x08,0x3c]
# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00]
# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35]

dli $8, 0x1000000010000
# CHECK: lui $8, 1 # encoding: [0x01,0x00,0x08,0x3c]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]

dli $8, 0x1000100000000
# CHECK: lui $8, 1 # encoding: [0x01,0x00,0x08,0x3c]
# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35]
# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00]

dli $8, 0x1000000010001
# CHECK: lui $8, 1 # encoding: [0x01,0x00,0x08,0x3c]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35]

dli $8, 0x1000100010000
# CHECK: lui $8, 1 # encoding: [0x01,0x00,0x08,0x3c]
# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]

dli $8, 0x1000100000001
# CHECK: lui $8, 1 # encoding: [0x01,0x00,0x08,0x3c]
# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35]
# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00]
# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35]

dli $8, 0x1000100010001
# CHECK: lui $8, 1 # encoding: [0x01,0x00,0x08,0x3c]
# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 1 # encoding: [0x01,0x00,0x08,0x35]


# Negative immediate which is => 32 bits and <= 48 bits.
dli $8, -0x100000000
# CHECK: lui $8, 65535 # encoding: [0xff,0xff,0x08,0x3c]
# CHECK: ori $8, $8, 65535 # encoding: [0xff,0xff,0x08,0x35]
# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00]

dli $8, -0x100000001
# CHECK: lui $8, 65535 # encoding: [0xff,0xff,0x08,0x3c]
# CHECK: ori $8, $8, 65534 # encoding: [0xfe,0xff,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 65535 # encoding: [0xff,0xff,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 65535 # encoding: [0xff,0xff,0x08,0x35]

dli $8, -0x100010000
# CHECK: lui $8, 65535 # encoding: [0xff,0xff,0x08,0x3c]
# CHECK: ori $8, $8, 65534 # encoding: [0xfe,0xff,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 65535 # encoding: [0xff,0xff,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]

dli $8, -0x100010001
# CHECK: lui $8, 65535 # encoding: [0xff,0xff,0x08,0x3c]
# CHECK: ori $8, $8, 65534 # encoding: [0xfe,0xff,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 65534 # encoding: [0xfe,0xff,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 65535 # encoding: [0xff,0xff,0x08,0x35]


# Negative immediate which is > 48 bits.
dli $8, -0x1000000000000
# CHECK: lui $8, 65535 # encoding: [0xff,0xff,0x08,0x3c]
# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00]

dli $8, -0x1000000000001
# CHECK: lui $8, 65534 # encoding: [0xfe,0xff,0x08,0x3c]
# CHECK: ori $8, $8, 65535 # encoding: [0xff,0xff,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 65535 # encoding: [0xff,0xff,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 65535 # encoding: [0xff,0xff,0x08,0x35]

dli $8, -0x1000000010000
# CHECK: lui $8, 65534 # encoding: [0xfe,0xff,0x08,0x3c]
# CHECK: ori $8, $8, 65535 # encoding: [0xff,0xff,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 65535 # encoding: [0xff,0xff,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]

dli $8, -0x1000100000000
# CHECK: lui $8, 65534 # encoding: [0xfe,0xff,0x08,0x3c]
# CHECK: ori $8, $8, 65535 # encoding: [0xff,0xff,0x08,0x35]
# CHECK: dsll32 $8, $8, 0 # encoding: [0x3c,0x40,0x08,0x00]

dli $8, -0x1000000010001
# CHECK: lui $8, 65534 # encoding: [0xfe,0xff,0x08,0x3c]
# CHECK: ori $8, $8, 65535 # encoding: [0xff,0xff,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 65534 # encoding: [0xfe,0xff,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 65535 # encoding: [0xff,0xff,0x08,0x35]

dli $8, -0x1000100010000
# CHECK: lui $8, 65534 # encoding: [0xfe,0xff,0x08,0x3c]
# CHECK: ori $8, $8, 65534 # encoding: [0xfe,0xff,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 65535 # encoding: [0xff,0xff,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]

dli $8, -0x1000100000001
# CHECK: lui $8, 65534 # encoding: [0xfe,0xff,0x08,0x3c]
# CHECK: ori $8, $8, 65534 # encoding: [0xfe,0xff,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 65535 # encoding: [0xff,0xff,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 65535 # encoding: [0xff,0xff,0x08,0x35]

dli $8, -0x1000100010001
# CHECK: lui $8, 65534 # encoding: [0xfe,0xff,0x08,0x3c]
# CHECK: ori $8, $8, 65534 # encoding: [0xfe,0xff,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 65534 # encoding: [0xfe,0xff,0x08,0x35]
# CHECK: dsll $8, $8, 16 # encoding: [0x38,0x44,0x08,0x00]
# CHECK: ori $8, $8, 65535 # encoding: [0xff,0xff,0x08,0x35]

# Check that signed negative 32-bit immediates are loaded correctly:
li $10, ~(0x101010)
# CHECK: lui $10, 65519 # encoding: [0xef,0xff,0x0a,0x3c]
# CHECK: ori $10, $10, 61423 # encoding: [0xef,0xef,0x4a,0x35]
# CHECK-NOT: dsll

dli $10, ~(0x202020)
# CHECK: lui $10, 65503 # encoding: [0xdf,0xff,0x0a,0x3c]
# CHECK: ori $10, $10, 57311 # encoding: [0xdf,0xdf,0x4a,0x35]
# CHECK-NOT: dsll

dli $9, 0x80000000
# CHECK: ori $9, $zero, 32768 # encoding: [0x00,0x80,0x09,0x34]
# CHECK: dsll $9, $9, 16 # encoding: [0x38,0x4c,0x09,0x00]

# Test bne with an immediate as the 2nd operand.
bne $2, 0x100010001, 1332
# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
# CHECK: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24]
# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00]
# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34]
# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00]
# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34]
Expand All @@ -214,8 +27,7 @@
# CHECK: nop # encoding: [0x00,0x00,0x00,0x00]

bne $2, -0x100010001, 1332
# CHECK: lui $1, 65535 # encoding: [0xff,0xff,0x01,0x3c]
# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34]
# CHECK: addiu $1, $zero, -2 # encoding: [0xfe,0xff,0x01,0x24]
# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00]
# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34]
# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00]
Expand All @@ -235,7 +47,8 @@

# Test beq with an immediate as the 2nd operand.
beq $2, 0x100010001, 1332
# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
# CHECK: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24]
# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00]
# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34]
# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00]
# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34]
Expand All @@ -253,8 +66,7 @@
# CHECK: nop # encoding: [0x00,0x00,0x00,0x00]

beq $2, -0x100010001, 1332
# CHECK: lui $1, 65535 # encoding: [0xff,0xff,0x01,0x3c]
# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34]
# CHECK: addiu $1, $zero, -2 # encoding: [0xfe,0xff,0x01,0x24]
# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00]
# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34]
# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00]
Expand All @@ -274,7 +86,7 @@

# Test ulhu with 64-bit immediate addresses.
ulhu $8, 0x100010001
# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
# CHECK: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24]
# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34]
# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00]
# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34]
Expand All @@ -296,8 +108,7 @@
# CHECK: or $8, $8, $1 # encoding: [0x25,0x40,0x01,0x01]

ulhu $8, -0x100010001
# CHECK: lui $1, 65535 # encoding: [0xff,0xff,0x01,0x3c]
# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34]
# CHECK: addiu $1, $zero, -2 # encoding: [0xfe,0xff,0x01,0x24]
# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00]
# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34]
# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00]
Expand All @@ -321,7 +132,7 @@

# Test ulhu with source register and 64-bit immediate offset.
ulhu $8, 0x100010001($9)
# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
# CHECK: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24]
# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34]
# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00]
# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34]
Expand All @@ -345,12 +156,10 @@
# CHECK: or $8, $8, $1 # encoding: [0x25,0x40,0x01,0x01]

ulhu $8, -0x100010001($9)
# CHECK: lui $1, 65535 # encoding: [0xff,0xff,0x01,0x3c]
# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34]
# CHECK: addiu $1, $zero, -2 # encoding: [0xfe,0xff,0x01,0x24]
# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00]
# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34]
# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00]
# CHECK: ori $1, $1, 65535 # encoding: [0xff,0xff,0x21,0x34]
# CHECK: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00]
# CHECK: lbu $8, 1($1) # encoding: [0x01,0x00,0x28,0x90]
# CHECK: lbu $1, 0($1) # encoding: [0x00,0x00,0x21,0x90]
Expand All @@ -372,7 +181,7 @@

# Test ulw with 64-bit immediate addresses.
ulw $8, 0x100010001
# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
# CHECK: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24]
# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34]
# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00]
# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34]
Expand All @@ -390,8 +199,7 @@
# CHECK: lwr $8, 0($1) # encoding: [0x00,0x00,0x28,0x98]

ulw $8, -0x100010001
# CHECK: lui $1, 65535 # encoding: [0xff,0xff,0x01,0x3c]
# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34]
# CHECK: addiu $1, $zero, -2 # encoding: [0xfe,0xff,0x01,0x24]
# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00]
# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34]
# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00]
Expand All @@ -411,7 +219,7 @@

# Test ulw with source register and 64-bit immediate offset.
ulw $8, 0x100010001($9)
# CHECK: lui $1, 1 # encoding: [0x01,0x00,0x01,0x3c]
# CHECK: addiu $1, $zero, 1 # encoding: [0x01,0x00,0x01,0x24]
# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34]
# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00]
# CHECK: ori $1, $1, 1 # encoding: [0x01,0x00,0x21,0x34]
Expand All @@ -431,8 +239,7 @@
# CHECK: lwr $8, 0($1) # encoding: [0x00,0x00,0x28,0x98]

ulw $8, -0x100010001($9)
# CHECK: lui $1, 65535 # encoding: [0xff,0xff,0x01,0x3c]
# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34]
# CHECK: addiu $1, $zero, -2 # encoding: [0xfe,0xff,0x01,0x24]
# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00]
# CHECK: ori $1, $1, 65534 # encoding: [0xfe,0xff,0x21,0x34]
# CHECK: dsll $1, $1, 16 # encoding: [0x38,0x0c,0x01,0x00]
Expand Down

0 comments on commit a39ef1c

Please sign in to comment.