* Added native support for $fl+, $fl-, $fl*, $fl/
This commit is contained in:
parent
f1674cbaef
commit
3acdcb6c04
|
@ -6362,3 +6362,63 @@ Words allocated: 151779700
|
||||||
Words reclaimed: 0
|
Words reclaimed: 0
|
||||||
Elapsed time...: 4619 ms (User: 3127 ms; System: 1452 ms)
|
Elapsed time...: 4619 ms (User: 3127 ms; System: 1452 ms)
|
||||||
Elapsed GC time: 276 ms (CPU: 252 in 579 collections.)
|
Elapsed GC time: 276 ms (CPU: 252 in 579 collections.)
|
||||||
|
|
||||||
|
****************************
|
||||||
|
Benchmarking Larceny-r6rs on Thu Jun 14 20:31:38 AST 2007 under Darwin Vesuvius.local 8.9.1 Darwin Kernel Version 8.9.1: Thu Feb 22 20:55:00 PST 2007; root:xnu-792.18.15~1/RELEASE_I386 i386 i386
|
||||||
|
|
||||||
|
Testing cpstak under Larceny-r6rs
|
||||||
|
Compiling...
|
||||||
|
Larceny v0.93 "Deviated Prevert" (Nov 10 2006 04:27:45, precise:BSD Unix:unified)
|
||||||
|
|
||||||
|
|
||||||
|
>
|
||||||
|
>
|
||||||
|
Running...
|
||||||
|
Larceny v0.93 "Deviated Prevert" (Nov 10 2006 04:27:45, precise:BSD Unix:unified)
|
||||||
|
|
||||||
|
|
||||||
|
>
|
||||||
|
Words allocated: 318239872
|
||||||
|
Words reclaimed: 0
|
||||||
|
Elapsed time...: 1497 ms (User: 1479 ms; System: 10 ms)
|
||||||
|
Elapsed GC time: 444 ms (CPU: 436 in 1214 collections.)
|
||||||
|
|
||||||
|
****************************
|
||||||
|
Benchmarking Larceny-r6rs on Thu Jun 14 20:34:33 AST 2007 under Darwin Vesuvius.local 8.9.1 Darwin Kernel Version 8.9.1: Thu Feb 22 20:55:00 PST 2007; root:xnu-792.18.15~1/RELEASE_I386 i386 i386
|
||||||
|
|
||||||
|
Testing mbrot under Larceny-r6rs
|
||||||
|
Compiling...
|
||||||
|
Larceny v0.93 "Deviated Prevert" (Nov 10 2006 04:27:45, precise:BSD Unix:unified)
|
||||||
|
|
||||||
|
|
||||||
|
>
|
||||||
|
>
|
||||||
|
Running...
|
||||||
|
Larceny v0.93 "Deviated Prevert" (Nov 10 2006 04:27:45, precise:BSD Unix:unified)
|
||||||
|
|
||||||
|
|
||||||
|
>
|
||||||
|
Words allocated: 551809361
|
||||||
|
Words reclaimed: 0
|
||||||
|
Elapsed time...: 2293 ms (User: 2246 ms; System: 24 ms)
|
||||||
|
Elapsed GC time: 781 ms (CPU: 744 in 2105 collections.)
|
||||||
|
|
||||||
|
****************************
|
||||||
|
Benchmarking Larceny-r6rs on Thu Jun 14 20:38:10 AST 2007 under Darwin Vesuvius.local 8.9.1 Darwin Kernel Version 8.9.1: Thu Feb 22 20:55:00 PST 2007; root:xnu-792.18.15~1/RELEASE_I386 i386 i386
|
||||||
|
|
||||||
|
Testing mbrot under Larceny-r6rs
|
||||||
|
Compiling...
|
||||||
|
Larceny v0.93 "Deviated Prevert" (Nov 10 2006 04:27:45, precise:BSD Unix:unified)
|
||||||
|
|
||||||
|
|
||||||
|
>
|
||||||
|
>
|
||||||
|
Running...
|
||||||
|
Larceny v0.93 "Deviated Prevert" (Nov 10 2006 04:27:45, precise:BSD Unix:unified)
|
||||||
|
|
||||||
|
|
||||||
|
>
|
||||||
|
Words allocated: 551809361
|
||||||
|
Words reclaimed: 0
|
||||||
|
Elapsed time...: 2272 ms (User: 2241 ms; System: 20 ms)
|
||||||
|
Elapsed GC time: 763 ms (CPU: 755 in 2105 collections.)
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
* conform needs char-downcase.
|
||||||
|
* maze needs bitwise-and
|
||||||
|
* ray needs many fl procedures
|
||||||
|
* quicksort needs bignum modulo.
|
||||||
|
* scheme needs complex? and other stuff.
|
||||||
|
* simplex needs flpositive?
|
||||||
|
* slatex needs string-ci=?
|
||||||
|
* compiler needs string-downcase
|
||||||
|
|
||||||
|
* ctak crashes with a bus error.
|
||||||
|
* fibc crashes with a segfault.
|
||||||
|
* ntakl kinda slow
|
||||||
|
* string too slow
|
||||||
|
* nbody does not work
|
||||||
|
|
||||||
|
* fibfp does not terminate
|
||||||
|
* mbrot too slow
|
||||||
|
* pnpoly kinda slow
|
||||||
|
* sumfp/fpsum too slow
|
||||||
|
|
||||||
|
BEFORE:
|
||||||
|
running stats for fibfp:
|
||||||
|
no collections
|
||||||
|
13316 ms elapsed cpu time
|
||||||
|
13984 ms elapsed real time
|
||||||
|
1433313736 bytes allocated
|
||||||
|
running stats for mbrot:
|
||||||
|
12145 collections
|
||||||
|
7608 ms elapsed cpu time
|
||||||
|
7660 ms elapsed real time
|
||||||
|
2215766392 bytes allocated
|
||||||
|
running stats for pnpoly:
|
||||||
|
81 collections
|
||||||
|
2622 ms elapsed cpu time
|
||||||
|
2637 ms elapsed real time
|
||||||
|
335204784 bytes allocated
|
||||||
|
running stats for sumfp:
|
||||||
|
no collections
|
||||||
|
13917 ms elapsed cpu time
|
||||||
|
30995 ms elapsed real time
|
||||||
|
1600160040 bytes allocated
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
(import
|
(import
|
||||||
(ikarus)
|
(ikarus)
|
||||||
(r6rs-benchmarks))
|
#;(r6rs-benchmarks))
|
||||||
|
|
||||||
(define (run name)
|
(define (run name)
|
||||||
(eval '(main) (environment (list 'r6rs-benchmarks name))))
|
(eval '(main) (environment (list 'r6rs-benchmarks name))))
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
* conform needs char-downcase.
|
|
||||||
* maze needs bitwise-and
|
|
||||||
* ray needs many fl procedures
|
|
||||||
* quicksort needs bignum modulo.
|
|
||||||
* scheme needs complex? and other stuff.
|
|
||||||
* simplex needs flpositive?
|
|
||||||
* slatex needs string-ci=?
|
|
||||||
* compiler needs string-downcase
|
|
||||||
|
|
||||||
* ctak crashes with a bus error.
|
|
||||||
* fibc crashes with a segfault.
|
|
||||||
* fibfp does not terminate
|
|
||||||
* mbrot too slow
|
|
||||||
* ntakl kinda slow
|
|
||||||
* pnpoly kinda slow
|
|
||||||
* sumfp/fpsum too slow
|
|
||||||
* string too slow
|
|
||||||
* nbody does not work
|
|
|
@ -6,21 +6,21 @@
|
||||||
|
|
||||||
(define (ctak x y z)
|
(define (ctak x y z)
|
||||||
(call-with-current-continuation
|
(call-with-current-continuation
|
||||||
(lambda (k) (ctak-aux k x y z))))
|
(lambda (k) (ctak-aux k x y z))))
|
||||||
|
|
||||||
(define (ctak-aux k x y z)
|
(define (ctak-aux k x y z)
|
||||||
(if (not (< y x))
|
(if (not (< y x))
|
||||||
(k z)
|
(k z)
|
||||||
(call-with-current-continuation
|
(call-with-current-continuation
|
||||||
(lambda (k)
|
(lambda (k)
|
||||||
(ctak-aux
|
(ctak-aux
|
||||||
k
|
k
|
||||||
(call-with-current-continuation
|
(call-with-current-continuation
|
||||||
(lambda (k) (ctak-aux k (- x 1) y z)))
|
(lambda (k) (ctak-aux k (- x 1) y z)))
|
||||||
(call-with-current-continuation
|
(call-with-current-continuation
|
||||||
(lambda (k) (ctak-aux k (- y 1) z x)))
|
(lambda (k) (ctak-aux k (- y 1) z x)))
|
||||||
(call-with-current-continuation
|
(call-with-current-continuation
|
||||||
(lambda (k) (ctak-aux k (- z 1) x y))))))))
|
(lambda (k) (ctak-aux k (- z 1) x y))))))))
|
||||||
|
|
||||||
(define (main . args)
|
(define (main . args)
|
||||||
(run-benchmark
|
(run-benchmark
|
||||||
|
|
BIN
src/ikarus.boot
BIN
src/ikarus.boot
Binary file not shown.
|
@ -43,6 +43,14 @@
|
||||||
[/5 0 5]
|
[/5 0 5]
|
||||||
[/6 0 6]
|
[/6 0 6]
|
||||||
[/7 0 7]
|
[/7 0 7]
|
||||||
|
[xmm0 xmm 0]
|
||||||
|
[xmm1 xmm 1]
|
||||||
|
[xmm2 xmm 2]
|
||||||
|
[xmm3 xmm 3]
|
||||||
|
[xmm4 xmm 4]
|
||||||
|
[xmm5 xmm 5]
|
||||||
|
[xmm6 xmm 6]
|
||||||
|
[xmm7 xmm 7]
|
||||||
))
|
))
|
||||||
|
|
||||||
(define register-index
|
(define register-index
|
||||||
|
@ -55,14 +63,21 @@
|
||||||
(lambda (x)
|
(lambda (x)
|
||||||
(cond
|
(cond
|
||||||
[(assq x register-mapping) =>
|
[(assq x register-mapping) =>
|
||||||
(lambda (x) (fx= (cadr x) 32))]
|
(lambda (x) (eqv? (cadr x) 32))]
|
||||||
[else #f])))
|
[else #f])))
|
||||||
|
|
||||||
(define reg8?
|
(define reg8?
|
||||||
(lambda (x)
|
(lambda (x)
|
||||||
(cond
|
(cond
|
||||||
[(assq x register-mapping) =>
|
[(assq x register-mapping) =>
|
||||||
(lambda (x) (fx= (cadr x) 8))]
|
(lambda (x) (eqv? (cadr x) 8))]
|
||||||
|
[else #f])))
|
||||||
|
|
||||||
|
(define xmmreg?
|
||||||
|
(lambda (x)
|
||||||
|
(cond
|
||||||
|
[(assq x register-mapping) =>
|
||||||
|
(lambda (x) (eqv? (cadr x) 'xmm))]
|
||||||
[else #f])))
|
[else #f])))
|
||||||
|
|
||||||
(define reg?
|
(define reg?
|
||||||
|
@ -343,7 +358,6 @@
|
||||||
[else (error 'CODE/digit "unhandled ~s ~s" a0 a1)])))]
|
[else (error 'CODE/digit "unhandled ~s ~s" a0 a1)])))]
|
||||||
[else (error 'CODE/digit "unhandled ~s" dst)])))
|
[else (error 'CODE/digit "unhandled ~s" dst)])))
|
||||||
|
|
||||||
|
|
||||||
(define CODEid
|
(define CODEid
|
||||||
(lambda (c /? n disp ac)
|
(lambda (c /? n disp ac)
|
||||||
(with-args disp
|
(with-args disp
|
||||||
|
@ -455,6 +469,33 @@
|
||||||
[(and (reg8? src) (mem? dst)) (CODErd #x88 src dst ac)]
|
[(and (reg8? src) (mem? dst)) (CODErd #x88 src dst ac)]
|
||||||
[(and (mem? src) (reg8? dst)) (CODErd #x8A dst src ac)]
|
[(and (mem? src) (reg8? dst)) (CODErd #x8A dst src ac)]
|
||||||
[else (error who "invalid ~s" instr)])]
|
[else (error who "invalid ~s" instr)])]
|
||||||
|
[(movsd src dst)
|
||||||
|
(cond
|
||||||
|
[(and (xmmreg? dst) (or (xmmreg? src) (mem? src)))
|
||||||
|
(CODE #xF2 (CODE #x0F ((CODE/digit #x10 dst) src ac)))]
|
||||||
|
[(and (xmmreg? src) (or (xmmreg? dst) (mem? dst)))
|
||||||
|
(CODE #xF2 (CODE #x0F ((CODE/digit #x11 src) dst ac)))]
|
||||||
|
[else (error who "invalid ~s" instr)])]
|
||||||
|
[(addsd src dst)
|
||||||
|
(cond
|
||||||
|
[(and (xmmreg? dst) (or (xmmreg? src) (mem? src)))
|
||||||
|
(CODE #xF2 (CODE #x0F ((CODE/digit #x58 dst) src ac)))]
|
||||||
|
[else (error who "invalid ~s" instr)])]
|
||||||
|
[(subsd src dst)
|
||||||
|
(cond
|
||||||
|
[(and (xmmreg? dst) (or (xmmreg? src) (mem? src)))
|
||||||
|
(CODE #xF2 (CODE #x0F ((CODE/digit #x5C dst) src ac)))]
|
||||||
|
[else (error who "invalid ~s" instr)])]
|
||||||
|
[(mulsd src dst)
|
||||||
|
(cond
|
||||||
|
[(and (xmmreg? dst) (or (xmmreg? src) (mem? src)))
|
||||||
|
(CODE #xF2 (CODE #x0F ((CODE/digit #x59 dst) src ac)))]
|
||||||
|
[else (error who "invalid ~s" instr)])]
|
||||||
|
[(divsd src dst)
|
||||||
|
(cond
|
||||||
|
[(and (xmmreg? dst) (or (xmmreg? src) (mem? src)))
|
||||||
|
(CODE #xF2 (CODE #x0F ((CODE/digit #x5E dst) src ac)))]
|
||||||
|
[else (error who "invalid ~s" instr)])]
|
||||||
[(addl src dst)
|
[(addl src dst)
|
||||||
(cond
|
(cond
|
||||||
[(and (imm8? src) (reg? dst))
|
[(and (imm8? src) (reg? dst))
|
||||||
|
|
|
@ -337,14 +337,17 @@
|
||||||
(define (ratnum->flonum x)
|
(define (ratnum->flonum x)
|
||||||
(binary/ (exact->inexact ($ratnum-n x))
|
(binary/ (exact->inexact ($ratnum-n x))
|
||||||
(exact->inexact ($ratnum-d x))))
|
(exact->inexact ($ratnum-d x))))
|
||||||
(define ($fl+ x y)
|
|
||||||
(foreign-call "ikrt_fl_plus" x y))
|
#;
|
||||||
(define ($fl- x y)
|
(begin
|
||||||
(foreign-call "ikrt_fl_minus" x y))
|
(define ($fl+ x y)
|
||||||
(define ($fl* x y)
|
(foreign-call "ikrt_fl_plus" x y))
|
||||||
(foreign-call "ikrt_fl_times" x y))
|
(define ($fl- x y)
|
||||||
(define ($fl/ x y)
|
(foreign-call "ikrt_fl_minus" x y))
|
||||||
(foreign-call "ikrt_fl_div" x y))
|
(define ($fl* x y)
|
||||||
|
(foreign-call "ikrt_fl_times" x y))
|
||||||
|
(define ($fl/ x y)
|
||||||
|
(foreign-call "ikrt_fl_div" x y)))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -440,7 +443,7 @@
|
||||||
(foreign-call "ikrt_fxbnminus" x y)]
|
(foreign-call "ikrt_fxbnminus" x y)]
|
||||||
[(flonum? y)
|
[(flonum? y)
|
||||||
(if ($fx= x 0)
|
(if ($fx= x 0)
|
||||||
($fl* y -1.0)
|
(fl* y -1.0)
|
||||||
($fl- (fixnum->flonum x) y))]
|
($fl- (fixnum->flonum x) y))]
|
||||||
[(ratnum? y)
|
[(ratnum? y)
|
||||||
(let ([n ($ratnum-n y)] [d ($ratnum-d y)])
|
(let ([n ($ratnum-n y)] [d ($ratnum-d y)])
|
||||||
|
@ -880,7 +883,7 @@
|
||||||
(if ($bignum-positive? x) x (- x))]
|
(if ($bignum-positive? x) x (- x))]
|
||||||
[(flonum? x)
|
[(flonum? x)
|
||||||
(if ($flnegative? x)
|
(if ($flnegative? x)
|
||||||
($fl* x -1.0)
|
(fl* x -1.0)
|
||||||
x)]
|
x)]
|
||||||
[(ratnum? x)
|
[(ratnum? x)
|
||||||
(let ([n ($ratnum-n x)])
|
(let ([n ($ratnum-n x)])
|
||||||
|
@ -1284,7 +1287,7 @@
|
||||||
(f (fl- ac (car rest)) (cdr rest))))]
|
(f (fl- ac (car rest)) (cdr rest))))]
|
||||||
[(x)
|
[(x)
|
||||||
(if (flonum? x)
|
(if (flonum? x)
|
||||||
($fl- 0.0 x)
|
(fl- 0.0 x)
|
||||||
(error 'fl+ "~s is not a flonum" x))]))
|
(error 'fl+ "~s is not a flonum" x))]))
|
||||||
|
|
||||||
(define fl*
|
(define fl*
|
||||||
|
|
|
@ -443,6 +443,10 @@
|
||||||
(make-asm-instr op
|
(make-asm-instr op
|
||||||
(make-disp (car s*) (cadr s*))
|
(make-disp (car s*) (cadr s*))
|
||||||
(caddr s*))))]
|
(caddr s*))))]
|
||||||
|
[(fl:load fl:store fl:add! fl:sub! fl:mul! fl:div!)
|
||||||
|
(S* rands
|
||||||
|
(lambda (s*)
|
||||||
|
(make-asm-instr op (car s*) (cadr s*))))]
|
||||||
[(nop interrupt) x]
|
[(nop interrupt) x]
|
||||||
[else (error 'impose-effect "invalid instr ~s" x)])]
|
[else (error 'impose-effect "invalid instr ~s" x)])]
|
||||||
[(funcall rator rands)
|
[(funcall rator rands)
|
||||||
|
@ -1394,7 +1398,8 @@
|
||||||
[(cltd)
|
[(cltd)
|
||||||
(mark-reg/vars-conf! edx vs)
|
(mark-reg/vars-conf! edx vs)
|
||||||
(R s vs (rem-reg edx rs) fs ns)]
|
(R s vs (rem-reg edx rs) fs ns)]
|
||||||
[(mset bset/c bset/h)
|
[(mset bset/c bset/h fl:load fl:store fl:add! fl:sub!
|
||||||
|
fl:mul! fl:div!)
|
||||||
(R* (list s d) vs rs fs ns)]
|
(R* (list s d) vs rs fs ns)]
|
||||||
[else (error who "invalid effect op ~s" (unparse x))])]
|
[else (error who "invalid effect op ~s" (unparse x))])]
|
||||||
[(ntcall target value args mask size)
|
[(ntcall target value args mask size)
|
||||||
|
@ -1597,7 +1602,8 @@
|
||||||
(make-asm-instr op d s)]))]
|
(make-asm-instr op d s)]))]
|
||||||
[(logand logor logxor int+ int- int* mset bset/c bset/h
|
[(logand logor logxor int+ int- int* mset bset/c bset/h
|
||||||
sll sra srl
|
sll sra srl
|
||||||
cltd idiv int-/overflow int+/overflow int*/overflow)
|
cltd idiv int-/overflow int+/overflow int*/overflow
|
||||||
|
fl:load fl:store fl:add! fl:sub! fl:mul! fl:div!)
|
||||||
(make-asm-instr op (R d) (R s))]
|
(make-asm-instr op (R d) (R s))]
|
||||||
[(nop) (make-primcall 'nop '())]
|
[(nop) (make-primcall 'nop '())]
|
||||||
[else (error who "invalid op ~s" op)])]
|
[else (error who "invalid op ~s" op)])]
|
||||||
|
@ -1843,7 +1849,7 @@
|
||||||
s))
|
s))
|
||||||
(set-union (set-union (R eax) (R edx))
|
(set-union (set-union (R eax) (R edx))
|
||||||
(set-union (R v) s)))]
|
(set-union (R v) s)))]
|
||||||
[(mset)
|
[(mset fl:load fl:store fl:add! fl:sub! fl:mul! fl:div!)
|
||||||
(set-union (R v) (set-union (R d) s))]
|
(set-union (R v) (set-union (R d) s))]
|
||||||
[else (error who "invalid effect ~s" x)])]
|
[else (error who "invalid effect ~s" x)])]
|
||||||
[(seq e0 e1) (E e0 (E e1 s))]
|
[(seq e0 e1) (E e0 (E e1 s))]
|
||||||
|
@ -2167,6 +2173,14 @@
|
||||||
(E (make-asm-instr 'move u s2))
|
(E (make-asm-instr 'move u s2))
|
||||||
(E (make-asm-instr op (make-disp u s1) b))))]
|
(E (make-asm-instr op (make-disp u s1) b))))]
|
||||||
[else x]))])]
|
[else x]))])]
|
||||||
|
[(fl:load fl:store fl:add! fl:sub! fl:mul! fl:div!)
|
||||||
|
(cond
|
||||||
|
[(mem? a)
|
||||||
|
(let ([u (mku)])
|
||||||
|
(make-seq
|
||||||
|
(E (make-asm-instr 'move u a))
|
||||||
|
(E (make-asm-instr op u b))))]
|
||||||
|
[else x])]
|
||||||
[else (error who "invalid effect ~s" op)])]
|
[else (error who "invalid effect ~s" op)])]
|
||||||
[(primcall op rands)
|
[(primcall op rands)
|
||||||
(case op
|
(case op
|
||||||
|
@ -2437,6 +2451,18 @@
|
||||||
(list* `(addl ,(R s) ,(R d))
|
(list* `(addl ,(R s) ,(R d))
|
||||||
`(jo ,L)
|
`(jo ,L)
|
||||||
ac))]
|
ac))]
|
||||||
|
[(fl:store)
|
||||||
|
(cons `(movsd xmm0 ,(R (make-disp s d))) ac)]
|
||||||
|
[(fl:load)
|
||||||
|
(cons `(movsd ,(R (make-disp s d)) xmm0) ac)]
|
||||||
|
[(fl:add!)
|
||||||
|
(cons `(addsd ,(R (make-disp s d)) xmm0) ac)]
|
||||||
|
[(fl:sub!)
|
||||||
|
(cons `(subsd ,(R (make-disp s d)) xmm0) ac)]
|
||||||
|
[(fl:mul!)
|
||||||
|
(cons `(mulsd ,(R (make-disp s d)) xmm0) ac)]
|
||||||
|
[(fl:div!)
|
||||||
|
(cons `(divsd ,(R (make-disp s d)) xmm0) ac)]
|
||||||
[else (error who "invalid instr ~s" x)])]
|
[else (error who "invalid instr ~s" x)])]
|
||||||
[(primcall op rands)
|
[(primcall op rands)
|
||||||
(case op
|
(case op
|
||||||
|
|
|
@ -603,6 +603,10 @@
|
||||||
[$flonum-signed-biased-exponent $flonums]
|
[$flonum-signed-biased-exponent $flonums]
|
||||||
[$flonum-rational? $flonums]
|
[$flonum-rational? $flonums]
|
||||||
[$flonum-integer? $flonums]
|
[$flonum-integer? $flonums]
|
||||||
|
[$fl+ $flonums]
|
||||||
|
[$fl- $flonums]
|
||||||
|
[$fl* $flonums]
|
||||||
|
[$fl/ $flonums]
|
||||||
|
|
||||||
[$make-bignum $bignums]
|
[$make-bignum $bignums]
|
||||||
[$bignum-positive? $bignums]
|
[$bignum-positive? $bignums]
|
||||||
|
|
|
@ -721,6 +721,14 @@
|
||||||
|
|
||||||
(section ;;; flonums
|
(section ;;; flonums
|
||||||
|
|
||||||
|
(define ($flop-aux op fl0 fl1)
|
||||||
|
(with-tmp ([x (prm 'alloc (K (align flonum-size)) (K vector-tag))])
|
||||||
|
(prm 'mset x (K (- vector-tag)) (K flonum-tag))
|
||||||
|
(prm 'fl:load (T fl0) (K (- disp-flonum-data vector-tag)))
|
||||||
|
(prm op (T fl1) (K (- disp-flonum-data vector-tag)))
|
||||||
|
(prm 'fl:store x (K (- disp-flonum-data vector-tag)))
|
||||||
|
x))
|
||||||
|
|
||||||
(define-primop flonum? safe
|
(define-primop flonum? safe
|
||||||
[(P x) (sec-tag-test (T x) vector-mask vector-tag #f flonum-tag)]
|
[(P x) (sec-tag-test (T x) vector-mask vector-tag #f flonum-tag)]
|
||||||
[(E x) (nop)])
|
[(E x) (nop)])
|
||||||
|
@ -760,6 +768,14 @@
|
||||||
(prm 'sll (T v) (K (- 8 fx-shift))))]
|
(prm 'sll (T v) (K (- 8 fx-shift))))]
|
||||||
[else (interrupt)])])
|
[else (interrupt)])])
|
||||||
|
|
||||||
|
(define-primop $fl+ unsafe
|
||||||
|
[(V x y) ($flop-aux 'fl:add! x y)])
|
||||||
|
(define-primop $fl- unsafe
|
||||||
|
[(V x y) ($flop-aux 'fl:sub! x y)])
|
||||||
|
(define-primop $fl* unsafe
|
||||||
|
[(V x y) ($flop-aux 'fl:mul! x y)])
|
||||||
|
(define-primop $fl/ unsafe
|
||||||
|
[(V x y) ($flop-aux 'fl:div! x y)])
|
||||||
|
|
||||||
/section)
|
/section)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue