@@ -93,3 +93,138 @@ 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: orr x8, x8, x8, lsl #32
103
+ ; CHECK-NEXT: str x8, [x0]
104
+ ; CHECK-NEXT: ret
105
+ store i64 u0x1234567812345678, ptr %x
106
+ ret void
107
+ }
108
+
109
+ define void @test_store_0xff3456ffff3456ff (ptr %x ) {
110
+ ; CHECK-LABEL: test_store_0xff3456ffff3456ff:
111
+ ; CHECK: // %bb.0:
112
+ ; CHECK-NEXT: mov x8, #22271 // =0x56ff
113
+ ; CHECK-NEXT: movk x8, #65332, lsl #16
114
+ ; CHECK-NEXT: orr x8, x8, x8, lsl #32
115
+ ; CHECK-NEXT: str x8, [x0]
116
+ ; CHECK-NEXT: ret
117
+ store i64 u0xff3456ffff3456ff, ptr %x
118
+ ret void
119
+ }
120
+
121
+ define void @test_store_0x00345600345600 (ptr %x ) {
122
+ ; CHECK-LABEL: test_store_0x00345600345600:
123
+ ; CHECK: // %bb.0:
124
+ ; CHECK-NEXT: mov x8, #22016 // =0x5600
125
+ ; CHECK-NEXT: movk x8, #52, lsl #16
126
+ ; CHECK-NEXT: movk x8, #13398, lsl #32
127
+ ; CHECK-NEXT: str x8, [x0]
128
+ ; CHECK-NEXT: ret
129
+ store i64 u0x00345600345600, ptr %x
130
+ ret void
131
+ }
132
+
133
+ define void @test_store_0x5555555555555555 (ptr %x ) {
134
+ ; CHECK-LABEL: test_store_0x5555555555555555:
135
+ ; CHECK: // %bb.0:
136
+ ; CHECK-NEXT: mov x8, #6148914691236517205 // =0x5555555555555555
137
+ ; CHECK-NEXT: str x8, [x0]
138
+ ; CHECK-NEXT: ret
139
+ store i64 u0x5555555555555555, ptr %x
140
+ ret void
141
+ }
142
+
143
+ define void @test_store_0x5055555550555555 (ptr %x ) {
144
+ ; CHECK-LABEL: test_store_0x5055555550555555:
145
+ ; CHECK: // %bb.0:
146
+ ; CHECK-NEXT: mov x8, #6148914691236517205 // =0x5555555555555555
147
+ ; CHECK-NEXT: and x8, x8, #0xf0fffffff0ffffff
148
+ ; CHECK-NEXT: str x8, [x0]
149
+ ; CHECK-NEXT: ret
150
+ store i64 u0x5055555550555555, ptr %x
151
+ ret void
152
+ }
153
+
154
+ define void @test_store_0x0000555555555555 (ptr %x ) {
155
+ ; CHECK-LABEL: test_store_0x0000555555555555:
156
+ ; CHECK: // %bb.0:
157
+ ; CHECK-NEXT: mov x8, #6148914691236517205 // =0x5555555555555555
158
+ ; CHECK-NEXT: movk x8, #0, lsl #48
159
+ ; CHECK-NEXT: str x8, [x0]
160
+ ; CHECK-NEXT: ret
161
+ store i64 u0x0000555555555555, ptr %x
162
+ ret void
163
+ }
164
+
165
+ define void @test_store_0x0000555500005555 (ptr %x ) {
166
+ ; CHECK-LABEL: test_store_0x0000555500005555:
167
+ ; CHECK: // %bb.0:
168
+ ; CHECK-NEXT: mov x8, #21845 // =0x5555
169
+ ; CHECK-NEXT: movk x8, #21845, lsl #32
170
+ ; CHECK-NEXT: str x8, [x0]
171
+ ; CHECK-NEXT: ret
172
+ store i64 u0x0000555500005555, ptr %x
173
+ ret void
174
+ }
175
+
176
+ define void @test_store_0x5555000055550000 (ptr %x ) {
177
+ ; CHECK-LABEL: test_store_0x5555000055550000:
178
+ ; CHECK: // %bb.0:
179
+ ; CHECK-NEXT: mov x8, #1431633920 // =0x55550000
180
+ ; CHECK-NEXT: movk x8, #21845, lsl #48
181
+ ; CHECK-NEXT: str x8, [x0]
182
+ ; CHECK-NEXT: ret
183
+ store i64 u0x5555000055550000, ptr %x
184
+ ret void
185
+ }
186
+
187
+ define void @test_store_u0xffff5555ffff5555 (ptr %x ) {
188
+ ; CHECK-LABEL: test_store_u0xffff5555ffff5555:
189
+ ; CHECK: // %bb.0:
190
+ ; CHECK-NEXT: mov x8, #-43691 // =0xffffffffffff5555
191
+ ; CHECK-NEXT: movk x8, #21845, lsl #32
192
+ ; CHECK-NEXT: str x8, [x0]
193
+ ; CHECK-NEXT: ret
194
+ store i64 u0xffff5555ffff5555, ptr %x
195
+ ret void
196
+ }
197
+
198
+ define void @test_store_0x8888ffff8888ffff (ptr %x ) {
199
+ ; CHECK-LABEL: test_store_0x8888ffff8888ffff:
200
+ ; CHECK: // %bb.0:
201
+ ; CHECK-NEXT: mov x8, #-2004287489 // =0xffffffff8888ffff
202
+ ; CHECK-NEXT: movk x8, #34952, lsl #48
203
+ ; CHECK-NEXT: str x8, [x0]
204
+ ; CHECK-NEXT: ret
205
+ store i64 u0x8888ffff8888ffff, ptr %x
206
+ ret void
207
+ }
208
+
209
+ define void @test_store_uu0xfffff555f555f555 (ptr %x ) {
210
+ ; CHECK-LABEL: test_store_uu0xfffff555f555f555:
211
+ ; CHECK: // %bb.0:
212
+ ; CHECK-NEXT: mov x8, #-2731 // =0xfffffffffffff555
213
+ ; CHECK-NEXT: movk x8, #62805, lsl #16
214
+ ; CHECK-NEXT: movk x8, #62805, lsl #32
215
+ ; CHECK-NEXT: str x8, [x0]
216
+ ; CHECK-NEXT: ret
217
+ store i64 u0xfffff555f555f555, ptr %x
218
+ ret void
219
+ }
220
+
221
+ define void @test_store_uu0xf555f555f555f555 (ptr %x ) {
222
+ ; CHECK-LABEL: test_store_uu0xf555f555f555f555:
223
+ ; CHECK: // %bb.0:
224
+ ; CHECK-NEXT: mov x8, #6148914691236517205 // =0x5555555555555555
225
+ ; CHECK-NEXT: orr x8, x8, #0xe001e001e001e001
226
+ ; CHECK-NEXT: str x8, [x0]
227
+ ; CHECK-NEXT: ret
228
+ store i64 u0xf555f555f555f555, ptr %x
229
+ ret void
230
+ }
0 commit comments