@@ -495,6 +495,38 @@ define void @pack_lo_packh_hi_packh_3(i8 %0, i8 %1, i8 %2, i8 %3, ptr %p) nounwi
495
495
ret void
496
496
}
497
497
498
+ define i32 @pack_lo_packh_hi_packh_4 (i8 zeroext %0 , i8 zeroext %1 , i8 zeroext %2 , i8 zeroext %3 , ptr %p ) nounwind {
499
+ ; RV64I-LABEL: pack_lo_packh_hi_packh_4:
500
+ ; RV64I: # %bb.0:
501
+ ; RV64I-NEXT: slli a1, a1, 8
502
+ ; RV64I-NEXT: slli a2, a2, 16
503
+ ; RV64I-NEXT: slliw a3, a3, 24
504
+ ; RV64I-NEXT: or a0, a0, a1
505
+ ; RV64I-NEXT: or a2, a2, a3
506
+ ; RV64I-NEXT: or a0, a0, a2
507
+ ; RV64I-NEXT: ret
508
+ ;
509
+ ; RV64ZBKB-LABEL: pack_lo_packh_hi_packh_4:
510
+ ; RV64ZBKB: # %bb.0:
511
+ ; RV64ZBKB-NEXT: slli a2, a2, 16
512
+ ; RV64ZBKB-NEXT: slliw a3, a3, 24
513
+ ; RV64ZBKB-NEXT: packh a0, a0, a1
514
+ ; RV64ZBKB-NEXT: or a0, a0, a2
515
+ ; RV64ZBKB-NEXT: or a0, a0, a3
516
+ ; RV64ZBKB-NEXT: ret
517
+ %a = zext i8 %0 to i32
518
+ %b = zext i8 %1 to i32
519
+ %c = zext i8 %2 to i32
520
+ %d = zext i8 %3 to i32
521
+ %e = shl i32 %b , 8
522
+ %f = shl i32 %c , 16
523
+ %g = shl i32 %d , 24
524
+ %h = or i32 %a , %e
525
+ %i = or i32 %h , %f
526
+ %j = or i32 %i , %g
527
+ ret i32 %j
528
+ }
529
+
498
530
define void @pack_lo_zext_hi_packh (i16 zeroext %0 , i8 zeroext %1 , i8 zeroext %2 , ptr %p ) nounwind {
499
531
; RV64I-LABEL: pack_lo_zext_hi_packh:
500
532
; RV64I: # %bb.0:
0 commit comments