#include #define TEST_EXCEPTION(state) \ { \ num++; \ bool exception = false; \ try { \ state; \ } catch (...) { \ exception = true; \ } \ if (!exception) { \ printf("exception should arise for %s\n", #state); \ err++; \ } \ } struct Code : Xbyak::CodeGenerator { Code() { int err = 0; int num = 0; TEST_EXCEPTION(mov(eax, ptr [esp + esp])); TEST_EXCEPTION(mov(eax, ptr [ax])); // not support TEST_EXCEPTION(mov(eax, ptr [esp * 4])); TEST_EXCEPTION(mov(eax, ptr [eax * 16])); TEST_EXCEPTION(mov(eax, ptr [eax + eax + eax])); TEST_EXCEPTION(mov(eax, ptr [eax * 2 + ecx * 4])); TEST_EXCEPTION(mov(eax, ptr [eax * 2 + ecx * 4])); TEST_EXCEPTION(mov(eax, ptr [xmm0])); TEST_EXCEPTION(fld(dword [xmm0])); TEST_EXCEPTION(vgatherdpd(xmm0, ptr [eax * 2], ymm3)); TEST_EXCEPTION(vgatherdpd(xmm0, ptr [xmm0 + xmm1], ymm3)); #ifdef XBYAK64 TEST_EXCEPTION(mov(eax, ptr [rax + eax])); TEST_EXCEPTION(mov(eax, ptr [xmm0 + ymm0])); #endif if (!err) { printf("bad_address test %d ok\n", num); } } }; int main() { Code c; }