Skip to content

Commit 6094a1d

Browse files
committed
Switch to new amd64 defines.
1 parent dc24e78 commit 6094a1d

File tree

7 files changed

+277
-279
lines changed

7 files changed

+277
-279
lines changed

amd64/amd64_defs.M1

Lines changed: 81 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -15,87 +15,85 @@
1515
## along with M2-Planet. If not, see <http://www.gnu.org/licenses/>.
1616

1717

18-
DEFINE ADD_IMMEDIATE_to_rax 4805
19-
DEFINE ADD_IMMEDIATE_to_rbp 4881C5
20-
DEFINE ADD_rax_to_rbx 4801C3
21-
DEFINE ADD_rbp_to_rax 4801E8
22-
DEFINE ADD_rbx_to_rax 4801D8
23-
DEFINE AND_rax_rbx 4821D8
24-
DEFINE CALL_IMMEDIATE E8
25-
DEFINE CALL_rax FFD0
26-
DEFINE CMP 4839C3
27-
DEFINE COPY_rax_to_rcx 4889C1
28-
DEFINE COPY_rax_to_rdi 4889C7
29-
DEFINE COPY_rbx_to_rax 4889D8
30-
DEFINE COPY_rbp_to_rax 4889E8
31-
DEFINE COPY_rbx_to_rdi 4889DF
32-
DEFINE COPY_rdi_to_rbp 4889FD
33-
DEFINE COPY_rsp_to_rbp 4889E5
34-
DEFINE COPY_RSP_to_RDI 4889E7
35-
DEFINE CQTO 4899
36-
DEFINE DIVIDE_rax_by_rbx_into_rax 48F7F3
37-
DEFINE DIVIDES_rax_by_rbx_into_rax 48F7FB
38-
DEFINE JUMP E9
39-
DEFINE JUMP_EQ 0F84
40-
DEFINE JUMP_NE 0F85
41-
DEFINE LOAD_BASE_ADDRESS_rax 488D85
42-
DEFINE LOAD_BYTE 480FBE00
43-
DEFINE LOAD_BYTE_rbx 480FBE1B
44-
DEFINE LOAD_EFFECTIVE_ADDRESS_rax 488D8424
45-
DEFINE LOAD_EFFECTIVE_ADDRESS_rdi 488DBC24
46-
DEFINE LOAD_EFFECTIVE_ADDRESS_rdx 488D9424
47-
DEFINE LOAD_EFFECTIVE_ADDRESS_rsi 488DB424
48-
DEFINE LOAD_IMMEDIATE_r10 48C7C2
49-
DEFINE LOAD_IMMEDIATE_rax 48C7C0
50-
DEFINE LOAD_IMMEDIATE_rbx 48C7C3
51-
DEFINE LOAD_IMMEDIATE_rdi 48C7C7
52-
DEFINE LOAD_IMMEDIATE_rdx 48C7C2
53-
DEFINE LOAD_IMMEDIATE_rsi 48C7C6
54-
DEFINE LOAD_INTEGER 488B00
55-
DEFINE LOAD_INTEGER_rbx 488B1B
56-
DEFINE LOAD_INTEGER_rdi 488B3F
57-
DEFINE LOAD_INTEGER_rdx 488B12
58-
DEFINE LOAD_INTEGER_rsi 488B36
59-
DEFINE LOAD_RSP_IMMEDIATE_into_rax 488B8424
60-
DEFINE MODULUS_rax_from_rbx_into_rbx 48F7F3
61-
DEFINE MODULUSS_rax_from_rbx_into_rbx 48F7FB
62-
DEFINE MOVE_rbx_to_rax 4889D8
63-
DEFINE MOVE_rdx_to_rax 4889D0
64-
DEFINE MOVEZX 480FB6C0
65-
DEFINE MOVESX 4863C0
66-
DEFINE MULTIPLY_rax_by_rbx_into_rax 48F7EB
67-
DEFINE MULTIPLYS_rax_by_rbx_into_rax 48F7E3
18+
DEFINE add_rax, 4805
19+
DEFINE add_rbp, 4881C5
20+
DEFINE add_rax,rbx 4801D8
21+
DEFINE add_rax,rbp 4801E8
22+
DEFINE add_rbx,rax 4801C3
23+
DEFINE and_rax,rbx 4821D8
24+
DEFINE call E8
25+
DEFINE call_rax FFD0
26+
DEFINE cmp_rbx,rax 4839C3
27+
DEFINE cqo 4899
28+
DEFINE div_rbx 48F7F3
29+
DEFINE idiv_rbx 48F7FB
30+
DEFINE jmp E9
31+
DEFINE je 0F84
32+
DEFINE jne 0F85
33+
DEFINE lea_rax,[rbp+DWORD] 488D85
34+
DEFINE lea_rax,[rsp+DWORD] 488D8424
35+
DEFINE lea_rdi,[rsp+DWORD] 488DBC24
36+
DEFINE lea_rdx,[rsp+DWORD] 488D9424
37+
DEFINE lea_rsi,[rsp+DWORD] 488DB424
38+
DEFINE mov_rax, 48C7C0
39+
DEFINE mov_rbx, 48C7C3
40+
DEFINE mov_rdi, 48C7C7
41+
DEFINE mov_rdx, 48C7C2
42+
DEFINE mov_rsi, 48C7C6
43+
DEFINE mov_r10, 49C7C2
44+
DEFINE mov_rax,rdx 4889D0
45+
DEFINE mov_rax,rbx 4889D8
46+
DEFINE mov_rax,rbp 4889E8
47+
DEFINE mov_rbp,rdi 4889FD
48+
DEFINE mov_rbp,rsp 4889E5
49+
DEFINE mov_rcx,rax 4889C1
50+
DEFINE mov_rdi,rax 4889C7
51+
DEFINE mov_rdi,rbx 4889DF
52+
DEFINE mov_rdi,rsp 4889E7
53+
DEFINE mov_[rbx],al 8803
54+
DEFINE mov_[rbx],rax 488903
55+
DEFINE mov_rax,[rax] 488B00
56+
DEFINE mov_rax,[rip+DWORD] 488B05
57+
DEFINE mov_rbx,[rbx] 488B1B
58+
DEFINE mov_rdi,[rdi] 488B3F
59+
DEFINE mov_rdx,[rdx] 488B12
60+
DEFINE mov_rsi,[rsi] 488B36
61+
DEFINE mov_rax,[rsp+DWORD] 488B8424
62+
DEFINE movzx_rax,al 480FB6C0
63+
DEFINE movsxd_rax,eax 4863C0
64+
DEFINE movsx_rax,BYTE_PTR_[rax] 480FBE00
65+
DEFINE movsx_rbx,BYTE_PTR_[rbx] 480FBE1B
66+
DEFINE imul_rbx 48F7EB
67+
DEFINE mul_rbx 48F7E3
6868
DEFINE NULL 0000000000000000
69-
DEFINE NOT_rax 48F7D0
70-
DEFINE OR_rax_rbx 4809D8
71-
DEFINE POP_RAX 58
72-
DEFINE POP_RBP 5D
73-
DEFINE POP_RBX 5B
74-
DEFINE POP_RDI 5F
75-
DEFINE PUSH_RAX 50
76-
DEFINE PUSH_RBP 55
77-
DEFINE PUSH_RBX 53
78-
DEFINE PUSH_RDI 57
79-
DEFINE RETURN C3
80-
DEFINE SAL_rax_Immediate8 48C1E0
81-
DEFINE SHL_rax_cl 48D3E0
82-
DEFINE SAL_rax_cl 48D3F0
83-
DEFINE SHR_rax_cl 48D3E8
84-
DEFINE SAR_rax_cl 48D3F8
85-
DEFINE SETA 0F97C0
86-
DEFINE SETAE 0F93C0
87-
DEFINE SETB 0F92C0
88-
DEFINE SETBE 0F96C0
89-
DEFINE SETE 0F94C0
90-
DEFINE SETG 0F9FC0
91-
DEFINE SETGE 0F9DC0
92-
DEFINE SETL 0F9CC0
93-
DEFINE SETLE 0F9EC0
94-
DEFINE SETNE 0F95C0
95-
DEFINE STORE_CHAR 8803
96-
DEFINE STORE_INTEGER 488903
97-
DEFINE SUBTRACT_rax_from_rbx_into_rbx 4829C3
98-
DEFINE SYSCALL 0F05
99-
DEFINE TEST 4885C0
100-
DEFINE XCHG_rax_rbx 4893
101-
DEFINE XOR_rbx_rax_into_rax 4831D8
69+
DEFINE not_rax 48F7D0
70+
DEFINE or_rax,rbx 4809D8
71+
DEFINE pop_rax 58
72+
DEFINE pop_rbp 5D
73+
DEFINE pop_rbx 5B
74+
DEFINE pop_rdi 5F
75+
DEFINE push_rax 50
76+
DEFINE push_rbp 55
77+
DEFINE push_rbx 53
78+
DEFINE push_rdi 57
79+
DEFINE ret C3
80+
DEFINE sal_rax, 48C1E0
81+
DEFINE shl_rax,cl 48D3E0
82+
DEFINE sal_rax,cl 48D3F0
83+
DEFINE shr_rax,cl 48D3E8
84+
DEFINE sar_rax,cl 48D3F8
85+
DEFINE seta_al 0F97C0
86+
DEFINE setae_al 0F93C0
87+
DEFINE setb_al 0F92C0
88+
DEFINE setbe_al 0F96C0
89+
DEFINE sete_al 0F94C0
90+
DEFINE setg_al 0F9FC0
91+
DEFINE setge_al 0F9DC0
92+
DEFINE setl_al 0F9CC0
93+
DEFINE setle_al 0F9EC0
94+
DEFINE setne_al 0F95C0
95+
DEFINE sub_rbx,rax 4829C3
96+
DEFINE syscall 0F05
97+
DEFINE test_rax,rax 4885C0
98+
DEFINE xchg_rbx,rax 4893
99+
DEFINE xor_rax,rbx 4831D8

amd64/libc-core.M1

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,32 +16,32 @@
1616

1717
:_start
1818

19-
COPY_rsp_to_rbp ; Protect rsp
19+
mov_rbp,rsp ; Protect rsp
2020

2121
;; Prepare argv
22-
LOAD_BASE_ADDRESS_rax %8 ; ARGV_address = RBP + 8
23-
PUSH_RAX ; Put argv on the stack
22+
lea_rax,[rbp+DWORD] %8 ; ARGV_address = RBP + 8
23+
push_rax ; Put argv on the stack
2424

2525
;; Prepare envp
26-
COPY_rbp_to_rax ; Address we need to load from
27-
LOAD_INTEGER ; Get ARGC
28-
ADD_IMMEDIATE_to_rax %2 ; OFFSET = ARGC + 2
29-
SAL_rax_Immediate8 !3 ; OFFSET = OFFSET * WORDSIZE
30-
ADD_rbp_to_rax ; ENVP_address = RSP + OFFSET
31-
PUSH_RAX ; Put envp on the stack
26+
mov_rax,rbp ; Address we need to load from
27+
mov_rax,[rax] ; Get ARGC
28+
add_rax, %2 ; OFFSET = ARGC + 2
29+
sal_rax, !3 ; OFFSET = OFFSET * WORDSIZE
30+
add_rax,rbp ; ENVP_address = RSP + OFFSET
31+
push_rax ; Put envp on the stack
3232

3333
;; Stack offset
34-
ADD_IMMEDIATE_to_rbp %8 ; Fix rbp
34+
add_rbp, %8 ; Fix rbp
3535

3636
;; Perform the main loop
37-
CALL_IMMEDIATE %FUNCTION_main
37+
call %FUNCTION_main
3838

39-
PUSH_RAX ; Put return value on the stack
40-
PUSH_RAX ; So that _exit gets it
39+
push_rax ; Put return value on the stack
40+
push_rax ; So that _exit gets it
4141

4242
:FUNCTION_exit
4343
:FUNCTION__exit
44-
POP_RBX
45-
POP_RDI
46-
LOAD_IMMEDIATE_rax %0x3C
47-
SYSCALL
44+
pop_rbx
45+
pop_rdi
46+
mov_rax, %0x3C
47+
syscall

amd64/libc-full.M1

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,36 +16,36 @@
1616

1717
:_start
1818

19-
COPY_rsp_to_rbp ; Protect rsp
19+
mov_rbp,rsp ; Protect rsp
2020

2121
;; Prepare argv
22-
LOAD_BASE_ADDRESS_rax %8 ; ARGV_address = RBP + 8
23-
PUSH_RAX ; Put argv on the stack
22+
lea_rax,[rbp+DWORD] %8 ; ARGV_address = RBP + 8
23+
push_rax ; Put argv on the stack
2424

2525
;; Prepare envp
26-
COPY_rbp_to_rax ; Address we need to load from
27-
LOAD_INTEGER ; Get ARGC
28-
ADD_IMMEDIATE_to_rax %2 ; OFFSET = ARGC + 2
29-
SAL_rax_Immediate8 !3 ; OFFSET = OFFSET * WORDSIZE
30-
ADD_rbp_to_rax ; ENVP_address = RSP + OFFSET
31-
PUSH_RAX ; Put envp on the stack
26+
mov_rax,rbp ; Address we need to load from
27+
mov_rax,[rax] ; Get ARGC
28+
add_rax, %2 ; OFFSET = ARGC + 2
29+
sal_rax, !3 ; OFFSET = OFFSET * WORDSIZE
30+
add_rax,rbp ; ENVP_address = RSP + OFFSET
31+
push_rax ; Put envp on the stack
3232

3333
;; Stack offset
34-
ADD_IMMEDIATE_to_rbp %8 ; Fix rbp
34+
add_rbp, %8 ; Fix rbp
3535

3636
;; Setup for FILE*
37-
CALL_IMMEDIATE %FUNCTION___init_io
37+
call %FUNCTION___init_io
3838

3939
;; Perform the main loop
40-
CALL_IMMEDIATE %FUNCTION_main
40+
call %FUNCTION_main
4141

42-
PUSH_RAX ; Put return value on the stack
43-
PUSH_RAX ; So that _exit gets it
42+
push_rax ; Put return value on the stack
43+
push_rax ; So that _exit gets it
4444

4545
:FUNCTION_exit
46-
CALL_IMMEDIATE %FUNCTION___kill_io
46+
call %FUNCTION___kill_io
4747
:FUNCTION__exit
48-
POP_RBX
49-
POP_RDI
50-
LOAD_IMMEDIATE_rax %0x3C
51-
SYSCALL
48+
pop_rbx
49+
pop_rdi
50+
mov_rax, %0x3C
51+
syscall

amd64/linux/bootstrap.c

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -28,29 +28,29 @@
2828

2929
int fgetc(FILE* f)
3030
{
31-
asm("LOAD_EFFECTIVE_ADDRESS_rdi %8"
32-
"LOAD_INTEGER_rdi"
33-
"LOAD_IMMEDIATE_rax %0"
34-
"PUSH_RAX"
35-
"LOAD_EFFECTIVE_ADDRESS_rsi %0"
36-
"LOAD_IMMEDIATE_rdx %1"
37-
"SYSCALL"
38-
"LOAD_IMMEDIATE_rbx %0"
39-
"CMP"
40-
"POP_RAX"
41-
"JUMP_NE %FUNCTION_fgetc_Done"
42-
"LOAD_IMMEDIATE_rax %-1"
31+
asm("lea_rdi,[rsp+DWORD] %8"
32+
"mov_rdi,[rdi]"
33+
"mov_rax, %0"
34+
"push_rax"
35+
"lea_rsi,[rsp+DWORD] %0"
36+
"mov_rdx, %1"
37+
"syscall"
38+
"mov_rbx, %0"
39+
"cmp_rbx,rax"
40+
"pop_rax"
41+
"jne %FUNCTION_fgetc_Done"
42+
"mov_rax, %-1"
4343
":FUNCTION_fgetc_Done");
4444
}
4545

4646
void fputc(char s, FILE* f)
4747
{
48-
asm("LOAD_IMMEDIATE_rax %1"
49-
"LOAD_EFFECTIVE_ADDRESS_rdi %8"
50-
"LOAD_INTEGER_rdi"
51-
"LOAD_EFFECTIVE_ADDRESS_rsi %16"
52-
"LOAD_IMMEDIATE_rdx %1"
53-
"SYSCALL");
48+
asm("mov_rax, %1"
49+
"lea_rdi,[rsp+DWORD] %8"
50+
"mov_rdi,[rdi]"
51+
"lea_rsi,[rsp+DWORD] %16"
52+
"mov_rdx, %1"
53+
"syscall");
5454
}
5555

5656
void fputs(char* s, FILE* f)
@@ -64,14 +64,14 @@ void fputs(char* s, FILE* f)
6464

6565
FILE* open(char* name, int flag, int mode)
6666
{
67-
asm("LOAD_EFFECTIVE_ADDRESS_rdi %24"
68-
"LOAD_INTEGER_rdi"
69-
"LOAD_EFFECTIVE_ADDRESS_rsi %16"
70-
"LOAD_INTEGER_rsi"
71-
"LOAD_EFFECTIVE_ADDRESS_rdx %8"
72-
"LOAD_INTEGER_rdx"
73-
"LOAD_IMMEDIATE_rax %2"
74-
"SYSCALL");
67+
asm("lea_rdi,[rsp+DWORD] %24"
68+
"mov_rdi,[rdi]"
69+
"lea_rsi,[rsp+DWORD] %16"
70+
"mov_rsi,[rsi]"
71+
"lea_rdx,[rsp+DWORD] %8"
72+
"mov_rdx,[rdx]"
73+
"mov_rax, %2"
74+
"syscall");
7575
}
7676

7777
FILE* fopen(char* filename, char* mode)
@@ -96,10 +96,10 @@ FILE* fopen(char* filename, char* mode)
9696

9797
int close(int fd)
9898
{
99-
asm("LOAD_EFFECTIVE_ADDRESS_rdi %8"
100-
"LOAD_INTEGER_rdi"
101-
"LOAD_IMMEDIATE_rax %3"
102-
"SYSCALL");
99+
asm("lea_rdi,[rsp+DWORD] %8"
100+
"mov_rdi,[rdi]"
101+
"mov_rax, %3"
102+
"syscall");
103103
}
104104

105105
int fclose(FILE* stream)
@@ -110,12 +110,12 @@ int fclose(FILE* stream)
110110

111111
int brk(void *addr)
112112
{
113-
asm("LOAD_RSP_IMMEDIATE_into_rax %8"
114-
"PUSH_RAX"
115-
"LOAD_IMMEDIATE_rax %12"
116-
"POP_RBX"
117-
"COPY_rbx_to_rdi"
118-
"SYSCALL");
113+
asm("mov_rax,[rsp+DWORD] %8"
114+
"push_rax"
115+
"mov_rax, %12"
116+
"pop_rbx"
117+
"mov_rdi,rbx"
118+
"syscall");
119119
}
120120

121121
long _malloc_ptr;
@@ -172,8 +172,8 @@ void free(void* l)
172172

173173
void exit(int value)
174174
{
175-
asm("POP_RBX"
176-
"POP_RDI"
177-
"LOAD_IMMEDIATE_rax %0x3C"
178-
"SYSCALL");
175+
asm("pop_rbx"
176+
"pop_rdi"
177+
"mov_rax, %0x3C"
178+
"syscall");
179179
}

0 commit comments

Comments
 (0)