@@ -1223,7 +1223,7 @@ multiclass Bls<string m, Format RegMRM, Format MemMRM, X86TypeInfo t, string Suf
1223
1223
(outs t.RegClass:$dst), []>, T8, VVVV;
1224
1224
}
1225
1225
1226
- let Predicates = [HasBMI], Defs = [EFLAGS] in {
1226
+ let Defs = [EFLAGS] in {
1227
1227
defm BLSR32 : Bls<"blsr", MRM1r, MRM1m, Xi32>, VEX;
1228
1228
defm BLSR64 : Bls<"blsr", MRM1r, MRM1m, Xi64>, VEX;
1229
1229
defm BLSMSK32 : Bls<"blsmsk", MRM2r, MRM2m, Xi32>, VEX;
@@ -1232,7 +1232,7 @@ let Predicates = [HasBMI], Defs = [EFLAGS] in {
1232
1232
defm BLSI64 : Bls<"blsi", MRM3r, MRM3m, Xi64>, VEX;
1233
1233
}
1234
1234
1235
- let Predicates = [HasBMI, In64BitMode], Defs = [EFLAGS] in {
1235
+ let Predicates = [In64BitMode], Defs = [EFLAGS] in {
1236
1236
defm BLSR32 : Bls<"blsr", MRM1r, MRM1m, Xi32, "_EVEX">, EVEX;
1237
1237
defm BLSR64 : Bls<"blsr", MRM1r, MRM1m, Xi64, "_EVEX">, EVEX;
1238
1238
defm BLSMSK32 : Bls<"blsmsk", MRM2r, MRM2m, Xi32, "_EVEX">, EVEX;
@@ -1241,6 +1241,15 @@ let Predicates = [HasBMI, In64BitMode], Defs = [EFLAGS] in {
1241
1241
defm BLSI64 : Bls<"blsi", MRM3r, MRM3m, Xi64, "_EVEX">, EVEX;
1242
1242
}
1243
1243
1244
+ let Predicates = [In64BitMode] in {
1245
+ defm BLSR32 : Bls<"blsr", MRM1r, MRM1m, Xi32, "_NF">, EVEX, EVEX_NF;
1246
+ defm BLSR64 : Bls<"blsr", MRM1r, MRM1m, Xi64, "_NF">, EVEX, EVEX_NF;
1247
+ defm BLSMSK32 : Bls<"blsmsk", MRM2r, MRM2m, Xi32, "_NF">, EVEX, EVEX_NF;
1248
+ defm BLSMSK64 : Bls<"blsmsk", MRM2r, MRM2m, Xi64, "_NF">, EVEX, EVEX_NF;
1249
+ defm BLSI32 : Bls<"blsi", MRM3r, MRM3m, Xi32, "_NF">, EVEX, EVEX_NF;
1250
+ defm BLSI64 : Bls<"blsi", MRM3r, MRM3m, Xi64, "_NF">, EVEX, EVEX_NF;
1251
+ }
1252
+
1244
1253
multiclass Bls_Pats<string suffix> {
1245
1254
// FIXME(1): patterns for the load versions are not implemented
1246
1255
// FIXME(2): By only matching `add_su` and `ineg_su` we may emit
@@ -1315,6 +1324,13 @@ let Predicates = [HasBMI2, HasEGPR, In64BitMode], Defs = [EFLAGS] in {
1315
1324
defm BZHI64 : Bmi4VOp3<0xF5, "bzhi", Xi64, X86bzhi, WriteBZHI, "_EVEX">, EVEX;
1316
1325
}
1317
1326
1327
+ let Predicates = [In64BitMode] in {
1328
+ defm BEXTR32 : Bmi4VOp3<0xF7, "bextr", Xi32, null_frag, WriteBEXTR, "_NF">, EVEX, EVEX_NF;
1329
+ defm BEXTR64 : Bmi4VOp3<0xF7, "bextr", Xi64, null_frag, WriteBEXTR, "_NF">, EVEX, EVEX_NF;
1330
+ defm BZHI32 : Bmi4VOp3<0xF5, "bzhi", Xi32, null_frag, WriteBZHI, "_NF">, EVEX, EVEX_NF;
1331
+ defm BZHI64 : Bmi4VOp3<0xF5, "bzhi", Xi64, null_frag, WriteBZHI, "_NF">, EVEX, EVEX_NF;
1332
+ }
1333
+
1318
1334
def CountTrailingOnes : SDNodeXForm<imm, [{
1319
1335
// Count the trailing ones in the immediate.
1320
1336
return getI8Imm(llvm::countr_one(N->getZExtValue()), SDLoc(N));
0 commit comments