- Add trampolines for quotient, remainder, and modulo.
authorGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Mon, 6 May 1991 18:08:59 +0000 (18:08 +0000)
committerGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Mon, 6 May 1991 18:08:59 +0000 (18:08 +0000)
- Redefine user-visible quotient, remainder, and modulo so that the
compiler will do a better job.

v7/src/runtime/arith.scm
v7/src/runtime/version.scm

index d8660e38401a9572fbaaf24802875f056aac7835..3e13496d178d1c4624d1da99ef8ae0f57a1fdf77 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/arith.scm,v 1.19 1991/04/26 02:39:56 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/arith.scm,v 1.20 1991/05/06 18:08:24 jinx Exp $
 
 Copyright (c) 1989-91 Massachusetts Institute of Technology
 
@@ -130,7 +130,10 @@ MIT in each case. |#
       (set-trampoline! 'GENERIC-TRAMPOLINE-ADD complex:+)
       (set-trampoline! 'GENERIC-TRAMPOLINE-SUBTRACT complex:-)
       (set-trampoline! 'GENERIC-TRAMPOLINE-MULTIPLY complex:*)
-      (set-trampoline! 'GENERIC-TRAMPOLINE-DIVIDE complex:/)))
+      (set-trampoline! 'GENERIC-TRAMPOLINE-DIVIDE complex:/)
+      (set-trampoline! 'GENERIC-TRAMPOLINE-QUOTIENT complex:quotient)
+      (set-trampoline! 'GENERIC-TRAMPOLINE-REMAINDER complex:remainder)
+      (set-trampoline! 'GENERIC-TRAMPOLINE-MODULO complex:modulo)))
   unspecific)
 
 (define flo:significand-digits-base-2)
@@ -1635,9 +1638,36 @@ MIT in each case. |#
                                          (reduce complex:* 1 (cddr zs))))))))
 
 (define abs complex:abs)
+#|
+;; Kludge!
+
 (define quotient complex:quotient)
 (define remainder complex:remainder)
 (define modulo complex:modulo)
+|#
+
+(define (quotient n d)
+  ((ucode-primitive quotient 2) n d))
+
+(define (remainder n d)
+  ((ucode-primitive remainder 2) n d))
+
+#|
+
+(define (modulo n d)
+  ((ucode-primitive modulo 2) n d))
+
+|#
+
+(define (modulo n d)
+  (let ((r ((ucode-primitive remainder 2) n d)))
+    (if (or (zero? r)
+           (if (negative? n)
+               (negative? d)
+               (not (negative? d))))
+       r
+       (+ r d))))
+
 (define integer-floor complex:integer-floor)
 (define integer-ceiling complex:integer-ceiling)
 (define integer-truncate complex:quotient)
index f608b95f898f693c2bc8f20e2cf63c6858f9ff35..9ea93e47c1c83d06bf8a402b76fa76469b963a2e 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/version.scm,v 14.117 1991/05/06 03:19:59 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/version.scm,v 14.118 1991/05/06 18:08:59 jinx Exp $
 
 Copyright (c) 1988-91 Massachusetts Institute of Technology
 
@@ -45,7 +45,7 @@ MIT in each case. |#
                     '()))
   (add-system! microcode-system)
   (add-event-receiver! event:after-restore snarf-microcode-version!)
-  (add-identification! "Runtime" 14 117))
+  (add-identification! "Runtime" 14 118))
 
 (define microcode-system)