aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/bad_address.cpp45
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;
+}