general update

This commit is contained in:
igor
2026-02-18 13:58:08 +01:00
parent 6c34602ead
commit b0de836beb
10 changed files with 528 additions and 50 deletions

View File

@@ -1,6 +1,7 @@
# L2 Floating Point Library (Double Precision)
# Arithmetic
#f+ [*, x1 | x2] -> [* | x3]
:asm f+ {
movq xmm0, [r12]
add r12, 8
@@ -9,6 +10,7 @@
movq [r12], xmm1
} ;
#f- [*, x1 | x2] -> [* | x3]
:asm f- {
movq xmm0, [r12]
add r12, 8
@@ -17,6 +19,7 @@
movq [r12], xmm1
} ;
#f* [*, x1 | x2] -> [* | x3]
:asm f* {
movq xmm0, [r12]
add r12, 8
@@ -25,6 +28,7 @@
movq [r12], xmm1
} ;
#f/ [*, x1 | x2] -> [* | x3]
:asm f/ {
movq xmm0, [r12]
add r12, 8
@@ -33,6 +37,7 @@
movq [r12], xmm1
} ;
#fneg [* | x] -> [* | -x]
:asm fneg {
movq xmm0, [r12]
mov rax, 0x8000000000000000
@@ -42,6 +47,7 @@
} ;
# Comparison
#f== [*, x1 | x2] -> [* | flag]
:asm f== {
movq xmm0, [r12]
add r12, 8
@@ -52,6 +58,7 @@
mov [r12], rax
} ;
#f< [*, x1 | x2] -> [* | flag]
:asm f< {
movq xmm0, [r12] ; a
add r12, 8
@@ -62,6 +69,7 @@
mov [r12], rax
} ;
#f> [*, x1 | x2] -> [* | flag]
:asm f> {
movq xmm0, [r12] ; a
add r12, 8
@@ -73,25 +81,30 @@
} ;
# Conversion
#int>float [* | x] -> [* | xf]
:asm int>float {
cvtsi2sd xmm0, [r12]
movq [r12], xmm0
} ;
#float>int [* | xf] -> [* | x]
:asm float>int {
cvttsd2si rax, [r12]
mov [r12], rax
} ;
# Output
# extern declarations are required for runtime linking
extern int printf(char* fmt, double x)
extern int fflush(void* stream)
#fput [* | xf] -> [*]
word fput
"%f" drop swap printf drop
0 fflush drop
end
#fputln [* | xf] -> [*]
word fputln
"%f\n" drop swap printf drop
0 fflush drop