@@ -5966,6 +5966,148 @@ void CodeGen::genArm64EmitterUnitTestsSve()
5966
5966
theEmitter->emitIns_R_R_R_I (INS_sve_mul, EA_SCALABLE, REG_V22, REG_V23, REG_V15, 1 ,
5967
5967
INS_OPTS_SCALABLE_D); // MUL <Zd>.D, <Zn>.D, <Zm>.D[<imm>]
5968
5968
5969
+ // IF_SVE_FE_3A
5970
+ theEmitter->emitIns_R_R_R_I (INS_sve_smullb, EA_SCALABLE, REG_V0, REG_V1, REG_V0, 0 ,
5971
+ INS_OPTS_SCALABLE_H); // SMULLB <Zd>.S, <Zn>.H, <Zm>.H[<imm>]
5972
+ theEmitter->emitIns_R_R_R_I (INS_sve_smullb, EA_SCALABLE, REG_V2, REG_V3, REG_V1, 1 ,
5973
+ INS_OPTS_SCALABLE_H); // SMULLB <Zd>.S, <Zn>.H, <Zm>.H[<imm>]
5974
+ theEmitter->emitIns_R_R_R_I (INS_sve_smullt, EA_SCALABLE, REG_V4, REG_V5, REG_V2, 2 ,
5975
+ INS_OPTS_SCALABLE_H); // SMULLT <Zd>.S, <Zn>.H, <Zm>.H[<imm>]
5976
+ theEmitter->emitIns_R_R_R_I (INS_sve_smullt, EA_SCALABLE, REG_V6, REG_V7, REG_V3, 3 ,
5977
+ INS_OPTS_SCALABLE_H); // SMULLT <Zd>.S, <Zn>.H, <Zm>.H[<imm>]
5978
+ theEmitter->emitIns_R_R_R_I (INS_sve_umullb, EA_SCALABLE, REG_V8, REG_V9, REG_V4, 4 ,
5979
+ INS_OPTS_SCALABLE_H); // UMULLB <Zd>.S, <Zn>.H, <Zm>.H[<imm>]
5980
+ theEmitter->emitIns_R_R_R_I (INS_sve_umullb, EA_SCALABLE, REG_V10, REG_V11, REG_V5, 5 ,
5981
+ INS_OPTS_SCALABLE_H); // UMULLB <Zd>.S, <Zn>.H, <Zm>.H[<imm>]
5982
+ theEmitter->emitIns_R_R_R_I (INS_sve_umullt, EA_SCALABLE, REG_V12, REG_V13, REG_V6, 6 ,
5983
+ INS_OPTS_SCALABLE_H); // UMULLT <Zd>.S, <Zn>.H, <Zm>.H[<imm>]
5984
+ theEmitter->emitIns_R_R_R_I (INS_sve_umullt, EA_SCALABLE, REG_V14, REG_V15, REG_V7, 7 ,
5985
+ INS_OPTS_SCALABLE_H); // UMULLT <Zd>.S, <Zn>.H, <Zm>.H[<imm>]
5986
+
5987
+ // IF_SVE_FE_3B
5988
+ theEmitter->emitIns_R_R_R_I (INS_sve_smullb, EA_SCALABLE, REG_V0, REG_V1, REG_V0, 0 ,
5989
+ INS_OPTS_SCALABLE_S); // SMULLB <Zd>.D, <Zn>.S, <Zm>.S[<imm>]
5990
+ theEmitter->emitIns_R_R_R_I (INS_sve_smullb, EA_SCALABLE, REG_V2, REG_V3, REG_V2, 1 ,
5991
+ INS_OPTS_SCALABLE_S); // SMULLB <Zd>.D, <Zn>.S, <Zm>.S[<imm>]
5992
+ theEmitter->emitIns_R_R_R_I (INS_sve_smullt, EA_SCALABLE, REG_V4, REG_V5, REG_V4, 2 ,
5993
+ INS_OPTS_SCALABLE_S); // SMULLT <Zd>.D, <Zn>.S, <Zm>.S[<imm>]
5994
+ theEmitter->emitIns_R_R_R_I (INS_sve_smullt, EA_SCALABLE, REG_V6, REG_V7, REG_V6, 3 ,
5995
+ INS_OPTS_SCALABLE_S); // SMULLT <Zd>.D, <Zn>.S, <Zm>.S[<imm>]
5996
+ theEmitter->emitIns_R_R_R_I (INS_sve_umullb, EA_SCALABLE, REG_V8, REG_V9, REG_V8, 0 ,
5997
+ INS_OPTS_SCALABLE_S); // UMULLB <Zd>.D, <Zn>.S, <Zm>.S[<imm>]
5998
+ theEmitter->emitIns_R_R_R_I (INS_sve_umullb, EA_SCALABLE, REG_V10, REG_V11, REG_V10, 1 ,
5999
+ INS_OPTS_SCALABLE_S); // UMULLB <Zd>.D, <Zn>.S, <Zm>.S[<imm>]
6000
+ theEmitter->emitIns_R_R_R_I (INS_sve_umullt, EA_SCALABLE, REG_V12, REG_V13, REG_V12, 2 ,
6001
+ INS_OPTS_SCALABLE_S); // UMULLT <Zd>.D, <Zn>.S, <Zm>.S[<imm>]
6002
+ theEmitter->emitIns_R_R_R_I (INS_sve_umullt, EA_SCALABLE, REG_V14, REG_V15, REG_V14, 3 ,
6003
+ INS_OPTS_SCALABLE_S); // UMULLT <Zd>.D, <Zn>.S, <Zm>.S[<imm>]
6004
+
6005
+ // IF_SVE_FG_3A
6006
+ theEmitter->emitIns_R_R_R_I (INS_sve_smlalb, EA_SCALABLE, REG_V0, REG_V1, REG_V0, 0 ,
6007
+ INS_OPTS_SCALABLE_H); // SMLALB <Zda>.S, <Zn>.H, <Zm>.H[<imm>]
6008
+ theEmitter->emitIns_R_R_R_I (INS_sve_smlalt, EA_SCALABLE, REG_V2, REG_V3, REG_V1, 1 ,
6009
+ INS_OPTS_SCALABLE_H); // SMLALT <Zda>.S, <Zn>.H, <Zm>.H[<imm>]
6010
+ theEmitter->emitIns_R_R_R_I (INS_sve_smlslb, EA_SCALABLE, REG_V4, REG_V5, REG_V2, 2 ,
6011
+ INS_OPTS_SCALABLE_H); // SMLSLB <Zda>.S, <Zn>.H, <Zm>.H[<imm>]
6012
+ theEmitter->emitIns_R_R_R_I (INS_sve_smlslt, EA_SCALABLE, REG_V6, REG_V7, REG_V3, 3 ,
6013
+ INS_OPTS_SCALABLE_H); // SMLSLT <Zda>.S, <Zn>.H, <Zm>.H[<imm>]
6014
+ theEmitter->emitIns_R_R_R_I (INS_sve_umlalb, EA_SCALABLE, REG_V8, REG_V9, REG_V4, 4 ,
6015
+ INS_OPTS_SCALABLE_H); // UMLALB <Zda>.S, <Zn>.H, <Zm>.H[<imm>]
6016
+ theEmitter->emitIns_R_R_R_I (INS_sve_umlalt, EA_SCALABLE, REG_V10, REG_V11, REG_V5, 5 ,
6017
+ INS_OPTS_SCALABLE_H); // UMLALT <Zda>.S, <Zn>.H, <Zm>.H[<imm>]
6018
+ theEmitter->emitIns_R_R_R_I (INS_sve_umlslb, EA_SCALABLE, REG_V12, REG_V13, REG_V6, 6 ,
6019
+ INS_OPTS_SCALABLE_H); // UMLSLB <Zda>.S, <Zn>.H, <Zm>.H[<imm>]
6020
+ theEmitter->emitIns_R_R_R_I (INS_sve_umlslt, EA_SCALABLE, REG_V14, REG_V15, REG_V7, 7 ,
6021
+ INS_OPTS_SCALABLE_H); // UMLSLT <Zda>.S, <Zn>.H, <Zm>.H[<imm>]
6022
+
6023
+ // IF_SVE_FG_3B
6024
+ theEmitter->emitIns_R_R_R_I (INS_sve_smlalb, EA_SCALABLE, REG_V0, REG_V1, REG_V0, 0 ,
6025
+ INS_OPTS_SCALABLE_S); // SMLALB <Zda>.D, <Zn>.S, <Zm>.S[<imm>]
6026
+ theEmitter->emitIns_R_R_R_I (INS_sve_smlalt, EA_SCALABLE, REG_V2, REG_V3, REG_V2, 1 ,
6027
+ INS_OPTS_SCALABLE_S); // SMLALT <Zda>.D, <Zn>.S, <Zm>.S[<imm>]
6028
+ theEmitter->emitIns_R_R_R_I (INS_sve_smlslb, EA_SCALABLE, REG_V4, REG_V5, REG_V4, 2 ,
6029
+ INS_OPTS_SCALABLE_S); // SMLSLB <Zda>.D, <Zn>.S, <Zm>.S[<imm>]
6030
+ theEmitter->emitIns_R_R_R_I (INS_sve_smlslt, EA_SCALABLE, REG_V6, REG_V7, REG_V6, 3 ,
6031
+ INS_OPTS_SCALABLE_S); // SMLSLT <Zda>.D, <Zn>.S, <Zm>.S[<imm>]
6032
+ theEmitter->emitIns_R_R_R_I (INS_sve_umlalb, EA_SCALABLE, REG_V8, REG_V9, REG_V8, 0 ,
6033
+ INS_OPTS_SCALABLE_S); // UMLALB <Zda>.D, <Zn>.S, <Zm>.S[<imm>]
6034
+ theEmitter->emitIns_R_R_R_I (INS_sve_umlalt, EA_SCALABLE, REG_V10, REG_V11, REG_V10, 1 ,
6035
+ INS_OPTS_SCALABLE_S); // UMLALT <Zda>.D, <Zn>.S, <Zm>.S[<imm>]
6036
+ theEmitter->emitIns_R_R_R_I (INS_sve_umlslb, EA_SCALABLE, REG_V12, REG_V13, REG_V12, 2 ,
6037
+ INS_OPTS_SCALABLE_S); // UMLSLB <Zda>.D, <Zn>.S, <Zm>.S[<imm>]
6038
+ theEmitter->emitIns_R_R_R_I (INS_sve_umlslt, EA_SCALABLE, REG_V14, REG_V15, REG_V14, 3 ,
6039
+ INS_OPTS_SCALABLE_S); // UMLSLT <Zda>.D, <Zn>.S, <Zm>.S[<imm>]
6040
+
6041
+ // IF_SVE_FH_3A
6042
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmullb, EA_SCALABLE, REG_V0, REG_V2, REG_V1, 1 ,
6043
+ INS_OPTS_SCALABLE_H); // SQDMULLB <Zd>.S, <Zn>.H, <Zm>.H[<imm>]
6044
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmullb, EA_SCALABLE, REG_V4, REG_V6, REG_V3, 3 ,
6045
+ INS_OPTS_SCALABLE_H); // SQDMULLB <Zd>.S, <Zn>.H, <Zm>.H[<imm>]
6046
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmullt, EA_SCALABLE, REG_V8, REG_V10, REG_V5, 5 ,
6047
+ INS_OPTS_SCALABLE_H); // SQDMULLT <Zd>.S, <Zn>.H, <Zm>.H[<imm>]
6048
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmullt, EA_SCALABLE, REG_V12, REG_V14, REG_V7, 7 ,
6049
+ INS_OPTS_SCALABLE_H); // SQDMULLT <Zd>.S, <Zn>.H, <Zm>.H[<imm>]
6050
+
6051
+ // IF_SVE_FH_3B
6052
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmullb, EA_SCALABLE, REG_V0, REG_V2, REG_V0, 0 ,
6053
+ INS_OPTS_SCALABLE_S); // SQDMULLB <Zd>.D, <Zn>.S, <Zm>.S[<imm>]
6054
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmullb, EA_SCALABLE, REG_V4, REG_V6, REG_V5, 1 ,
6055
+ INS_OPTS_SCALABLE_S); // SQDMULLB <Zd>.D, <Zn>.S, <Zm>.S[<imm>]
6056
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmullt, EA_SCALABLE, REG_V8, REG_V10, REG_V10, 2 ,
6057
+ INS_OPTS_SCALABLE_S); // SQDMULLT <Zd>.D, <Zn>.S, <Zm>.S[<imm>]
6058
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmullt, EA_SCALABLE, REG_V12, REG_V14, REG_V15, 3 ,
6059
+ INS_OPTS_SCALABLE_S); // SQDMULLT <Zd>.D, <Zn>.S, <Zm>.S[<imm>]
6060
+
6061
+ // IF_SVE_FI_3A
6062
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmulh, EA_SCALABLE, REG_V0, REG_V1, REG_V1, 1 ,
6063
+ INS_OPTS_SCALABLE_H); // SQDMULH <Zd>.H, <Zn>.H, <Zm>.H[<imm>]
6064
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmulh, EA_SCALABLE, REG_V2, REG_V3, REG_V3, 3 ,
6065
+ INS_OPTS_SCALABLE_H); // SQDMULH <Zd>.H, <Zn>.H, <Zm>.H[<imm>]
6066
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqrdmulh, EA_SCALABLE, REG_V4, REG_V5, REG_V5, 5 ,
6067
+ INS_OPTS_SCALABLE_H); // SQRDMULH <Zd>.H, <Zn>.H, <Zm>.H[<imm>]
6068
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqrdmulh, EA_SCALABLE, REG_V6, REG_V7, REG_V7, 7 ,
6069
+ INS_OPTS_SCALABLE_H); // SQRDMULH <Zd>.H, <Zn>.H, <Zm>.H[<imm>]
6070
+
6071
+ // IF_SVE_FI_3B
6072
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmulh, EA_SCALABLE, REG_V8, REG_V9, REG_V0, 0 ,
6073
+ INS_OPTS_SCALABLE_S); // SQDMULH <Zd>.S, <Zn>.S, <Zm>.S[<imm>]
6074
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmulh, EA_SCALABLE, REG_V10, REG_V11, REG_V2, 1 ,
6075
+ INS_OPTS_SCALABLE_S); // SQDMULH <Zd>.S, <Zn>.S, <Zm>.S[<imm>]
6076
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqrdmulh, EA_SCALABLE, REG_V12, REG_V13, REG_V4, 2 ,
6077
+ INS_OPTS_SCALABLE_S); // SQRDMULH <Zd>.S, <Zn>.S, <Zm>.S[<imm>]
6078
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqrdmulh, EA_SCALABLE, REG_V14, REG_V15, REG_V6, 3 ,
6079
+ INS_OPTS_SCALABLE_S); // SQRDMULH <Zd>.S, <Zn>.S, <Zm>.S[<imm>]
6080
+
6081
+ // IF_SVE_FI_3C
6082
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmulh, EA_SCALABLE, REG_V16, REG_V17, REG_V0, 0 ,
6083
+ INS_OPTS_SCALABLE_D); // SQDMULH <Zd>.D, <Zn>.D, <Zm>.D[<imm>]
6084
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmulh, EA_SCALABLE, REG_V18, REG_V19, REG_V5, 1 ,
6085
+ INS_OPTS_SCALABLE_D); // SQDMULH <Zd>.D, <Zn>.D, <Zm>.D[<imm>]
6086
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqrdmulh, EA_SCALABLE, REG_V20, REG_V21, REG_V10, 0 ,
6087
+ INS_OPTS_SCALABLE_D); // SQRDMULH <Zd>.D, <Zn>.D, <Zm>.D[<imm>]
6088
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqrdmulh, EA_SCALABLE, REG_V22, REG_V23, REG_V15, 1 ,
6089
+ INS_OPTS_SCALABLE_D); // SQRDMULH <Zd>.D, <Zn>.D, <Zm>.D[<imm>]
6090
+
6091
+ // IF_SVE_FJ_3A
6092
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmlalb, EA_SCALABLE, REG_V0, REG_V1, REG_V1, 1 ,
6093
+ INS_OPTS_SCALABLE_H); // SQDMLALB <Zda>.S, <Zn>.H, <Zm>.H[<imm>]
6094
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmlalt, EA_SCALABLE, REG_V2, REG_V3, REG_V3, 3 ,
6095
+ INS_OPTS_SCALABLE_H); // SQDMLALT <Zda>.S, <Zn>.H, <Zm>.H[<imm>]
6096
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmlslb, EA_SCALABLE, REG_V4, REG_V5, REG_V5, 5 ,
6097
+ INS_OPTS_SCALABLE_H); // SQDMLSLB <Zda>.S, <Zn>.H, <Zm>.H[<imm>]
6098
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmlslt, EA_SCALABLE, REG_V6, REG_V0, REG_V7, 7 ,
6099
+ INS_OPTS_SCALABLE_H); // SQDMLSLT <Zda>.S, <Zn>.H, <Zm>.H[<imm>]
6100
+
6101
+ // IF_SVE_FJ_3B
6102
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmlalb, EA_SCALABLE, REG_V8, REG_V9, REG_V0, 0 ,
6103
+ INS_OPTS_SCALABLE_S); // SQDMLALB <Zda>.D, <Zn>.S, <Zm>.S[<imm>]
6104
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmlalt, EA_SCALABLE, REG_V10, REG_V11, REG_V5, 1 ,
6105
+ INS_OPTS_SCALABLE_S); // SQDMLALT <Zda>.D, <Zn>.S, <Zm>.S[<imm>]
6106
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmlslb, EA_SCALABLE, REG_V12, REG_V13, REG_V10, 2 ,
6107
+ INS_OPTS_SCALABLE_S); // SQDMLSLB <Zda>.D, <Zn>.S, <Zm>.S[<imm>]
6108
+ theEmitter->emitIns_R_R_R_I (INS_sve_sqdmlslt, EA_SCALABLE, REG_V14, REG_V15, REG_V15, 3 ,
6109
+ INS_OPTS_SCALABLE_S); // SQDMLSLT <Zda>.D, <Zn>.S, <Zm>.S[<imm>]
6110
+
5969
6111
// IF_SVE_FF_3A
5970
6112
theEmitter->emitIns_R_R_R_I (INS_sve_mla, EA_SCALABLE, REG_V0, REG_V1, REG_V1, 1 ,
5971
6113
INS_OPTS_SCALABLE_H); // MLA <Zda>.H, <Zn>.H, <Zm>.H[<imm>]
0 commit comments