general update
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user