aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2023-08-26 17:13:56 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2023-08-26 17:13:56 +0300
commit4269b6d3d0aeff1cf1bae3eac5f40cceb75576e0 (patch)
tree3e9cdf4b34f4f2beffa72a837c409e567d84adb2 /lib
parente8b00dae488e9c9f6f9ef7de99bc340de61541b7 (diff)
downloadcopyjit-4269b6d3d0aeff1cf1bae3eac5f40cceb75576e0.tar.gz
copyjit-4269b6d3d0aeff1cf1bae3eac5f40cceb75576e0.zip
apply fixes to make jit-comparison easier
Diffstat (limited to 'lib')
-rw-r--r--lib/imm.h6
-rw-r--r--lib/imm_decls.h1
-rw-r--r--lib/imm_defns.h8
-rw-r--r--lib/op_decls.h3
-rw-r--r--lib/op_defns.h21
5 files changed, 39 insertions, 0 deletions
diff --git a/lib/imm.h b/lib/imm.h
index 1ee7e1e..97580f4 100644
--- a/lib/imm.h
+++ b/lib/imm.h
@@ -40,4 +40,10 @@ unsigned char gen_liy[] = {
0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00
};
unsigned int gen_liy_len = 20;
+unsigned char gen_bani[] = {
+ 0x48, 0x85, 0xf6, 0x48, 0x8d, 0x05, 0x12, 0x00, 0x00, 0x00, 0x48, 0x0f,
+ 0x45, 0x05, 0x02, 0x00, 0x00, 0x00, 0xff, 0xe0, 0x0f, 0x1f, 0x84, 0x00,
+ 0x00, 0x00, 0x00, 0x00
+};
+unsigned int gen_bani_len = 28;
#endif /* COPYJIT_OPS_H */
diff --git a/lib/imm_decls.h b/lib/imm_decls.h
index 5a2f840..f520e1f 100644
--- a/lib/imm_decls.h
+++ b/lib/imm_decls.h
@@ -8,4 +8,5 @@ void *compile_lia(ctx_t *ctx, unsigned long i);
void *compile_lio(ctx_t *ctx, unsigned long i);
void *compile_lix(ctx_t *ctx, unsigned long i);
void *compile_liy(ctx_t *ctx, unsigned long i);
+void *compile_bani(ctx_t *ctx, unsigned long i);
#endif /* COPYJIT_DECLS_H */
diff --git a/lib/imm_defns.h b/lib/imm_defns.h
index 6b9c52a..f3b8baa 100644
--- a/lib/imm_defns.h
+++ b/lib/imm_defns.h
@@ -64,4 +64,12 @@ void *compile_liy(ctx_t *ctx, unsigned long i)
ctx->pc += gen_liy_len;
return pc;
}
+void *compile_bani(ctx_t *ctx, unsigned long i)
+ {
+ void *pc = ctx->pc;
+ memcpy(ctx->pc, gen_bani, gen_bani_len);
+ *(unsigned long *)(ctx->pc + gen_bani_len - 8) = i;
+ ctx->pc += gen_bani_len;
+ return pc;
+ }
#endif /* COPYJIT_DEFNS_H */
diff --git a/lib/op_decls.h b/lib/op_decls.h
index 147a6ac..c7eb3fb 100644
--- a/lib/op_decls.h
+++ b/lib/op_decls.h
@@ -14,6 +14,9 @@ void *compile_movxa(ctx_t *ctx);
void *compile_movxo(ctx_t *ctx);
void *compile_movya(ctx_t *ctx);
void *compile_movyo(ctx_t *ctx);
+void *compile_peeko(ctx_t *ctx);
+void *compile_popo(ctx_t *ctx);
+void *compile_pusha(ctx_t *ctx);
void *compile_sub(ctx_t *ctx);
void *compile_subxo(ctx_t *ctx);
void *compile_subyo(ctx_t *ctx);
diff --git a/lib/op_defns.h b/lib/op_defns.h
index 5b9cdb2..f930abe 100644
--- a/lib/op_defns.h
+++ b/lib/op_defns.h
@@ -98,6 +98,27 @@ void *compile_movyo(ctx_t *ctx)
ctx->pc += gen_movyo_len;
return pc;
}
+void *compile_peeko(ctx_t *ctx)
+ {
+ void *pc = ctx->pc;
+ memcpy(pc, gen_peeko, gen_peeko_len);
+ ctx->pc += gen_peeko_len;
+ return pc;
+ }
+void *compile_popo(ctx_t *ctx)
+ {
+ void *pc = ctx->pc;
+ memcpy(pc, gen_popo, gen_popo_len);
+ ctx->pc += gen_popo_len;
+ return pc;
+ }
+void *compile_pusha(ctx_t *ctx)
+ {
+ void *pc = ctx->pc;
+ memcpy(pc, gen_pusha, gen_pusha_len);
+ ctx->pc += gen_pusha_len;
+ return pc;
+ }
void *compile_sub(ctx_t *ctx)
{
void *pc = ctx->pc;