aboutsummaryrefslogtreecommitdiffstats
path: root/src/x86_64/prelude.asm
diff options
context:
space:
mode:
Diffstat (limited to 'src/x86_64/prelude.asm')
-rw-r--r--src/x86_64/prelude.asm134
1 files changed, 0 insertions, 134 deletions
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 @@
1section .text
2printdln:
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
57printbool:
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
64print_false:
65 mov rsi, false_str ; addr
66 mov rdx, 6 ; number of bytes
67
68bool_write:
69 mov rax, 1
70 mov rdi, 1
71 syscall
72 ret
73
74printstring:
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
85printlambda:
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
94display:
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
107not_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
116not_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
125not_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
133display_end:
134 ret