OLD | NEW |
1 ; Simple test that returns various immediates. For fixed-width instruction | 1 ; Simple test that returns various immediates. For fixed-width instruction |
2 ; sets, some immediates are more complicated than others. | 2 ; sets, some immediates are more complicated than others. |
3 ; For x86-32, it shouldn't be a problem. | 3 ; For x86-32, it shouldn't be a problem. |
4 | 4 |
5 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \ | 5 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \ |
6 ; RUN: -allow-externally-defined-symbols | FileCheck %s | 6 ; RUN: -allow-externally-defined-symbols | FileCheck %s |
7 | 7 |
8 ; TODO(jvoung): Stop skipping unimplemented parts (via --skip-unimplemented) | 8 ; TODO(jvoung): Stop skipping unimplemented parts (via --skip-unimplemented) |
9 ; once enough infrastructure is in. Also, switch to --filetype=obj | 9 ; once enough infrastructure is in. Also, switch to --filetype=obj |
10 ; when possible. | 10 ; when possible. |
11 ; RUN: %if --need=target_ARM32 --need=allow_dump \ | 11 ; RUN: %if --need=target_ARM32 --need=allow_dump \ |
12 ; RUN: --command %p2i --filetype=asm --assemble \ | 12 ; RUN: --command %p2i --filetype=asm --assemble \ |
13 ; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \ | 13 ; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \ |
14 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ | 14 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ |
15 ; RUN: --command FileCheck --check-prefix ARM32 %s | 15 ; RUN: --command FileCheck --check-prefix ARM32 %s |
16 | 16 |
| 17 ; TODO(rkotler): Stop skipping unimplemented parts (via --skip-unimplemented) |
| 18 ; once enough infrastructure is in. Also, switch to --filetype=obj |
| 19 ; when possible. |
| 20 ; RUN: %if --need=target_MIPS32 --need=allow_dump \ |
| 21 ; RUN: --command %p2i --filetype=asm --assemble \ |
| 22 ; RUN: --disassemble --target mips32 -i %s --args -O2 --skip-unimplemented \ |
| 23 ; RUN: | %if --need=target_MIPS32 --need=allow_dump \ |
| 24 ; RUN: --command FileCheck --check-prefix MIPS32 %s |
| 25 |
17 ; Test 8-bits of all ones rotated right by various amounts (even vs odd). | 26 ; Test 8-bits of all ones rotated right by various amounts (even vs odd). |
18 ; ARM has a shifter that allows encoding 8-bits rotated right by even amounts. | 27 ; ARM has a shifter that allows encoding 8-bits rotated right by even amounts. |
19 ; The first few "rotate right" test cases are expressed as shift-left. | 28 ; The first few "rotate right" test cases are expressed as shift-left. |
20 | 29 |
21 define internal i32 @ret_8bits_shift_left0() { | 30 define internal i32 @ret_8bits_shift_left0() { |
22 ret i32 255 | 31 ret i32 255 |
23 } | 32 } |
24 ; CHECK-LABEL: ret_8bits_shift_left0 | 33 ; CHECK-LABEL: ret_8bits_shift_left0 |
25 ; CHECK-NEXT: mov eax,0xff | 34 ; CHECK-NEXT: mov eax,0xff |
26 ; ARM32-LABEL: ret_8bits_shift_left0 | 35 ; ARM32-LABEL: ret_8bits_shift_left0 |
27 ; ARM32-NEXT: mov r0, #255 | 36 ; ARM32-NEXT: mov r0, #255 |
| 37 ; MIPS32-LABEL: ret_8bits_shift_left0 |
| 38 ; MIPS32-NEXT: li v0,255 |
28 | 39 |
29 define internal i32 @ret_8bits_shift_left1() { | 40 define internal i32 @ret_8bits_shift_left1() { |
30 ret i32 510 | 41 ret i32 510 |
31 } | 42 } |
32 ; CHECK-LABEL: ret_8bits_shift_left1 | 43 ; CHECK-LABEL: ret_8bits_shift_left1 |
33 ; CHECK-NEXT: mov eax,0x1fe | 44 ; CHECK-NEXT: mov eax,0x1fe |
34 ; ARM32-LABEL: ret_8bits_shift_left1 | 45 ; ARM32-LABEL: ret_8bits_shift_left1 |
35 ; ARM32-NEXT: movw r0, #510 | 46 ; ARM32-NEXT: movw r0, #510 |
| 47 ; MIPS32-LABEL: ret_8bits_shift_left1 |
| 48 ; MIPS32-NEXT: li v0,510 |
36 | 49 |
37 define internal i32 @ret_8bits_shift_left2() { | 50 define internal i32 @ret_8bits_shift_left2() { |
38 ret i32 1020 | 51 ret i32 1020 |
39 } | 52 } |
40 ; CHECK-LABEL: ret_8bits_shift_left2 | 53 ; CHECK-LABEL: ret_8bits_shift_left2 |
41 ; CHECK-NEXT: mov eax,0x3fc | 54 ; CHECK-NEXT: mov eax,0x3fc |
42 ; ARM32-LABEL: ret_8bits_shift_left2 | 55 ; ARM32-LABEL: ret_8bits_shift_left2 |
43 ; ARM32-NEXT: mov r0, #1020 | 56 ; ARM32-NEXT: mov r0, #1020 |
| 57 ; MIPS32-LABEL: ret_8bits_shift_left2 |
| 58 ; MIPS32-NEXT: li v0,1020 |
44 | 59 |
45 define internal i32 @ret_8bits_shift_left4() { | 60 define internal i32 @ret_8bits_shift_left4() { |
46 ret i32 4080 | 61 ret i32 4080 |
47 } | 62 } |
48 ; CHECK-LABEL: ret_8bits_shift_left4 | 63 ; CHECK-LABEL: ret_8bits_shift_left4 |
49 ; CHECK-NEXT: mov eax,0xff0 | 64 ; CHECK-NEXT: mov eax,0xff0 |
50 ; ARM32-LABEL: ret_8bits_shift_left4 | 65 ; ARM32-LABEL: ret_8bits_shift_left4 |
51 ; ARM32-NEXT: mov r0, #4080 | 66 ; ARM32-NEXT: mov r0, #4080 |
| 67 ; MIPS32-LABEL: ret_8bits_shift_left4 |
| 68 ; MIPS32-NEXT: li v0,4080 |
52 | 69 |
53 define internal i32 @ret_8bits_shift_left14() { | 70 define internal i32 @ret_8bits_shift_left14() { |
54 ret i32 4177920 | 71 ret i32 4177920 |
55 } | 72 } |
56 ; CHECK-LABEL: ret_8bits_shift_left14 | 73 ; CHECK-LABEL: ret_8bits_shift_left14 |
57 ; CHECK-NEXT: mov eax,0x3fc000 | 74 ; CHECK-NEXT: mov eax,0x3fc000 |
58 ; ARM32-LABEL: ret_8bits_shift_left14 | 75 ; ARM32-LABEL: ret_8bits_shift_left14 |
59 ; ARM32-NEXT: mov r0, #4177920 | 76 ; ARM32-NEXT: mov r0, #4177920 |
| 77 ; MIPS32-LABEL: ret_8bits_shift_left14 |
| 78 ; MIPS32-NEXT: lui v0,0x3f |
| 79 ; MIPS32-NEXT: ori v0,v0,0xc000 |
60 | 80 |
61 define internal i32 @ret_8bits_shift_left15() { | 81 define internal i32 @ret_8bits_shift_left15() { |
62 ret i32 8355840 | 82 ret i32 8355840 |
63 } | 83 } |
64 ; CHECK-LABEL: ret_8bits_shift_left15 | 84 ; CHECK-LABEL: ret_8bits_shift_left15 |
65 ; CHECK-NEXT: mov eax,0x7f8000 | 85 ; CHECK-NEXT: mov eax,0x7f8000 |
66 ; ARM32-LABEL: ret_8bits_shift_left15 | 86 ; ARM32-LABEL: ret_8bits_shift_left15 |
67 ; ARM32-NEXT: movw r0, #32768 | 87 ; ARM32-NEXT: movw r0, #32768 |
68 ; ARM32-NEXT: movt r0, #127 | 88 ; ARM32-NEXT: movt r0, #127 |
| 89 ; MIPS32-LABEL: ret_8bits_shift_left15 |
| 90 ; MIPS32-NEXT: lui v0,0x7f |
| 91 ; MIPS32-NEXT: ori v0,v0,0x8000 |
69 | 92 |
70 ; Shift 8 bits left by 24 to the i32 limit. This is also ror by 8 bits. | 93 ; Shift 8 bits left by 24 to the i32 limit. This is also ror by 8 bits. |
71 | 94 |
72 define internal i32 @ret_8bits_shift_left24() { | 95 define internal i32 @ret_8bits_shift_left24() { |
73 ret i32 4278190080 | 96 ret i32 4278190080 |
74 } | 97 } |
75 ; CHECK-LABEL: ret_8bits_shift_left24 | 98 ; CHECK-LABEL: ret_8bits_shift_left24 |
76 ; CHECK-NEXT: mov eax,0xff000000 | 99 ; CHECK-NEXT: mov eax,0xff000000 |
77 ; ARM32-LABEL: ret_8bits_shift_left24 | 100 ; ARM32-LABEL: ret_8bits_shift_left24 |
78 ; ARM32-NEXT: mov r0, #-16777216 | 101 ; ARM32-NEXT: mov r0, #-16777216 |
79 ; ARM32-NEXT: bx lr | 102 ; ARM32-NEXT: bx lr |
| 103 ; MIPS32-LABEL: ret_8bits_shift_left24 |
| 104 ; MIPS32-NEXT: lui v0,0xff00 |
| 105 ; MIPS32-NEXT: ori v0,v0,0x0 |
80 | 106 |
81 ; The next few cases wrap around and actually demonstrate the rotation. | 107 ; The next few cases wrap around and actually demonstrate the rotation. |
82 | 108 |
83 define internal i32 @ret_8bits_ror7() { | 109 define internal i32 @ret_8bits_ror7() { |
84 ret i32 4261412865 | 110 ret i32 4261412865 |
85 } | 111 } |
86 ; CHECK-LABEL: ret_8bits_ror7 | 112 ; CHECK-LABEL: ret_8bits_ror7 |
87 ; CHECK-NEXT: mov eax,0xfe000001 | 113 ; CHECK-NEXT: mov eax,0xfe000001 |
88 ; ARM32-LABEL: ret_8bits_ror7 | 114 ; ARM32-LABEL: ret_8bits_ror7 |
89 ; ARM32-NEXT: movw r0, #1 | 115 ; ARM32-NEXT: movw r0, #1 |
90 ; ARM32-NEXT: movt r0, #65024 | 116 ; ARM32-NEXT: movt r0, #65024 |
| 117 ; MIPS32-LABEL: ret_8bits_ror7 |
| 118 ; MIPS32-NEXT: lui v0,0xfe00 |
| 119 ; MIPS32-NEXT: ori v0,v0,0x1 |
91 | 120 |
92 define internal i32 @ret_8bits_ror6() { | 121 define internal i32 @ret_8bits_ror6() { |
93 ret i32 4227858435 | 122 ret i32 4227858435 |
94 } | 123 } |
95 ; CHECK-LABEL: ret_8bits_ror6 | 124 ; CHECK-LABEL: ret_8bits_ror6 |
96 ; CHECK-NEXT: mov eax,0xfc000003 | 125 ; CHECK-NEXT: mov eax,0xfc000003 |
97 ; ARM32-LABEL: ret_8bits_ror6 | 126 ; ARM32-LABEL: ret_8bits_ror6 |
98 ; ARM32-NEXT: mov r0, #-67108861 | 127 ; ARM32-NEXT: mov r0, #-67108861 |
99 ; ARM32-NEXT: bx lr | 128 ; ARM32-NEXT: bx lr |
| 129 ; MIPS32-LABEL: ret_8bits_ror6 |
| 130 ; MIPS32-NEXT: lui v0,0xfc00 |
| 131 ; MIPS32-NEXT: ori v0,v0,0x3 |
100 | 132 |
101 define internal i32 @ret_8bits_ror5() { | 133 define internal i32 @ret_8bits_ror5() { |
102 ret i32 4160749575 | 134 ret i32 4160749575 |
103 } | 135 } |
104 ; CHECK-LABEL: ret_8bits_ror5 | 136 ; CHECK-LABEL: ret_8bits_ror5 |
105 ; CHECK-NEXT: mov eax,0xf8000007 | 137 ; CHECK-NEXT: mov eax,0xf8000007 |
106 ; ARM32-LABEL: ret_8bits_ror5 | 138 ; ARM32-LABEL: ret_8bits_ror5 |
107 ; ARM32-NEXT: movw r0, #7 | 139 ; ARM32-NEXT: movw r0, #7 |
108 ; ARM32-NEXT: movt r0, #63488 | 140 ; ARM32-NEXT: movt r0, #63488 |
| 141 ; MIPS32-LABEL: ret_8bits_ror5 |
| 142 ; MIPS32-NEXT: lui v0,0xf800 |
| 143 ; MIPS32-NEXT: ori v0,v0,0x7 |
109 | 144 |
110 define internal i32 @ret_8bits_ror4() { | 145 define internal i32 @ret_8bits_ror4() { |
111 ret i32 4026531855 | 146 ret i32 4026531855 |
112 } | 147 } |
113 ; CHECK-LABEL: ret_8bits_ror4 | 148 ; CHECK-LABEL: ret_8bits_ror4 |
114 ; CHECK-NEXT: mov eax,0xf000000f | 149 ; CHECK-NEXT: mov eax,0xf000000f |
115 ; ARM32-LABEL: ret_8bits_ror4 | 150 ; ARM32-LABEL: ret_8bits_ror4 |
116 ; ARM32-NEXT: mov r0, #-268435441 | 151 ; ARM32-NEXT: mov r0, #-268435441 |
117 ; ARM32-NEXT: bx lr | 152 ; ARM32-NEXT: bx lr |
| 153 ; MIPS32-LABEL: ret_8bits_ror4 |
| 154 ; MIPS32-NEXT: lui v0,0xf000 |
| 155 ; MIPS32-NEXT: ori v0,v0,0xf |
118 | 156 |
119 define internal i32 @ret_8bits_ror3() { | 157 define internal i32 @ret_8bits_ror3() { |
120 ret i32 3758096415 | 158 ret i32 3758096415 |
121 } | 159 } |
122 ; CHECK-LABEL: ret_8bits_ror3 | 160 ; CHECK-LABEL: ret_8bits_ror3 |
123 ; CHECK-NEXT: mov eax,0xe000001f | 161 ; CHECK-NEXT: mov eax,0xe000001f |
124 ; ARM32-LABEL: ret_8bits_ror3 | 162 ; ARM32-LABEL: ret_8bits_ror3 |
125 ; ARM32-NEXT: movw r0, #31 | 163 ; ARM32-NEXT: movw r0, #31 |
126 ; ARM32-NEXT: movt r0, #57344 | 164 ; ARM32-NEXT: movt r0, #57344 |
| 165 ; MIPS32-LABEL: ret_8bits_ror3 |
| 166 ; MIPS32-NEXT: lui v0,0xe000 |
| 167 ; MIPS32-NEXT: ori v0,v0,0x1f |
| 168 |
127 | 169 |
128 define internal i32 @ret_8bits_ror2() { | 170 define internal i32 @ret_8bits_ror2() { |
129 ret i32 3221225535 | 171 ret i32 3221225535 |
130 } | 172 } |
131 ; CHECK-LABEL: ret_8bits_ror2 | 173 ; CHECK-LABEL: ret_8bits_ror2 |
132 ; CHECK-NEXT: mov eax,0xc000003f | 174 ; CHECK-NEXT: mov eax,0xc000003f |
133 ; ARM32-LABEL: ret_8bits_ror2 | 175 ; ARM32-LABEL: ret_8bits_ror2 |
134 ; ARM32-NEXT: mov r0, #-1073741761 | 176 ; ARM32-NEXT: mov r0, #-1073741761 |
135 ; ARM32-NEXT: bx lr | 177 ; ARM32-NEXT: bx lr |
| 178 ; MIPS32-LABEL: ret_8bits_ror2 |
| 179 ; MIPS32-NEXT: lui v0,0xc000 |
| 180 ; MIPS32-NEXT: ori v0,v0,0x3f |
136 | 181 |
137 define internal i32 @ret_8bits_ror1() { | 182 define internal i32 @ret_8bits_ror1() { |
138 ret i32 2147483775 | 183 ret i32 2147483775 |
139 } | 184 } |
140 ; CHECK-LABEL: ret_8bits_ror1 | 185 ; CHECK-LABEL: ret_8bits_ror1 |
141 ; CHECK-NEXT: mov eax,0x8000007f | 186 ; CHECK-NEXT: mov eax,0x8000007f |
142 ; ARM32-LABEL: ret_8bits_ror1 | 187 ; ARM32-LABEL: ret_8bits_ror1 |
143 ; ARM32-NEXT: movw r0, #127 | 188 ; ARM32-NEXT: movw r0, #127 |
144 ; ARM32-NEXT: movt r0, #32768 | 189 ; ARM32-NEXT: movt r0, #32768 |
| 190 ; MIPS32-LABEL: ret_8bits_ror1 |
| 191 ; MIPS32-NEXT: lui v0,0x8000 |
| 192 ; MIPS32-NEXT: ori v0,v0,0x7f |
145 | 193 |
146 ; Some architectures can handle 16-bits at a time efficiently, | 194 ; Some architectures can handle 16-bits at a time efficiently, |
147 ; so also test those. | 195 ; so also test those. |
148 | 196 |
149 define internal i32 @ret_16bits_lower() { | 197 define internal i32 @ret_16bits_lower() { |
150 ret i32 65535 | 198 ret i32 65535 |
151 } | 199 } |
152 ; CHECK-LABEL: ret_16bits_lower | 200 ; CHECK-LABEL: ret_16bits_lower |
153 ; CHECK-NEXT: mov eax,0xffff | 201 ; CHECK-NEXT: mov eax,0xffff |
154 ; ARM32-LABEL: ret_16bits_lower | 202 ; ARM32-LABEL: ret_16bits_lower |
155 ; ARM32-NEXT: movw r0, #65535 | 203 ; ARM32-NEXT: movw r0, #65535 |
156 ; ARM32-NEXT: bx lr | 204 ; ARM32-NEXT: bx lr |
| 205 ; MIPS32-LABEL: ret_16bits_lower |
| 206 ; MIPS32-NEXT: lui v0,0x0 |
| 207 ; MIPS32-NEXT: ori v0,v0,0xffff |
157 | 208 |
158 define internal i32 @ret_17bits_lower() { | 209 define internal i32 @ret_17bits_lower() { |
159 ret i32 131071 | 210 ret i32 131071 |
160 } | 211 } |
161 ; CHECK-LABEL: ret_17bits_lower | 212 ; CHECK-LABEL: ret_17bits_lower |
162 ; CHECK-NEXT: mov eax,0x1ffff | 213 ; CHECK-NEXT: mov eax,0x1ffff |
163 ; ARM32-LABEL: ret_17bits_lower | 214 ; ARM32-LABEL: ret_17bits_lower |
164 ; ARM32-NEXT: movw r0, #65535 | 215 ; ARM32-NEXT: movw r0, #65535 |
165 ; ARM32-NEXT: movt r0, #1 | 216 ; ARM32-NEXT: movt r0, #1 |
| 217 ; MIPS32-LABEL: ret_17bits_lower |
| 218 ; MIPS32-NEXT: lui v0,0x1 |
| 219 ; MIPS32-NEXT: ori v0,v0,0xffff |
| 220 |
166 | 221 |
167 define internal i32 @ret_16bits_upper() { | 222 define internal i32 @ret_16bits_upper() { |
168 ret i32 4294901760 | 223 ret i32 4294901760 |
169 } | 224 } |
170 ; CHECK-LABEL: ret_16bits_upper | 225 ; CHECK-LABEL: ret_16bits_upper |
171 ; CHECK-NEXT: mov eax,0xffff0000 | 226 ; CHECK-NEXT: mov eax,0xffff0000 |
172 ; ARM32-LABEL: ret_16bits_upper | 227 ; ARM32-LABEL: ret_16bits_upper |
173 ; ARM32-NEXT: movw r0, #0 | 228 ; ARM32-NEXT: movw r0, #0 |
174 ; ARM32-NEXT: movt r0, #65535 | 229 ; ARM32-NEXT: movt r0, #65535 |
| 230 ; MIPS32-LABEL: ret_16bits_upper |
| 231 ; MIPS32-NEXT: lui v0,0xffff |
| 232 ; MIPS32-NEXT: ori v0,v0,0x0 |
| 233 |
175 | 234 |
176 ; Some 32-bit immediates can be inverted, and moved in a single instruction. | 235 ; Some 32-bit immediates can be inverted, and moved in a single instruction. |
177 | 236 |
178 define internal i32 @ret_8bits_inverted_shift_left0() { | 237 define internal i32 @ret_8bits_inverted_shift_left0() { |
179 ret i32 4294967040 | 238 ret i32 4294967040 |
180 } | 239 } |
181 ; CHECK-LABEL: ret_8bits_inverted_shift_left0 | 240 ; CHECK-LABEL: ret_8bits_inverted_shift_left0 |
182 ; CHECK-NEXT: mov eax,0xffffff00 | 241 ; CHECK-NEXT: mov eax,0xffffff00 |
183 ; ARM32-LABEL: ret_8bits_inverted_shift_left0 | 242 ; ARM32-LABEL: ret_8bits_inverted_shift_left0 |
184 ; ARM32-NEXT: mvn r0, #255 | 243 ; ARM32-NEXT: mvn r0, #255 |
185 ; ARM32-NEXT: bx lr | 244 ; ARM32-NEXT: bx lr |
| 245 ; MIPS32-LABEL: ret_8bits_inverted_shift_left0 |
| 246 ; MIPS32-NEXT: li v0,-256 |
186 | 247 |
187 define internal i32 @ret_8bits_inverted_shift_left24() { | 248 define internal i32 @ret_8bits_inverted_shift_left24() { |
188 ret i32 16777215 | 249 ret i32 16777215 |
189 } | 250 } |
190 ; CHECK-LABEL: ret_8bits_inverted_shift_left24 | 251 ; CHECK-LABEL: ret_8bits_inverted_shift_left24 |
191 ; CHECK-NEXT: mov eax,0xffffff | 252 ; CHECK-NEXT: mov eax,0xffffff |
192 ; ARM32-LABEL: ret_8bits_inverted_shift_left24 | 253 ; ARM32-LABEL: ret_8bits_inverted_shift_left24 |
193 ; ARM32-NEXT: mvn r0, #-16777216 | 254 ; ARM32-NEXT: mvn r0, #-16777216 |
194 ; ARM32-NEXT: bx lr | 255 ; ARM32-NEXT: bx lr |
| 256 ; MIPS32-LABEL: ret_8bits_inverted_shift_left24 |
| 257 ; MIPS32-NEXT: lui v0,0xff |
| 258 ; MIPS32-NEXT: ori v0,v0,0xffff |
195 | 259 |
196 define internal i32 @ret_8bits_inverted_ror2() { | 260 define internal i32 @ret_8bits_inverted_ror2() { |
197 ret i32 1073741760 | 261 ret i32 1073741760 |
198 } | 262 } |
199 ; CHECK-LABEL: ret_8bits_inverted_ror2 | 263 ; CHECK-LABEL: ret_8bits_inverted_ror2 |
200 ; CHECK-NEXT: mov eax,0x3fffffc0 | 264 ; CHECK-NEXT: mov eax,0x3fffffc0 |
201 ; ARM32-LABEL: ret_8bits_inverted_ror2 | 265 ; ARM32-LABEL: ret_8bits_inverted_ror2 |
202 ; ARM32-NEXT: mvn r0, #-1073741761 | 266 ; ARM32-NEXT: mvn r0, #-1073741761 |
203 ; ARM32-NEXT: bx lr | 267 ; ARM32-NEXT: bx lr |
| 268 ; MIPS32-LABEL: ret_8bits_inverted_ror2 |
| 269 ; MIPS32-NEXT: lui v0,0x3fff |
| 270 ; MIPS32-NEXT: ori v0,v0,0xffc0 |
204 | 271 |
205 define internal i32 @ret_8bits_inverted_ror6() { | 272 define internal i32 @ret_8bits_inverted_ror6() { |
206 ret i32 67108860 | 273 ret i32 67108860 |
207 } | 274 } |
208 ; CHECK-LABEL: ret_8bits_inverted_ror6 | 275 ; CHECK-LABEL: ret_8bits_inverted_ror6 |
209 ; CHECK-NEXT: mov eax,0x3fffffc | 276 ; CHECK-NEXT: mov eax,0x3fffffc |
210 ; ARM32-LABEL: ret_8bits_inverted_ror6 | 277 ; ARM32-LABEL: ret_8bits_inverted_ror6 |
211 ; ARM32-NEXT: mvn r0, #-67108861 | 278 ; ARM32-NEXT: mvn r0, #-67108861 |
212 ; ARM32-NEXT: bx lr | 279 ; ARM32-NEXT: bx lr |
| 280 ; MIPS32-LABEL: ret_8bits_inverted_ror6 |
| 281 ; MIPS32-NEXT: lui v0,0x3ff |
| 282 ; MIPS32-NEXT: ori v0,v0,0xfffc |
| 283 |
213 | 284 |
214 define internal i32 @ret_8bits_inverted_ror7() { | 285 define internal i32 @ret_8bits_inverted_ror7() { |
215 ret i32 33554430 | 286 ret i32 33554430 |
216 } | 287 } |
217 ; CHECK-LABEL: ret_8bits_inverted_ror7 | 288 ; CHECK-LABEL: ret_8bits_inverted_ror7 |
218 ; CHECK-NEXT: mov eax,0x1fffffe | 289 ; CHECK-NEXT: mov eax,0x1fffffe |
219 ; ARM32-LABEL: ret_8bits_inverted_ror7 | 290 ; ARM32-LABEL: ret_8bits_inverted_ror7 |
220 ; ARM32-NEXT: movw r0, #65534 | 291 ; ARM32-NEXT: movw r0, #65534 |
221 ; ARM32-NEXT: movt r0, #511 | 292 ; ARM32-NEXT: movt r0, #511 |
| 293 ; MIPS32-LABEL: ret_8bits_inverted_ror7 |
| 294 ; MIPS32-NEXT: lui v0,0x1ff |
| 295 ; MIPS32-NEXT: ori v0,v0,0xfffe |
222 | 296 |
223 ; 64-bit immediates. | 297 ; 64-bit immediates. |
224 | 298 |
225 define internal i64 @ret_64bits_shift_left0() { | 299 define internal i64 @ret_64bits_shift_left0() { |
226 ret i64 1095216660735 | 300 ret i64 1095216660735 |
227 } | 301 } |
228 ; CHECK-LABEL: ret_64bits_shift_left0 | 302 ; CHECK-LABEL: ret_64bits_shift_left0 |
229 ; CHECK-NEXT: mov eax,0xff | 303 ; CHECK-NEXT: mov eax,0xff |
230 ; CHECK-NEXT: mov edx,0xff | 304 ; CHECK-NEXT: mov edx,0xff |
231 ; ARM32-LABEL: ret_64bits_shift_left0 | 305 ; ARM32-LABEL: ret_64bits_shift_left0 |
232 ; ARM32-NEXT: movw r0, #255 | 306 ; ARM32-NEXT: movw r0, #255 |
233 ; ARM32-NEXT: movw r1, #255 | 307 ; ARM32-NEXT: movw r1, #255 |
| 308 ; MIPS32-LABEL: ret_64bits_shift_left0 |
| 309 ; MIPS32-NEXT: li v0,255 |
| 310 ; MIPS32-NEXT: li v1,255 |
| 311 |
234 | 312 |
235 ; A relocatable constant is assumed to require 32-bits along with | 313 ; A relocatable constant is assumed to require 32-bits along with |
236 ; relocation directives. | 314 ; relocation directives. |
237 | 315 |
238 declare void @_start() | 316 declare void @_start() |
239 | 317 |
240 define internal i32 @ret_addr() { | 318 define internal i32 @ret_addr() { |
241 %ptr = ptrtoint void ()* @_start to i32 | 319 %ptr = ptrtoint void ()* @_start to i32 |
242 ret i32 %ptr | 320 ret i32 %ptr |
243 } | 321 } |
244 ; CHECK-LABEL: ret_addr | 322 ; CHECK-LABEL: ret_addr |
245 ; CHECK-NEXT: mov eax,0x0 {{.*}} R_386_32 _start | 323 ; CHECK-NEXT: mov eax,0x0 {{.*}} R_386_32 _start |
246 ; ARM32-LABEL: ret_addr | 324 ; ARM32-LABEL: ret_addr |
247 ; ARM32-NEXT: movw r0, #0 {{.*}} R_ARM_MOVW_ABS_NC _start | 325 ; ARM32-NEXT: movw r0, #0 {{.*}} R_ARM_MOVW_ABS_NC _start |
248 ; ARM32-NEXT: movt r0, #0 {{.*}} R_ARM_MOVT_ABS _start | 326 ; ARM32-NEXT: movt r0, #0 {{.*}} R_ARM_MOVT_ABS _start |
| 327 ; TODO(RKotler) emitting proper li but in disassembly |
| 328 ; it shows up only in the relocation records. Should emit |
| 329 ; without the macro but we still need to add GOT implementation |
| 330 ; to finish this case |
| 331 ; |
OLD | NEW |