aboutsummaryrefslogtreecommitdiff
path: root/test/MC/Mips/macro-dla-pic.s
diff options
context:
space:
mode:
authorSimon Dardis <simon.dardis@imgtec.com>2017-06-30 15:44:27 +0000
committerSimon Dardis <simon.dardis@imgtec.com>2017-06-30 15:44:27 +0000
commit333b6cb76040b4d32705e1f16f96d18b2ad7e4d5 (patch)
tree37de31c9c4a51b214159c2ae18a865af5b1a6f24 /test/MC/Mips/macro-dla-pic.s
parentadc0734b69ffc73195c06bd24c01081992182d83 (diff)
[MIPS] Handle PIC load address macro instructions in N64.
In particular, use CALL16 (similar to O32) for address loads into T9 for certain cases. Otherwise use a %got_disp relocation to load the address of a symbol. Small offsets (small enough to fit in a 16-bit signed immediate) can be used and are added to the symbol address after it is loaded from the GOT. Larger offsets are currently unsupported and result in an error from the assembler. Reviewers: sdardis Reviewed By: sdardis Patch by: John Baldwin Subscribers: llvm-commits, seanbruno, arichardson, emaste, dim Differential Revision: https://reviews.llvm.org/D33948 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@306831 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/MC/Mips/macro-dla-pic.s')
-rw-r--r--test/MC/Mips/macro-dla-pic.s50
1 files changed, 50 insertions, 0 deletions
diff --git a/test/MC/Mips/macro-dla-pic.s b/test/MC/Mips/macro-dla-pic.s
new file mode 100644
index 00000000000..ed5aa202618
--- /dev/null
+++ b/test/MC/Mips/macro-dla-pic.s
@@ -0,0 +1,50 @@
+# RUN: llvm-mc %s -triple=mips64-unknown-linux -show-encoding -mcpu=mips3 | \
+# RUN: FileCheck %s
+
+.option pic2
+dla $5, symbol # CHECK: ld $5, %got_disp(symbol)($gp) # encoding: [0xdf,0x85,A,A]
+ # CHECK: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
+dla $5, symbol($6) # CHECK: ld $5, %got_disp(symbol)($gp) # encoding: [0xdf,0x85,A,A]
+ # CHECK: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
+ # CHECK: daddu $5, $5, $6 # encoding: [0x00,0xa6,0x28,0x2d]
+dla $6, symbol($6) # CHECK: ld $1, %got_disp(symbol)($gp) # encoding: [0xdf,0x81,A,A]
+ # CHECK: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
+ # CHECK: daddu $6, $1, $6 # encoding: [0x00,0x26,0x30,0x2d]
+dla $5, symbol+8 # CHECK: ld $5, %got_disp(symbol)($gp) # encoding: [0xdf,0x85,A,A]
+ # CHECK: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
+ # CHECK: daddiu $5, $5, 8 # encoding: [0x64,0xa5,0x00,0x08]
+dla $5, symbol+8($6) # CHECK: ld $5, %got_disp(symbol)($gp) # encoding: [0xdf,0x85,A,A]
+ # CHECK: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
+ # CHECK: daddiu $5, $5, 8 # encoding: [0x64,0xa5,0x00,0x08]
+ # CHECK: daddu $5, $5, $6 # encoding: [0x00,0xa6,0x28,0x2d]
+dla $6, symbol+8($6) # CHECK: ld $1, %got_disp(symbol)($gp) # encoding: [0xdf,0x81,A,A]
+ # CHECK: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
+ # CHECK: daddiu $1, $1, 8 # encoding: [0x64,0x21,0x00,0x08]
+ # CHECK: daddu $6, $1, $6 # encoding: [0x00,0x26,0x30,0x2d]
+dla $5, 1f # CHECK: ld $5, %got_disp(.Ltmp0)($gp) # encoding: [0xdf,0x85,A,A]
+ # CHECK: # fixup A - offset: 0, value: %got_disp(.Ltmp0), kind: fixup_Mips_GOT_DISP
+1:
+
+# PIC expansions involving $25 are special.
+dla $25, symbol # CHECK: ld $25, %call16(symbol)($gp) # encoding: [0xdf,0x99,A,A]
+ # CHECK: # fixup A - offset: 0, value: %call16(symbol), kind: fixup_Mips_CALL16
+dla $25, symbol($6) # CHECK: ld $25, %got_disp(symbol)($gp) # encoding: [0xdf,0x99,A,A]
+ # CHECK: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
+ # CHECK: daddu $25, $25, $6 # encoding: [0x03,0x26,0xc8,0x2d]
+dla $25, symbol($25) # CHECK: ld $1, %got_disp(symbol)($gp) # encoding: [0xdf,0x81,A,A]
+ # CHECK: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
+ # CHECK: daddu $25, $1, $25 # encoding: [0x00,0x39,0xc8,0x2d]
+dla $25, symbol+8 # CHECK: ld $25, %got_disp(symbol)($gp) # encoding: [0xdf,0x99,A,A]
+ # CHECK: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
+ # CHECK: daddiu $25, $25, 8 # encoding: [0x67,0x39,0x00,0x08]
+dla $25, symbol+8($6) # CHECK: ld $25, %got_disp(symbol)($gp) # encoding: [0xdf,0x99,A,A]
+ # CHECK: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
+ # CHECK: daddiu $25, $25, 8 # encoding: [0x67,0x39,0x00,0x08]
+ # CHECK: daddu $25, $25, $6 # encoding: [0x03,0x26,0xc8,0x2d]
+dla $25, symbol+8($25)# CHECK: ld $1, %got_disp(symbol)($gp) # encoding: [0xdf,0x81,A,A]
+ # CHECK: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
+ # CHECK: daddiu $1, $1, 8 # encoding: [0x64,0x21,0x00,0x08]
+ # CHECK: daddu $25, $1, $25 # encoding: [0x00,0x39,0xc8,0x2d]
+dla $25, 1f # CHECK: ld $25, %got_disp(.Ltmp1)($gp) # encoding: [0xdf,0x99,A,A]
+ # CHECK: # fixup A - offset: 0, value: %got_disp(.Ltmp1), kind: fixup_Mips_GOT_DISP
+1: