rewrite listdir and stdin builtins in zern

This commit is contained in:
2025-07-08 17:10:39 +02:00
parent 8722e226a9
commit dfec298823
3 changed files with 26 additions and 60 deletions

View File

@@ -114,7 +114,7 @@ extern strcat
extern strcpy
extern strdup
extern strncpy
extern fgets
extern syscall
extern fopen
extern fseek
extern ftell
@@ -160,11 +160,6 @@ _builtin_set64:
mov [rdi], rsi
ret
section .text._builtin_stdin
_builtin_stdin:
mov rax, [rel stdin]
ret
section .text._builtin_lshift
_builtin_lshift:
mov rcx, rsi
@@ -178,50 +173,6 @@ _builtin_rshift:
mov rax, rdi
sar rax, cl
ret
section .text._builtin_listdir
_builtin_listdir:
push r14
push rbx
push rax
mov r14, rdi
call Array.new
mov rbx, rax
mov rdi, r14
call opendir
mov r14, rax
._builtin_listdir.1:
mov rdi, r14
call readdir
test rax, rax
je ._builtin_listdir.3
cmp byte [rax+19], 46
jne ._builtin_listdir.2
movzx ecx, byte [rax+20]
test ecx, ecx
je ._builtin_listdir.1
cmp ecx, 46
jne ._builtin_listdir.2
cmp byte [rax+21], 0
je ._builtin_listdir.1
._builtin_listdir.2:
add rax, 19
mov rdi, rax
call strdup
mov rsi, rax
mov rdi, rbx
mov [rsp], rbx
call Array.push
mov rbx, [rsp]
jmp ._builtin_listdir.1
._builtin_listdir.3:
mov rdi, r14
call closedir
mov rax, rbx
add rsp, 8
pop rbx
pop r14
ret
"
);
Ok(())