xref: /aosp_15_r20/external/llvm/test/MC/Mips/expansion-jal-sym-pic.s (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker# RUN: llvm-mc %s -arch=mips -mcpu=mips32 -show-encoding |\
2*9880d681SAndroid Build Coastguard Worker# RUN:   FileCheck %s -check-prefixes=ALL,NORMAL,O32
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker# RUN: llvm-mc %s -arch=mips -mcpu=mips64 -target-abi n32 -show-encoding |\
5*9880d681SAndroid Build Coastguard Worker# RUN:   FileCheck %s -check-prefixes=ALL,NORMAL,N32
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 -show-encoding |\
8*9880d681SAndroid Build Coastguard Worker# RUN:   FileCheck %s -check-prefixes=ALL,NORMAL,N64
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker# RUN: llvm-mc %s -arch=mips -mcpu=mips32 -mattr=micromips -show-encoding |\
11*9880d681SAndroid Build Coastguard Worker# RUN:   FileCheck %s -check-prefixes=ALL,MICROMIPS,O32-MICROMIPS
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker# RUN: llvm-mc %s -arch=mips -mcpu=mips64 -target-abi n32 -mattr=micromips -show-encoding |\
14*9880d681SAndroid Build Coastguard Worker# RUN:   FileCheck %s -check-prefixes=ALL,MICROMIPS,N32-MICROMIPS
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Worker# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 -mattr=micromips -show-encoding |\
17*9880d681SAndroid Build Coastguard Worker# RUN:   FileCheck %s -check-prefixes=ALL,MICROMIPS,N64-MICROMIPS
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Worker  .weak weak_label
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker  .text
22*9880d681SAndroid Build Coastguard Worker  .option pic2
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker  .ent local_label
25*9880d681SAndroid Build Coastguard Workerlocal_label:
26*9880d681SAndroid Build Coastguard Worker  .frame  $sp, 0, $ra
27*9880d681SAndroid Build Coastguard Worker  .set noreorder
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker  jal local_label
30*9880d681SAndroid Build Coastguard Worker  nop
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Worker  jal weak_label
33*9880d681SAndroid Build Coastguard Worker  nop
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Worker  jal global_label
36*9880d681SAndroid Build Coastguard Worker  nop
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Worker  jal .text
39*9880d681SAndroid Build Coastguard Worker  nop
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Worker  # local labels ($tmp symbols)
42*9880d681SAndroid Build Coastguard Worker  jal 1f
43*9880d681SAndroid Build Coastguard Worker  nop
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Worker  .end local_label
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker1:
48*9880d681SAndroid Build Coastguard Worker  nop
49*9880d681SAndroid Build Coastguard Worker  add $8, $8, $8
50*9880d681SAndroid Build Coastguard Worker  nop
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Worker# Expanding "jal local_label":
53*9880d681SAndroid Build Coastguard Worker# O32: lw     $25, %got(local_label)($gp)   # encoding: [0x8f,0x99,A,A]
54*9880d681SAndroid Build Coastguard Worker# O32:                                      #   fixup A - offset: 0, value: %got(local_label), kind:   fixup_Mips_GOT
55*9880d681SAndroid Build Coastguard Worker# O32: addiu  $25, $25, %lo(local_label)    # encoding: [0x27,0x39,A,A]
56*9880d681SAndroid Build Coastguard Worker# O32:                                      #   fixup A - offset: 0, value: %lo(local_label), kind:   fixup_Mips_LO16
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Worker# N32: lw  $25, %got_disp(local_label)($gp) # encoding: [0x8f,0x99,A,A]
59*9880d681SAndroid Build Coastguard Worker# N32:                                      #   fixup A - offset: 0, value: %got_disp(local_label), kind:   fixup_Mips_GOT_DISP
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Worker# N64: ld  $25, %got_disp(local_label)($gp) # encoding: [0xdf,0x99,A,A]
62*9880d681SAndroid Build Coastguard Worker# N64:                                      #   fixup A - offset: 0, value: %got_disp(local_label), kind:   fixup_Mips_GOT_DISP
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS: lw    $25, %got(local_label)($gp)      # encoding: [0xff,0x3c,A,A]
65*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS:                                        #   fixup A - offset: 0, value: %got(local_label), kind:   fixup_MICROMIPS_GOT16
66*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS: addiu $25, $25, %lo(local_label)       # encoding: [0x33,0x39,A,A]
67*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS:                                        #   fixup A - offset: 0, value: %lo(local_label), kind:   fixup_MICROMIPS_LO16
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Worker# N32-MICROMIPS: lw    $25, %got_disp(local_label)($gp) # encoding: [0xff,0x3c,A,A]
70*9880d681SAndroid Build Coastguard Worker# N32-MICROMIPS:                                        #   fixup A - offset: 0, value: %got_disp(local_label), kind: fixup_MICROMIPS_GOT_DISP
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Worker# N64-MICROMIPS: ld    $25, %got_disp(local_label)($gp) # encoding: [0xdf,0x99,A,A]
73*9880d681SAndroid Build Coastguard Worker# N64-MICROMIPS:                                        #   fixup A - offset: 0, value: %got_disp(local_label), kind: fixup_MICROMIPS_GOT_DISP
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Worker# NORMAL:    jalr $25      # encoding: [0x03,0x20,0xf8,0x09]
76*9880d681SAndroid Build Coastguard Worker# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
77*9880d681SAndroid Build Coastguard Worker# ALL:       nop           # encoding: [0x00,0x00,0x00,0x00]
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Worker# Expanding "jal weak_label":
81*9880d681SAndroid Build Coastguard Worker# O32: lw  $25, %call16(weak_label)($gp) # encoding: [0x8f,0x99,A,A]
82*9880d681SAndroid Build Coastguard Worker# O32:                                   #   fixup A - offset: 0, value: %call16(weak_label), kind:   fixup_Mips_CALL16
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Worker# N32: lw  $25, %call16(weak_label)($gp) # encoding: [0x8f,0x99,A,A]
85*9880d681SAndroid Build Coastguard Worker# N32:                                   #   fixup A - offset: 0, value: %call16(weak_label), kind:   fixup_Mips_CALL16
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Worker# N64: ld  $25, %call16(weak_label)($gp) # encoding: [0xdf,0x99,A,A]
88*9880d681SAndroid Build Coastguard Worker# N64:                                   #   fixup A - offset: 0, value: %call16(weak_label), kind:   fixup_Mips_CALL16
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS: lw  $25, %call16(weak_label)($gp) # encoding: [0xff,0x3c,A,A]
91*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS:                                   #   fixup A - offset: 0, value: %call16(weak_label), kind:   fixup_MICROMIPS_CALL16
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Worker# N32-MICROMIPS: lw  $25, %call16(weak_label)($gp) # encoding: [0xff,0x3c,A,A]
94*9880d681SAndroid Build Coastguard Worker# N32-MICROMIPS:                                   #   fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16
95*9880d681SAndroid Build Coastguard Worker
96*9880d681SAndroid Build Coastguard Worker# N64-MICROMIPS: ld  $25, %call16(weak_label)($gp) # encoding: [0xdf,0x99,A,A]
97*9880d681SAndroid Build Coastguard Worker# N64-MICROMIPS:                                   #   fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Worker# NORMAL:    jalr $25      # encoding: [0x03,0x20,0xf8,0x09]
100*9880d681SAndroid Build Coastguard Worker# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
101*9880d681SAndroid Build Coastguard Worker# ALL:       nop           # encoding: [0x00,0x00,0x00,0x00]
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Worker
104*9880d681SAndroid Build Coastguard Worker# Expanding "jal global_label":
105*9880d681SAndroid Build Coastguard Worker# O32: lw  $25, %call16(global_label)($gp) # encoding: [0x8f,0x99,A,A]
106*9880d681SAndroid Build Coastguard Worker# O32:                                     #   fixup A - offset: 0, value: %call16(global_label), kind:   fixup_Mips_CALL16
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Worker# N32: lw  $25, %call16(global_label)($gp) # encoding: [0x8f,0x99,A,A]
109*9880d681SAndroid Build Coastguard Worker# N32:                                     #   fixup A - offset: 0, value: %call16(global_label), kind:   fixup_Mips_CALL16
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Worker# N64: ld  $25, %call16(global_label)($gp) # encoding: [0xdf,0x99,A,A]
112*9880d681SAndroid Build Coastguard Worker# N64:                                     #   fixup A - offset: 0, value: %call16(global_label), kind:   fixup_Mips_CALL16
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS: lw  $25, %call16(global_label)($gp) # encoding: [0xff,0x3c,A,A]
115*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS:                                     #   fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Worker# N32-MICROMIPS: lw  $25, %call16(global_label)($gp) # encoding: [0xff,0x3c,A,A]
118*9880d681SAndroid Build Coastguard Worker# N32-MICROMIPS:                                     #   fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Worker# N64-MICROMIPS: ld  $25, %call16(global_label)($gp) # encoding: [0xdf,0x99,A,A]
121*9880d681SAndroid Build Coastguard Worker# N64-MICROMIPS:                                     #   fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Worker# NORMAL:    jalr $25      # encoding: [0x03,0x20,0xf8,0x09]
124*9880d681SAndroid Build Coastguard Worker# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
125*9880d681SAndroid Build Coastguard Worker# ALL:       nop           # encoding: [0x00,0x00,0x00,0x00]
126*9880d681SAndroid Build Coastguard Worker
127*9880d681SAndroid Build Coastguard Worker
128*9880d681SAndroid Build Coastguard Worker# FIXME: The .text section MCSymbol isn't created when printing assembly. However,
129*9880d681SAndroid Build Coastguard Worker# it is created when generating an ELF object file.
130*9880d681SAndroid Build Coastguard Worker# Expanding "jal .text":
131*9880d681SAndroid Build Coastguard Worker# O32-FIXME: lw    $25, %got(.text)($gp)           # encoding: [0x8f,0x99,A,A]
132*9880d681SAndroid Build Coastguard Worker# O32-FIXME:                                       #   fixup A - offset: 0, value: %got(.text), kind: fixup_Mips_GOT
133*9880d681SAndroid Build Coastguard Worker# O32-FIXME: addiu $25, $25, %lo(.text)            # encoding: [0x27,0x39,A,A]
134*9880d681SAndroid Build Coastguard Worker# O32-FIXME:                                       #   fixup A - offset: 0, value: %lo(.text), kind: fixup_Mips_LO16
135*9880d681SAndroid Build Coastguard Worker
136*9880d681SAndroid Build Coastguard Worker# N32-FIXME: lw  $25, %got_disp(.text)($gp)        # encoding: [0x8f,0x99,A,A]
137*9880d681SAndroid Build Coastguard Worker# N32-FIXME:                                       #   fixup A - offset: 0, value: %got_disp(.text), kind: fixup_Mips_GOT_DISP
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Worker# N64-FIXME: ld  $25, %got_disp(.text)($gp)        # encoding: [0xdf,0x99,A,A]
140*9880d681SAndroid Build Coastguard Worker# N64-FIXME:                                       #   fixup A - offset: 0, value: %got_disp(.text), kind: fixup_Mips_GOT_DISP
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS-FIXME: lw    $25, %got(.text)($gp)      # encoding: [0xff,0x3c,A,A]
143*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS-FIXME:                                  #   fixup A - offset: 0, value: %got(.text), kind: fixup_MICROMIPS_GOT16
144*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS-FIXME: addiu $25, $25, %lo(.text)       # encoding: [0x33,0x39,A,A]
145*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS-FIXME:                                  #   fixup A - offset: 0, value: %lo(.text), kind: fixup_MICROMIPS_LO16
146*9880d681SAndroid Build Coastguard Worker
147*9880d681SAndroid Build Coastguard Worker# N32-MICROMIPS-FIXME: lw    $25, %got_disp(.text)($gp) # encoding: [0xff,0x3c,A,A]
148*9880d681SAndroid Build Coastguard Worker# N32-MICROMIPS-FIXME:                                  #   fixup A - offset: 0, value: %got_disp(.text), kind: fixup_MICROMIPS_GOT_DISP
149*9880d681SAndroid Build Coastguard Worker
150*9880d681SAndroid Build Coastguard Worker# N64-MICROMIPS-FIXME: ld    $25, %got_disp(.text)($gp) # encoding: [0xdf,0x99,A,A]
151*9880d681SAndroid Build Coastguard Worker# N64-MICROMIPS-FIXME:                                  #   fixup A - offset: 0, value: %got_disp(.text), kind: fixup_MICROMIPS_GOT_DISP
152*9880d681SAndroid Build Coastguard Worker
153*9880d681SAndroid Build Coastguard Worker# NORMAL:    jalr $25      # encoding: [0x03,0x20,0xf8,0x09]
154*9880d681SAndroid Build Coastguard Worker# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
155*9880d681SAndroid Build Coastguard Worker# ALL:       nop           # encoding: [0x00,0x00,0x00,0x00]
156*9880d681SAndroid Build Coastguard Worker
157*9880d681SAndroid Build Coastguard Worker
158*9880d681SAndroid Build Coastguard Worker# Expanding "jal 1f":
159*9880d681SAndroid Build Coastguard Worker# O32: lw     $25, %got($tmp0)($gp)   # encoding: [0x8f,0x99,A,A]
160*9880d681SAndroid Build Coastguard Worker# O32:                                #   fixup A - offset: 0, value: %got($tmp0), kind:   fixup_Mips_GOT
161*9880d681SAndroid Build Coastguard Worker# O32: addiu  $25, $25, %lo($tmp0)    # encoding: [0x27,0x39,A,A]
162*9880d681SAndroid Build Coastguard Worker# O32:                                #   fixup A - offset: 0, value: %lo($tmp0), kind:   fixup_Mips_LO16
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Worker# N32: lw  $25, %got_disp($tmp0)($gp) # encoding: [0x8f,0x99,A,A]
165*9880d681SAndroid Build Coastguard Worker# N32:                                #   fixup A - offset: 0, value: %got_disp($tmp0), kind:   fixup_Mips_GOT_DISP
166*9880d681SAndroid Build Coastguard Worker
167*9880d681SAndroid Build Coastguard Worker# N64: ld  $25, %got_disp($tmp0)($gp) # encoding: [0xdf,0x99,A,A]
168*9880d681SAndroid Build Coastguard Worker# N64:                                #   fixup A - offset: 0, value: %got_disp($tmp0), kind:   fixup_Mips_GOT_DISP
169*9880d681SAndroid Build Coastguard Worker
170*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS: lw    $25, %got($tmp0)($gp)    # encoding: [0xff,0x3c,A,A]
171*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS:                                #   fixup A - offset: 0, value: %got($tmp0), kind: fixup_MICROMIPS_GOT16
172*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS: addiu $25, $25, %lo($tmp0)     # encoding: [0x33,0x39,A,A]
173*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS:                                #   fixup A - offset: 0, value: %lo($tmp0), kind: fixup_MICROMIPS_LO16
174*9880d681SAndroid Build Coastguard Worker
175*9880d681SAndroid Build Coastguard Worker# N32-MICROMIPS: lw  $25, %got_disp($tmp0)($gp) # encoding: [0xff,0x3c,A,A]
176*9880d681SAndroid Build Coastguard Worker# N32-MICROMIPS:                                #   fixup A - offset: 0, value: %got_disp($tmp0), kind: fixup_MICROMIPS_GOT_DISP
177*9880d681SAndroid Build Coastguard Worker
178*9880d681SAndroid Build Coastguard Worker# N64-MICROMIPS: ld  $25, %got_disp($tmp0)($gp) # encoding: [0xdf,0x99,A,A]
179*9880d681SAndroid Build Coastguard Worker# N64-MICROMIPS:                                #   fixup A - offset: 0, value: %got_disp($tmp0), kind: fixup_MICROMIPS_GOT_DISP
180*9880d681SAndroid Build Coastguard Worker
181*9880d681SAndroid Build Coastguard Worker# NORMAL:    jalr $25      # encoding: [0x03,0x20,0xf8,0x09]
182*9880d681SAndroid Build Coastguard Worker# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
183*9880d681SAndroid Build Coastguard Worker# ALL:       nop           # encoding: [0x00,0x00,0x00,0x00]
184