[movitz-cvs] CVS update: movitz/losp/muerte/ratios.lisp
Frode Vatvedt Fjeld
ffjeld at common-lisp.net
Wed Sep 22 17:52:08 UTC 2004
Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory common-lisp.net:/tmp/cvs-serv784
Modified Files:
ratios.lisp
Log Message:
Re-wrote make-ratio not to use malloc-pointer-words.
Date: Wed Sep 22 19:52:08 2004
Author: ffjeld
Index: movitz/losp/muerte/ratios.lisp
diff -u movitz/losp/muerte/ratios.lisp:1.6 movitz/losp/muerte/ratios.lisp:1.7
--- movitz/losp/muerte/ratios.lisp:1.6 Wed Aug 4 15:01:14 2004
+++ movitz/losp/muerte/ratios.lisp Wed Sep 22 19:52:08 2004
@@ -10,7 +10,7 @@
;;;; Author: Frode Vatvedt Fjeld <frodef at acm.org>
;;;; Created at: Tue Jul 20 00:39:59 2004
;;;;
-;;;; $Id: ratios.lisp,v 1.6 2004/08/04 13:01:14 ffjeld Exp $
+;;;; $Id: ratios.lisp,v 1.7 2004/09/22 17:52:08 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -21,20 +21,20 @@
(in-package muerte)
-;;;(defstruct (ratio (:constructor make-ratio (numerator denominator))
-;;; (:superclass rational))
-;;; numerator denominator)
-
(defun make-ratio (numerator denominator)
(check-type numerator integer)
(check-type denominator (integer 1 *))
- (let ((ratio (malloc-pointer-words 4)))
- (setf (memref ratio #.(bt:slot-offset 'movitz:movitz-basic-vector 'movitz::type)
- 0 :unsigned-byte32)
- #.(movitz:tag :ratio))
- (setf (memref ratio -6 2 :lisp) numerator
- (memref ratio -6 3 :lisp) denominator)
- ratio))
+ (macrolet
+ ((do-it ()
+ `(with-allocation-assembly (4 :fixed-size-p t
+ :object-register :eax)
+ (:load-lexical (:lexical-binding numerator) :ebx)
+ (:load-lexical (:lexical-binding denominator) :edx)
+ (:movl ,(movitz:tag :ratio) (:eax (:offset movitz-ratio type)))
+ (:movl :edi (:eax (:offset movitz-ratio dummy2)))
+ (:movl :ebx (:eax (:offset movitz-ratio numerator)))
+ (:movl :edx (:eax (:offset movitz-ratio denominator))))))
+ (do-it)))
(defun ratio-p (x)
(typep x 'ratio))
More information about the Movitz-cvs
mailing list