guile-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

guile/guile-lightning test.scm


From: Marius Vollmer
Subject: guile/guile-lightning test.scm
Date: Sat, 24 Mar 2001 20:32:17 -0800

CVSROOT:        /cvs
Module name:    guile
Changes by:     Marius Vollmer <address@hidden> 01/03/24 20:32:17

Modified files:
        guile-lightning: test.scm 

Log message:
        More fun with fixnums.

CVSWeb URLs:
http://subversions.gnu.org/cgi-bin/cvsweb/guile/guile-lightning/test.scm.diff?r1=1.3&r2=1.4

Patches:
Index: guile/guile-lightning/test.scm
diff -u guile/guile-lightning/test.scm:1.3 guile/guile-lightning/test.scm:1.4
--- guile/guile-lightning/test.scm:1.3  Tue Mar 20 15:47:43 2001
+++ guile/guile-lightning/test.scm      Sat Mar 24 20:32:17 2001
@@ -1,50 +1,87 @@
-(load "lightning.scm")
+(use-modules (ice-9 time))
 (use-modules (lightning))
 
+(dynamic-call "init_fib" (dynamic-link "./x.so"))
+
 (define (fib n)
   (if (< n 2)
       1
       (+ (fib (- n 1)) (fib (- n 2)))))
 
+(define-asm-macro (arg-prolog . args)
+  (let ((n (length args)))
+    (cons `(prolog ,n)
+         (map (lambda (name) `(arg ,name))
+              args))))
+
+(define-asm-macro (scm-blt-constfix label a fix tmp1)
+  (let ((l0 (gensym "ll"))
+       (l1 (gensym "ll")))
+    `(  (bmc ,l0 ,a (scm 0))
+        (blt ,label ,a ,fix)
+        (b ,l1)
+      ,l0
+        (prepare 2)
+       (mov ,tmp1 ,fix)
+       (pusharg ,tmp1)
+       (pusharg ,a)
+       (finish (subr "scm_less_p"))
+       (retval ,tmp1)
+       (bne ,label ,tmp1 (scm #f))
+      ,l1)))
+
+(define-asm-macro (scm-add-constfix res a fix)
+  (let ((l0 (gensym "ll"))
+       (l1 (gensym "ll"))
+       (fix-sans-tag (logand #xffffffff (* 4 (cadr fix))))) ;; XXX
+  `(  (bmc ,l0 ,a (scm 0))
+      (mov ,res ,a)
+      (boadd ,l0 ,res ,fix-sans-tag)
+      (b ,l1)
+    ,l0
+      (prepare 2)
+      (mov ,res ,fix)
+      (pusharg ,res)
+      (pusharg ,a)
+      (finish (subr "scm_sum"))
+      (retval ,res)
+    ,l1)))
+
+(define-asm-macro (scm-add res a b)
+  (let ((l0 (gensym "ll"))
+       (l1 (gensym "ll")))
+    `(  (bmc ,l0 ,a (scm 0))
+       (bmc ,l0 ,b (scm 0))
+       (sub ,res ,a (scm 0))
+       (boadd ,l0 ,res ,b)
+       (b ,l1)
+      ,l0
+        (prepare 2)
+       (pusharg ,b)
+       (pusharg ,a)
+       (finish (subr "scm_sum"))
+       (retval ,res)
+      ,l1)))
+
 (define asm-fib (assemble `(fib
-                             (prolog 1)
-                             (arg n)
+                             (arg-prolog n)
                              (getarg v0 n)
-                             (prepare 2)
-                             (mov r0 (scm 2))
-                             (pusharg r0)
-                             (pusharg v0)
-                             (finish (subr "less_p"))
-                             (retval r0)
-                             (beq l0 r0 (scm #f))
-                             (mov ret (scm 1))
-                             (ret)
-                           l0
-                             (prepare 2)
-                             (mov r0 (scm 2))
-                             (pusharg r0)
-                             (pusharg v0)
-                             (finish (subr "difference"))
-                             (retval r0)
+                             (scm-blt-constfix l0 v0 (scm 2) r0)
+                             (scm-add-constfix r0 v0 (scm -2))
                              (prepare 1)
                              (pusharg r0)
                              (finish (label fib))
                              (retval v2)
-                             (prepare 2)
-                             (mov r0 (scm 1))
-                             (pusharg r0)
-                             (pusharg v0)
-                             (finish (subr "difference"))
-                             (retval r0)
+                             (scm-add-constfix r0 v0 (scm -1))
                              (prepare 1)
                              (pusharg r0)
                              (finish (label fib))
                              (retval v1)
-                             (prepare 2)
-                             (pusharg v2)
-                             (pusharg v1)
-                             (finish (subr "sum"))
-                             (retval ret)
+                             (scm-add ret v1 v2)
+                             (b l1)
+                           l0
+                             (mov ret (scm 1))
+                           l1
                              (ret))))
 
 (define asm-fixfib (assemble `(fib
@@ -71,6 +108,16 @@
                                 (add ret ret v1)
                                 (ret))))
 
-;(disassemble asm-fib)
+(define asm-inc (assemble `(  (prolog 1)
+                             (arg n)
+                             (getarg r1 n)
+                             (scm-add-constfix ret r1 (scm 1))
+                             (ret))))
 
-(assert-repl-verbosity #t)
+(define asm-dec (assemble `(  (prolog 1)
+                             (arg n)
+                             (getarg r1 n)
+                             (scm-add-constfix ret r1 (scm -1))
+                             (ret))))
+
+;(disassemble asm-fib)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]