diff --git a/src/ikarus.boot b/src/ikarus.boot index a76a120..38e3399 100644 Binary files a/src/ikarus.boot and b/src/ikarus.boot differ diff --git a/src/ikarus.numerics.ss b/src/ikarus.numerics.ss index 5ee3b1e..270aa59 100644 --- a/src/ikarus.numerics.ss +++ b/src/ikarus.numerics.ss @@ -188,6 +188,8 @@ (foreign-call "ikrt_fxbnmult" x y)] [(flonum? y) ($fl* (fixnum->flonum x) y)] + [(ratnum? y) + (binary/ (binary* x ($ratnum-n y)) ($ratnum-d y))] [else (error '* "~s is not a number" y)])] [(bignum? x) @@ -198,6 +200,8 @@ (foreign-call "ikrt_bnbnmult" x y)] [(flonum? y) ($fl* (bignum->flonum x) y)] + [(ratnum? y) + (binary/ (binary* x ($ratnum-n y)) ($ratnum-d y))] [else (error '* "~s is not a number" y)])] [(flonum? x) @@ -208,8 +212,15 @@ ($fl* x (bignum->flonum y))] [(flonum? y) ($fl* x y)] + [(ratnum? y) + (binary/ (binary* x ($ratnum-n y)) ($ratnum-d y))] [else (error '* "~s is not a number" y)])] + [(ratnum? y) + (if (ratnum? x) + (binary/ (binary* ($ratnum-n x) ($ratnum-n y)) + (binary* ($ratnum-d x) ($ratnum-d y))) + (binary* y x))] [else (error '* "~s is not a number" x)]))) (define + diff --git a/src/libaltcogen.ss b/src/libaltcogen.ss index c123ae4..617be91 100644 --- a/src/libaltcogen.ss +++ b/src/libaltcogen.ss @@ -1808,7 +1808,10 @@ [(move-byte) (let ([s (set-rem d s)]) (set-for-each (lambda (y) (add-edge! g d y)) s) - (for-each (lambda (r) (add-edge! g d r)) non-8bit-registers) + (when (var? d) + (for-each (lambda (r) (add-edge! g d r)) non-8bit-registers)) + (when (var? v) + (for-each (lambda (r) (add-edge! g v r)) non-8bit-registers)) (set-union (R v) s))] [(int-/overflow int+/overflow int*/overflow) (unless (exception-live-set)