diff options
Diffstat (limited to 'tests/stxr_64.c')
-rw-r--r-- | tests/stxr_64.c | 35 |
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); +} |