@@ -7599,6 +7599,117 @@ void CodeGen::genArm64EmitterUnitTestsSve()
7599
7599
theEmitter->emitIns_R_R_I(INS_sve_str, EA_SCALABLE, REG_V2, REG_R3, 255, INS_OPTS_NONE,
7600
7600
INS_SCALABLE_OPTS_UNPREDICATED);
7601
7601
7602
+ // IF_SVE_HY_3A
7603
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P1, REG_R2, REG_V3,
7604
+ INS_OPTS_SCALABLE_S_UXTW); // PRFB <prfop>, <Pg>, [<Xn|SP>, <Zm>.S, <mod>]
7605
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfd, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P6, REG_R5, REG_V4,
7606
+ INS_OPTS_SCALABLE_S_UXTW,
7607
+ INS_SCALABLE_OPTS_MOD_N); // PRFD <prfop>, <Pg>, [<Xn|SP>, <Zm>.S, <mod> #3]
7608
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfh, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P7, REG_R8, REG_V9,
7609
+ INS_OPTS_SCALABLE_S_SXTW,
7610
+ INS_SCALABLE_OPTS_MOD_N); // PRFH <prfop>, <Pg>, [<Xn|SP>, <Zm>.S, <mod> #1]
7611
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfw, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P0, REG_R2, REG_V1,
7612
+ INS_OPTS_SCALABLE_S_UXTW,
7613
+ INS_SCALABLE_OPTS_MOD_N); // PRFW <prfop>, <Pg>, [<Xn|SP>, <Zm>.S, <mod> #2]
7614
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_PLDL1STRM, REG_P1, REG_R2, REG_V3,
7615
+ INS_OPTS_SCALABLE_S_UXTW); // PRFB <prfop>, <Pg>, [<Xn|SP>, <Zm>.S, <mod>]
7616
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_PLDL2KEEP, REG_P1, REG_R2, REG_V3,
7617
+ INS_OPTS_SCALABLE_S_UXTW); // PRFB <prfop>, <Pg>, [<Xn|SP>, <Zm>.S, <mod>]
7618
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_PLDL2STRM, REG_P1, REG_R2, REG_V3,
7619
+ INS_OPTS_SCALABLE_S_UXTW); // PRFB <prfop>, <Pg>, [<Xn|SP>, <Zm>.S, <mod>]
7620
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_PLDL3KEEP, REG_P1, REG_R2, REG_V3,
7621
+ INS_OPTS_SCALABLE_S_UXTW); // PRFB <prfop>, <Pg>, [<Xn|SP>, <Zm>.S, <mod>]
7622
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_PLDL3STRM, REG_P1, REG_R2, REG_V3,
7623
+ INS_OPTS_SCALABLE_S_UXTW); // PRFB <prfop>, <Pg>, [<Xn|SP>, <Zm>.S, <mod>]
7624
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_PSTL1KEEP, REG_P1, REG_R2, REG_V3,
7625
+ INS_OPTS_SCALABLE_S_UXTW); // PRFB <prfop>, <Pg>, [<Xn|SP>, <Zm>.S, <mod>]
7626
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_PSTL1STRM, REG_P1, REG_R2, REG_V3,
7627
+ INS_OPTS_SCALABLE_S_UXTW); // PRFB <prfop>, <Pg>, [<Xn|SP>, <Zm>.S, <mod>]
7628
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_PSTL2KEEP, REG_P1, REG_R2, REG_V3,
7629
+ INS_OPTS_SCALABLE_S_UXTW); // PRFB <prfop>, <Pg>, [<Xn|SP>, <Zm>.S, <mod>]
7630
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_PSTL2STRM, REG_P1, REG_R2, REG_V3,
7631
+ INS_OPTS_SCALABLE_S_UXTW); // PRFB <prfop>, <Pg>, [<Xn|SP>, <Zm>.S, <mod>]
7632
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_PSTL3KEEP, REG_P1, REG_R2, REG_V3,
7633
+ INS_OPTS_SCALABLE_S_UXTW); // PRFB <prfop>, <Pg>, [<Xn|SP>, <Zm>.S, <mod>]
7634
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_PSTL3STRM, REG_P1, REG_R2, REG_V3,
7635
+ INS_OPTS_SCALABLE_S_UXTW); // PRFB <prfop>, <Pg>, [<Xn|SP>, <Zm>.S, <mod>]
7636
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_CONST6, REG_P1, REG_R2, REG_V3,
7637
+ INS_OPTS_SCALABLE_S_SXTW); // PRFB <prfop>, <Pg>, [<Xn|SP>, <Zm>.S, <mod>]
7638
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_CONST7, REG_P1, REG_R2, REG_V3,
7639
+ INS_OPTS_SCALABLE_S_SXTW); // PRFB <prfop>, <Pg>, [<Xn|SP>, <Zm>.S, <mod>]
7640
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_CONST14, REG_P1, REG_R2, REG_V3,
7641
+ INS_OPTS_SCALABLE_S_UXTW); // PRFB <prfop>, <Pg>, [<Xn|SP>, <Zm>.S, <mod>]
7642
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_CONST15, REG_P1, REG_R2, REG_V3,
7643
+ INS_OPTS_SCALABLE_S_UXTW); // PRFB <prfop>, <Pg>, [<Xn|SP>, <Zm>.S, <mod>]
7644
+
7645
+ // IF_SVE_HY_3A_A
7646
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P1, REG_R2, REG_V3,
7647
+ INS_OPTS_SCALABLE_D_UXTW); // PRFB <prfop>, <Pg>, [<Xn|SP>, <Zm>.D, <mod>]
7648
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfd, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P6, REG_R5, REG_V4,
7649
+ INS_OPTS_SCALABLE_D_UXTW,
7650
+ INS_SCALABLE_OPTS_MOD_N); // PRFD <prfop>, <Pg>, [<Xn|SP>, <Zm>.D, <mod> #3]
7651
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfh, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P7, REG_R8, REG_V9,
7652
+ INS_OPTS_SCALABLE_D_SXTW,
7653
+ INS_SCALABLE_OPTS_MOD_N); // PRFH <prfop>, <Pg>, [<Xn|SP>, <Zm>.D, <mod> #1]
7654
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfw, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P0, REG_R2, REG_V1,
7655
+ INS_OPTS_SCALABLE_D_UXTW,
7656
+ INS_SCALABLE_OPTS_MOD_N); // PRFW <prfop>, <Pg>, [<Xn|SP>, <Zm>.D, <mod> #2]
7657
+
7658
+ // IF_SVE_HY_3B
7659
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P0, REG_R1, REG_V2,
7660
+ INS_OPTS_SCALABLE_D); // PRFB <prfop>, <Pg>, [<Xn|SP>, <Zm>.D]
7661
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfd, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P7, REG_R4, REG_V3,
7662
+ INS_OPTS_SCALABLE_D,
7663
+ INS_SCALABLE_OPTS_LSL_N); // PRFD <prfop>, <Pg>, [<Xn|SP>, <Zm>.D, LSL #3]
7664
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfh, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P6, REG_R5, REG_V4,
7665
+ INS_OPTS_SCALABLE_D,
7666
+ INS_SCALABLE_OPTS_LSL_N); // PRFH <prfop>, <Pg>, [<Xn|SP>, <Zm>.D, LSL #1]
7667
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfw, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P3, REG_R2, REG_V1,
7668
+ INS_OPTS_SCALABLE_D,
7669
+ INS_SCALABLE_OPTS_LSL_N); // PRFW <prfop>, <Pg>, [<Xn|SP>, <Zm>.D, LSL #2]
7670
+
7671
+ // IF_SVE_HZ_2A_B
7672
+ theEmitter->emitIns_PRFOP_R_R_I(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P1, REG_V2, 0,
7673
+ INS_OPTS_SCALABLE_S); // PRFB <prfop>, <Pg>, [<Zn>.S{, #<imm>}]
7674
+ theEmitter->emitIns_PRFOP_R_R_I(INS_sve_prfd, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P4, REG_V3, 248,
7675
+ INS_OPTS_SCALABLE_S); // PRFD <prfop>, <Pg>, [<Zn>.S{, #<imm>}]
7676
+ theEmitter->emitIns_PRFOP_R_R_I(INS_sve_prfh, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P0, REG_V4, 62,
7677
+ INS_OPTS_SCALABLE_S); // PRFH <prfop>, <Pg>, [<Zn>.S{, #<imm>}]
7678
+ theEmitter->emitIns_PRFOP_R_R_I(INS_sve_prfw, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P7, REG_V5, 124,
7679
+ INS_OPTS_SCALABLE_S); // PRFW <prfop>, <Pg>, [<Zn>.S{, #<imm>}]
7680
+ theEmitter->emitIns_PRFOP_R_R_I(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P1, REG_V2, 31,
7681
+ INS_OPTS_SCALABLE_D); // PRFB <prfop>, <Pg>, [<Zn>.D{, #<imm>}]
7682
+ theEmitter->emitIns_PRFOP_R_R_I(INS_sve_prfd, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P4, REG_V3, 248,
7683
+ INS_OPTS_SCALABLE_D); // PRFD <prfop>, <Pg>, [<Zn>.D{, #<imm>}]
7684
+ theEmitter->emitIns_PRFOP_R_R_I(INS_sve_prfh, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P0, REG_V4, 62,
7685
+ INS_OPTS_SCALABLE_D); // PRFH <prfop>, <Pg>, [<Zn>.D{, #<imm>}]
7686
+ theEmitter->emitIns_PRFOP_R_R_I(INS_sve_prfw, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P7, REG_V5, 124,
7687
+ INS_OPTS_SCALABLE_D); // PRFW <prfop>, <Pg>, [<Zn>.D{, #<imm>}]
7688
+
7689
+ // IF_SVE_IA_2A
7690
+ theEmitter->emitIns_PRFOP_R_R_I(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P2, REG_R3,
7691
+ -32); // PRFB <prfop>, <Pg>, [<Xn|SP>{, #<imm>, MUL VL}]
7692
+ theEmitter->emitIns_PRFOP_R_R_I(INS_sve_prfd, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P7, REG_R4,
7693
+ 31); // PRFD <prfop>, <Pg>, [<Xn|SP>{, #<imm>, MUL VL}]
7694
+ theEmitter->emitIns_PRFOP_R_R_I(INS_sve_prfh, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P1, REG_R2,
7695
+ 0); // PRFH <prfop>, <Pg>, [<Xn|SP>{, #<imm>, MUL VL}]
7696
+ theEmitter->emitIns_PRFOP_R_R_I(INS_sve_prfw, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P0, REG_R5,
7697
+ -32); // PRFW <prfop>, <Pg>, [<Xn|SP>{, #<imm>, MUL VL}]
7698
+ theEmitter->emitIns_PRFOP_R_R_I(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P2, REG_R3,
7699
+ 17); // PRFB <prfop>, <Pg>, [<Xn|SP>{, #<imm>, MUL VL}]
7700
+
7701
+ // IF_SVE_IB_3A
7702
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfb, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P0, REG_R1,
7703
+ REG_R2); // PRFB <prfop>, <Pg>, [<Xn|SP>, <Xm>]
7704
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfd, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P5, REG_R4, REG_R3,
7705
+ INS_OPTS_NONE,
7706
+ INS_SCALABLE_OPTS_LSL_N); // PRFD <prfop>, <Pg>, [<Xn|SP>, <Xm>, LSL #3]
7707
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfh, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P6, REG_R7, REG_R8,
7708
+ INS_OPTS_NONE,
7709
+ INS_SCALABLE_OPTS_LSL_N); // PRFH <prfop>, <Pg>, [<Xn|SP>, <Xm>, LSL #1]
7710
+ theEmitter->emitIns_PRFOP_R_R_R(INS_sve_prfw, EA_SCALABLE, SVE_PRFOP_PLDL1KEEP, REG_P7, REG_R1, REG_R9,
7711
+ INS_OPTS_NONE,
7712
+ INS_SCALABLE_OPTS_LSL_N); // PRFW <prfop>, <Pg>, [<Xn|SP>, <Xm>, LSL #2]
7602
7713
// IF_SVE_HX_3A_B
7603
7714
theEmitter->emitIns_R_R_R_I(INS_sve_ld1b, EA_SCALABLE, REG_V0, REG_P0, REG_V1, 0,
7604
7715
INS_OPTS_SCALABLE_S); // LD1B {<Zt>.S }, <Pg>/Z, [<Zn>.S{, #<imm>}]
0 commit comments