aboutsummaryrefslogtreecommitdiff
path: root/tests/stxr_64.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/stxr_64.c')
-rw-r--r--tests/stxr_64.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/stxr_64.c b/tests/stxr_64.c
new file mode 100644
index 0000000..ae0a25c
--- /dev/null
+++ b/tests/stxr_64.c
@@ -0,0 +1,35 @@
+#include <ejit/ejit.h>
+#include <assert.h>
+#include "do_jit.h"
+
+static uint64_t data[] = { 0x1212121212121212, 0, 0x3434343434343434 };
+
+int main()
+{
+ struct ejit_operand operands[3] = {
+ EJIT_OPERAND_GPR(0, EJIT_TYPE(void *)),
+ EJIT_OPERAND_GPR(1, EJIT_TYPE(int)),
+ EJIT_OPERAND_GPR(2, EJIT_TYPE(int64_t))
+ };
+ struct ejit_func *f = ejit_create_func(EJIT_VOID, 3, operands);
+
+ ejit_stxr_64(f, EJIT_GPR(2), EJIT_GPR(0), EJIT_GPR(1));
+ ejit_ret(f);
+
+ ejit_select_compile_func(f, 3, 0, EJIT_USE64(int64_t), do_jit);
+
+ assert(data[0] == 0x1212121212121212);
+ assert(data[1] == 0x00);
+ assert(data[2] == 0x3434343434343434);
+ struct ejit_arg args[3] = {
+ EJIT_ARG(data, void *),
+ EJIT_ARG(sizeof(int64_t), int),
+ EJIT_ARG(-1, int64_t)
+ };
+ ejit_run_func(f, 3, args);
+ assert(data[0] == 0x1212121212121212);
+ assert(data[1] == 0xffffffffffffffff);
+ assert(data[2] == 0x3434343434343434);
+
+ ejit_destroy_func(f);
+}