參考資訊:
https://github.com/zherczeg/sljit
https://ftp.netbsd.org/pub/NetBSD/NetBSD-release-10/src/sys/external/bsd/sljit/dist/doc/tutorial/sljit_tutorial.html
main.c
#include <stdio.h> #include <stdint.h> #include "sljitLir.h" int main(int argc, char *argv[]) { void (*pfn)(void); const char *msg = "Hello, world!\n"; struct sljit_compiler *c = sljit_create_compiler(NULL); sljit_compiler_verbose(c, stdout); sljit_emit_enter(c, 0, SLJIT_ARGS1(W, P), 1, 1, 0); sljit_emit_op1(c, SLJIT_MOV, SLJIT_R0, 0, SLJIT_IMM, (sljit_sw)msg); sljit_emit_icall(c, SLJIT_CALL, SLJIT_ARGS1(W, P), SLJIT_IMM, SLJIT_FUNC_ADDR(printf)); sljit_emit_return(c, SLJIT_MOV, SLJIT_R0, 0); struct sljit_code *code = sljit_generate_code(c, 0, NULL); sljit_free_compiler(c); pfn = (void (*)(void))code; pfn(); sljit_free_code(code, NULL); return 0; }
編譯、執行
$ gcc main.c /opt/sljit/sljit_src/sljitLir.c -o test -I/opt/sljit/sljit_src -ggdb $ ./test enter ret[w], args[p], scratches:1, saveds:1, fscratches:0, fsaveds:0, vscratches:0, vsaveds:0, local_size:0 mov r0, #94492020445188 icall ret[w], args[p], #140593066280688 return r0 Hello, world!