Explorar el Código

add the same example using dynasm.

Lucas Stadler %!s(int64=11) %!d(string=hace) años
padre
commit
d001402dee
Se han modificado 3 ficheros con 44 adiciones y 0 borrados
  1. 4 0
      c/jit/.gitignore
  2. 13 0
      c/jit/Makefile
  3. 27 0
      c/jit/hello_dynasm.dasc

+ 4 - 0
c/jit/.gitignore

@ -1,3 +1,7 @@
1 1
/luajit
2
/dynasm-driver.c
2 3
3 4
/hello_jit
5
6
/hello_dynasm
7
/hello_dynasm.c

+ 13 - 0
c/jit/Makefile

@ -1,3 +1,16 @@
1
CFLAGS=-Iluajit
2
3
hello_dynasm: hello_dynasm.c dynasm-driver.c
4
	$(CC) $(CFLAGS) -o hello_dynasm dynasm-driver.c -DJIT=\"hello_dynasm.c\"
5
6
%.c: %.dasc
7
	./dynasm -o $@ $<
8
9
%.dasc: dynasm
10
11
dynasm-driver.c:
12
	curl -O https://raw.githubusercontent.com/haberman/jitdemo/master/dynasm-driver.c
13
1 14
dynasm: luajit
2 15
3 16
luajit:

+ 27 - 0
c/jit/hello_dynasm.dasc

@ -0,0 +1,27 @@
1
|.arch x64
2
|.actionlist actions
3
4
#define Dst &state
5
6
int main(int argc, char *argv[]) {
7
	if (argc < 2) {
8
		fprintf(stderr, "Usage: hello_dynasm <integer>\n");
9
		return 1;
10
	}
11
12
	int num = atoi(argv[1]);
13
	dasm_State *state;
14
	initjit(&state, actions);
15
16
	| mov eax, num
17
	| ret
18
19
	int (*func)() = jitcode(&state);
20
21
	int ret = func();
22
	assert(num == ret);
23
24
	free_jitcode(func);
25
26
	return ret;
27
}