diff options
author | Bad Diode <bd@badd10de.dev> | 2022-02-01 18:36:52 +0100 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2022-02-01 18:36:52 +0100 |
commit | ee1a5de91c875fb66724dc21c02333bfebe2a812 (patch) | |
tree | d3eaa226816d295bb9dc48a2aed27044832ec413 /src/x86_64 | |
parent | 3156265c7b2da8cc43fee996c0518ea274d39c8a (diff) | |
download | bdl-ee1a5de91c875fb66724dc21c02333bfebe2a812.tar.gz bdl-ee1a5de91c875fb66724dc21c02333bfebe2a812.zip |
Add new syntax to lexer and prepare refactor
Diffstat (limited to 'src/x86_64')
-rw-r--r-- | src/x86_64/postlude.asm | 12 | ||||
-rw-r--r-- | src/x86_64/prelude.asm | 134 |
2 files changed, 0 insertions, 146 deletions
diff --git a/src/x86_64/postlude.asm b/src/x86_64/postlude.asm deleted file mode 100644 index 45be7ee..0000000 --- a/src/x86_64/postlude.asm +++ /dev/null | |||
@@ -1,12 +0,0 @@ | |||
1 | |||
2 | _start_return: | ||
3 | ;; return the last value in the stack | ||
4 | pop rdi | ||
5 | call display | ||
6 | |||
7 | exit: | ||
8 | ;; exit syscall | ||
9 | mov rax, 60 | ||
10 | xor rdi, rdi | ||
11 | syscall | ||
12 | |||
diff --git a/src/x86_64/prelude.asm b/src/x86_64/prelude.asm deleted file mode 100644 index 81a2633..0000000 --- a/src/x86_64/prelude.asm +++ /dev/null | |||
@@ -1,134 +0,0 @@ | |||
1 | section .text | ||
2 | printdln: | ||
3 | sar rdi, FIXNUM_SHIFT | ||
4 | sub rsp, 40 | ||
5 | mov BYTE [rsp+31], 10 | ||
6 | test rdi, rdi | ||
7 | jne .L2 | ||
8 | mov BYTE [rsp+30], 48 | ||
9 | mov eax, 30 | ||
10 | mov r8d, 2 | ||
11 | .L3: | ||
12 | lea rsi, [rsp+rax] | ||
13 | mov rdx, r8 | ||
14 | mov rdi, 1 | ||
15 | mov rax, 1 | ||
16 | syscall | ||
17 | add rsp, 40 | ||
18 | ret | ||
19 | .L2: | ||
20 | mov r10d, 1 | ||
21 | js .L12 | ||
22 | .L4: | ||
23 | mov r8d, 1 | ||
24 | lea r9, [rsp+31] | ||
25 | mov rsi, -3689348814741910323 | ||
26 | .L5: | ||
27 | mov rax, rdi | ||
28 | mov rcx, r9 | ||
29 | mul rsi | ||
30 | sub rcx, r8 | ||
31 | shr rdx, 3 | ||
32 | lea rax, [rdx+rdx*4] | ||
33 | add rax, rax | ||
34 | sub rdi, rax | ||
35 | mov rax, r8 | ||
36 | add r8, 1 | ||
37 | add edi, 48 | ||
38 | mov BYTE [rcx], dil | ||
39 | mov rdi, rdx | ||
40 | test rdx, rdx | ||
41 | jne .L5 | ||
42 | cmp r10d, -1 | ||
43 | jne .L10 | ||
44 | not r8 | ||
45 | mov BYTE [rsp+32+r8], 45 | ||
46 | lea r8, [rax+2] | ||
47 | .L10: | ||
48 | mov eax, 32 | ||
49 | sub rax, r8 | ||
50 | jmp .L3 | ||
51 | .L12: | ||
52 | neg rdi | ||
53 | mov r10d, -1 | ||
54 | jmp .L4 | ||
55 | ret | ||
56 | |||
57 | printbool: | ||
58 | shr rdi, BOOL_SHIFT | ||
59 | cmp rdi, 0 | ||
60 | je print_false | ||
61 | mov rsi, true_str ; addr | ||
62 | mov rdx, 5 ; number of bytes | ||
63 | jmp bool_write | ||
64 | print_false: | ||
65 | mov rsi, false_str ; addr | ||
66 | mov rdx, 6 ; number of bytes | ||
67 | |||
68 | bool_write: | ||
69 | mov rax, 1 | ||
70 | mov rdi, 1 | ||
71 | syscall | ||
72 | ret | ||
73 | |||
74 | printstring: | ||
75 | mov rsi, rdi | ||
76 | mov rax, PTR_MASK | ||
77 | and rsi, rax | ||
78 | mov rdx, [rsi] | ||
79 | add rsi, 8 | ||
80 | mov rax, 1 | ||
81 | mov rdi, 1 | ||
82 | syscall | ||
83 | ret | ||
84 | |||
85 | printlambda: | ||
86 | mov rsi, lambda_str | ||
87 | mov rdx, [rsi] | ||
88 | add rsi, 8 | ||
89 | mov rax, 1 | ||
90 | mov rdi, 1 | ||
91 | syscall | ||
92 | ret | ||
93 | |||
94 | display: | ||
95 | ;; is nil? | ||
96 | mov rax, rdi | ||
97 | cmp rax, NIL_VAL | ||
98 | je display_end | ||
99 | |||
100 | ;; is boolean? | ||
101 | mov rax, rdi | ||
102 | and rax, BOOL_MASK | ||
103 | cmp rax, BOOL_TAG | ||
104 | jne not_bool | ||
105 | call printbool | ||
106 | ret | ||
107 | not_bool: | ||
108 | |||
109 | ;; is string? | ||
110 | mov rax, rdi | ||
111 | and rax, STRING_MASK | ||
112 | cmp rax, STRING_TAG | ||
113 | jne not_string | ||
114 | call printstring | ||
115 | ret | ||
116 | not_string: | ||
117 | |||
118 | ;; is lambda? | ||
119 | mov rax, rdi | ||
120 | and rax, LAMBDA_MASK | ||
121 | cmp rax, LAMBDA_TAG | ||
122 | jne not_lambda | ||
123 | call printlambda | ||
124 | ret | ||
125 | not_lambda: | ||
126 | |||
127 | ;; is fixnum? | ||
128 | mov rax, rdi | ||
129 | and rax, FIXNUM_MASK | ||
130 | cmp rax, FIXNUM_TAG | ||
131 | jne display_end | ||
132 | call printdln | ||
133 | display_end: | ||
134 | ret | ||