Merge branch 'busykai-allow-mem-in-tilecfg' into dev
diff --git a/test/dataset/amx.txt b/test/dataset/amx.txt
index bc50a7f..2946756 100644
--- a/test/dataset/amx.txt
+++ b/test/dataset/amx.txt
@@ -1,7 +1,9 @@
ldtilecfg(ptr[rax + rcx * 4 + 64]);
ldtilecfg(ptr [r30+r29*4+0x12]);
+ldtilecfg(ptr [rax]);
sttilecfg(ptr[rsp + rax * 8 + 128]);
sttilecfg(ptr [r30+r29*4+0x12]);
+sttilecfg(ptr [r30]);
tileloadd(tmm3, ptr[rdi + rdx * 2 + 8]);
tileloadd(tmm2, ptr [r30+r29*4+0x12]);
tileloaddt1(tmm4, ptr[r8 + r9 + 32]);
diff --git a/xbyak/xbyak.h b/xbyak/xbyak.h
index 2f1f6b7..5f06145 100644
--- a/xbyak/xbyak.h
+++ b/xbyak/xbyak.h
@@ -2787,10 +2787,12 @@
#ifdef XBYAK64
void opAMX(const Tmm& t1, const Address& addr, uint64_t type, int code)
{
- // require both base and index
Address addr2 = addr.cloneNoOptimize();
- const RegExp exp = addr2.getRegExp();
- if (exp.getBase().getBit() == 0 || exp.getIndex().getBit() == 0) XBYAK_THROW(ERR_NOT_SUPPORTED)
+ // require both base and index for all but opcode 0x49 (ldtilecfg/sttilecfg)
+ if (code != 0x49) {
+ const RegExp exp = addr2.getRegExp();
+ if (exp.getBase().getBit() == 0 || exp.getIndex().getBit() == 0) XBYAK_THROW(ERR_NOT_SUPPORTED)
+ }
if (opROO(Reg(), addr2, t1, T_APX|type, code)) return;
opVex(t1, &tmm0, addr2, type, code);
}