From 1d960f228643d223a67069786cecdd71b49dcd6d Mon Sep 17 00:00:00 2001 From: ketank-new Date: Fri, 2 Dec 2016 15:21:18 +0530 Subject: [PATCH] Create test_z_inst.c Added examples folder Added test code to test basic instructions like add , sub and msr This code is in processes of further expansion and tuning --- dynasm/Examples/test_z_inst.c | 80 +++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 dynasm/Examples/test_z_inst.c diff --git a/dynasm/Examples/test_z_inst.c b/dynasm/Examples/test_z_inst.c new file mode 100644 index 00000000..314ea0c3 --- /dev/null +++ b/dynasm/Examples/test_z_inst.c @@ -0,0 +1,80 @@ +#include +#include +#include + +#include "../dynasm/dasm_proto.h" +#include "../dynasm/dasm_s390x.h" + +//DynASM directives. + |.arch s390x + |.actionlist actions + +/* Instructio modes + mode 0 : RR Mode + mode 1 : I Mode +*/ + +void *jitcode(dasm_State **state); +void add(dasm_State * , int); +void sub(dasm_State * , int); +void mul(dasm_State * , int); + +void *jitcode(dasm_State **state) +{ + size_t size; + int dasm_status = dasm_link(state, &size); + assert(dasm_status == DASM_S_OK); + + void *ret = (int *)calloc(10,sizeof(int)); + dasm_encode(state, ret); + dasm_free(state); + + return (int *)ret; +} + +void add(dasm_State *state) +{ + dasm_State ** Dst = &state; + + | ar r2,r3 + | br r14 +} + +void sub(dasm_State *state) +{ + dasm_State **Dst = &state; + + | sr r2,r3 + | br r14 +} + +void mul(dasm_State *state) +{ + dasm_State **Dst = &state; + + | msr r2 , r3 + | br r14 +} + +void main(int argc, char *argv[]) +{ + dasm_State *state; + dasm_State **Dst = &state; + int num1 , num2; + int *ret; + size_t size; + + int* (*fptr)(int , int) = jitcode(&state); + + num1 = atoi(argv[1]); + num2 = atoi(argv[2]); + + dasm_init(&state, 1); + dasm_setup(&state, actions); + + /* Call respective test function */ + sub(state); + + ret = fptr(num1 , num2); + printf("The value is %d\n" ,ret); +}