fix EVEX.X
diff --git a/xbyak/xbyak.h b/xbyak/xbyak.h
index a2b57c7..967488c 100644
--- a/xbyak/xbyak.h
+++ b/xbyak/xbyak.h
@@ -1347,7 +1347,7 @@
}
db(code);
}
- void evex(const Reg& reg, const Reg& base, const Operand *v, int type, int code)
+ void evex(const Reg& reg, const Reg& base, const Operand *v, int type, int code, bool x = false)
{
int w = (type & T_EW1) ? 1 : 0;
// bool is256 = (type & T_L1) ? true : (type & T_L0) ? false : reg.isYMM();
@@ -1358,7 +1358,7 @@
uint32 vvvv = ~idx;
bool R = !reg.isExtIdx();
- bool X = !base.isExtIdx2();
+ bool X = x ? false : !base.isExtIdx2();
bool B = !base.isExtIdx();
bool Rp = !reg.isExtIdx2();
int LL = reg.isZMM() ? 2 : reg.isYMM() ? 1 : 0;
@@ -1680,11 +1680,11 @@
const Reg& base = addr.getRegExp().getBase();
if (BIT == 64 && addr.is32bit()) db(0x67);
bool disp32 = false;
+ bool x = addr.getRegExp().getIndex().isExtIdx();
if (r.hasEvex() || (p1 && p1->hasEvex()) /*|| base.hasEvex()*/) {
- evex(r, base, p1, type, code);
+ evex(r, base, p1, type, code, x);
disp32 = true;
} else {
- bool x = addr.getRegExp().getIndex().isExtIdx();
vex(r, base, p1, type, code, x);
}
opAddr(addr, r.getIdx(), (imm8 != NONE) ? 1 : 0, disp32);