@@ -177,244 +177,6 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
177
177
bool_to_zero_or_max_uint ( fx, res_lane_ty, res_lane)
178
178
} ) ;
179
179
}
180
- "llvm.x86.sse2.psrli.d" => {
181
- let ( a, imm8) = match args {
182
- [ a, imm8] => ( a, imm8) ,
183
- _ => bug ! ( "wrong number of args for intrinsic {intrinsic}" ) ,
184
- } ;
185
- let a = codegen_operand ( fx, a) ;
186
- let imm8 = crate :: constant:: mir_operand_get_const_val ( fx, imm8)
187
- . expect ( "llvm.x86.sse2.psrli.d imm8 not const" ) ;
188
-
189
- simd_for_each_lane ( fx, a, ret, & |fx, _lane_ty, _res_lane_ty, lane| match imm8
190
- . try_to_bits ( Size :: from_bytes ( 4 ) )
191
- . unwrap_or_else ( || panic ! ( "imm8 not scalar: {:?}" , imm8) )
192
- {
193
- imm8 if imm8 < 32 => fx. bcx . ins ( ) . ushr_imm ( lane, i64:: from ( imm8 as u8 ) ) ,
194
- _ => fx. bcx . ins ( ) . iconst ( types:: I32 , 0 ) ,
195
- } ) ;
196
- }
197
- "llvm.x86.sse2.psrai.d" => {
198
- let ( a, imm8) = match args {
199
- [ a, imm8] => ( a, imm8) ,
200
- _ => bug ! ( "wrong number of args for intrinsic {intrinsic}" ) ,
201
- } ;
202
- let a = codegen_operand ( fx, a) ;
203
- let imm8 = crate :: constant:: mir_operand_get_const_val ( fx, imm8)
204
- . expect ( "llvm.x86.sse2.psrai.d imm8 not const" ) ;
205
-
206
- simd_for_each_lane ( fx, a, ret, & |fx, _lane_ty, _res_lane_ty, lane| match imm8
207
- . try_to_bits ( Size :: from_bytes ( 4 ) )
208
- . unwrap_or_else ( || panic ! ( "imm8 not scalar: {:?}" , imm8) )
209
- {
210
- imm8 if imm8 < 32 => fx. bcx . ins ( ) . sshr_imm ( lane, i64:: from ( imm8 as u8 ) ) ,
211
- _ => fx. bcx . ins ( ) . iconst ( types:: I32 , 0 ) ,
212
- } ) ;
213
- }
214
- "llvm.x86.sse2.pslli.d" => {
215
- let ( a, imm8) = match args {
216
- [ a, imm8] => ( a, imm8) ,
217
- _ => bug ! ( "wrong number of args for intrinsic {intrinsic}" ) ,
218
- } ;
219
- let a = codegen_operand ( fx, a) ;
220
- let imm8 = crate :: constant:: mir_operand_get_const_val ( fx, imm8)
221
- . expect ( "llvm.x86.sse2.pslli.d imm8 not const" ) ;
222
-
223
- simd_for_each_lane ( fx, a, ret, & |fx, _lane_ty, _res_lane_ty, lane| match imm8
224
- . try_to_bits ( Size :: from_bytes ( 4 ) )
225
- . unwrap_or_else ( || panic ! ( "imm8 not scalar: {:?}" , imm8) )
226
- {
227
- imm8 if imm8 < 32 => fx. bcx . ins ( ) . ishl_imm ( lane, i64:: from ( imm8 as u8 ) ) ,
228
- _ => fx. bcx . ins ( ) . iconst ( types:: I32 , 0 ) ,
229
- } ) ;
230
- }
231
- "llvm.x86.sse2.psrli.w" => {
232
- let ( a, imm8) = match args {
233
- [ a, imm8] => ( a, imm8) ,
234
- _ => bug ! ( "wrong number of args for intrinsic {intrinsic}" ) ,
235
- } ;
236
- let a = codegen_operand ( fx, a) ;
237
- let imm8 = crate :: constant:: mir_operand_get_const_val ( fx, imm8)
238
- . expect ( "llvm.x86.sse2.psrli.d imm8 not const" ) ;
239
-
240
- simd_for_each_lane ( fx, a, ret, & |fx, _lane_ty, _res_lane_ty, lane| match imm8
241
- . try_to_bits ( Size :: from_bytes ( 4 ) )
242
- . unwrap_or_else ( || panic ! ( "imm8 not scalar: {:?}" , imm8) )
243
- {
244
- imm8 if imm8 < 16 => fx. bcx . ins ( ) . ushr_imm ( lane, i64:: from ( imm8 as u8 ) ) ,
245
- _ => fx. bcx . ins ( ) . iconst ( types:: I32 , 0 ) ,
246
- } ) ;
247
- }
248
- "llvm.x86.sse2.psrai.w" => {
249
- let ( a, imm8) = match args {
250
- [ a, imm8] => ( a, imm8) ,
251
- _ => bug ! ( "wrong number of args for intrinsic {intrinsic}" ) ,
252
- } ;
253
- let a = codegen_operand ( fx, a) ;
254
- let imm8 = crate :: constant:: mir_operand_get_const_val ( fx, imm8)
255
- . expect ( "llvm.x86.sse2.psrai.d imm8 not const" ) ;
256
-
257
- simd_for_each_lane ( fx, a, ret, & |fx, _lane_ty, _res_lane_ty, lane| match imm8
258
- . try_to_bits ( Size :: from_bytes ( 4 ) )
259
- . unwrap_or_else ( || panic ! ( "imm8 not scalar: {:?}" , imm8) )
260
- {
261
- imm8 if imm8 < 16 => fx. bcx . ins ( ) . sshr_imm ( lane, i64:: from ( imm8 as u8 ) ) ,
262
- _ => fx. bcx . ins ( ) . iconst ( types:: I32 , 0 ) ,
263
- } ) ;
264
- }
265
- "llvm.x86.sse2.pslli.w" => {
266
- let ( a, imm8) = match args {
267
- [ a, imm8] => ( a, imm8) ,
268
- _ => bug ! ( "wrong number of args for intrinsic {intrinsic}" ) ,
269
- } ;
270
- let a = codegen_operand ( fx, a) ;
271
- let imm8 = crate :: constant:: mir_operand_get_const_val ( fx, imm8)
272
- . expect ( "llvm.x86.sse2.pslli.d imm8 not const" ) ;
273
-
274
- simd_for_each_lane ( fx, a, ret, & |fx, _lane_ty, _res_lane_ty, lane| match imm8
275
- . try_to_bits ( Size :: from_bytes ( 4 ) )
276
- . unwrap_or_else ( || panic ! ( "imm8 not scalar: {:?}" , imm8) )
277
- {
278
- imm8 if imm8 < 16 => fx. bcx . ins ( ) . ishl_imm ( lane, i64:: from ( imm8 as u8 ) ) ,
279
- _ => fx. bcx . ins ( ) . iconst ( types:: I32 , 0 ) ,
280
- } ) ;
281
- }
282
- "llvm.x86.avx.psrli.d" => {
283
- let ( a, imm8) = match args {
284
- [ a, imm8] => ( a, imm8) ,
285
- _ => bug ! ( "wrong number of args for intrinsic {intrinsic}" ) ,
286
- } ;
287
- let a = codegen_operand ( fx, a) ;
288
- let imm8 = crate :: constant:: mir_operand_get_const_val ( fx, imm8)
289
- . expect ( "llvm.x86.avx.psrli.d imm8 not const" ) ;
290
-
291
- simd_for_each_lane ( fx, a, ret, & |fx, _lane_ty, _res_lane_ty, lane| match imm8
292
- . try_to_bits ( Size :: from_bytes ( 4 ) )
293
- . unwrap_or_else ( || panic ! ( "imm8 not scalar: {:?}" , imm8) )
294
- {
295
- imm8 if imm8 < 32 => fx. bcx . ins ( ) . ushr_imm ( lane, i64:: from ( imm8 as u8 ) ) ,
296
- _ => fx. bcx . ins ( ) . iconst ( types:: I32 , 0 ) ,
297
- } ) ;
298
- }
299
- "llvm.x86.avx.psrai.d" => {
300
- let ( a, imm8) = match args {
301
- [ a, imm8] => ( a, imm8) ,
302
- _ => bug ! ( "wrong number of args for intrinsic {intrinsic}" ) ,
303
- } ;
304
- let a = codegen_operand ( fx, a) ;
305
- let imm8 = crate :: constant:: mir_operand_get_const_val ( fx, imm8)
306
- . expect ( "llvm.x86.avx.psrai.d imm8 not const" ) ;
307
-
308
- simd_for_each_lane ( fx, a, ret, & |fx, _lane_ty, _res_lane_ty, lane| match imm8
309
- . try_to_bits ( Size :: from_bytes ( 4 ) )
310
- . unwrap_or_else ( || panic ! ( "imm8 not scalar: {:?}" , imm8) )
311
- {
312
- imm8 if imm8 < 32 => fx. bcx . ins ( ) . sshr_imm ( lane, i64:: from ( imm8 as u8 ) ) ,
313
- _ => fx. bcx . ins ( ) . iconst ( types:: I32 , 0 ) ,
314
- } ) ;
315
- }
316
- "llvm.x86.sse2.psrli.q" => {
317
- let ( a, imm8) = match args {
318
- [ a, imm8] => ( a, imm8) ,
319
- _ => bug ! ( "wrong number of args for intrinsic {intrinsic}" ) ,
320
- } ;
321
- let a = codegen_operand ( fx, a) ;
322
- let imm8 = crate :: constant:: mir_operand_get_const_val ( fx, imm8)
323
- . expect ( "llvm.x86.avx.psrli.q imm8 not const" ) ;
324
-
325
- simd_for_each_lane ( fx, a, ret, & |fx, _lane_ty, _res_lane_ty, lane| match imm8
326
- . try_to_bits ( Size :: from_bytes ( 4 ) )
327
- . unwrap_or_else ( || panic ! ( "imm8 not scalar: {:?}" , imm8) )
328
- {
329
- imm8 if imm8 < 64 => fx. bcx . ins ( ) . ushr_imm ( lane, i64:: from ( imm8 as u8 ) ) ,
330
- _ => fx. bcx . ins ( ) . iconst ( types:: I32 , 0 ) ,
331
- } ) ;
332
- }
333
- "llvm.x86.sse2.pslli.q" => {
334
- let ( a, imm8) = match args {
335
- [ a, imm8] => ( a, imm8) ,
336
- _ => bug ! ( "wrong number of args for intrinsic {intrinsic}" ) ,
337
- } ;
338
- let a = codegen_operand ( fx, a) ;
339
- let imm8 = crate :: constant:: mir_operand_get_const_val ( fx, imm8)
340
- . expect ( "llvm.x86.avx.pslli.q imm8 not const" ) ;
341
-
342
- simd_for_each_lane ( fx, a, ret, & |fx, _lane_ty, _res_lane_ty, lane| match imm8
343
- . try_to_bits ( Size :: from_bytes ( 4 ) )
344
- . unwrap_or_else ( || panic ! ( "imm8 not scalar: {:?}" , imm8) )
345
- {
346
- imm8 if imm8 < 64 => fx. bcx . ins ( ) . ishl_imm ( lane, i64:: from ( imm8 as u8 ) ) ,
347
- _ => fx. bcx . ins ( ) . iconst ( types:: I32 , 0 ) ,
348
- } ) ;
349
- }
350
- "llvm.x86.avx.pslli.d" => {
351
- let ( a, imm8) = match args {
352
- [ a, imm8] => ( a, imm8) ,
353
- _ => bug ! ( "wrong number of args for intrinsic {intrinsic}" ) ,
354
- } ;
355
- let a = codegen_operand ( fx, a) ;
356
- let imm8 = crate :: constant:: mir_operand_get_const_val ( fx, imm8)
357
- . expect ( "llvm.x86.avx.pslli.d imm8 not const" ) ;
358
-
359
- simd_for_each_lane ( fx, a, ret, & |fx, _lane_ty, _res_lane_ty, lane| match imm8
360
- . try_to_bits ( Size :: from_bytes ( 4 ) )
361
- . unwrap_or_else ( || panic ! ( "imm8 not scalar: {:?}" , imm8) )
362
- {
363
- imm8 if imm8 < 32 => fx. bcx . ins ( ) . ishl_imm ( lane, i64:: from ( imm8 as u8 ) ) ,
364
- _ => fx. bcx . ins ( ) . iconst ( types:: I32 , 0 ) ,
365
- } ) ;
366
- }
367
- "llvm.x86.avx2.psrli.w" => {
368
- let ( a, imm8) = match args {
369
- [ a, imm8] => ( a, imm8) ,
370
- _ => bug ! ( "wrong number of args for intrinsic {intrinsic}" ) ,
371
- } ;
372
- let a = codegen_operand ( fx, a) ;
373
- let imm8 = crate :: constant:: mir_operand_get_const_val ( fx, imm8)
374
- . expect ( "llvm.x86.avx.psrli.w imm8 not const" ) ;
375
-
376
- simd_for_each_lane ( fx, a, ret, & |fx, _lane_ty, _res_lane_ty, lane| match imm8
377
- . try_to_bits ( Size :: from_bytes ( 4 ) )
378
- . unwrap_or_else ( || panic ! ( "imm8 not scalar: {:?}" , imm8) )
379
- {
380
- imm8 if imm8 < 16 => fx. bcx . ins ( ) . ushr_imm ( lane, i64:: from ( imm8 as u8 ) ) ,
381
- _ => fx. bcx . ins ( ) . iconst ( types:: I32 , 0 ) ,
382
- } ) ;
383
- }
384
- "llvm.x86.avx2.psrai.w" => {
385
- let ( a, imm8) = match args {
386
- [ a, imm8] => ( a, imm8) ,
387
- _ => bug ! ( "wrong number of args for intrinsic {intrinsic}" ) ,
388
- } ;
389
- let a = codegen_operand ( fx, a) ;
390
- let imm8 = crate :: constant:: mir_operand_get_const_val ( fx, imm8)
391
- . expect ( "llvm.x86.avx.psrai.w imm8 not const" ) ;
392
-
393
- simd_for_each_lane ( fx, a, ret, & |fx, _lane_ty, _res_lane_ty, lane| match imm8
394
- . try_to_bits ( Size :: from_bytes ( 4 ) )
395
- . unwrap_or_else ( || panic ! ( "imm8 not scalar: {:?}" , imm8) )
396
- {
397
- imm8 if imm8 < 16 => fx. bcx . ins ( ) . sshr_imm ( lane, i64:: from ( imm8 as u8 ) ) ,
398
- _ => fx. bcx . ins ( ) . iconst ( types:: I32 , 0 ) ,
399
- } ) ;
400
- }
401
- "llvm.x86.avx2.pslli.w" => {
402
- let ( a, imm8) = match args {
403
- [ a, imm8] => ( a, imm8) ,
404
- _ => bug ! ( "wrong number of args for intrinsic {intrinsic}" ) ,
405
- } ;
406
- let a = codegen_operand ( fx, a) ;
407
- let imm8 = crate :: constant:: mir_operand_get_const_val ( fx, imm8)
408
- . expect ( "llvm.x86.avx.pslli.w imm8 not const" ) ;
409
-
410
- simd_for_each_lane ( fx, a, ret, & |fx, _lane_ty, _res_lane_ty, lane| match imm8
411
- . try_to_bits ( Size :: from_bytes ( 4 ) )
412
- . unwrap_or_else ( || panic ! ( "imm8 not scalar: {:?}" , imm8) )
413
- {
414
- imm8 if imm8 < 16 => fx. bcx . ins ( ) . ishl_imm ( lane, i64:: from ( imm8 as u8 ) ) ,
415
- _ => fx. bcx . ins ( ) . iconst ( types:: I32 , 0 ) ,
416
- } ) ;
417
- }
418
180
"llvm.x86.ssse3.pshuf.b.128" | "llvm.x86.avx2.pshuf.b" => {
419
181
let ( a, b) = match args {
420
182
[ a, b] => ( a, b) ,
@@ -506,14 +268,6 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
506
268
ret. place_lane ( fx, 2 ) . to_ptr ( ) . store ( fx, res_2, MemFlags :: trusted ( ) ) ;
507
269
ret. place_lane ( fx, 3 ) . to_ptr ( ) . store ( fx, res_3, MemFlags :: trusted ( ) ) ;
508
270
}
509
- "llvm.x86.sse2.storeu.dq" | "llvm.x86.sse2.storeu.pd" => {
510
- intrinsic_args ! ( fx, args => ( mem_addr, a) ; intrinsic) ;
511
- let mem_addr = mem_addr. load_scalar ( fx) ;
512
-
513
- // FIXME correctly handle the unalignment
514
- let dest = CPlace :: for_ptr ( Pointer :: new ( mem_addr) , a. layout ( ) ) ;
515
- dest. write_cvalue ( fx, a) ;
516
- }
517
271
"llvm.x86.ssse3.pabs.b.128" | "llvm.x86.ssse3.pabs.w.128" | "llvm.x86.ssse3.pabs.d.128" => {
518
272
let a = match args {
519
273
[ a] => a,
@@ -571,8 +325,6 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
571
325
// llvm.x86.avx2.vperm2i128
572
326
// llvm.x86.ssse3.pshuf.b.128
573
327
// llvm.x86.avx2.pshuf.b
574
- // llvm.x86.avx2.psrli.w
575
- // llvm.x86.sse2.psrli.w
576
328
577
329
fn llvm_add_sub < ' tcx > (
578
330
fx : & mut FunctionCx < ' _ , ' _ , ' tcx > ,
0 commit comments