added contains, 3dup and 4dup

This commit is contained in:
IgorCielniak
2026-03-25 10:38:43 +01:00
parent b263e7d0de
commit 75b01b9635
2 changed files with 355 additions and 316 deletions

View File

@@ -167,6 +167,37 @@
} }
; ;
#3dup [*, x1, x2 | x3] -> [*, x1, x2, x3, x1, x2 | x3]
:asm 3dup {
mov rax, [r12] ; c (top)
mov rbx, [r12 + 8] ; b
mov rcx, [r12 + 16] ; a
sub r12, 8 ; make room
mov [r12], rcx ; push a
sub r12, 8 ; make room
mov [r12], rbx ; push b
sub r12, 8 ; make room
mov [r12], rax ; push c
}
;
#4dup [*, x1, x2, x3 | x4] -> [*, x1, x2, x3, x4, x1, x2, x3 | x4]
:asm 4dup {
mov rax, [r12] ; d
mov rbx, [r12 + 8] ; c
mov rcx, [r12 + 16] ; b
mov rdx, [r12 + 24] ; a
sub r12, 8 ; make room
mov [r12], rdx ; push a
sub r12, 8 ; make room
mov [r12], rcx ; push b
sub r12, 8 ; make room
mov [r12], rbx ; push c
sub r12, 8 ; make room
mov [r12], rax ; push d
}
;
#2drop [*, x1 | x2] -> [*] #2drop [*, x1 | x2] -> [*]
:asm 2drop { :asm 2drop {
add r12, 16 ; remove two items add r12, 16 ; remove two items

View File

@@ -527,3 +527,11 @@ word endswith
dup 3 pick swap - 4 pick + over 2 pick 4 pick swap strcmp dup 3 pick swap - 4 pick + over 2 pick 4 pick swap strcmp
nip nip nip nip nip nip nip nip
end end
# contains [*, addr, len, addr | len] -> [* | bool]
word contains
2 pick for
4dup strcmp 1 == if 1 nip nip nip nip ret end
>r >r >r 1 + r> r> r>
end 0 nip nip nip nip
end