implemented realloc as well as a bunch of fixes and some small changes like changing the order of arguments for !, making alloc drop etc.

This commit is contained in:
IgorCielniak
2026-02-02 15:51:58 +01:00
parent ec826c31b2
commit 5ea020100e
9 changed files with 100 additions and 46 deletions

View File

@@ -11,8 +11,8 @@
# : argc ( -- n )
:asm argc {
extern argc
mov rax, [rel argc]
extern sys_argc
mov rax, [rel sys_argc]
sub r12, 8
mov [r12], rax
ret
@@ -21,8 +21,8 @@
# : argv ( -- ptr )
:asm argv {
extern argv
mov rax, [rel argv]
extern sys_argv
mov rax, [rel sys_argv]
sub r12, 8
mov [r12], rax
ret
@@ -31,9 +31,9 @@
# : argv@ ( n -- ptr )
:asm argv@ {
extern argv
extern sys_argv
mov rbx, [r12] ; n
mov rax, [rel argv]
mov rax, [rel sys_argv]
mov rax, [rax + rbx*8]
mov [r12], rax
ret
@@ -54,6 +54,7 @@
mov rax, [r12] ; get address from stack
add r12, 8 ; pop address
mov rbx, [r12] ; get byte value
add r12, 8
mov [rbx], al ; store byte at address
ret
}
@@ -310,11 +311,11 @@
# : ! ( x addr -- )
:asm ! {
mov rax, [r12] ; get address
add r12, 8 ; pop address
mov rbx, [r12] ; get value
mov [rax], rbx ; store value at address
mov rax, [r12] ; get value (TOS)
add r12, 8 ; pop value
mov rbx, [r12] ; get addr (NOS)
add r12, 8 ; pop addr
mov [rbx], rax ; store value at address
}
;

View File

@@ -8,6 +8,7 @@ word alloc
-1 # fd
0 # offset
mmap
swap drop
end
word free
@@ -21,7 +22,6 @@ word memcpy #(dst_addr src_addr len -- dst_addr len)
dup c@
3 pick swap
c!
drop
swap
for
1 + dup
@@ -33,10 +33,30 @@ word memcpy #(dst_addr src_addr len -- dst_addr len)
dup
rot
c!
drop
swap
end
swap
nip
r> dup -rot - swap
end
word memset #( value len addr -- )
swap
0 swap for
-rot swap 2 pick + 2dup swap ! 1 + -rot swap
end
2drop drop
end
word memdump #( len addr -- addr )
for
dup c@ puti cr 1 +
end
end
word realloc #( addr old_len new_len -- new_addr )
2 pick swap alloc
rot rot swap
memcpy
swap -rot free
end

View File

@@ -99,7 +99,7 @@ word tostr
dup
count_digits
2dup >r alloc
nip swap rot swap
swap rot swap
for
dup 10 % swap 10 /
end
@@ -114,7 +114,6 @@ word tostr
2 + pick
3 pick rot +
swap 48 + swap 1 - swap c!
drop
swap
1 +
swap