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:
@@ -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
|
||||
}
|
||||
;
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user