diff options
Diffstat (limited to 'src/x86_64/prelude.asm')
-rw-r--r-- | src/x86_64/prelude.asm | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/x86_64/prelude.asm b/src/x86_64/prelude.asm index abb069b..81a2633 100644 --- a/src/x86_64/prelude.asm +++ b/src/x86_64/prelude.asm | |||
@@ -82,6 +82,15 @@ printstring: | |||
82 | syscall | 82 | syscall |
83 | ret | 83 | ret |
84 | 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 | |||
85 | display: | 94 | display: |
86 | ;; is nil? | 95 | ;; is nil? |
87 | mov rax, rdi | 96 | mov rax, rdi |
@@ -106,6 +115,15 @@ not_bool: | |||
106 | ret | 115 | ret |
107 | not_string: | 116 | not_string: |
108 | 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 | |||
109 | ;; is fixnum? | 127 | ;; is fixnum? |
110 | mov rax, rdi | 128 | mov rax, rdi |
111 | and rax, FIXNUM_MASK | 129 | and rax, FIXNUM_MASK |