added abs to stdlib.sl and made a toint function, I'm gonna kms

This commit is contained in:
IgorCielniak
2026-01-12 10:32:25 +01:00
parent 155b0eae07
commit 4fe4d26511
2 changed files with 50 additions and 0 deletions

View File

@@ -474,6 +474,17 @@
} }
; ;
# : abs ( x -- |x| )
:asm abs {
mov rax, [r12] ; get value
test rax, rax ; check sign
jge .done ; keep if non-negative
neg rax ; flip sign when negative
.done:
mov [r12], rax ; store result
}
;
# : bitnot ( 0|1 -- 1|0 ) # : bitnot ( 0|1 -- 1|0 )
:asm bitnot { :asm bitnot {
mov rax, [r12] ; get value mov rax, [r12] ; get value

39
toint.sl Normal file
View File

@@ -0,0 +1,39 @@
import stdlib.sl
import io.sl
word digitsN>num # ( d_{n-1} ... d0 n -- value ), digits bottom=MSD, top=LSD, length on top (MSD-most significant digit, LSD-least significant digit)
0 swap # place accumulator below length
for # loop n times using the length on top
r@ pick # fetch next digit starting from MSD (uses loop counter as index)
swap # acc on top
10 * # acc *= 10
+ # acc += digit
end
end
word toint
swap
over 0 swap
dup >r
for
over over +
c@ 48 -
swap rot
swap
1 +
end
2drop
r>
dup >r
digitsN>num
r> 1 +
for
swap drop
end
rdrop
end
word main
"1234" toint 1 + puti cr
end