[obj2yaml] - Fix a comment. NFC.
[llvm-complete.git] / test / MC / Mips / cpsetup.s
blobc963df09ce6ec7ad69ab22919b0f16e585e3ffba
1 # RUN: llvm-mc -triple mips-unknown-linux -target-abi o32 -filetype=obj -o - %s | \
2 # RUN: llvm-objdump -d -r -z - | FileCheck -check-prefixes=ALL,O32 %s
4 # RUN: llvm-mc -triple mips-unknown-linux -target-abi o32 %s | \
5 # RUN: FileCheck -check-prefixes=ALL,ASM,ASM-O32 %s
7 # FIXME: Now we check .cpsetup expansion for `-mno-shared` case only.
8 # We also need to implement/check the `-mshared` case.
9 # RUN: llvm-mc -triple mips64-unknown-linux -target-abi n32 -filetype=obj -o - %s | \
10 # RUN: llvm-objdump -d -r -z - | \
11 # RUN: FileCheck -check-prefixes=ALL,NXX,N32 %s
13 # RUN: llvm-mc -triple mips64-unknown-linux -target-abi n32 %s | \
14 # RUN: FileCheck -check-prefixes=ALL,ASM,ASM-N32 %s
16 # RUN: llvm-mc -triple mips64-unknown-linux %s -filetype=obj -o - | \
17 # RUN: llvm-objdump -d -r -z - | \
18 # RUN: FileCheck -check-prefixes=ALL,NXX,N64 %s
20 # RUN: llvm-mc -triple mips64-unknown-linux %s | \
21 # RUN: FileCheck -check-prefixes=ALL,ASM,ASM-N64 %s
23 .text
24 .option pic2
25 t1:
26 .cpsetup $25, 8, __cerror
27 nop
28 .cpreturn
29 nop
31 # ALL-LABEL: t1:
33 # O32-NOT: __cerror
35 # NXX-NEXT: sd $gp, 8($sp)
36 # NXX-NEXT: lui $gp, 0
37 # N32-NEXT: R_MIPS_HI16 __gnu_local_gp
38 # N64-NEXT: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_HI16 __cerror
39 # NXX-NEXT: addiu $gp, $gp, 0
40 # N32-NEXT: R_MIPS_LO16 __gnu_local_gp
41 # N64-NEXT: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_LO16 __cerror
42 # N64-NEXT: daddu $gp, $gp, $25
44 # ASM-NEXT: .cpsetup $25, 8, __cerror
46 # ALL-NEXT: nop
48 # ASM-NEXT: .cpreturn
49 # NXX-NEXT: ld $gp, 8($sp)
51 # ALL-NEXT: nop
53 t2:
54 .cpsetup $25, $2, __cerror
55 nop
56 .cpreturn
57 nop
59 # ALL-LABEL: t2:
61 # O32-NOT: __cerror
63 # NXX-NEXT: move $2, $gp
64 # NXX-NEXT: lui $gp, 0
65 # N32-NEXT: R_MIPS_HI16 __gnu_local_gp
66 # N64-NEXT: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_HI16 __cerror
67 # NXX-NEXT: addiu $gp, $gp, 0
68 # N32-NEXT: R_MIPS_LO16 __gnu_local_gp
69 # N64-NEXT: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_LO16 __cerror
70 # N64-NEXT: daddu $gp, $gp, $25
72 # ASM-NEXT: .cpsetup $25, $2, __cerror
74 # ALL-NEXT: nop
76 # ASM-NEXT: .cpreturn
77 # NXX-NEXT: move $gp, $2
79 # ALL-NEXT: nop
81 # .cpsetup with local labels (PR22518):
83 # The '1:' label isn't emitted in all cases but we still want a label to match
84 # so we force one here.
86 t3:
87 nop
89 .cpsetup $25, $2, 1b
90 nop
91 sub $3, $3, $2
93 # ALL-LABEL: t3:
94 # ALL-NEXT: nop
96 # O32-NEXT: nop
97 # O32-NEXT: sub $3, $3, $2
99 # NXX-NEXT: move $2, $gp
100 # NXX-NEXT: lui $gp, 0
101 # N32-NEXT: {{^ *0+}}38: R_MIPS_HI16 __gnu_local_gp
102 # N64-NEXT: {{^ *0+}}40: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_HI16 .text
103 # NXX-NEXT: addiu $gp, $gp, 0
104 # N32-NEXT: {{^ *0+}}3c: R_MIPS_LO16 __gnu_local_gp
105 # N64-NEXT: {{^ *0+}}44: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_LO16 .text
106 # N64-NEXT: daddu $gp, $gp, $25
107 # NXX-NEXT: nop
108 # NXX-NEXT: sub $3, $3, $2
110 # ASM-O32: [[LABEL:\$tmp0]]:
111 # ASM-N32: [[LABEL:\.Ltmp0]]:
112 # ASM-N64: [[LABEL:\.Ltmp0]]:
113 # ASM-NEXT: .cpsetup $25, $2, [[LABEL]]
115 # Ensure we have at least one instruction between labels so that the labels
116 # we're matching aren't removed.
118 # ALL-NEXT: nop
120 .option pic0
123 .cpsetup $25, 8, __cerror
125 .cpreturn
128 # Testing that .cpsetup expands to nothing in this case
129 # by checking that the next instruction after the first
130 # nop is also a 'nop'.
132 # ALL-LABEL: t4:
134 # NXX-NEXT: nop
135 # NXX-NEXT: nop
136 # NXX-NEXT: nop
138 # ASM-NEXT: nop
139 # ASM-NEXT: .cpsetup $25, 8, __cerror
140 # ASM-NEXT: nop
141 # ASM-NEXT: .cpreturn
142 # ASM-NEXT: nop
144 # Test that we accept constant expressions.
145 .option pic2
147 .cpsetup $25, ((8*4) - (3*8)), __cerror
150 # ALL-LABEL: t5:
152 # O32-NOT: __cerror
154 # NXX-NEXT: sd $gp, 8($sp)
155 # NXX-NEXT: lui $gp, 0
156 # N32-NEXT: R_MIPS_HI16 __gnu_local_gp
157 # N64-NEXT: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_HI16 __cerror
158 # NXX-NEXT: addiu $gp, $gp, 0
159 # N32-NEXT: R_MIPS_LO16 __gnu_local_gp
160 # N64-NEXT: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_LO16 __cerror
161 # N64-NEXT: daddu $gp, $gp, $25
163 # ASM-NEXT: .cpsetup $25, 8, __cerror
165 # ALL-NEXT: nop
167 t1b:
168 IMM_8 = 8
169 .cpsetup $25, IMM_8, __cerror
171 .cpreturn
174 # ALL-LABEL: t1b:
175 # ASM-NEXT: .set IMM_8, 8
177 # O32-NOT: __cerror
179 # NXX-NEXT: sd $gp, 8($sp)
180 # NXX-NEXT: lui $gp, 0
181 # N32-NEXT: R_MIPS_HI16 __gnu_local_gp
182 # N64-NEXT: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_HI16 __cerror
183 # NXX-NEXT: addiu $gp, $gp, 0
184 # N32-NEXT: R_MIPS_LO16 __gnu_local_gp
185 # N64-NEXT: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_LO16 __cerror
186 # N64-NEXT: daddu $gp, $gp, $25
188 # ASM-NEXT: .cpsetup $25, 8, __cerror
190 # ALL-NEXT: nop
192 # ASM-NEXT: .cpreturn
193 # NXX-NEXT: ld $gp, 8($sp)
195 # ALL-NEXT: nop