throw exception if not supported amx sibmem 2
diff --git a/test/misc.cpp b/test/misc.cpp
index dbebf2f..6496f1c 100644
--- a/test/misc.cpp
+++ b/test/misc.cpp
@@ -797,6 +797,10 @@
{
tileloadd(tmm1, ptr[r8]);
}
+ void notSupported2()
+ {
+ tileloadd(tmm1, ptr[r8*2]);
+ }
} c;
const uint8_t tbl[] = {
0xC4, 0x82, 0x7B, 0x4B, 0x0C, 0x00,
@@ -809,5 +813,6 @@
// current version does not support this sibmem format
CYBOZU_TEST_EXCEPTION(c.notSupported(), std::exception);
+ CYBOZU_TEST_EXCEPTION(c.notSupported2(), std::exception);
}
#endif
diff --git a/xbyak/xbyak.h b/xbyak/xbyak.h
index 8e31209..b896bd9 100644
--- a/xbyak/xbyak.h
+++ b/xbyak/xbyak.h
@@ -2269,8 +2269,9 @@
#ifdef XBYAK64
void opAMX(const Tmm& t1, const Address& addr, int type, int code0)
{
- // addressing without index such as ptr[r8]
- if (addr.getRegExp().getIndex().getBit() == 0) throw Error(ERR_NOT_SUPPORTED);
+ // require both base and index
+ const RegExp exp = addr.getRegExp(false);
+ if (exp.getBase().getBit() == 0 || exp.getIndex().getBit() == 0) throw Error(ERR_NOT_SUPPORTED);
opVex(t1, &tmm0, addr, type, code0);
}
#endif