guile-commits
[Top][All Lists]
Advanced

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

[Guile-commits] 02/07: subr-call implementation simplification


From: Andy Wingo
Subject: [Guile-commits] 02/07: subr-call implementation simplification
Date: Fri, 23 Oct 2015 13:36:16 +0000

wingo pushed a commit to branch master
in repository guile.

commit 9144f50c319845828515ceb313609da9e827ffa6
Author: Andy Wingo <address@hidden>
Date:   Thu Oct 22 11:35:07 2015 +0000

    subr-call implementation simplification
    
    * libguile/vm-engine.c (subr-call): Reference args from SP, not FP.
---
 libguile/vm-engine.c |   45 ++++++++++++++++++++++-----------------------
 1 files changed, 22 insertions(+), 23 deletions(-)

diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c
index ca369bd..308c04c 100644
--- a/libguile/vm-engine.c
+++ b/libguile/vm-engine.c
@@ -801,53 +801,52 @@ VM_NAME (scm_i_thread *thread, struct scm_vm *vp,
 
       SYNC_IP ();
 
-      // FIXME!!!!
       switch (FRAME_LOCALS_COUNT_FROM (1))
         {
         case 0:
           ret = subr ();
           break;
         case 1:
-          ret = subr (FP_REF (1));
+          ret = subr (SP_REF (0));
           break;
         case 2:
-          ret = subr (FP_REF (1), FP_REF (2));
+          ret = subr (SP_REF (1), SP_REF (0));
           break;
         case 3:
-          ret = subr (FP_REF (1), FP_REF (2), FP_REF (3));
+          ret = subr (SP_REF (2), SP_REF (1), SP_REF (0));
           break;
         case 4:
-          ret = subr (FP_REF (1), FP_REF (2), FP_REF (3),
-                      FP_REF (4));
+          ret = subr (SP_REF (3), SP_REF (2), SP_REF (1),
+                      SP_REF (0));
           break;
         case 5:
-          ret = subr (FP_REF (1), FP_REF (2), FP_REF (3),
-                      FP_REF (4), FP_REF (5));
+          ret = subr (SP_REF (4), SP_REF (3), SP_REF (2),
+                      SP_REF (1), SP_REF (0));
           break;
         case 6:
-          ret = subr (FP_REF (1), FP_REF (2), FP_REF (3),
-                      FP_REF (4), FP_REF (5), FP_REF (6));
+          ret = subr (SP_REF (5), SP_REF (4), SP_REF (3),
+                      SP_REF (2), SP_REF (1), SP_REF (0));
           break;
         case 7:
-          ret = subr (FP_REF (1), FP_REF (2), FP_REF (3),
-                      FP_REF (4), FP_REF (5), FP_REF (6),
-                      FP_REF (7));
+          ret = subr (SP_REF (6), SP_REF (5), SP_REF (4),
+                      SP_REF (3), SP_REF (2), SP_REF (1),
+                      SP_REF (0));
           break;
         case 8:
-          ret = subr (FP_REF (1), FP_REF (2), FP_REF (3),
-                      FP_REF (4), FP_REF (5), FP_REF (6),
-                      FP_REF (7), FP_REF (8));
+          ret = subr (SP_REF (7), SP_REF (6), SP_REF (5),
+                      SP_REF (4), SP_REF (3), SP_REF (2),
+                      SP_REF (1), SP_REF (0));
           break;
         case 9:
-          ret = subr (FP_REF (1), FP_REF (2), FP_REF (3),
-                      FP_REF (4), FP_REF (5), FP_REF (6),
-                      FP_REF (7), FP_REF (8), FP_REF (9));
+          ret = subr (SP_REF (8), SP_REF (7), SP_REF (6),
+                      SP_REF (5), SP_REF (4), SP_REF (3),
+                      SP_REF (2), SP_REF (1), SP_REF (0));
           break;
         case 10:
-          ret = subr (FP_REF (1), FP_REF (2), FP_REF (3),
-                      FP_REF (4), FP_REF (5), FP_REF (6),
-                      FP_REF (7), FP_REF (8), FP_REF (9),
-                      FP_REF (10));
+          ret = subr (SP_REF (9), SP_REF (8), SP_REF (7),
+                      SP_REF (6), SP_REF (5), SP_REF (4),
+                      SP_REF (3), SP_REF (2), SP_REF (1),
+                      SP_REF (0));
           break;
         default:
           abort ();



reply via email to

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