diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/bad_address.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/test/bad_address.cpp b/test/bad_address.cpp new file mode 100644 index 0000000..3cac3fa --- /dev/null +++ b/test/bad_address.cpp @@ -0,0 +1,45 @@ +#include <xbyak/xbyak.h> + +#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(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; +} |