Skip to content

Commit 8d8add2

Browse files
committed
[mips] For PIC code convert unconditional jump to unconditional branch
Unconditional branch uses relative addressing which is the right choice in case of position independent code. This is a fix for the bug: https://dmz-portal.mips.com/bugz/show_bug.cgi?id=2445 Differential revision: https://reviews.llvm.org/D27483 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@289448 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent ddba2a5 commit 8d8add2

File tree

3 files changed

+218
-70
lines changed

3 files changed

+218
-70
lines changed

lib/Target/Mips/AsmParser/MipsAsmParser.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -1786,6 +1786,17 @@ bool MipsAsmParser::processInstruction(MCInst &Inst, SMLoc IDLoc,
17861786
}
17871787
}
17881788

1789+
// For PIC code convert unconditional jump to unconditional branch.
1790+
if ((Inst.getOpcode() == Mips::J || Inst.getOpcode() == Mips::J_MM) &&
1791+
inPicMode()) {
1792+
MCInst BInst;
1793+
BInst.setOpcode(inMicroMipsMode() ? Mips::BEQ_MM : Mips::BEQ);
1794+
BInst.addOperand(MCOperand::createReg(Mips::ZERO));
1795+
BInst.addOperand(MCOperand::createReg(Mips::ZERO));
1796+
BInst.addOperand(Inst.getOperand(0));
1797+
Inst = BInst;
1798+
}
1799+
17891800
// This expansion is not in a function called by tryExpandInstruction()
17901801
// because the pseudo-instruction doesn't have a distinct opcode.
17911802
if ((Inst.getOpcode() == Mips::JAL || Inst.getOpcode() == Mips::JAL_MM) &&

test/MC/Mips/expansion-j-sym-pic.s

+139
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
# RUN: llvm-mc %s -arch=mips -mcpu=mips32 -show-encoding |\
2+
# RUN: FileCheck %s -check-prefix=NORMAL
3+
4+
# RUN: llvm-mc %s -arch=mips -mcpu=mips64 -target-abi n32 -show-encoding |\
5+
# RUN: FileCheck %s -check-prefix=NORMAL
6+
7+
# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 -show-encoding |\
8+
# RUN: FileCheck %s -check-prefix=NORMAL
9+
10+
# RUN: llvm-mc %s -arch=mips -mcpu=mips32 -mattr=micromips -show-encoding |\
11+
# RUN: FileCheck %s -check-prefix=MICRO
12+
13+
# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n32 -mattr=micromips -show-encoding |\
14+
# RUN: FileCheck %s -check-prefix=MICRO
15+
16+
# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 -mattr=micromips -show-encoding |\
17+
# RUN: FileCheck %s -check-prefix=MICRO
18+
19+
# Repeat the tests using ELF output.
20+
21+
# RUN: llvm-mc %s -arch=mips -mcpu=mips32 -filetype=obj | \
22+
# RUN: llvm-objdump -d -r - | FileCheck %s -check-prefixes=ELF-O32
23+
# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n32 -filetype=obj | \
24+
# RUN: llvm-objdump -d -r - | FileCheck %s -check-prefixes=ELF-NXX
25+
# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 -filetype=obj | \
26+
# RUN: llvm-objdump -d -r - | FileCheck %s -check-prefixes=ELF-NXX
27+
28+
.weak weak_label
29+
30+
.text
31+
.option pic2
32+
33+
.ent local_label
34+
local_label:
35+
.frame $sp, 0, $ra
36+
.set noreorder
37+
38+
j local_label
39+
nop
40+
41+
# NORMAL: b local_label # encoding: [0x10,0x00,A,A]
42+
# NORMAL: # fixup A - offset: 0, value: local_label-4, kind: fixup_Mips_PC16
43+
44+
# MICRO: b local_label # encoding: [0x94,0x00,A,A]
45+
# MICRO: # fixup A - offset: 0, value: local_label, kind: fixup_MICROMIPS_PC16_S1
46+
47+
# ELF-O32: 10 00 ff ff b 0
48+
49+
# ELF-NXX: 10 00 ff ff b 0
50+
51+
j weak_label
52+
nop
53+
54+
# NORMAL: b weak_label # encoding: [0x10,0x00,A,A]
55+
# NORMAL: # fixup A - offset: 0, value: weak_label-4, kind: fixup_Mips_PC16
56+
57+
# MICRO: b weak_label # encoding: [0x94,0x00,A,A]
58+
# MICRO: # fixup A - offset: 0, value: weak_label, kind: fixup_MICROMIPS_PC16_S1
59+
60+
# ELF-O32: 10 00 ff ff b 0
61+
# ELF-O32-NEXT: R_MIPS_PC16 weak_label
62+
63+
# ELF-NXX: 10 00 00 00 b 4
64+
# ELF-NXX-NEXT: R_MIPS_PC16/R_MIPS_NONE/R_MIPS_NONE weak_label
65+
66+
j global_label
67+
nop
68+
69+
# NORMAL: b global_label # encoding: [0x10,0x00,A,A]
70+
# NORMAL: # fixup A - offset: 0, value: global_label-4, kind: fixup_Mips_PC16
71+
72+
# MICRO: b global_label # encoding: [0x94,0x00,A,A]
73+
# MICRO: # fixup A - offset: 0, value: global_label, kind: fixup_MICROMIPS_PC16_S1
74+
75+
# ELF-O32: 10 00 ff ff b 0
76+
# ELF-O32-NEXT: 00000010: R_MIPS_PC16 global_label
77+
78+
# ELF-NXX: 10 00 00 00 b 4
79+
# ELF-NXX-NEXT: R_MIPS_PC16/R_MIPS_NONE/R_MIPS_NONE global_label
80+
81+
j .text
82+
nop
83+
84+
# NORMAL: b .text # encoding: [0x10,0x00,A,A]
85+
# NORMAL: # fixup A - offset: 0, value: .text-4, kind: fixup_Mips_PC16
86+
87+
# MICRO: b .text # encoding: [0x94,0x00,A,A]
88+
# MICRO: # fixup A - offset: 0, value: .text, kind: fixup_MICROMIPS_PC16_S1
89+
90+
# ELF-O32: 10 00 ff ff b 0
91+
# ELF-O32-NEXT: 00000018: R_MIPS_PC16 .text
92+
93+
# ELF-NXX: 10 00 00 00 b 4
94+
# ELF-NXX-NEXT: R_MIPS_PC16/R_MIPS_NONE/R_MIPS_NONE .text
95+
96+
j 1f
97+
nop
98+
99+
# NORMAL: b {{.*}}tmp0{{.*}} # encoding: [0x10,0x00,A,A]
100+
# NORMAL: # fixup A - offset: 0, value: {{.*}}tmp0{{.*}}-4, kind: fixup_Mips_PC16
101+
102+
# MICRO: b {{.*}}tmp0{{.*}} # encoding: [0x94,0x00,A,A]
103+
# MICRO: # fixup A - offset: 0, value: {{.*}}tmp0{{.*}}, kind: fixup_MICROMIPS_PC16_S1
104+
105+
# ELF-O32: 10 00 00 04 b 20 <local_label+0x34>
106+
107+
# ELF-NXX: 10 00 00 04 b 20 <local_label+0x34>
108+
109+
.local forward_local
110+
j forward_local
111+
nop
112+
113+
# NORMAL: b forward_local # encoding: [0x10,0x00,A,A]
114+
# NORMAL: # fixup A - offset: 0, value: forward_local-4, kind: fixup_Mips_PC16
115+
116+
# MICRO: b forward_local # encoding: [0x94,0x00,A,A]
117+
# MICRO: # fixup A - offset: 0, value: forward_local, kind: fixup_MICROMIPS_PC16_S1
118+
119+
# ELF-O32: 10 00 00 04 b 20 <forward_local>
120+
121+
# ELF-NXX: 10 00 00 04 b 20 <forward_local>
122+
123+
j 0x4
124+
125+
# NORMAL: b 4 # encoding: [0x10,0x00,0x00,0x01]
126+
127+
# MICRO: b 4 # encoding: [0x94,0x00,0x00,0x02]
128+
129+
# ELF-O32: 10 00 00 01 b 8
130+
131+
# ELF-NXX: 10 00 00 01 b 8
132+
133+
.end local_label
134+
135+
1:
136+
nop
137+
nop
138+
forward_local:
139+

test/MC/Mips/expansion-jal-sym-pic.s

+68-70
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
# RUN: llvm-mc %s -arch=mips -mcpu=mips32 -show-encoding |\
2-
# RUN: FileCheck %s -check-prefixes=ALL,NORMAL,O32
2+
# RUN: FileCheck %s -check-prefixes=ALL,MIPS,O32
33

44
# RUN: llvm-mc %s -arch=mips -mcpu=mips64 -target-abi n32 -show-encoding |\
5-
# RUN: FileCheck %s -check-prefixes=ALL,NORMAL,N32
5+
# RUN: FileCheck %s -check-prefixes=ALL,MIPS,N32
66

77
# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 -show-encoding |\
8-
# RUN: FileCheck %s -check-prefixes=ALL,NORMAL,N64
8+
# RUN: FileCheck %s -check-prefixes=ALL,MIPS,N64
99

1010
# RUN: llvm-mc %s -arch=mips -mcpu=mips32 -mattr=micromips -show-encoding |\
11-
# RUN: FileCheck %s -check-prefixes=ALL,MICROMIPS,O32-MICROMIPS
11+
# RUN: FileCheck %s -check-prefixes=ALL,MM,O32-MM
1212

1313
# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n32 -mattr=micromips -show-encoding |\
14-
# RUN: FileCheck %s -check-prefixes=ALL,MICROMIPS,N32-MICROMIPS
14+
# RUN: FileCheck %s -check-prefixes=ALL,MM,N32-MM
1515

1616
# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 -mattr=micromips -show-encoding |\
17-
# RUN: FileCheck %s -check-prefixes=ALL,MICROMIPS,N64-MICROMIPS
17+
# RUN: FileCheck %s -check-prefixes=ALL,MM,N64-MM
1818

1919
# Repeat the tests but using ELF output. An initial version of this patch did
2020
# this as the output different depending on whether it went through
@@ -63,20 +63,20 @@ local_label:
6363
# ELF-N64: df 99 00 00 ld $25, 0($gp)
6464
# ELF-N64-NEXT: R_MIPS_GOT_DISP/R_MIPS_NONE/R_MIPS_NONE local_label
6565

66-
# O32-MICROMIPS: lw $25, %got(local_label)($gp) # encoding: [0xff,0x3c,A,A]
67-
# O32-MICROMIPS: # fixup A - offset: 0, value: %got(local_label), kind: fixup_MICROMIPS_GOT16
68-
# O32-MICROMIPS: addiu $25, $25, %lo(local_label) # encoding: [0x33,0x39,A,A]
69-
# O32-MICROMIPS: # fixup A - offset: 0, value: %lo(local_label), kind: fixup_MICROMIPS_LO16
66+
# O32-MM: lw $25, %got(local_label)($gp) # encoding: [0xff,0x3c,A,A]
67+
# O32-MM: # fixup A - offset: 0, value: %got(local_label), kind: fixup_MICROMIPS_GOT16
68+
# O32-MM: addiu $25, $25, %lo(local_label) # encoding: [0x33,0x39,A,A]
69+
# O32-MM: # fixup A - offset: 0, value: %lo(local_label), kind: fixup_MICROMIPS_LO16
7070

71-
# N32-MICROMIPS: lw $25, %got_disp(local_label)($gp) # encoding: [0xff,0x3c,A,A]
72-
# N32-MICROMIPS: # fixup A - offset: 0, value: %got_disp(local_label), kind: fixup_MICROMIPS_GOT_DISP
71+
# N32-MM: lw $25, %got_disp(local_label)($gp) # encoding: [0xff,0x3c,A,A]
72+
# N32-MM: # fixup A - offset: 0, value: %got_disp(local_label), kind: fixup_MICROMIPS_GOT_DISP
7373

74-
# N64-MICROMIPS: ld $25, %got_disp(local_label)($gp) # encoding: [0xdf,0x99,A,A]
75-
# N64-MICROMIPS: # fixup A - offset: 0, value: %got_disp(local_label), kind: fixup_MICROMIPS_GOT_DISP
74+
# N64-MM: ld $25, %got_disp(local_label)($gp) # encoding: [0xdf,0x99,A,A]
75+
# N64-MM: # fixup A - offset: 0, value: %got_disp(local_label), kind: fixup_MICROMIPS_GOT_DISP
7676

77-
# NORMAL: jalr $25 # encoding: [0x03,0x20,0xf8,0x09]
78-
# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
79-
# ALL: nop # encoding: [0x00,0x00,0x00,0x00]
77+
# MIPS: jalr $25 # encoding: [0x03,0x20,0xf8,0x09]
78+
# MM: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
79+
# ALL: nop # encoding: [0x00,0x00,0x00,0x00]
8080

8181
jal weak_label
8282
nop
@@ -100,18 +100,18 @@ local_label:
100100
# ELF-N64: df 99 00 00 ld $25, 0($gp)
101101
# ELF-N64-NEXT: R_MIPS_CALL16/R_MIPS_NONE/R_MIPS_NONE weak_label
102102

103-
# O32-MICROMIPS: lw $25, %call16(weak_label)($gp) # encoding: [0xff,0x3c,A,A]
104-
# O32-MICROMIPS: # fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16
103+
# O32-MM: lw $25, %call16(weak_label)($gp) # encoding: [0xff,0x3c,A,A]
104+
# O32-MM: # fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16
105105

106-
# N32-MICROMIPS: lw $25, %call16(weak_label)($gp) # encoding: [0xff,0x3c,A,A]
107-
# N32-MICROMIPS: # fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16
106+
# N32-MM: lw $25, %call16(weak_label)($gp) # encoding: [0xff,0x3c,A,A]
107+
# N32-MM: # fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16
108108

109-
# N64-MICROMIPS: ld $25, %call16(weak_label)($gp) # encoding: [0xdf,0x99,A,A]
110-
# N64-MICROMIPS: # fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16
109+
# N64-MM: ld $25, %call16(weak_label)($gp) # encoding: [0xdf,0x99,A,A]
110+
# N64-MM: # fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16
111111

112-
# NORMAL: jalr $25 # encoding: [0x03,0x20,0xf8,0x09]
113-
# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
114-
# ALL: nop # encoding: [0x00,0x00,0x00,0x00]
112+
# MIPS: jalr $25 # encoding: [0x03,0x20,0xf8,0x09]
113+
# MM: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
114+
# ALL: nop # encoding: [0x00,0x00,0x00,0x00]
115115

116116
jal global_label
117117
nop
@@ -135,18 +135,18 @@ local_label:
135135
# ELF-N64: df 99 00 00 ld $25, 0($gp)
136136
# ELF-N64-NEXT: R_MIPS_CALL16/R_MIPS_NONE/R_MIPS_NONE global_label
137137

138-
# O32-MICROMIPS: lw $25, %call16(global_label)($gp) # encoding: [0xff,0x3c,A,A]
139-
# O32-MICROMIPS: # fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16
138+
# O32-MM: lw $25, %call16(global_label)($gp) # encoding: [0xff,0x3c,A,A]
139+
# O32-MM: # fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16
140140

141-
# N32-MICROMIPS: lw $25, %call16(global_label)($gp) # encoding: [0xff,0x3c,A,A]
142-
# N32-MICROMIPS: # fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16
141+
# N32-MM: lw $25, %call16(global_label)($gp) # encoding: [0xff,0x3c,A,A]
142+
# N32-MM: # fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16
143143

144-
# N64-MICROMIPS: ld $25, %call16(global_label)($gp) # encoding: [0xdf,0x99,A,A]
145-
# N64-MICROMIPS: # fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16
144+
# N64-MM: ld $25, %call16(global_label)($gp) # encoding: [0xdf,0x99,A,A]
145+
# N64-MM: # fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16
146146

147-
# NORMAL: jalr $25 # encoding: [0x03,0x20,0xf8,0x09]
148-
# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
149-
# ALL: nop # encoding: [0x00,0x00,0x00,0x00]
147+
# MIPS: jalr $25 # encoding: [0x03,0x20,0xf8,0x09]
148+
# MM: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
149+
# ALL: nop # encoding: [0x00,0x00,0x00,0x00]
150150

151151
jal .text
152152
nop
@@ -172,20 +172,20 @@ local_label:
172172
# ELF-N64: df 99 00 00 ld $25, 0($gp)
173173
# ELF-N64-NEXT: R_MIPS_CALL16/R_MIPS_NONE/R_MIPS_NONE .text
174174

175-
# O32-MICROMIPS-FIXME: lw $25, %got(.text)($gp) # encoding: [0xff,0x3c,A,A]
176-
# O32-MICROMIPS-FIXME: # fixup A - offset: 0, value: %got(.text), kind: fixup_MICROMIPS_GOT16
177-
# O32-MICROMIPS-FIXME: addiu $25, $25, %lo(.text) # encoding: [0x33,0x39,A,A]
178-
# O32-MICROMIPS-FIXME: # fixup A - offset: 0, value: %lo(.text), kind: fixup_MICROMIPS_LO16
175+
# O32-MM-FIXME: lw $25, %got(.text)($gp) # encoding: [0xff,0x3c,A,A]
176+
# O32-MM-FIXME: # fixup A - offset: 0, value: %got(.text), kind: fixup_MICROMIPS_GOT16
177+
# O32-MM-FIXME: addiu $25, $25, %lo(.text) # encoding: [0x33,0x39,A,A]
178+
# O32-MM-FIXME: # fixup A - offset: 0, value: %lo(.text), kind: fixup_MICROMIPS_LO16
179179

180-
# N32-MICROMIPS-FIXME: lw $25, %got_disp(.text)($gp) # encoding: [0xff,0x3c,A,A]
181-
# N32-MICROMIPS-FIXME: # fixup A - offset: 0, value: %got_disp(.text), kind: fixup_MICROMIPS_GOT_DISP
180+
# N32-MM-FIXME: lw $25, %got_disp(.text)($gp) # encoding: [0xff,0x3c,A,A]
181+
# N32-MM-FIXME: # fixup A - offset: 0, value: %got_disp(.text), kind: fixup_MICROMIPS_GOT_DISP
182182

183-
# N64-MICROMIPS-FIXME: ld $25, %got_disp(.text)($gp) # encoding: [0xdf,0x99,A,A]
184-
# N64-MICROMIPS-FIXME: # fixup A - offset: 0, value: %got_disp(.text), kind: fixup_MICROMIPS_GOT_DISP
183+
# N64-MM-FIXME: ld $25, %got_disp(.text)($gp) # encoding: [0xdf,0x99,A,A]
184+
# N64-MM-FIXME: # fixup A - offset: 0, value: %got_disp(.text), kind: fixup_MICROMIPS_GOT_DISP
185185

186-
# NORMAL: jalr $25 # encoding: [0x03,0x20,0xf8,0x09]
187-
# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
188-
# ALL: nop # encoding: [0x00,0x00,0x00,0x00]
186+
# MIPS: jalr $25 # encoding: [0x03,0x20,0xf8,0x09]
187+
# MM: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
188+
# ALL: nop # encoding: [0x00,0x00,0x00,0x00]
189189

190190
# local labels ($tmp symbols)
191191
jal 1f
@@ -214,20 +214,20 @@ local_label:
214214
# ELF-N64: df 99 00 00 ld $25, 0($gp)
215215
# ELF-N64-NEXT: R_MIPS_GOT_DISP/R_MIPS_NONE/R_MIPS_NONE .Ltmp0
216216

217-
# O32-MICROMIPS: lw $25, %got($tmp0)($gp) # encoding: [0xff,0x3c,A,A]
218-
# O32-MICROMIPS: # fixup A - offset: 0, value: %got($tmp0), kind: fixup_MICROMIPS_GOT16
219-
# O32-MICROMIPS: addiu $25, $25, %lo($tmp0) # encoding: [0x33,0x39,A,A]
220-
# O32-MICROMIPS: # fixup A - offset: 0, value: %lo($tmp0), kind: fixup_MICROMIPS_LO16
217+
# O32-MM: lw $25, %got($tmp0)($gp) # encoding: [0xff,0x3c,A,A]
218+
# O32-MM: # fixup A - offset: 0, value: %got($tmp0), kind: fixup_MICROMIPS_GOT16
219+
# O32-MM: addiu $25, $25, %lo($tmp0) # encoding: [0x33,0x39,A,A]
220+
# O32-MM: # fixup A - offset: 0, value: %lo($tmp0), kind: fixup_MICROMIPS_LO16
221221

222-
# N32-MICROMIPS: lw $25, %got_disp(.Ltmp0)($gp) # encoding: [0xff,0x3c,A,A]
223-
# N32-MICROMIPS: # fixup A - offset: 0, value: %got_disp(.Ltmp0), kind: fixup_MICROMIPS_GOT_DISP
222+
# N32-MM: lw $25, %got_disp(.Ltmp0)($gp) # encoding: [0xff,0x3c,A,A]
223+
# N32-MM: # fixup A - offset: 0, value: %got_disp(.Ltmp0), kind: fixup_MICROMIPS_GOT_DISP
224224

225-
# N64-MICROMIPS: ld $25, %got_disp(.Ltmp0)($gp) # encoding: [0xdf,0x99,A,A]
226-
# N64-MICROMIPS: # fixup A - offset: 0, value: %got_disp(.Ltmp0), kind: fixup_MICROMIPS_GOT_DISP
225+
# N64-MM: ld $25, %got_disp(.Ltmp0)($gp) # encoding: [0xdf,0x99,A,A]
226+
# N64-MM: # fixup A - offset: 0, value: %got_disp(.Ltmp0), kind: fixup_MICROMIPS_GOT_DISP
227227

228-
# NORMAL: jalr $25 # encoding: [0x03,0x20,0xf8,0x09]
229-
# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
230-
# ALL: nop # encoding: [0x00,0x00,0x00,0x00]
228+
# MIPS: jalr $25 # encoding: [0x03,0x20,0xf8,0x09]
229+
# MM: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
230+
# ALL: nop # encoding: [0x00,0x00,0x00,0x00]
231231

232232
.local forward_local
233233
jal forward_local
@@ -256,21 +256,20 @@ local_label:
256256
# ELF-N64: df 99 00 00 ld $25, 0($gp)
257257
# ELF-N64-NEXT: R_MIPS_GOT_DISP/R_MIPS_NONE/R_MIPS_NONE forward_local
258258

259-
# O32-MICROMIPS-FIXME: lw $25, %got(forward_local)($gp) # encoding: [0xff,0x3c,A,A]
260-
# O32-MICROMIPS-FIXME: # fixup A - offset: 0, value: %got(forward_local), kind: fixup_MICROMIPS_GOT16
261-
# O32-MICROMIPS-FIXME: addiu $25, $25, %lo(forward_local) # encoding: [0x33,0x39,A,A]
262-
# O32-MICROMIPS-FIXME: # fixup A - offset: 0, value: %lo(forward_local), kind: fixup_MICROMIPS_LO16
259+
# O32-MM-FIXME: lw $25, %got(forward_local)($gp) # encoding: [0xff,0x3c,A,A]
260+
# O32-MM-FIXME: # fixup A - offset: 0, value: %got(forward_local), kind: fixup_MICROMIPS_GOT16
261+
# O32-MM-FIXME: addiu $25, $25, %lo(forward_local) # encoding: [0x33,0x39,A,A]
262+
# O32-MM-FIXME: # fixup A - offset: 0, value: %lo(forward_local), kind: fixup_MICROMIPS_LO16
263263

264-
# N32-MICROMIPS-FIXME: lw $25, %got_disp(forward_local)($gp) # encoding: [0xff,0x3c,A,A]
265-
# N32-MICROMIPS-FIXME: # fixup A - offset: 0, value: %got_disp(forward_local), kind: fixup_MICROMIPS_GOT_DISP
264+
# N32-MM-FIXME: lw $25, %got_disp(forward_local)($gp) # encoding: [0xff,0x3c,A,A]
265+
# N32-MM-FIXME: # fixup A - offset: 0, value: %got_disp(forward_local), kind: fixup_MICROMIPS_GOT_DISP
266266

267-
# N64-MICROMIPS-FIXME: ld $25, %got_disp(forward_local)($gp) # encoding: [0xdf,0x99,A,A]
268-
# N64-MICROMIPS-FIXME: # fixup A - offset: 0, value: %got_disp(forward_local), kind: fixup_MICROMIPS_GOT_DISP
269-
270-
# NORMAL: jalr $25 # encoding: [0x03,0x20,0xf8,0x09]
271-
# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
272-
# ALL: nop # encoding: [0x00,0x00,0x00,0x00]
267+
# N64-MM-FIXME: ld $25, %got_disp(forward_local)($gp) # encoding: [0xdf,0x99,A,A]
268+
# N64-MM-FIXME: # fixup A - offset: 0, value: %got_disp(forward_local), kind: fixup_MICROMIPS_GOT_DISP
273269

270+
# MIPS: jalr $25 # encoding: [0x03,0x20,0xf8,0x09]
271+
# MM: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
272+
# ALL: nop # encoding: [0x00,0x00,0x00,0x00]
274273

275274
.end local_label
276275

@@ -279,4 +278,3 @@ local_label:
279278
add $8, $8, $8
280279
nop
281280
forward_local:
282-

0 commit comments

Comments
 (0)