aboutsummaryrefslogtreecommitdiff
path: root/tests/stxr_8.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/stxr_8.c')
-rw-r--r--tests/stxr_8.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/stxr_8.c b/tests/stxr_8.c
new file mode 100644
index 0000000..ede62d0
--- /dev/null
+++ b/tests/stxr_8.c
@@ -0,0 +1,35 @@
+#include <ejit/ejit.h>
+#include <assert.h>
+#include "do_jit.h"
+
+static uint8_t data[] = { 0x12, 0x00, 0x34 };
+
+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(int8_t))
+ };
+ struct ejit_func *f = ejit_create_func(EJIT_VOID, 3, operands);
+
+ ejit_stxr_8(f, EJIT_GPR(2), EJIT_GPR(0), EJIT_GPR(1));
+ ejit_ret(f);
+
+ ejit_select_compile_func(f, 3, 0, EJIT_USE64(void *), do_jit);
+
+ assert(data[0] == 0x12);
+ assert(data[1] == 0x00);
+ assert(data[2] == 0x34);
+ struct ejit_arg args[3] = {
+ EJIT_ARG(data, void *),
+ EJIT_ARG(sizeof(int8_t), int),
+ EJIT_ARG(-1, int8_t)
+ };
+ ejit_run_func(f, 3, args);
+ assert(data[0] == 0x12);
+ assert(data[1] == 0xff);
+ assert(data[2] == 0x34);
+
+ ejit_destroy_func(f);
+}