update test
diff --git a/test/jmp.cpp b/test/jmp.cpp
index 2578adb..4fb1221 100644
--- a/test/jmp.cpp
+++ b/test/jmp.cpp
@@ -987,6 +987,52 @@
}
};
+struct CodeLabelTable : Xbyak::CodeGenerator {
+ static const int ret0 = 3;
+ static const int ret1 = 5;
+ static const int ret2 = 8;
+ CodeLabelTable()
+ {
+ using namespace Xbyak;
+#ifdef XBYAK64_WIN
+ const Reg64& p0 = rcx;
+ const Reg64& a = rax;
+#elif defined (XBYAK64_GCC)
+ const Reg64& p0 = rdi;
+ const Reg64& a = rax;
+#else
+ const Reg32& p0 = edx;
+ const Reg32& a = eax;
+ mov(edx, ptr [esp + 4]);
+#endif
+ Label labelTbl, L0, L1, L2;
+ mov(a, labelTbl);
+ jmp(ptr [a + p0 * sizeof(void*)]);
+ L(labelTbl);
+ putL(L0);
+ putL(L1);
+ putL(L2);
+ L(L0);
+ mov(a, ret0);
+ ret();
+ L(L1);
+ mov(a, ret1);
+ ret();
+ L(L2);
+ mov(a, ret2);
+ ret();
+ }
+};
+
+CYBOZU_TEST_AUTO(LabelTable)
+{
+ CodeLabelTable c;
+ int (*f)(int) = c.getCode<int (*)(int)>();
+ CYBOZU_TEST_EQUAL(f(0), c.ret0);
+ CYBOZU_TEST_EQUAL(f(1), c.ret1);
+ CYBOZU_TEST_EQUAL(f(2), c.ret2);
+}
+
CYBOZU_TEST_AUTO(getAddress1)
{
GetAddressCode1 c;
@@ -1143,11 +1189,11 @@
ret();
}
} code;
- Xbyak::CodeArray::protect(p, 4096, Xbyak::CodeArray::PROTECT_RE);
+ code.setProtectModeRE();
code.getCode<void (*)()>()();
CYBOZU_TEST_EQUAL(*x0, 123);
CYBOZU_TEST_EQUAL(*x1, 456);
CYBOZU_TEST_EQUAL(buf[8], 99);
- Xbyak::CodeArray::protect(p, 4096, Xbyak::CodeArray::PROTECT_RW);
+ code.setProtectModeRW();
}
#endif
diff --git a/test/rip-label-imm.cpp b/test/rip-label-imm.cpp
index 4ed208e..8dbf925 100644
--- a/test/rip-label-imm.cpp
+++ b/test/rip-label-imm.cpp
@@ -40,8 +40,8 @@
cmpss(xmm0, ptr[rip + label], 0);
test(dword[rip + label], 33);
bt(dword[rip + label ], 3);
- vblendpd(xmm0, dword[rip + label], 3);
- vpalignr(xmm0, qword[rip + label], 4);
+ vblendpd(xmm0, xmm0, dword[rip + label], 3);
+ vpalignr(xmm0, xmm0, qword[rip + label], 4);
vextractf128(dword[rip + label], ymm3, 12);
vperm2i128(ymm0, ymm1, qword[rip + label], 13);
vcvtps2ph(ptr[rip + label], xmm2, 44);