@@ -393,9 +393,28 @@ define <8 x i16> @bitcast_h_to_i(float, <8 x half> %a) {
393
393
ret <8 x i16 > %2
394
394
}
395
395
396
+ define <4 x half > @sitofp_v4i8 (<4 x i8 > %a ) #0 {
397
+ ; CHECK-CVT-LABEL: sitofp_v4i8:
398
+ ; CHECK-CVT: // %bb.0:
399
+ ; CHECK-CVT-NEXT: shl v0.4h, v0.4h, #8
400
+ ; CHECK-CVT-NEXT: sshr v0.4h, v0.4h, #8
401
+ ; CHECK-CVT-NEXT: sshll v0.4s, v0.4h, #0
402
+ ; CHECK-CVT-NEXT: scvtf v0.4s, v0.4s
403
+ ; CHECK-CVT-NEXT: fcvtn v0.4h, v0.4s
404
+ ; CHECK-CVT-NEXT: ret
405
+ ;
406
+ ; CHECK-FP16-LABEL: sitofp_v4i8:
407
+ ; CHECK-FP16: // %bb.0:
408
+ ; CHECK-FP16-NEXT: shl v0.4h, v0.4h, #8
409
+ ; CHECK-FP16-NEXT: sshr v0.4h, v0.4h, #8
410
+ ; CHECK-FP16-NEXT: scvtf v0.4h, v0.4h
411
+ ; CHECK-FP16-NEXT: ret
412
+ %1 = sitofp <4 x i8 > %a to <4 x half >
413
+ ret <4 x half > %1
414
+ }
396
415
397
- define <8 x half > @sitofp_i8 (<8 x i8 > %a ) #0 {
398
- ; CHECK-LABEL: sitofp_i8 :
416
+ define <8 x half > @sitofp_v8i8 (<8 x i8 > %a ) #0 {
417
+ ; CHECK-LABEL: sitofp_v8i8 :
399
418
; CHECK: // %bb.0:
400
419
; CHECK-NEXT: sshll v0.8h, v0.8b, #0
401
420
; CHECK-NEXT: sshll2 v1.4s, v0.8h, #0
@@ -410,6 +429,29 @@ define <8 x half> @sitofp_i8(<8 x i8> %a) #0 {
410
429
ret <8 x half > %1
411
430
}
412
431
432
+ define <16 x half > @sitofp_v16i8 (<16 x i8 > %a ) #0 {
433
+ ; CHECK-LABEL: sitofp_v16i8:
434
+ ; CHECK: // %bb.0:
435
+ ; CHECK-NEXT: sshll2 v1.8h, v0.16b, #0
436
+ ; CHECK-NEXT: sshll v0.8h, v0.8b, #0
437
+ ; CHECK-NEXT: sshll2 v2.4s, v1.8h, #0
438
+ ; CHECK-NEXT: sshll v1.4s, v1.4h, #0
439
+ ; CHECK-NEXT: sshll2 v3.4s, v0.8h, #0
440
+ ; CHECK-NEXT: sshll v0.4s, v0.4h, #0
441
+ ; CHECK-NEXT: scvtf v2.4s, v2.4s
442
+ ; CHECK-NEXT: scvtf v1.4s, v1.4s
443
+ ; CHECK-NEXT: scvtf v3.4s, v3.4s
444
+ ; CHECK-NEXT: scvtf v0.4s, v0.4s
445
+ ; CHECK-NEXT: fcvtn v2.4h, v2.4s
446
+ ; CHECK-NEXT: fcvtn v1.4h, v1.4s
447
+ ; CHECK-NEXT: fcvtn v3.4h, v3.4s
448
+ ; CHECK-NEXT: fcvtn v0.4h, v0.4s
449
+ ; CHECK-NEXT: mov v1.d[1], v2.d[0]
450
+ ; CHECK-NEXT: mov v0.d[1], v3.d[0]
451
+ ; CHECK-NEXT: ret
452
+ %1 = sitofp <16 x i8 > %a to <16 x half >
453
+ ret <16 x half > %1
454
+ }
413
455
414
456
define <8 x half > @sitofp_i16 (<8 x i16 > %a ) #0 {
415
457
; CHECK-CVT-LABEL: sitofp_i16:
@@ -431,7 +473,6 @@ define <8 x half> @sitofp_i16(<8 x i16> %a) #0 {
431
473
ret <8 x half > %1
432
474
}
433
475
434
-
435
476
define <8 x half > @sitofp_i32 (<8 x i32 > %a ) #0 {
436
477
; CHECK-LABEL: sitofp_i32:
437
478
; CHECK: // %bb.0:
@@ -465,8 +506,26 @@ define <8 x half> @sitofp_i64(<8 x i64> %a) #0 {
465
506
ret <8 x half > %1
466
507
}
467
508
468
- define <8 x half > @uitofp_i8 (<8 x i8 > %a ) #0 {
469
- ; CHECK-LABEL: uitofp_i8:
509
+ define <4 x half > @uitofp_v4i8 (<4 x i8 > %a ) #0 {
510
+ ; CHECK-CVT-LABEL: uitofp_v4i8:
511
+ ; CHECK-CVT: // %bb.0:
512
+ ; CHECK-CVT-NEXT: bic v0.4h, #255, lsl #8
513
+ ; CHECK-CVT-NEXT: ushll v0.4s, v0.4h, #0
514
+ ; CHECK-CVT-NEXT: ucvtf v0.4s, v0.4s
515
+ ; CHECK-CVT-NEXT: fcvtn v0.4h, v0.4s
516
+ ; CHECK-CVT-NEXT: ret
517
+ ;
518
+ ; CHECK-FP16-LABEL: uitofp_v4i8:
519
+ ; CHECK-FP16: // %bb.0:
520
+ ; CHECK-FP16-NEXT: bic v0.4h, #255, lsl #8
521
+ ; CHECK-FP16-NEXT: ucvtf v0.4h, v0.4h
522
+ ; CHECK-FP16-NEXT: ret
523
+ %1 = uitofp <4 x i8 > %a to <4 x half >
524
+ ret <4 x half > %1
525
+ }
526
+
527
+ define <8 x half > @uitofp_v8i8 (<8 x i8 > %a ) #0 {
528
+ ; CHECK-LABEL: uitofp_v8i8:
470
529
; CHECK: // %bb.0:
471
530
; CHECK-NEXT: ushll v0.8h, v0.8b, #0
472
531
; CHECK-NEXT: ushll2 v1.4s, v0.8h, #0
@@ -481,6 +540,30 @@ define <8 x half> @uitofp_i8(<8 x i8> %a) #0 {
481
540
ret <8 x half > %1
482
541
}
483
542
543
+ define <16 x half > @uitofp_v16i8 (<16 x i8 > %a ) #0 {
544
+ ; CHECK-LABEL: uitofp_v16i8:
545
+ ; CHECK: // %bb.0:
546
+ ; CHECK-NEXT: ushll2 v1.8h, v0.16b, #0
547
+ ; CHECK-NEXT: ushll v0.8h, v0.8b, #0
548
+ ; CHECK-NEXT: ushll2 v2.4s, v1.8h, #0
549
+ ; CHECK-NEXT: ushll v1.4s, v1.4h, #0
550
+ ; CHECK-NEXT: ushll2 v3.4s, v0.8h, #0
551
+ ; CHECK-NEXT: ushll v0.4s, v0.4h, #0
552
+ ; CHECK-NEXT: ucvtf v2.4s, v2.4s
553
+ ; CHECK-NEXT: ucvtf v1.4s, v1.4s
554
+ ; CHECK-NEXT: ucvtf v3.4s, v3.4s
555
+ ; CHECK-NEXT: ucvtf v0.4s, v0.4s
556
+ ; CHECK-NEXT: fcvtn v2.4h, v2.4s
557
+ ; CHECK-NEXT: fcvtn v1.4h, v1.4s
558
+ ; CHECK-NEXT: fcvtn v3.4h, v3.4s
559
+ ; CHECK-NEXT: fcvtn v0.4h, v0.4s
560
+ ; CHECK-NEXT: mov v1.d[1], v2.d[0]
561
+ ; CHECK-NEXT: mov v0.d[1], v3.d[0]
562
+ ; CHECK-NEXT: ret
563
+ %1 = uitofp <16 x i8 > %a to <16 x half >
564
+ ret <16 x half > %1
565
+ }
566
+
484
567
485
568
define <8 x half > @uitofp_i16 (<8 x i16 > %a ) #0 {
486
569
; CHECK-CVT-LABEL: uitofp_i16:
0 commit comments