From c671d6612be0fb28eea498246c39bb5032afa872 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Wed, 2 Aug 2023 21:19:14 +0300 Subject: add some basic checks --- tests/check | Bin 0 -> 1261584 bytes tests/check.c | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 150 insertions(+) create mode 100755 tests/check create mode 100644 tests/check.c (limited to 'tests') diff --git a/tests/check b/tests/check new file mode 100755 index 0000000..b079a57 Binary files /dev/null and b/tests/check differ diff --git a/tests/check.c b/tests/check.c new file mode 100644 index 0000000..8f4c6de --- /dev/null +++ b/tests/check.c @@ -0,0 +1,150 @@ +#include +#include + +#include "../src/copyjit.h" + +#define IMMEDIATES 1000 + +static void check_li() +{ + // x + for (size_t i = 0; i < IMMEDIATES; ++i) { + ctx_t ctx; + compile_start(&ctx); + compile_fast_lix(&ctx, i); + compile_end(&ctx); + compile_finish(&ctx); + + assert(run(&ctx) == i); + } + + // y + for (size_t i = 0; i < IMMEDIATES; ++i) { + ctx_t ctx; + compile_start(&ctx); + // actual instruction under test + compile_fast_liy(&ctx, i); + + // juggling to get stuff into the return register x + compile_fast_lix(&ctx, 0); + compile_add(&ctx); + compile_movxa(&ctx); + + compile_end(&ctx); + compile_finish(&ctx); + + assert(run(&ctx) == i); + } + + // o + for (size_t i = 0; i < IMMEDIATES; ++i) { + ctx_t ctx; + compile_start(&ctx); + // actual instruction under test + compile_fast_lio(&ctx, i); + + // juggling to get stuff into the return register x + compile_movxo(&ctx); + + compile_end(&ctx); + compile_finish(&ctx); + + assert(run(&ctx) == i); + } + + // a + for (size_t i = 0; i < IMMEDIATES; ++i) { + ctx_t ctx; + compile_start(&ctx); + // actual instruction under test + compile_fast_lia(&ctx, i); + + // juggling to get stuff into the return register x + compile_movxa(&ctx); + + compile_end(&ctx); + compile_finish(&ctx); + + assert(run(&ctx) == i); + } +} + +static void check_add() +{ + // x + for (size_t i = 0; i < IMMEDIATES; ++i) { + ctx_t ctx; + compile_start(&ctx); + + compile_fast_lix(&ctx, 0); + compile_fast_addix(&ctx, i); + + compile_end(&ctx); + compile_finish(&ctx); + + assert(run(&ctx) == i); + } + + // y + for (size_t i = 0; i < IMMEDIATES; ++i) { + ctx_t ctx; + compile_start(&ctx); + + compile_fast_liy(&ctx, 0); + compile_fast_addiy(&ctx, i); + + compile_fast_lix(&ctx, 0); + compile_add(&ctx); + compile_movxa(&ctx); + + compile_end(&ctx); + compile_finish(&ctx); + + assert(run(&ctx) == i); + } + + // o + for (size_t i = 0; i < IMMEDIATES; ++i) { + ctx_t ctx; + compile_start(&ctx); + + compile_fast_lio(&ctx, 0); + compile_fast_addio(&ctx, i); + + compile_movxo(&ctx); + + compile_end(&ctx); + compile_finish(&ctx); + + assert(run(&ctx) == i); + } + + // a + for (size_t i = 0; i < IMMEDIATES; ++i) { + ctx_t ctx; + compile_start(&ctx); + + compile_fast_lia(&ctx, 0); + compile_fast_addia(&ctx, i); + + compile_movxa(&ctx); + + compile_end(&ctx); + compile_finish(&ctx); + + assert(run(&ctx) == i); + } +} + +static void check_branch() +{ + /* oh yeah, I don't support forward references (yet), so this is a bit + * tricky */ +} + +int main() +{ + check_li(); + check_add(); + check_branch(); +} -- cgit v1.3