summaryrefslogtreecommitdiffstats
path: root/llvm/test/MC
diff options
context:
space:
mode:
authorSimon Atanasyan <simon@atanasyan.com>2019-09-18 19:19:47 +0000
committerSimon Atanasyan <simon@atanasyan.com>2019-09-18 19:19:47 +0000
commit164dbd386d00fe62991d3ab4e7b25b599f3fb7dc (patch)
tree48c609e0406f2c15d70b7374babde3464f8465a4 /llvm/test/MC
parent1e9c1d2b7bfcc27d3d47deac60ce20dc59aee75a (diff)
downloadbcm5719-llvm-164dbd386d00fe62991d3ab4e7b25b599f3fb7dc.tar.gz
bcm5719-llvm-164dbd386d00fe62991d3ab4e7b25b599f3fb7dc.zip
[mips] Expand 'lw/sw' instructions for 32-bit GOT
In case of using 32-bit GOT access to the table requires two instructions with attached %got_hi and %got_lo relocations. This patch implements correct expansion of 'lw/sw' instructions in that case. Differential Revision: https://reviews.llvm.org/D67705 llvm-svn: 372251
Diffstat (limited to 'llvm/test/MC')
-rw-r--r--llvm/test/MC/Mips/mips-expansions.s68
-rw-r--r--llvm/test/MC/Mips/mips64-expansions.s68
2 files changed, 134 insertions, 2 deletions
diff --git a/llvm/test/MC/Mips/mips-expansions.s b/llvm/test/MC/Mips/mips-expansions.s
index b5a91cb03d3..09b45c34937 100644
--- a/llvm/test/MC/Mips/mips-expansions.s
+++ b/llvm/test/MC/Mips/mips-expansions.s
@@ -1,5 +1,7 @@
-# RUN: llvm-mc %s -triple=mipsel-unknown-linux -mcpu=mips32r2 \
+# RUN: llvm-mc %s -triple=mipsel-unknown-linux -mcpu=mips32r2 -mattr=-xgot \
# RUN: -show-encoding | FileCheck %s --check-prefixes=CHECK,CHECK-LE,GOT
+# RUN: llvm-mc %s -triple=mipsel-unknown-linux -mcpu=mips32r2 -mattr=+xgot \
+# RUN: -show-encoding | FileCheck %s --check-prefixes=CHECK,CHECK-LE,XGOT
# RUN: llvm-mc %s -triple=mips-unknown-linux -mcpu=mips32r2 \
# RUN: -show-encoding | FileCheck %s --check-prefixes=CHECK,CHECK-BE
@@ -114,6 +116,14 @@
# GOT-NEXT: # fixup A - offset: 0, value: %got(symbol), kind: fixup_Mips_GOT
# GOT-NEXT: addu $10, $10, $4 # encoding: [0x21,0x50,0x44,0x01]
# GOT-NEXT: lw $10, 0($10) # encoding: [0x00,0x00,0x4a,0x8d]
+
+# XGOT: lui $10, %got_hi(symbol) # encoding: [A,A,0x0a,0x3c]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16
+# XGOT-NEXT: addu $10, $10, $gp # encoding: [0x21,0x50,0x5c,0x01]
+# XGOT-NEXT: lw $10, %got_lo(symbol)($10) # encoding: [A,A,0x4a,0x8d]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16
+# XGOT-NEXT: addu $10, $10, $4 # encoding: [0x21,0x50,0x44,0x01]
+# XGOT-NEXT: lw $10, 0($10) # encoding: [0x00,0x00,0x4a,0x8d]
.set at
sw $10, symbol($9)
# GOT: lw $1, %got(symbol)($gp) # encoding: [A,A,0x81,0x8f]
@@ -121,12 +131,26 @@
# GOT-NEXT: addu $1, $1, $9 # encoding: [0x21,0x08,0x29,0x00]
# GOT-NEXT: sw $10, 0($1) # encoding: [0x00,0x00,0x2a,0xac]
+# XGOT: lui $1, %got_hi(symbol) # encoding: [A,A,0x01,0x3c]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16
+# XGOT-NEXT: addu $1, $1, $gp # encoding: [0x21,0x08,0x3c,0x00]
+# XGOT-NEXT: lw $1, %got_lo(symbol)($1) # encoding: [A,A,0x21,0x8c]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16
+# XGOT-NEXT: addu $1, $1, $9 # encoding: [0x21,0x08,0x29,0x00]
+# XGOT-NEXT: sw $10, 0($1) # encoding: [0x00,0x00,0x2a,0xac]
+
lw $8, 1f+8
# GOT: lw $8, %got($tmp0)($gp) # encoding: [A,A,0x88,0x8f]
# GOT-NEXT: # fixup A - offset: 0, value: %got($tmp0), kind: fixup_Mips_GOT
# GOT-NEXT: addiu $8, $8, %lo($tmp0) # encoding: [A,A,0x08,0x25]
# GOT-NEXT: # fixup A - offset: 0, value: %lo($tmp0), kind: fixup_Mips_LO16
# GOT-NEXT: lw $8, 8($8) # encoding: [0x08,0x00,0x08,0x8d]
+
+# XGOT: lw $8, %got($tmp0)($gp) # encoding: [A,A,0x88,0x8f]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got($tmp0), kind: fixup_Mips_GOT
+# XGOT-NEXT: addiu $8, $8, %lo($tmp0) # encoding: [A,A,0x08,0x25]
+# XGOT-NEXT: # fixup A - offset: 0, value: %lo($tmp0), kind: fixup_Mips_LO16
+# XGOT-NEXT: lw $8, 8($8) # encoding: [0x08,0x00,0x08,0x8d]
sw $8, 1f+8
# GOT: lw $1, %got($tmp0)($gp) # encoding: [A,A,0x81,0x8f]
# GOT-NEXT: # fixup A - offset: 0, value: %got($tmp0), kind: fixup_Mips_GOT
@@ -134,32 +158,74 @@
# GOT-NEXT: # fixup A - offset: 0, value: %lo($tmp0), kind: fixup_Mips_LO16
# GOT-NEXT: sw $8, 8($1) # encoding: [0x08,0x00,0x28,0xac]
+# XGOT: lw $1, %got($tmp0)($gp) # encoding: [A,A,0x81,0x8f]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got($tmp0), kind: fixup_Mips_GOT
+# XGOT-NEXT: addiu $1, $1, %lo($tmp0) # encoding: [A,A,0x21,0x24]
+# XGOT-NEXT: # fixup A - offset: 0, value: %lo($tmp0), kind: fixup_Mips_LO16
+# XGOT-NEXT: sw $8, 8($1) # encoding: [0x08,0x00,0x28,0xac]
+
lw $10, 655483($4)
# GOT: lui $10, 10 # encoding: [0x0a,0x00,0x0a,0x3c]
# GOT-NEXT: addu $10, $10, $4 # encoding: [0x21,0x50,0x44,0x01]
# GOT-NEXT: lw $10, 123($10) # encoding: [0x7b,0x00,0x4a,0x8d]
+
+# XGOT: lui $10, 10 # encoding: [0x0a,0x00,0x0a,0x3c]
+# XGOT-NEXT: addu $10, $10, $4 # encoding: [0x21,0x50,0x44,0x01]
+# XGOT-NEXT: lw $10, 123($10) # encoding: [0x7b,0x00,0x4a,0x8d]
sw $10, 123456($9)
# GOT: lui $1, 2 # encoding: [0x02,0x00,0x01,0x3c]
# GOT-NEXT: addu $1, $1, $9 # encoding: [0x21,0x08,0x29,0x00]
# GOT-NEXT: sw $10, -7616($1) # encoding: [0x40,0xe2,0x2a,0xac]
+# XGOT: lui $1, 2 # encoding: [0x02,0x00,0x01,0x3c]
+# XGOT-NEXT: addu $1, $1, $9 # encoding: [0x21,0x08,0x29,0x00]
+# XGOT-NEXT: sw $10, -7616($1) # encoding: [0x40,0xe2,0x2a,0xac]
+
lw $8, symbol+8
# GOT: lw $8, %got(symbol)($gp) # encoding: [A,A,0x88,0x8f]
# GOT-NEXT: # fixup A - offset: 0, value: %got(symbol), kind: fixup_Mips_GOT
# GOT-NEXT: lw $8, 8($8) # encoding: [0x08,0x00,0x08,0x8d]
+
+# XGOT: lui $8, %got_hi(symbol) # encoding: [A,A,0x08,0x3c]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16
+# XGOT-NEXT: addu $8, $8, $gp # encoding: [0x21,0x40,0x1c,0x01]
+# XGOT-NEXT: lw $8, %got_lo(symbol)($8) # encoding: [A,A,0x08,0x8d]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16
+# XGOT-NEXT: lw $8, 8($8) # encoding: [0x08,0x00,0x08,0x8d]
sw $8, symbol+8
# GOT: lw $1, %got(symbol)($gp) # encoding: [A,A,0x81,0x8f]
# GOT-NEXT: # fixup A - offset: 0, value: %got(symbol), kind: fixup_Mips_GOT
# GOT-NEXT: sw $8, 8($1) # encoding: [0x08,0x00,0x28,0xac]
+# XGOT: lui $1, %got_hi(symbol) # encoding: [A,A,0x01,0x3c]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16
+# XGOT-NEXT: addu $1, $1, $gp # encoding: [0x21,0x08,0x3c,0x00]
+# XGOT-NEXT: lw $1, %got_lo(symbol)($1) # encoding: [A,A,0x21,0x8c]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16
+# XGOT-NEXT: sw $8, 8($1) # encoding: [0x08,0x00,0x28,0xac]
+
ldc1 $f0, symbol
# GOT: lw $1, %got(symbol)($gp) # encoding: [A,A,0x81,0x8f]
# GOT-NEXT: # fixup A - offset: 0, value: %got(symbol), kind: fixup_Mips_GOT
# GOT-NEXT: ldc1 $f0, 0($1) # encoding: [0x00,0x00,0x20,0xd4]
+
+# XGOT: lui $1, %got_hi(symbol) # encoding: [A,A,0x01,0x3c]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16
+# XGOT-NEXT: addu $1, $1, $gp # encoding: [0x21,0x08,0x3c,0x00]
+# XGOT-NEXT: lw $1, %got_lo(symbol)($1) # encoding: [A,A,0x21,0x8c]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16
+# XGOT-NEXT: ldc1 $f0, 0($1) # encoding: [0x00,0x00,0x20,0xd4]
sdc1 $f0, symbol
# GOT: lw $1, %got(symbol)($gp) # encoding: [A,A,0x81,0x8f]
# GOT-NEXT: # fixup A - offset: 0, value: %got(symbol), kind: fixup_Mips_GOT
# GOT-NEXT: sdc1 $f0, 0($1) # encoding: [0x00,0x00,0x20,0xf4]
+
+# XGOT: lui $1, %got_hi(symbol) # encoding: [A,A,0x01,0x3c]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16
+# XGOT-NEXT: addu $1, $1, $gp # encoding: [0x21,0x08,0x3c,0x00]
+# XGOT-NEXT: lw $1, %got_lo(symbol)($1) # encoding: [A,A,0x21,0x8c]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16
+# XGOT-NEXT: sdc1 $f0, 0($1) # encoding: [0x00,0x00,0x20,0xf4]
.option pic0
# Test BNE with an immediate as the 2nd operand.
diff --git a/llvm/test/MC/Mips/mips64-expansions.s b/llvm/test/MC/Mips/mips64-expansions.s
index 25ee898edf3..c586c81aa6e 100644
--- a/llvm/test/MC/Mips/mips64-expansions.s
+++ b/llvm/test/MC/Mips/mips64-expansions.s
@@ -1,5 +1,7 @@
-# RUN: llvm-mc %s -triple=mips64el-unknown-linux -mcpu=mips64r2 \
+# RUN: llvm-mc %s -triple=mips64el-unknown-linux -mcpu=mips64r2 -mattr=-xgot \
# RUN: -show-encoding | FileCheck --check-prefixes=CHECK,GOT %s
+# RUN: llvm-mc %s -triple=mips64el-unknown-linux -mcpu=mips64r2 -mattr=+xgot \
+# RUN: -show-encoding | FileCheck --check-prefixes=CHECK,XGOT %s
# Check that signed negative 32-bit immediates are loaded correctly:
li $10, ~(0x101010)
@@ -475,44 +477,108 @@ sym:
# GOT-NEXT: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
# GOT-NEXT: daddu $10, $10, $4 # encoding: [0x2d,0x50,0x44,0x01]
# GOT-NEXT: lw $10, 0($10) # encoding: [0x00,0x00,0x4a,0x8d]
+
+# XGOT: lui $10, %got_hi(symbol) # encoding: [A,A,0x0a,0x3c]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16
+# XGOT-NEXT: daddu $10, $10, $gp # encoding: [0x2d,0x50,0x5c,0x01]
+# XGOT-NEXT: ld $10, %got_lo(symbol)($10) # encoding: [A,A,0x4a,0xdd]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16
+# XGOT-NEXT: daddu $10, $10, $4 # encoding: [0x2d,0x50,0x44,0x01]
+# XGOT-NEXT: lw $10, 0($10) # encoding: [0x00,0x00,0x4a,0x8d]
+
sw $10, symbol($9)
# GOT: ld $1, %got_disp(symbol)($gp) # encoding: [A,A,0x81,0xdf]
# GOT-NEXT: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
# GOT-NEXT: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00]
# GOT-NEXT: sw $10, 0($1) # encoding: [0x00,0x00,0x2a,0xac]
+# XGOT: lui $1, %got_hi(symbol) # encoding: [A,A,0x01,0x3c]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16
+# XGOT-NEXT: daddu $1, $1, $gp # encoding: [0x2d,0x08,0x3c,0x00]
+# XGOT-NEXT: ld $1, %got_lo(symbol)($1) # encoding: [A,A,0x21,0xdc]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16
+# XGOT-NEXT: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00]
+# XGOT-NEXT: sw $10, 0($1) # encoding: [0x00,0x00,0x2a,0xac]
+
lw $8, sym+8
# GOT: ld $8, %got_disp(sym)($gp) # encoding: [A,A,0x88,0xdf]
# GOT-NEXT: # fixup A - offset: 0, value: %got_disp(sym), kind: fixup_Mips_GOT_DISP
# GOT-NEXT: lw $8, 8($8) # encoding: [0x08,0x00,0x08,0x8d]
+
+# XGOT: ld $8, %got_disp(sym)($gp) # encoding: [A,A,0x88,0xdf]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_disp(sym), kind: fixup_Mips_GOT_DISP
+# XGOT-NEXT: lw $8, 8($8) # encoding: [0x08,0x00,0x08,0x8d]
+
sw $8, sym+8
# GOT: ld $1, %got_disp(sym)($gp) # encoding: [A,A,0x81,0xdf]
# GOT-NEXT: # fixup A - offset: 0, value: %got_disp(sym), kind: fixup_Mips_GOT_DISP
# GOT-NEXT: sw $8, 8($1) # encoding: [0x08,0x00,0x28,0xac]
+# XGOT: ld $1, %got_disp(sym)($gp) # encoding: [A,A,0x81,0xdf]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_disp(sym), kind: fixup_Mips_GOT_DISP
+# XGOT-NEXT: sw $8, 8($1) # encoding: [0x08,0x00,0x28,0xac]
+
lw $10, 655483($4)
# GOT: lui $10, 10 # encoding: [0x0a,0x00,0x0a,0x3c]
# GOT-NEXT: daddu $10, $10, $4 # encoding: [0x2d,0x50,0x44,0x01]
# GOT-NEXT: lw $10, 123($10) # encoding: [0x7b,0x00,0x4a,0x8d]
+
+# XGOT: lui $10, 10 # encoding: [0x0a,0x00,0x0a,0x3c]
+# XGOT-NEXT: daddu $10, $10, $4 # encoding: [0x2d,0x50,0x44,0x01]
+# XGOT-NEXT: lw $10, 123($10) # encoding: [0x7b,0x00,0x4a,0x8d]
sw $10, 123456($9)
# GOT: lui $1, 2 # encoding: [0x02,0x00,0x01,0x3c]
# GOT-NEXT: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00]
# GOT-NEXT: sw $10, -7616($1) # encoding: [0x40,0xe2,0x2a,0xac]
+# XGOT: lui $1, 2 # encoding: [0x02,0x00,0x01,0x3c]
+# XGOT-NEXT: daddu $1, $1, $9 # encoding: [0x2d,0x08,0x29,0x00]
+# XGOT-NEXT: sw $10, -7616($1) # encoding: [0x40,0xe2,0x2a,0xac]
+
lw $8, symbol+8
# GOT: ld $8, %got_disp(symbol)($gp) # encoding: [A,A,0x88,0xdf]
# GOT-NEXT: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
# GOT-NEXT: lw $8, 8($8) # encoding: [0x08,0x00,0x08,0x8d]
+
+# XGOT: lui $8, %got_hi(symbol) # encoding: [A,A,0x08,0x3c]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16
+# XGOT-NEXT: daddu $8, $8, $gp # encoding: [0x2d,0x40,0x1c,0x01]
+# XGOT-NEXT: ld $8, %got_lo(symbol)($8) # encoding: [A,A,0x08,0xdd]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16
+# XGOT-NEXT: lw $8, 8($8) # encoding: [0x08,0x00,0x08,0x8d]
+
sw $8, symbol+8
# GOT: ld $1, %got_disp(symbol)($gp) # encoding: [A,A,0x81,0xdf]
# GOT-NEXT: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
# GOT-NEXT: sw $8, 8($1) # encoding: [0x08,0x00,0x28,0xac]
+# XGOT: lui $1, %got_hi(symbol) # encoding: [A,A,0x01,0x3c]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16
+# XGOT-NEXT: daddu $1, $1, $gp # encoding: [0x2d,0x08,0x3c,0x00]
+# XGOT-NEXT: ld $1, %got_lo(symbol)($1) # encoding: [A,A,0x21,0xdc]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16
+# XGOT-NEXT: sw $8, 8($1) # encoding: [0x08,0x00,0x28,0xac]
+
ldc1 $f0, symbol
# GOT: ld $1, %got_disp(symbol)($gp) # encoding: [A,A,0x81,0xdf]
# GOT-NEXT: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
# GOT-NEXT: ldc1 $f0, 0($1) # encoding: [0x00,0x00,0x20,0xd4]
+
+# XGOT: lui $1, %got_hi(symbol) # encoding: [A,A,0x01,0x3c]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16
+# XGOT-NEXT: daddu $1, $1, $gp # encoding: [0x2d,0x08,0x3c,0x00]
+# XGOT-NEXT: ld $1, %got_lo(symbol)($1) # encoding: [A,A,0x21,0xdc]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16
+# XGOT-NEXT: ldc1 $f0, 0($1) # encoding: [0x00,0x00,0x20,0xd4]
+
sdc1 $f0, symbol
# GOT: ld $1, %got_disp(symbol)($gp) # encoding: [A,A,0x81,0xdf]
# GOT-NEXT: # fixup A - offset: 0, value: %got_disp(symbol), kind: fixup_Mips_GOT_DISP
# GOT-NEXT: sdc1 $f0, 0($1) # encoding: [0x00,0x00,0x20,0xf4]
+
+# XGOT: lui $1, %got_hi(symbol) # encoding: [A,A,0x01,0x3c]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_hi(symbol), kind: fixup_Mips_GOT_HI16
+# XGOT-NEXT: daddu $1, $1, $gp # encoding: [0x2d,0x08,0x3c,0x00]
+# XGOT-NEXT: ld $1, %got_lo(symbol)($1) # encoding: [A,A,0x21,0xdc]
+# XGOT-NEXT: # fixup A - offset: 0, value: %got_lo(symbol), kind: fixup_Mips_GOT_LO16
+# XGOT-NEXT: sdc1 $f0, 0($1) # encoding: [0x00,0x00,0x20,0xf4]
OpenPOWER on IntegriCloud