@@ -93,3 +93,183 @@ define i64 @testuu0xf555f555f555f555() {
93
93
; CHECK-NEXT: ret
94
94
ret i64 u0xf555f555f555f555
95
95
}
96
+
97
+ define void @test_store_0x1234567812345678 (ptr %x ) {
98
+ ; CHECK-LABEL: test_store_0x1234567812345678:
99
+ ; CHECK: // %bb.0:
100
+ ; CHECK-NEXT: mov x8, #22136 // =0x5678
101
+ ; CHECK-NEXT: movk x8, #4660, lsl #16
102
+ ; CHECK-NEXT: stp w8, w8, [x0]
103
+ ; CHECK-NEXT: ret
104
+ store i64 u0x1234567812345678, ptr %x
105
+ ret void
106
+ }
107
+
108
+ define void @test_store_0xff3456ffff3456ff (ptr %x ) {
109
+ ; CHECK-LABEL: test_store_0xff3456ffff3456ff:
110
+ ; CHECK: // %bb.0:
111
+ ; CHECK-NEXT: mov x8, #22271 // =0x56ff
112
+ ; CHECK-NEXT: movk x8, #65332, lsl #16
113
+ ; CHECK-NEXT: stp w8, w8, [x0]
114
+ ; CHECK-NEXT: ret
115
+ store i64 u0xff3456ffff3456ff, ptr %x
116
+ ret void
117
+ }
118
+
119
+ define void @test_store_0x00345600345600 (ptr %x ) {
120
+ ; CHECK-LABEL: test_store_0x00345600345600:
121
+ ; CHECK: // %bb.0:
122
+ ; CHECK-NEXT: mov x8, #22016 // =0x5600
123
+ ; CHECK-NEXT: movk x8, #52, lsl #16
124
+ ; CHECK-NEXT: movk x8, #13398, lsl #32
125
+ ; CHECK-NEXT: str x8, [x0]
126
+ ; CHECK-NEXT: ret
127
+ store i64 u0x00345600345600, ptr %x
128
+ ret void
129
+ }
130
+
131
+ define void @test_store_0x5555555555555555 (ptr %x ) {
132
+ ; CHECK-LABEL: test_store_0x5555555555555555:
133
+ ; CHECK: // %bb.0:
134
+ ; CHECK-NEXT: mov x8, #6148914691236517205 // =0x5555555555555555
135
+ ; CHECK-NEXT: str x8, [x0]
136
+ ; CHECK-NEXT: ret
137
+ store i64 u0x5555555555555555, ptr %x
138
+ ret void
139
+ }
140
+
141
+ define void @test_store_0x5055555550555555 (ptr %x ) {
142
+ ; CHECK-LABEL: test_store_0x5055555550555555:
143
+ ; CHECK: // %bb.0:
144
+ ; CHECK-NEXT: mov x8, #6148914691236517205 // =0x5555555555555555
145
+ ; CHECK-NEXT: and x8, x8, #0xf0fffffff0ffffff
146
+ ; CHECK-NEXT: str x8, [x0]
147
+ ; CHECK-NEXT: ret
148
+ store i64 u0x5055555550555555, ptr %x
149
+ ret void
150
+ }
151
+
152
+ define void @test_store_0x0000555555555555 (ptr %x ) {
153
+ ; CHECK-LABEL: test_store_0x0000555555555555:
154
+ ; CHECK: // %bb.0:
155
+ ; CHECK-NEXT: mov x8, #6148914691236517205 // =0x5555555555555555
156
+ ; CHECK-NEXT: movk x8, #0, lsl #48
157
+ ; CHECK-NEXT: str x8, [x0]
158
+ ; CHECK-NEXT: ret
159
+ store i64 u0x0000555555555555, ptr %x
160
+ ret void
161
+ }
162
+
163
+ define void @test_store_0x0000555500005555 (ptr %x ) {
164
+ ; CHECK-LABEL: test_store_0x0000555500005555:
165
+ ; CHECK: // %bb.0:
166
+ ; CHECK-NEXT: mov x8, #21845 // =0x5555
167
+ ; CHECK-NEXT: stp w8, w8, [x0]
168
+ ; CHECK-NEXT: ret
169
+ store i64 u0x0000555500005555, ptr %x
170
+ ret void
171
+ }
172
+
173
+ define void @test_store_0x5555000055550000 (ptr %x ) {
174
+ ; CHECK-LABEL: test_store_0x5555000055550000:
175
+ ; CHECK: // %bb.0:
176
+ ; CHECK-NEXT: mov x8, #1431633920 // =0x55550000
177
+ ; CHECK-NEXT: stp w8, w8, [x0]
178
+ ; CHECK-NEXT: ret
179
+ store i64 u0x5555000055550000, ptr %x
180
+ ret void
181
+ }
182
+
183
+ define void @test_store_u0xffff5555ffff5555 (ptr %x ) {
184
+ ; CHECK-LABEL: test_store_u0xffff5555ffff5555:
185
+ ; CHECK: // %bb.0:
186
+ ; CHECK-NEXT: mov x8, #-43691 // =0xffffffffffff5555
187
+ ; CHECK-NEXT: movk x8, #21845, lsl #32
188
+ ; CHECK-NEXT: str x8, [x0]
189
+ ; CHECK-NEXT: ret
190
+ store i64 u0xffff5555ffff5555, ptr %x
191
+ ret void
192
+ }
193
+
194
+ define void @test_store_0x8888ffff8888ffff (ptr %x ) {
195
+ ; CHECK-LABEL: test_store_0x8888ffff8888ffff:
196
+ ; CHECK: // %bb.0:
197
+ ; CHECK-NEXT: mov x8, #-2004287489 // =0xffffffff8888ffff
198
+ ; CHECK-NEXT: movk x8, #34952, lsl #48
199
+ ; CHECK-NEXT: str x8, [x0]
200
+ ; CHECK-NEXT: ret
201
+ store i64 u0x8888ffff8888ffff, ptr %x
202
+ ret void
203
+ }
204
+
205
+ define void @test_store_uu0xfffff555f555f555 (ptr %x ) {
206
+ ; CHECK-LABEL: test_store_uu0xfffff555f555f555:
207
+ ; CHECK: // %bb.0:
208
+ ; CHECK-NEXT: mov x8, #-2731 // =0xfffffffffffff555
209
+ ; CHECK-NEXT: movk x8, #62805, lsl #16
210
+ ; CHECK-NEXT: movk x8, #62805, lsl #32
211
+ ; CHECK-NEXT: str x8, [x0]
212
+ ; CHECK-NEXT: ret
213
+ store i64 u0xfffff555f555f555, ptr %x
214
+ ret void
215
+ }
216
+
217
+ define void @test_store_uu0xf555f555f555f555 (ptr %x ) {
218
+ ; CHECK-LABEL: test_store_uu0xf555f555f555f555:
219
+ ; CHECK: // %bb.0:
220
+ ; CHECK-NEXT: mov x8, #6148914691236517205 // =0x5555555555555555
221
+ ; CHECK-NEXT: orr x8, x8, #0xe001e001e001e001
222
+ ; CHECK-NEXT: str x8, [x0]
223
+ ; CHECK-NEXT: ret
224
+ store i64 u0xf555f555f555f555, ptr %x
225
+ ret void
226
+ }
227
+
228
+ define void @test_store_0x1234567812345678_offset_range (ptr %x ) {
229
+ ; CHECK-LABEL: test_store_0x1234567812345678_offset_range:
230
+ ; CHECK: // %bb.0:
231
+ ; CHECK-NEXT: mov x8, #22136 // =0x5678
232
+ ; CHECK-NEXT: movk x8, #4660, lsl #16
233
+ ; CHECK-NEXT: stp w8, w8, [x0, #32]
234
+ ; CHECK-NEXT: ret
235
+ %g = getelementptr i64 , ptr %x , i64 4
236
+ store i64 u0x1234567812345678, ptr %g
237
+ ret void
238
+ }
239
+
240
+ define void @test_store_0x1234567812345678_offset_min (ptr %x ) {
241
+ ; CHECK-LABEL: test_store_0x1234567812345678_offset_min:
242
+ ; CHECK: // %bb.0:
243
+ ; CHECK-NEXT: mov x8, #22136 // =0x5678
244
+ ; CHECK-NEXT: movk x8, #4660, lsl #16
245
+ ; CHECK-NEXT: stp w8, w8, [x0]
246
+ ; CHECK-NEXT: ret
247
+ %g = getelementptr i8 , ptr %x , i32 0
248
+ store i64 u0x1234567812345678, ptr %g
249
+ ret void
250
+ }
251
+
252
+ define void @test_store_0x1234567812345678_offset_max (ptr %x ) {
253
+ ; CHECK-LABEL: test_store_0x1234567812345678_offset_max:
254
+ ; CHECK: // %bb.0:
255
+ ; CHECK-NEXT: mov x8, #22136 // =0x5678
256
+ ; CHECK-NEXT: movk x8, #4660, lsl #16
257
+ ; CHECK-NEXT: stp w8, w8, [x0, #248]
258
+ ; CHECK-NEXT: ret
259
+ %g = getelementptr i8 , ptr %x , i32 248
260
+ store i64 u0x1234567812345678, ptr %g
261
+ ret void
262
+ }
263
+
264
+ define void @test_store_0x1234567812345678_offset_max_over (ptr %x ) {
265
+ ; CHECK-LABEL: test_store_0x1234567812345678_offset_max_over:
266
+ ; CHECK: // %bb.0:
267
+ ; CHECK-NEXT: mov x8, #22136 // =0x5678
268
+ ; CHECK-NEXT: movk x8, #4660, lsl #16
269
+ ; CHECK-NEXT: orr x8, x8, x8, lsl #32
270
+ ; CHECK-NEXT: stur x8, [x0, #249]
271
+ ; CHECK-NEXT: ret
272
+ %g = getelementptr i8 , ptr %x , i32 249
273
+ store i64 u0x1234567812345678, ptr %g
274
+ ret void
275
+ }
0 commit comments