@@ -1123,16 +1123,38 @@ instruct vxorL_vx_masked(vReg dst_src, iRegL src, vRegMask_V0 v0) %{
1123
1123
1124
1124
// vector and not
1125
1125
1126
- instruct vand_not(vReg dst, vReg src1, vReg src2, immI_M1 m1) %{
1127
- predicate(UseZvbb &&
1128
- (Matcher::vector_element_basic_type(n) == T_BYTE ||
1129
- Matcher::vector_element_basic_type(n) == T_SHORT ||
1130
- Matcher::vector_element_basic_type(n) == T_INT));
1126
+ instruct vand_notB(vReg dst, vReg src1, vReg src2, immI_M1 m1) %{
1127
+ predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_BYTE);
1131
1128
match(Set dst (AndV src1 (XorV src2 (Replicate m1))));
1132
- format %{ "vand_not $dst, $src1, $src2" %}
1129
+ format %{ "vand_notB $dst, $src1, $src2" %}
1133
1130
ins_encode %{
1134
- BasicType bt = Matcher::vector_element_basic_type(this);
1135
- __ vsetvli_helper(bt, Matcher::vector_length(this));
1131
+ __ vsetvli_helper(T_BYTE, Matcher::vector_length(this));
1132
+ __ vandn_vv(as_VectorRegister($dst$$reg),
1133
+ as_VectorRegister($src1$$reg),
1134
+ as_VectorRegister($src2$$reg));
1135
+ %}
1136
+ ins_pipe(pipe_slow);
1137
+ %}
1138
+
1139
+ instruct vand_notS(vReg dst, vReg src1, vReg src2, immI_M1 m1) %{
1140
+ predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_SHORT);
1141
+ match(Set dst (AndV src1 (XorV src2 (Replicate m1))));
1142
+ format %{ "vand_notS $dst, $src1, $src2" %}
1143
+ ins_encode %{
1144
+ __ vsetvli_helper(T_SHORT, Matcher::vector_length(this));
1145
+ __ vandn_vv(as_VectorRegister($dst$$reg),
1146
+ as_VectorRegister($src1$$reg),
1147
+ as_VectorRegister($src2$$reg));
1148
+ %}
1149
+ ins_pipe(pipe_slow);
1150
+ %}
1151
+
1152
+ instruct vand_notI(vReg dst, vReg src1, vReg src2, immI_M1 m1) %{
1153
+ predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_INT);
1154
+ match(Set dst (AndV src1 (XorV src2 (Replicate m1))));
1155
+ format %{ "vand_notI $dst, $src1, $src2" %}
1156
+ ins_encode %{
1157
+ __ vsetvli_helper(T_INT, Matcher::vector_length(this));
1136
1158
__ vandn_vv(as_VectorRegister($dst$$reg),
1137
1159
as_VectorRegister($src1$$reg),
1138
1160
as_VectorRegister($src2$$reg));
@@ -1153,16 +1175,40 @@ instruct vand_notL(vReg dst, vReg src1, vReg src2, immL_M1 m1) %{
1153
1175
ins_pipe(pipe_slow);
1154
1176
%}
1155
1177
1156
- instruct vand_not_masked(vReg dst_src1, vReg src2, immI_M1 m1, vRegMask_V0 v0) %{
1157
- predicate(UseZvbb &&
1158
- (Matcher::vector_element_basic_type(n) == T_BYTE ||
1159
- Matcher::vector_element_basic_type(n) == T_SHORT ||
1160
- Matcher::vector_element_basic_type(n) == T_INT));
1178
+ instruct vand_notB_masked(vReg dst_src1, vReg src2, immI_M1 m1, vRegMask_V0 v0) %{
1179
+ predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_BYTE);
1161
1180
match(Set dst_src1 (AndV (Binary dst_src1 (XorV src2 (Replicate m1))) v0));
1162
- format %{ "vand_not_masked $dst_src1, $dst_src1, $src2, $v0" %}
1181
+ format %{ "vand_notB_masked $dst_src1, $dst_src1, $src2, $v0" %}
1163
1182
ins_encode %{
1164
- BasicType bt = Matcher::vector_element_basic_type(this);
1165
- __ vsetvli_helper(bt, Matcher::vector_length(this));
1183
+ __ vsetvli_helper(T_BYTE, Matcher::vector_length(this));
1184
+ __ vandn_vv(as_VectorRegister($dst_src1$$reg),
1185
+ as_VectorRegister($dst_src1$$reg),
1186
+ as_VectorRegister($src2$$reg),
1187
+ Assembler::v0_t);
1188
+ %}
1189
+ ins_pipe(pipe_slow);
1190
+ %}
1191
+
1192
+ instruct vand_notS_masked(vReg dst_src1, vReg src2, immI_M1 m1, vRegMask_V0 v0) %{
1193
+ predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_SHORT);
1194
+ match(Set dst_src1 (AndV (Binary dst_src1 (XorV src2 (Replicate m1))) v0));
1195
+ format %{ "vand_notS_masked $dst_src1, $dst_src1, $src2, $v0" %}
1196
+ ins_encode %{
1197
+ __ vsetvli_helper(T_SHORT, Matcher::vector_length(this));
1198
+ __ vandn_vv(as_VectorRegister($dst_src1$$reg),
1199
+ as_VectorRegister($dst_src1$$reg),
1200
+ as_VectorRegister($src2$$reg),
1201
+ Assembler::v0_t);
1202
+ %}
1203
+ ins_pipe(pipe_slow);
1204
+ %}
1205
+
1206
+ instruct vand_notI_masked(vReg dst_src1, vReg src2, immI_M1 m1, vRegMask_V0 v0) %{
1207
+ predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_INT);
1208
+ match(Set dst_src1 (AndV (Binary dst_src1 (XorV src2 (Replicate m1))) v0));
1209
+ format %{ "vand_notI_masked $dst_src1, $dst_src1, $src2, $v0" %}
1210
+ ins_encode %{
1211
+ __ vsetvli_helper(T_INT, Matcher::vector_length(this));
1166
1212
__ vandn_vv(as_VectorRegister($dst_src1$$reg),
1167
1213
as_VectorRegister($dst_src1$$reg),
1168
1214
as_VectorRegister($src2$$reg),
@@ -1185,16 +1231,38 @@ instruct vand_notL_masked(vReg dst_src1, vReg src2, immL_M1 m1, vRegMask_V0 v0)
1185
1231
ins_pipe(pipe_slow);
1186
1232
%}
1187
1233
1188
- instruct vand_not_vx(vReg dst, vReg src1, iRegIorL2I src2, immI_M1 m1) %{
1189
- predicate(UseZvbb &&
1190
- (Matcher::vector_element_basic_type(n) == T_BYTE ||
1191
- Matcher::vector_element_basic_type(n) == T_SHORT ||
1192
- Matcher::vector_element_basic_type(n) == T_INT));
1234
+ instruct vand_notB_vx(vReg dst, vReg src1, iRegIorL2I src2, immI_M1 m1) %{
1235
+ predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_BYTE);
1193
1236
match(Set dst (AndV src1 (Replicate (XorI src2 m1))));
1194
- format %{ "vand_not_vx $dst, $src1, $src2" %}
1237
+ format %{ "vand_notB_vx $dst, $src1, $src2" %}
1195
1238
ins_encode %{
1196
- BasicType bt = Matcher::vector_element_basic_type(this);
1197
- __ vsetvli_helper(bt, Matcher::vector_length(this));
1239
+ __ vsetvli_helper(T_BYTE, Matcher::vector_length(this));
1240
+ __ vandn_vx(as_VectorRegister($dst$$reg),
1241
+ as_VectorRegister($src1$$reg),
1242
+ as_Register($src2$$reg));
1243
+ %}
1244
+ ins_pipe(pipe_slow);
1245
+ %}
1246
+
1247
+ instruct vand_notS_vx(vReg dst, vReg src1, iRegIorL2I src2, immI_M1 m1) %{
1248
+ predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_SHORT);
1249
+ match(Set dst (AndV src1 (Replicate (XorI src2 m1))));
1250
+ format %{ "vand_notS_vx $dst, $src1, $src2" %}
1251
+ ins_encode %{
1252
+ __ vsetvli_helper(T_SHORT, Matcher::vector_length(this));
1253
+ __ vandn_vx(as_VectorRegister($dst$$reg),
1254
+ as_VectorRegister($src1$$reg),
1255
+ as_Register($src2$$reg));
1256
+ %}
1257
+ ins_pipe(pipe_slow);
1258
+ %}
1259
+
1260
+ instruct vand_notI_vx(vReg dst, vReg src1, iRegIorL2I src2, immI_M1 m1) %{
1261
+ predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_INT);
1262
+ match(Set dst (AndV src1 (Replicate (XorI src2 m1))));
1263
+ format %{ "vand_notI_vx $dst, $src1, $src2" %}
1264
+ ins_encode %{
1265
+ __ vsetvli_helper(T_INT, Matcher::vector_length(this));
1198
1266
__ vandn_vx(as_VectorRegister($dst$$reg),
1199
1267
as_VectorRegister($src1$$reg),
1200
1268
as_Register($src2$$reg));
@@ -1215,16 +1283,40 @@ instruct vand_notL_vx(vReg dst, vReg src1, iRegL src2, immL_M1 m1) %{
1215
1283
ins_pipe(pipe_slow);
1216
1284
%}
1217
1285
1218
- instruct vand_not_vx_masked(vReg dst_src1, iRegIorL2I src2, immI_M1 m1, vRegMask_V0 v0) %{
1219
- predicate(UseZvbb &&
1220
- (Matcher::vector_element_basic_type(n) == T_BYTE ||
1221
- Matcher::vector_element_basic_type(n) == T_SHORT ||
1222
- Matcher::vector_element_basic_type(n) == T_INT));
1286
+ instruct vand_notB_vx_masked(vReg dst_src1, iRegIorL2I src2, immI_M1 m1, vRegMask_V0 v0) %{
1287
+ predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_BYTE);
1223
1288
match(Set dst_src1 (AndV (Binary dst_src1 (Replicate (XorI src2 m1))) v0));
1224
- format %{ "vand_not_vx_masked $dst_src1, $dst_src1, $src2, $v0" %}
1289
+ format %{ "vand_notB_vx_masked $dst_src1, $dst_src1, $src2, $v0" %}
1225
1290
ins_encode %{
1226
- BasicType bt = Matcher::vector_element_basic_type(this);
1227
- __ vsetvli_helper(bt, Matcher::vector_length(this));
1291
+ __ vsetvli_helper(T_BYTE, Matcher::vector_length(this));
1292
+ __ vandn_vx(as_VectorRegister($dst_src1$$reg),
1293
+ as_VectorRegister($dst_src1$$reg),
1294
+ as_Register($src2$$reg),
1295
+ Assembler::v0_t);
1296
+ %}
1297
+ ins_pipe(pipe_slow);
1298
+ %}
1299
+
1300
+ instruct vand_notS_vx_masked(vReg dst_src1, iRegIorL2I src2, immI_M1 m1, vRegMask_V0 v0) %{
1301
+ predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_SHORT);
1302
+ match(Set dst_src1 (AndV (Binary dst_src1 (Replicate (XorI src2 m1))) v0));
1303
+ format %{ "vand_notS_vx_masked $dst_src1, $dst_src1, $src2, $v0" %}
1304
+ ins_encode %{
1305
+ __ vsetvli_helper(T_SHORT, Matcher::vector_length(this));
1306
+ __ vandn_vx(as_VectorRegister($dst_src1$$reg),
1307
+ as_VectorRegister($dst_src1$$reg),
1308
+ as_Register($src2$$reg),
1309
+ Assembler::v0_t);
1310
+ %}
1311
+ ins_pipe(pipe_slow);
1312
+ %}
1313
+
1314
+ instruct vand_notI_vx_masked(vReg dst_src1, iRegIorL2I src2, immI_M1 m1, vRegMask_V0 v0) %{
1315
+ predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_INT);
1316
+ match(Set dst_src1 (AndV (Binary dst_src1 (Replicate (XorI src2 m1))) v0));
1317
+ format %{ "vand_notI_vx_masked $dst_src1, $dst_src1, $src2, $v0" %}
1318
+ ins_encode %{
1319
+ __ vsetvli_helper(T_INT, Matcher::vector_length(this));
1228
1320
__ vandn_vx(as_VectorRegister($dst_src1$$reg),
1229
1321
as_VectorRegister($dst_src1$$reg),
1230
1322
as_Register($src2$$reg),
0 commit comments