Done with early assembly.
authorGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Wed, 1 Jul 1987 21:02:12 +0000 (21:02 +0000)
committerGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Wed, 1 Jul 1987 21:02:12 +0000 (21:02 +0000)
v7/src/compiler/machines/bobcat/rules1.scm
v7/src/compiler/machines/bobcat/rules2.scm
v7/src/compiler/machines/bobcat/rules3.scm
v7/src/compiler/machines/bobcat/rules4.scm

index 954e31e2c5f84ae2d6ab28cbcb414e7c21648dc4..6dd1521a3b44939735a1a8cea3cebb4e325b0dc7 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/rules1.scm,v 1.1 1987/06/13 20:58:34 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/rules1.scm,v 1.1.1.1 1987/07/01 20:59:41 jinx Exp $
 
 Copyright (c) 1987 Massachusetts Institute of Technology
 
@@ -47,7 +47,7 @@ MIT in each case. |#
 (define-rule statement
   (ASSIGN (REGISTER 12) (REGISTER 15))
   (enable-frame-pointer-offset! 0)
-  '())
+  (LAP))
 
 (define-rule statement
   (ASSIGN (REGISTER 15) (OFFSET-ADDRESS (REGISTER 15) (? n)))
@@ -56,42 +56,44 @@ MIT in each case. |#
 (define-rule statement
   (ASSIGN (REGISTER (? target)) (OFFSET-ADDRESS (REGISTER 15) (? n)))
   (QUALIFIER (pseudo-register? target))
-  `((LEA (@AO 7 ,(* 4 n)) ,(reference-assignment-alias! target 'ADDRESS))))
+  (LAP
+   (LEA (@AO 7 ,(* 4 n))
+       ,(reference-assignment-alias! target 'ADDRESS))))
 
 (define-rule statement
   (ASSIGN (REGISTER 15) (REGISTER (? source)))
   (disable-frame-pointer-offset!
-   `((MOVE L ,(coerce->any source) (A 7)))))
+   (LAP (MOVE/SIMPLE L ,(coerce->any source) (A 7)))))
 
 (define-rule statement
   (ASSIGN (REGISTER (? target)) (CONSTANT (? source)))
   (QUALIFIER (pseudo-register? target))
-  `(,(load-constant source (coerce->any target))))
+  (LAP ,(load-constant source (coerce->any target))))
 
 (define-rule statement
   (ASSIGN (REGISTER (? target)) (VARIABLE-CACHE (? name)))
   (QUALIFIER (pseudo-register? target))
-  `((MOVE L
-         (@PCR ,(free-reference-label name))
-         ,(reference-assignment-alias! target 'DATA))))
+  (LAP (MOVE/SIMPLE L
+                   (@PCR ,(free-reference-label name))
+                   ,(reference-assignment-alias! target 'DATA))))
 
 (define-rule statement
   (ASSIGN (REGISTER (? target)) (REGISTER (? source)))
   (QUALIFIER (pseudo-register? target))
   (move-to-alias-register! source 'DATA target)
-  '())
+  (LAP))
 \f
 (define-rule statement
   (ASSIGN (REGISTER (? target)) (OBJECT->ADDRESS (REGISTER (? source))))
   (QUALIFIER (pseudo-register? target))
   (let ((target (move-to-alias-register! source 'DATA target)))
-    `((AND L ,mask-reference ,target))))
+    (LAP (AND L ,mask-reference ,target))))
 
 (define-rule statement
   (ASSIGN (REGISTER (? target)) (OBJECT->TYPE (REGISTER (? source))))
   (QUALIFIER (pseudo-register? target))
   (let ((target (move-to-alias-register! source 'DATA target)))
-    `((RO L L (& 8) ,target))))
+    (LAP (RO L L (& 8) ,target))))
 
 (define-rule statement
   (ASSIGN (REGISTER (? target)) (OFFSET (REGISTER (? address)) (? offset)))
@@ -102,16 +104,20 @@ MIT in each case. |#
     ;; heuristic that works reasonably well since if the value is a
     ;; pointer, we will probably want to dereference it, which
     ;; requires that we first mask it.
-    `((MOVE L ,source
-           ,(register-reference (allocate-alias-register! target 'DATA))))))
+    (LAP (MOVE/SIMPLE L
+                     ,source
+                     ,(register-reference
+                       (allocate-alias-register! target 'DATA))))))
 
 (define-rule statement
   (ASSIGN (REGISTER (? target)) (POST-INCREMENT (REGISTER 15) 1))
   (QUALIFIER (pseudo-register? target))
   (record-pop!)
   (delete-dead-registers!)
-  `((MOVE L (@A+ 7)
-         ,(register-reference (allocate-alias-register! target 'DATA)))))
+  (LAP (MOVE/SIMPLE L
+                   (@A+ 7)
+                   ,(register-reference
+                     (allocate-alias-register! target 'DATA)))))
 
 (define-rule statement
   (ASSIGN (REGISTER (? target))
@@ -120,114 +126,121 @@ MIT in each case. |#
   (let ((target* (coerce->any target))
        (datum (coerce->any datum)))
     (delete-dead-registers!)
-    (if (register-expression? target*)
-       `((MOVE L ,datum ,reg:temp)
-         (MOVE B (& ,type) ,reg:temp)
-         (MOVE L ,reg:temp ,target*))
-       `((MOVE L ,datum ,target*)
-         (MOVE B (& ,type) ,target*)))))
+    (if (register-effective-address? target*)
+       (LAP (MOVE/SIMPLE L ,datum ,reg:temp)
+            (MOVE/SIMPLE B (& ,type) ,reg:temp)
+            (MOVE/SIMPLE L ,reg:temp ,target*))
+       (LAP (MOVE/SIMPLE L ,datum ,target*)
+            (MOVE/SIMPLE B (& ,type) ,target*)))))
 \f
 ;;;; Transfers to Memory
 
 (define-rule statement
   (ASSIGN (OFFSET (REGISTER (? a)) (? n))
          (CONSTANT (? object)))
-  `(,(load-constant object (indirect-reference! a n))))
+  (LAP ,(load-constant object (indirect-reference! a n))))
 
 (define-rule statement
   (ASSIGN (OFFSET (REGISTER (? a)) (? n))
          (REGISTER (? r)))
-  `((MOVE L ,(coerce->any r) ,(indirect-reference! a n))))
+  (LAP (MOVE/SIMPLE L
+                   ,(coerce->any r)
+                   ,(indirect-reference! a n))))
 
 (define-rule statement
   (ASSIGN (OFFSET (REGISTER (? a)) (? n))
          (POST-INCREMENT (REGISTER 15) 1))
   (record-pop!)
-  `((MOVE L (@A+ 7) ,(indirect-reference! a n))))
+  (LAP (MOVE/SIMPLE L
+                   (@A+ 7)
+                   ,(indirect-reference! a n))))
 
 (define-rule statement
   (ASSIGN (OFFSET (REGISTER (? a)) (? n))
          (CONS-POINTER (CONSTANT (? type)) (REGISTER (? r))))
   (let ((target (indirect-reference! a n)))
-    `((MOVE L ,(coerce->any r) ,target)
-      (MOVE B (& ,type) ,target))))
+    (LAP (MOVE/SIMPLE L ,(coerce->any r) ,target)
+        (MOVE/SIMPLE B (& ,type) ,target))))
 
 (define-rule statement
   (ASSIGN (OFFSET (REGISTER (? a0)) (? n0))
          (OFFSET (REGISTER (? a1)) (? n1)))
   (let ((source (indirect-reference! a1 n1)))
-    `((MOVE L ,source ,(indirect-reference! a0 n0)))))
+    (LAP (MOVE/SIMPLE L
+                     ,source
+                     ,(indirect-reference! a0 n0)))))
 \f
 ;;;; Consing
 
 (define-rule statement
   (ASSIGN (POST-INCREMENT (REGISTER 13) 1) (CONSTANT (? object)))
-  `(,(load-constant object '(@A+ 5))))
+  (LAP ,(load-constant object (INST-EA (@A+ 5)))))
 
 (define-rule statement
   (ASSIGN (POST-INCREMENT (REGISTER 13) 1) (UNASSIGNED))
-  `(,(load-non-pointer type-code:unassigned 0 '(@A+ 5))))
+  (LAP ,(load-non-pointer type-code:unassigned 0 (INST-EA (@A+ 5)))))
 
 (define-rule statement
   (ASSIGN (POST-INCREMENT (REGISTER 13) 1) (REGISTER (? r)))
-  `((MOVE L ,(coerce->any r) (@A+ 5))))
+  (LAP (MOVE/SIMPLE L ,(coerce->any r) (@A+ 5))))
 
 (define-rule statement
   (ASSIGN (POST-INCREMENT (REGISTER 13) 1) (OFFSET (REGISTER (? r)) (? n)))
-  `((MOVE L ,(indirect-reference! r n) (@A+ 5))))
+  (LAP (MOVE/SIMPLE L ,(indirect-reference! r n) (@A+ 5))))
 
 (define-rule statement
   (ASSIGN (POST-INCREMENT (REGISTER 13) 1) (ENTRY:PROCEDURE (? label)))
   (let ((temporary
         (register-reference (allocate-temporary-register! 'ADDRESS))))
-    `((LEA (@PCR ,(procedure-external-label (label->procedure label)))
-          ,temporary)
-      (MOVE L ,temporary (@A+ 5))
-      (MOVE B (& ,type-code:return-address) (@AO 5 -4)))))
+    (LAP (LEA (@PCR ,(procedure-external-label (label->procedure label)))
+             ,temporary)
+        (MOVE/SIMPLE L ,temporary (@A+ 5))
+        (MOVE/SIMPLE B (& ,type-code:return-address) (@AO 5 -4)))))
 \f
 ;;;; Pushes
 
 (define-rule statement
   (ASSIGN (PRE-INCREMENT (REGISTER 15) -1) (CONSTANT (? object)))
   (record-push!
-   `(,(load-constant object '(@-A 7)))))
+   (LAP ,(load-constant object (INST-EA (@-A 7))))))
 
 (define-rule statement
   (ASSIGN (PRE-INCREMENT (REGISTER 15) -1) (UNASSIGNED))
   (record-push!
-   `(,(load-non-pointer type-code:unassigned 0 '(@-A 7)))))
+   (LAP ,(load-non-pointer type-code:unassigned 0 (INST-EA (@-A 7))))))
 
 (define-rule statement
   (ASSIGN (PRE-INCREMENT (REGISTER 15) -1) (REGISTER (? r)))
   (record-push!
    (if (= r regnum:frame-pointer)
-       `((PEA ,(offset-reference regnum:stack-pointer (frame-pointer-offset)))
-        (MOVE B (& ,type-code:stack-environment) (@A 7)))
-       `((MOVE L ,(coerce->any r) (@-A 7))))))
+       (LAP (PEA ,(offset-reference regnum:stack-pointer
+                                   (frame-pointer-offset)))
+           (MOVE/SIMPLE B (& ,type-code:stack-environment) (@A 7)))
+       (LAP (MOVE/SIMPLE L ,(coerce->any r) (@-A 7))))))
 
 (define-rule statement
   (ASSIGN (PRE-INCREMENT (REGISTER 15) -1)
          (CONS-POINTER (CONSTANT (? type)) (REGISTER (? r))))
   (record-push!
-   `((MOVE L ,(coerce->any r) (@-A 7))
-     (MOVE B (& ,type) (@A 7)))))
+   (LAP (MOVE/SIMPLE L ,(coerce->any r) (@-A 7))
+       (MOVE/SIMPLE B (& ,type) (@A 7)))))
 
 (define-rule statement
   (ASSIGN (PRE-INCREMENT (REGISTER 15) -1) (OFFSET (REGISTER (? r)) (? n)))
   (record-push!
-   `((MOVE L ,(indirect-reference! r n) (@-A 7)))))
+   (LAP (MOVE/SIMPLE L ,(indirect-reference! r n) (@-A 7)))))
 
 (define-rule statement
   (ASSIGN (PRE-INCREMENT (REGISTER 15) -1)
          (OFFSET-ADDRESS (REGISTER 12) (? n)))
   (record-push!
-   `((PEA ,(offset-reference regnum:stack-pointer
-                            (+ n (frame-pointer-offset))))
-     (MOVE B (& ,type-code:stack-environment) (@A 7)))))
+   (LAP (PEA ,(offset-reference regnum:stack-pointer
+                               (+ n (frame-pointer-offset))))
+       (MOVE/SIMPLE B (& ,type-code:stack-environment) (@A 7)))))
 
 (define-rule statement
   (ASSIGN (PRE-INCREMENT (REGISTER 15) -1) (ENTRY:CONTINUATION (? label)))
   (record-continuation-frame-pointer-offset! label)
   (record-push!
-   `((PEA (@PCR ,label))
-     (MOVE B (& ,type-code:return-address) (@A 7)))))
\ No newline at end of file
+   (LAP (PEA (@PCR ,label))
+       (MOVE/SIMPLE B (& ,type-code:return-address) (@A 7)))))
index 94cd316cd04a006de708b7455fc3f1b6e0d86e4b..5e0069b6cfcf8fd3dc8513b4b458bb09b19bdc28 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/rules2.scm,v 1.1 1987/06/13 20:58:48 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/rules2.scm,v 1.1.1.1 1987/07/01 21:00:21 jinx Exp $
 
 Copyright (c) 1987 Massachusetts Institute of Technology
 
@@ -41,67 +41,72 @@ MIT in each case. |#
 (define-rule predicate
   (TRUE-TEST (REGISTER (? register)))
   (set-standard-branches! 'NE)
-  `(,(test-non-pointer (ucode-type false) 0 (coerce->any register))))
+  (LAP ,(test-non-pointer (ucode-type false) 0 (coerce->any register))))
 
 (define-rule predicate
   (TRUE-TEST (OFFSET (REGISTER (? register)) (? offset)))
   (set-standard-branches! 'NE)
-  `(,(test-non-pointer (ucode-type false) 0
-                      (indirect-reference! register offset))))
+  (LAP ,(test-non-pointer (ucode-type false) 0
+                         (indirect-reference! register offset))))
 
 (define-rule predicate
   (TYPE-TEST (REGISTER (? register)) (? type))
   (QUALIFIER (pseudo-register? register))
   (set-standard-branches! 'EQ)
-  `(,(test-byte type
-               (register-reference (load-alias-register! register 'DATA)))))
+  (LAP ,(test-byte type
+                  (register-reference (load-alias-register! register 'DATA)))))
 
 (define-rule predicate
   (TYPE-TEST (OBJECT->TYPE (REGISTER (? register))) (? type))
   (QUALIFIER (pseudo-register? register))
   (set-standard-branches! 'EQ)
   (let ((reference (move-to-temporary-register! register 'DATA)))
-    `((RO L L (& 8) ,reference)
-      ,(test-byte type reference))))
+    (LAP (RO L L (& 8) ,reference)
+        ,(test-byte type reference))))
 
 (define-rule predicate
   (UNASSIGNED-TEST (REGISTER (? register)))
   (set-standard-branches! 'EQ)
-  `(,(test-non-pointer (ucode-type unassigned) 0 (coerce->any register))))
+  (LAP ,(test-non-pointer (ucode-type unassigned) 0
+                         (coerce->any register))))
 
 (define-rule predicate
   (UNASSIGNED-TEST (OFFSET (REGISTER (? register)) (? offset)))
   (set-standard-branches! 'EQ)
-  `(,(test-non-pointer (ucode-type unassigned) 0
-                      (indirect-reference! register offset))))
+  (LAP ,(test-non-pointer (ucode-type unassigned) 0
+                         (indirect-reference! register offset))))
 \f
 (define (eq-test/constant*register constant register)
   (set-standard-branches! 'EQ)
   (if (non-pointer-object? constant)
-      `(,(test-non-pointer (primitive-type constant)
-                          (primitive-datum constant)
-                          (coerce->any register)))
-      `((CMP L
-            (@PCR ,(constant->label constant))
-            ,(coerce->machine-register register)))))
+      (LAP ,(test-non-pointer (primitive-type constant)
+                             (primitive-datum constant)
+                             (coerce->any register)))
+      (LAP (CMP L
+               (@PCR ,(constant->label constant))
+               ,(coerce->machine-register register)))))
 
 (define (eq-test/constant*memory constant memory-reference)
   (set-standard-branches! 'EQ)
   (if (non-pointer-object? constant)
-      `(,(test-non-pointer (primitive-type constant)
-                          (primitive-datum constant)
-                          memory-reference))
+      (LAP ,(test-non-pointer (primitive-type constant)
+                             (primitive-datum constant)
+                             memory-reference))
       (let ((temp (reference-temporary-register! false)))
-       `((MOVE L ,memory-reference ,temp)
-         (CMP L (@PCR ,(constant->label constant)) ,temp)))))
+       (LAP (MOVE/SIMPLE L
+                         ,memory-reference
+                         ,temp)
+            (CMP L
+                 (@PCR ,(constant->label constant))
+                 ,temp)))))
 
 (define (eq-test/register*register register-1 register-2)
   (set-standard-branches! 'EQ)
   (let ((finish
         (lambda (register-1 register-2)
-          `((CMP L
-                 ,(coerce->any register-2)
-                 ,(coerce->machine-register register-1))))))
+          (LAP (CMP L
+                    ,(coerce->any register-2)
+                    ,(coerce->machine-register register-1))))))
     (if (or (and (not (register-has-alias? register-1 'DATA))
                 (register-has-alias? register-2 'DATA))
            (and (not (register-has-alias? register-1 'ADDRESS))
@@ -111,15 +116,21 @@ MIT in each case. |#
 
 (define (eq-test/register*memory register memory-reference)
   (set-standard-branches! 'EQ)
-  `((CMP L ,memory-reference ,(coerce->machine-register register))))
+  (LAP (CMP L
+           ,memory-reference
+           ,(coerce->machine-register register))))
 
 (define (eq-test/memory*memory register-1 offset-1 register-2 offset-2)
   (set-standard-branches! 'EQ)
   (let ((temp (reference-temporary-register! false)))
     (let ((finish
           (lambda (register-1 offset-1 register-2 offset-2)
-            `((MOVE L ,(indirect-reference! register-1 offset-1) ,temp)
-              (CMP L ,(indirect-reference! register-2 offset-2) ,temp)))))
+            (LAP (MOVE/SIMPLE L
+                              ,(indirect-reference! register-1 offset-1)
+                              ,temp)
+                 (CMP L
+                      ,(indirect-reference! register-2 offset-2)
+                      ,temp)))))
       (if (or (and (not (register-has-alias? register-1 'ADDRESS))
                   (register-has-alias? register-2 'ADDRESS))
              (and (not (register-has-alias? register-1 'DATA))
@@ -145,11 +156,11 @@ MIT in each case. |#
 
 (define-rule predicate
   (EQ-TEST (CONSTANT (? constant)) (POST-INCREMENT (REGISTER 15) 1))
-  (eq-test/constant*memory constant '(@A+ 7)))
+  (eq-test/constant*memory constant (INST-EA (@A+ 7))))
 
 (define-rule predicate
   (EQ-TEST (POST-INCREMENT (REGISTER 15) 1) (CONSTANT (? constant)))
-  (eq-test/constant*memory constant '(@A+ 7)))
+  (eq-test/constant*memory constant (INST-EA (@A+ 7))))
 
 (define-rule predicate
   (EQ-TEST (REGISTER (? register-1)) (REGISTER (? register-2)))
@@ -170,14 +181,14 @@ MIT in each case. |#
 (define-rule predicate
   (EQ-TEST (POST-INCREMENT (REGISTER 15) 1) (REGISTER (? register)))
   (record-pop!)
-  (eq-test/register*memory register '(@A+ 7)))
+  (eq-test/register*memory register (INST-EA (@A+ 7))))
 
 (define-rule predicate
   (EQ-TEST (REGISTER (? register)) (POST-INCREMENT (REGISTER 15) 1))
   (record-pop!)
-  (eq-test/register*memory register '(@A+ 7)))
+  (eq-test/register*memory register (INST-EA (@A+ 7))))
 
 (define-rule predicate
   (EQ-TEST (OFFSET (REGISTER (? register-1)) (? offset-1))
           (OFFSET (REGISTER (? register-2)) (? offset-2)))
-  (eq-test/memory*memory register-1 offset-1 register-2 offset-2))
\ No newline at end of file
+  (eq-test/memory*memory register-1 offset-1register-2 offset-2))
index 13d2e9363125c3d4a79e5c242bd4df6ee1e14061..abe128efb341cbf8d33d5edf7a5078c21205e384 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/rules3.scm,v 1.1 1987/06/13 20:59:04 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/rules3.scm,v 1.1.1.1 1987/07/01 21:01:13 jinx Exp $
 
 Copyright (c) 1987 Massachusetts Institute of Technology
 
@@ -41,17 +41,17 @@ MIT in each case. |#
 (define-rule statement
   (INVOCATION:APPLY (? number-pushed) (? prefix) (? continuation))
   (disable-frame-pointer-offset!
-   `(,@(generate-invocation-prefix prefix '())
-     ,(load-dnw number-pushed 0)
-     (JMP ,entry:compiler-apply))))
+   (LAP ,@(generate-invocation-prefix prefix)
+       ,(load-dnw number-pushed 0)
+       (JMP ,entry:compiler-apply))))
 
 (define-rule statement
   (INVOCATION:JUMP (? n)
                   (APPLY-CLOSURE (? frame-size) (? receiver-offset))
                   (? continuation) (? label))
   (disable-frame-pointer-offset!
-   `(,@(clear-map!)
-     ,@(apply-closure-sequence frame-size receiver-offset label))))
+   (LAP ,@(clear-map!)
+       ,@(apply-closure-sequence frame-size receiver-offset label))))
 
 (define-rule statement
   (INVOCATION:JUMP (? n)
@@ -59,23 +59,23 @@ MIT in each case. |#
                                (? n-levels))
                   (? continuation) (? label))
   (disable-frame-pointer-offset!
-   `(,@(clear-map!)
-     ,@(apply-stack-sequence frame-size receiver-offset n-levels label))))
+   (LAP ,@(clear-map!)
+       ,@(apply-stack-sequence frame-size receiver-offset n-levels label))))
 
 (define-rule statement
   (INVOCATION:JUMP (? number-pushed) (? prefix) (? continuation) (? label))
   (QUALIFIER (not (memq (car prefix) '(APPLY-CLOSURE APPLY-STACK))))
   (disable-frame-pointer-offset!
-   `(,@(generate-invocation-prefix prefix '())
-     (BRA L (@PCR ,label)))))
+   (LAP ,@(generate-invocation-prefix prefix)
+       (BRA L (@PCR ,label)))))
 
 (define-rule statement
   (INVOCATION:LEXPR (? number-pushed) (? prefix) (? continuation)
                    (? label))
   (disable-frame-pointer-offset!
-   `(,@(generate-invocation-prefix prefix '())
-     ,(load-dnw number-pushed 0)
-     (BRA L (@PCR ,label)))))
+   (LAP ,@(generate-invocation-prefix prefix)
+       ,(load-dnw number-pushed 0)
+       (BRA L (@PCR ,label)))))
 \f
 (define-rule statement
   (INVOCATION:CACHE-REFERENCE (? frame-size) (? prefix) (? continuation)
@@ -83,11 +83,11 @@ MIT in each case. |#
   (disable-frame-pointer-offset!
    (let ((set-extension (expression->machine-register! extension a3)))
      (delete-dead-registers!)
-     `(,@set-extension
-       ,@(generate-invocation-prefix prefix (list a3))
-       ,(load-dnw frame-size 0)
-       (LEA (@PCR ,*block-start-label*) (A 1))
-       (JMP ,entry:compiler-cache-reference-apply)))))
+     (LAP ,@set-extension
+         ,@(generate-invocation-prefix prefix)
+         ,(load-dnw frame-size 0)
+         (LEA (@PCR ,*block-start-label*) (A 1))
+         (JMP ,entry:compiler-cache-reference-apply)))))
 
 (define-rule statement
   (INVOCATION:LOOKUP (? frame-size) (? prefix) (? continuation)
@@ -95,118 +95,132 @@ MIT in each case. |#
   (disable-frame-pointer-offset!
    (let ((set-environment (expression->machine-register! environment d4)))
      (delete-dead-registers!)
-     `(,@set-environment
-       ,@(generate-invocation-prefix prefix (list d4))
-       ,(load-constant name '(D 5))
-       ,(load-dnw frame-size 0)
-       (JMP ,entry:compiler-lookup-apply)))))
+     (LAP ,@set-environment
+         ,@(generate-invocation-prefix prefix)
+         ,(load-constant name (INST-EA (D 5)))
+         ,(load-dnw (1+ frame-size) 0)
+         (JMP ,entry:compiler-lookup-apply)))))
 
 (define-rule statement
   (INVOCATION:PRIMITIVE (? number-pushed) (? prefix) (? continuation)
                        (? primitive))
   (disable-frame-pointer-offset!
-   `(,@(generate-invocation-prefix prefix '())
-     ,@(if (eq? primitive compiled-error-procedure)
-          `(,(load-dnw (1+ number-pushed) 0)
-            (JMP ,entry:compiler-error))
-          `(,(load-dnw (primitive-datum primitive) 6)
-            (JMP ,entry:compiler-primitive-apply))))))
+   (LAP ,@(generate-invocation-prefix prefix)
+       ,@(if (eq? primitive compiled-error-procedure)
+             (LAP ,(load-dnw (1+ number-pushed) 0)
+                  (JMP ,entry:compiler-error))
+             (LAP ,(load-dnw (primitive-datum primitive) 6)
+                  (JMP ,entry:compiler-primitive-apply))))))
 
 (define-rule statement
   (RETURN)
   (disable-frame-pointer-offset!
-   `(,@(clear-map!)
-     (CLR B (@A 7))
-     (RTS))))
+   (LAP ,@(clear-map!)
+       (CLR B (@A 7))
+       (RTS))))
 \f
-(define (generate-invocation-prefix prefix needed-registers)
-  (let ((clear-map (clear-map!)))
-    (need-registers! needed-registers)
-    `(,@clear-map
-      ,@(case (car prefix)
-         ((NULL) '())
-         ((MOVE-FRAME-UP)
-          (apply generate-invocation-prefix:move-frame-up (cdr prefix)))
-         ((APPLY-CLOSURE)
-          (apply generate-invocation-prefix:apply-closure (cdr prefix)))
-         ((APPLY-STACK)
-          (apply generate-invocation-prefix:apply-stack (cdr prefix)))
-         (else
-          (error "bad prefix type" prefix))))))
+(define (generate-invocation-prefix prefix)
+  (LAP ,@(clear-map!)
+       ,@(case (car prefix)
+          ((NULL) (LAP))
+          ((MOVE-FRAME-UP)
+           (apply generate-invocation-prefix:move-frame-up (cdr prefix)))
+          ((APPLY-CLOSURE)
+           (apply generate-invocation-prefix:apply-closure (cdr prefix)))
+          ((APPLY-STACK)
+           (apply generate-invocation-prefix:apply-stack (cdr prefix)))
+          (else
+           (error "GENERATE-INVOCATION-PREFIX: bad prefix type" prefix)))))
 
 (define (generate-invocation-prefix:move-frame-up frame-size how-far)
-  (cond ((zero? how-far) '())
-       ((zero? frame-size)
-        (increment-anl 7 how-far))
+  (cond ((or (zero? frame-size) (zero? how-far))
+        (LAP))
        ((= frame-size 1)
-        `((MOVE L (@A+ 7) ,(offset-reference a7 (-1+ how-far)))
-          ,@(increment-anl 7 (-1+ how-far))))
+        (LAP (MOVE/SIMPLE L (@A+ 7) ,(offset-reference a7 (-1+ how-far)))
+             ,@(increment-anl 7 (-1+ how-far))))
        ((= frame-size 2)
         (if (= how-far 1)
-            `((MOVE L (@AO 7 4) (@AO 7 8))
-              (MOVE L (@A+ 7) (@A 7)))
-            (let ((i `(MOVE L (@A+ 7) ,(offset-reference a7 (-1+ how-far)))))
-              `(,i ,i ,@(increment-anl 7 (- how-far 2))))))
+            (LAP (MOVE/SIMPLE L (@AO 7 4) (@AO 7 8))
+                 (MOVE/SIMPLE L (@A+ 7) (@A 7)))
+            (let ((i
+                   (INST (MOVE/SIMPLE L
+                                      (@A+ 7)
+                                      ,(offset-reference a7 (-1+ how-far))))))
+              (LAP ,i
+                   ,i
+                   ,@(increment-anl 7 (- how-far 2))))))
        (else
         (let ((temp-0 (allocate-temporary-register! 'ADDRESS))
               (temp-1 (allocate-temporary-register! 'ADDRESS)))
-          `((LEA ,(offset-reference a7 frame-size)
-                 ,(register-reference temp-0))
-            (LEA ,(offset-reference a7 (+ frame-size how-far))
-                 ,(register-reference temp-1))
-            ,@(generate-n-times frame-size 5
-                                `(MOVE L
-                                       (@-A ,(- temp-0 8))
-                                       (@-A ,(- temp-1 8)))
-                (lambda (generator)
-                  (generator (allocate-temporary-register! 'DATA))))
-            (MOVE L ,(register-reference temp-1) (A 7)))))))
+          (LAP (LEA ,(offset-reference a7 frame-size)
+                    ,(register-reference temp-0))
+               (LEA ,(offset-reference a7 (+ frame-size how-far))
+                    ,(register-reference temp-1))
+           
+           ,@(generate-n-times
+              frame-size 5
+              (INST (MOVE/SIMPLE L
+                                 (@-A ,(- temp-0 8))
+                                 (@-A ,(- temp-1 8))))
+              (lambda (generator)
+                (generator (allocate-temporary-register! 'DATA))))
+           (MOVE/SIMPLE L ,(register-reference temp-1) (A 7)))))))
 
 (define (generate-invocation-prefix:apply-closure frame-size receiver-offset)
   (let ((label (generate-label)))
-    `(,@(apply-closure-sequence frame-size receiver-offset label)
-      (LABEL ,label))))
+    (LAP ,@(apply-closure-sequence frame-size receiver-offset label)
+        (LABEL ,label))))
 
 (define (generate-invocation-prefix:apply-stack frame-size receiver-offset
                                                n-levels)
   (let ((label (generate-label)))
-    `(,@(apply-stack-sequence frame-size receiver-offset n-levels label)
-      (LABEL ,label))))
+    (LAP ,@(apply-stack-sequence frame-size receiver-offset n-levels label)
+        (LABEL ,label))))
 \f
-;;; This is invoked by the top level of the LAP generator.
+;;; This is invoked by the top level of the LAP GENERATOR.
 
 (define generate/quotation-header
-  (let ((declare-constant
-        (lambda (entry)
-          `(SCHEME-OBJECT ,(cdr entry) ,(car entry)))))
+  (let ()
+    (define (declare-constants constants code)
+      (define (inner constants)
+       (if (null? constants)
+           code
+           (let ((entry (car constants)))
+             (LAP (SCHEME-OBJECT ,(cdr entry) ,(car entry))
+                  ,@(inner (cdr constants))))))
+      (inner constants))
+
     (lambda (block-label constants references uuo-links)
-      `(,@(map declare-constant references)
-       ,@(map declare-constant uuo-links)
-       ,@(map declare-constant constants)
-       ,@(if (or (not (null? references))
-                 (not (null? uuo-links)))
-             `(,@(let ((environment-label (allocate-constant-label)))
-                   `((SCHEME-OBJECT ,environment-label ENVIRONMENT)
-                     (LEA (@PCR ,environment-label) (A 0))))
-               (MOVE L ,reg:environment (@A 0))
-               (LEA (@PCR ,block-label) (A 0))
-               ,@(if (null? references)
-                     '()
-                     `((LEA (@PCR ,(cdar references)) (A 1))
-                       ,@(if (null? (cdr references))
-                             `((JSR ,entry:compiler-cache-variable))
-                             `(,(load-dnw (length references) 1)
-                               (JSR ,entry:compiler-cache-variable-multiple)))
-                       ,@(make-external-label (generate-label))))
-               ,@(if (null? uuo-links)
-                     '()
-                     `((LEA (@PCR ,(cdar uuo-links)) (A 1))
-                       ,@(if (null? (cdr uuo-links))
-                             `((JSR ,entry:compiler-uuo-link))
-                             `(,(load-dnw (length uuo-links) 1)
-                               (JSR ,entry:compiler-uuo-link-multiple)))
-                       ,@(make-external-label (generate-label)))))
-             '())))))
+      (declare-constants references
+       (declare-constants uuo-links
+       (declare-constants constants
+        (if (or (not (null? references))
+                (not (null? uuo-links)))
+            (LAP ,@(let ((environment-label (allocate-constant-label)))
+                     (LAP
+                      (SCHEME-OBJECT ,environment-label ENVIRONMENT)
+                      (LEA (@PCR ,environment-label) (A 0))))
+                 (MOVE/SIMPLE L ,reg:environment (@A 0))
+                 (LEA (@PCR ,block-label) (A 0))
+                 ,@(if (null? references)
+                       (LAP)
+                       (LAP
+                        (LEA (@PCR ,(cdar references)) (A 1))
+                        ,@(if (null? (cdr references))
+                              (LAP (JSR ,entry:compiler-cache-variable))
+                              (LAP ,(load-dnw (length references) 1)
+                                   (JSR 
+                                    ,entry:compiler-cache-variable-multiple)))
+                        ,@(make-external-label (generate-label))))
+                 ,@(if (null? uuo-links)
+                       (LAP)
+                       (LAP (LEA (@PCR ,(cdar uuo-links)) (A 1))
+                            ,@(if (null? (cdr uuo-links))
+                                  (LAP (JSR ,entry:compiler-uuo-link))
+                                  (LAP ,(load-dnw (length uuo-links) 1)
+                                       (JSR ,entry:compiler-uuo-link-multiple)))
+                            ,@(make-external-label (generate-label)))))
+            (LAP))))))))
 \f
 ;;;; Procedure/Continuation Entries
 
@@ -223,9 +237,9 @@ MIT in each case. |#
   (PROCEDURE-HEAP-CHECK (? label))
   (disable-frame-pointer-offset!
    (let ((gc-label (generate-label)))
-     `(,@(procedure-header (label->procedure label) gc-label)
-       (CMP L ,reg:compiled-memtop (A 5))
-       (B GE S (@PCR ,gc-label))))))
+     (LAP ,@(procedure-header (label->procedure label) gc-label)
+         (CMP L ,reg:compiled-memtop (A 5))
+         (B GE S (@PCR ,gc-label))))))
 
 ;;; Note: do not change the MOVE.W in the setup-lexpr call to a MOVEQ.
 ;;; The setup-lexpr code assumes a fixed calling sequence to compute
@@ -237,58 +251,58 @@ MIT in each case. |#
   (SETUP-LEXPR (? label))
   (disable-frame-pointer-offset!
    (let ((procedure (label->procedure label)))
-     `(,@(procedure-header procedure false)
-       (MOVE W
-            (& ,(+ (procedure-required procedure)
-                   (procedure-optional procedure)
-                   (if (procedure/closure? procedure) 1 0)))
-            (D 1))
-       (MOVEQ (& ,(if (procedure-rest procedure) 1 0)) (D 2))
-       (JSR , entry:compiler-setup-lexpr)))))
+     (LAP ,@(procedure-header procedure false)
+         (MOVE/SIMPLE W
+                      (& ,(+ (procedure-required procedure)
+                             (procedure-optional procedure)
+                             (if (procedure/closure? procedure) 1 0)))
+                      (D 1))
+         (MOVEQ (& ,(if (procedure-rest procedure) 1 0)) (D 2))
+         (JSR ,entry:compiler-setup-lexpr)))))
 
 (define-rule statement
   (CONTINUATION-HEAP-CHECK (? internal-label))
   (enable-frame-pointer-offset!
    (continuation-frame-pointer-offset (label->continuation internal-label)))
   (let ((gc-label (generate-label)))
-    `((LABEL ,gc-label)
-      (JSR ,entry:compiler-interrupt-continuation)
-      ,@(make-external-label internal-label)
-      (CMP L ,reg:compiled-memtop (A 5))
-      (B GE S (@PCR ,gc-label)))))
+    (LAP (LABEL ,gc-label)
+        (JSR ,entry:compiler-interrupt-continuation)
+        ,@(make-external-label internal-label)
+        (CMP L ,reg:compiled-memtop (A 5))
+        (B GE S (@PCR ,gc-label)))))
 \f
 (define (procedure-header procedure gc-label)
   (let ((internal-label (procedure-label procedure)))
-    (append! (if (procedure/closure? procedure)
-                (let ((required (1+ (procedure-required procedure)))
-                      (optional (procedure-optional procedure))
-                      (label (procedure-external-label procedure)))
-                  (if (and (procedure-rest procedure)
-                           (zero? required))
-                      (begin (set-procedure-external-label! procedure
-                                                            internal-label)
-                             `((ENTRY-POINT ,internal-label)))
-                      `((ENTRY-POINT ,label)
-                        ,@(make-external-label label)
-                        ,(test-dnw required 0)
-                        ,@(cond ((procedure-rest procedure)
-                                 `((B GE S (@PCR ,internal-label))))
-                                ((zero? optional)
-                                 `((B EQ S (@PCR ,internal-label))))
-                                (else
-                                 (let ((wna-label (generate-label)))
-                                   `((B LT S (@PCR ,wna-label))
-                                     ,(test-dnw (+ required optional) 0)
-                                     (B LE S (@PCR ,internal-label))
-                                     (LABEL ,wna-label)))))
-                        (JMP ,entry:compiler-wrong-number-of-arguments))))
-                '())
-            (if gc-label
-                `((LABEL ,gc-label)
-                  (JSR ,entry:compiler-interrupt-procedure))
-                '())
-            `(,@(make-external-label internal-label)))))
+    (LAP ,@(if (procedure/closure? procedure)
+              (let ((required (1+ (procedure-required procedure)))
+                    (optional (procedure-optional procedure))
+                    (label (procedure-external-label procedure)))
+                (if (and (procedure-rest procedure)
+                         (zero? required))
+                    (begin (set-procedure-external-label! procedure
+                                                          internal-label)
+                           (LAP (ENTRY-POINT ,internal-label)))
+                    (LAP (ENTRY-POINT ,label)
+                         ,@(make-external-label label)
+                         ,(test-dnw required 0)
+                         ,@(cond ((procedure-rest procedure)
+                                  (LAP (B GE S (@PCR ,internal-label))))
+                                 ((zero? optional)
+                                  (LAP (B EQ S (@PCR ,internal-label))))
+                                 (else
+                                  (let ((wna-label (generate-label)))
+                                    (LAP (B LT S (@PCR ,wna-label))
+                                         ,(test-dnw (+ required optional) 0)
+                                         (B LE S (@PCR ,internal-label))
+                                         (LABEL ,wna-label)))))
+                         (JMP ,entry:compiler-wrong-number-of-arguments))))
+              (LAP))
+        ,@(if gc-label
+              (LAP (LABEL ,gc-label)
+                   (JSR ,entry:compiler-interrupt-procedure))
+              (LAP))
+        ,@(make-external-label internal-label))))
 
 (define (make-external-label label)
-  `((DC W (- ,label ,*block-start-label*))
-    (LABEL ,label)))
\ No newline at end of file
+  (LAP (DC W (- ,label ,*block-start-label*))
+       (LABEL ,label)))
index 76e98095a7d71bc6db9a66e3c934b00ad1c36bd1..347734dd96868ca64e2390893b09dc9b72d313a8 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/rules4.scm,v 1.1 1987/06/13 20:59:21 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/rules4.scm,v 1.1.1.1 1987/07/01 21:02:12 jinx Exp $
 
 Copyright (c) 1987 Massachusetts Institute of Technology
 
@@ -58,31 +58,34 @@ MIT in each case. |#
 (define (lookup-call entry environment name)
   (let ((set-environment (expression->machine-register! environment a0)))
     (let ((clear-map (clear-map!)))
-      `(,@set-environment
-       ,@clear-map
-       ,(load-constant name '(A 1))
-       (JSR ,entry)
-       ,@(make-external-label (generate-label))))))
+      (LAP ,@set-environment
+          ,@clear-map
+          ,(load-constant name (INST-EA (A 1)))
+          (JSR ,entry)
+          ,@(make-external-label (generate-label))))))
 
 (define-rule statement
   (INTERPRETER-CALL:ENCLOSE (? number-pushed))
-  (decrement-frame-pointer-offset! number-pushed
-    `((MOVE L (A 5) ,reg:enclose-result)
-      (MOVE B (& ,(ucode-type vector)) ,reg:enclose-result)
-      ,(load-non-pointer (ucode-type manifest-vector) number-pushed
-                        '(@A+ 5))
-      ,@(generate-n-times number-pushed 5 '(MOVE L (@A+ 7) (@A+ 5))
-         (lambda (generator)
-           (generator (allocate-temporary-register! 'DATA)))))
-#| Alternate sequence which minimizes code size.
+  (decrement-frame-pointer-offset!
+   number-pushed
+   (LAP (MOVE/SIMPLE L (A 5) ,reg:enclose-result)
+       (MOVE/SIMPLE B (& ,(ucode-type vector)) ,reg:enclose-result)
+       ,(load-non-pointer (ucode-type manifest-vector) number-pushed
+                          (INST-EA (@A+ 5)))
+     
+       ,@(generate-n-times number-pushed 5
+                           (INST (MOVE/SIMPLE L (@A+ 7) (@A+ 5)))
+                           (lambda (generator)
+                             (generator (allocate-temporary-register! 'DATA)))))
+   #| Alternate sequence which minimizes code size. ;
    DO NOT USE THIS!  The `clear-registers!' call does not distinguish between
    registers containing objects and registers containing unboxed things, and
    as a result can write unboxed stuff to memory.
-    `(,@(clear-registers! a0 a1 d0)
-      (MOVE W (& ,number-pushed) (D 0))
-      (JSR ,entry:compiler-enclose))
-|#
-    ))
+   (LAP ,@(clear-registers! a0 a1 d0)
+       (MOVE/SIMPLE W (& ,number-pushed) (D 0))
+       (JSR ,entry:compiler-enclose))
+   |#
+   ))
 \f
 (define-rule statement
   (INTERPRETER-CALL:DEFINE (? environment) (? name) (? value))
@@ -98,12 +101,12 @@ MIT in each case. |#
   (let ((set-environment (expression->machine-register! environment a0)))
     (let ((set-value (expression->machine-register! value a2)))
       (let ((clear-map (clear-map!)))
-       `(,@set-environment
-         ,@set-value
-         ,@clear-map
-         ,(load-constant name '(A 1))
-         (JSR ,entry)
-         ,@(make-external-label (generate-label)))))))
+       (LAP ,@set-environment
+            ,@set-value
+            ,@clear-map
+            ,(load-constant name (INST-EA (A 1)))
+            (JSR ,entry)
+            ,@(make-external-label (generate-label)))))))
 
 (define-rule statement
   (INTERPRETER-CALL:DEFINE (? environment) (? name)
@@ -123,25 +126,25 @@ MIT in each case. |#
   (let ((set-environment (expression->machine-register! environment a0)))
     (let ((datum (coerce->any datum)))
       (let ((clear-map (clear-map!)))
-       `(,@set-environment
-         (MOVE L ,datum ,reg:temp)
-         (MOVE B (& ,type) ,reg:temp)
-         ,@clear-map
-         (MOVE L ,reg:temp (A 2))
-         ,(load-constant name '(A 1))
-         (JSR ,entry)
-         ,@(make-external-label (generate-label)))))))
+       (LAP ,@set-environment
+            (MOVE/SIMPLE L ,datum ,reg:temp)
+            (MOVE/SIMPLE B (& ,type) ,reg:temp)
+            ,@clear-map
+            (MOVE/SIMPLE L ,reg:temp (A 2))
+            ,(load-constant name (INST-EA (A 1)))
+            (JSR ,entry)
+            ,@(make-external-label (generate-label)))))))
 \f
 (define-rule statement
   (INTERPRETER-CALL:CACHE-REFERENCE (? extension) (? safe?))
   (let ((set-extension (expression->machine-register! extension a0)))
     (let ((clear-map (clear-map!)))
-      `(,@set-extension
-       ,@clear-map
-       (JSR ,(if safe?
-                 entry:compiler-safe-reference-trap
-                 entry:compiler-reference-trap))
-       ,@(make-external-label (generate-label))))))
+      (LAP ,@set-extension
+          ,@clear-map
+          (JSR ,(if safe?
+                    entry:compiler-safe-reference-trap
+                    entry:compiler-reference-trap))
+          ,@(make-external-label (generate-label))))))
 
 (define-rule statement
   (INTERPRETER-CALL:CACHE-ASSIGNMENT (? extension) (? value))
@@ -149,11 +152,11 @@ MIT in each case. |#
   (let ((set-extension (expression->machine-register! extension a0)))
     (let ((set-value (expression->machine-register! value a1)))
       (let ((clear-map (clear-map!)))
-       `(,@set-extension
-         ,@set-value
-         ,@clear-map
-         (JSR ,entry:compiler-assignment-trap)
-         ,@(make-external-label (generate-label)))))))
+       (LAP ,@set-extension
+            ,@set-value
+            ,@clear-map
+            (JSR ,entry:compiler-assignment-trap)
+            ,@(make-external-label (generate-label)))))))
 
 (define-rule statement
   (INTERPRETER-CALL:CACHE-ASSIGNMENT (? extension)
@@ -162,50 +165,55 @@ MIT in each case. |#
   (let ((set-extension (expression->machine-register! extension a0)))
     (let ((datum (coerce->any datum)))
       (let ((clear-map (clear-map!)))
-       `(,@set-extension
-         (MOVE L ,datum ,reg:temp)
-         (MOVE B (& ,type) ,reg:temp)
-         ,@clear-map
-         (MOVE L ,reg:temp (A 1))
-         (JSR ,entry:compiler-assignment-trap)
-         ,@(make-external-label (generate-label)))))))
+       (LAP ,@set-extension
+            (MOVE/SIMPLE L ,datum ,reg:temp)
+            (MOVE/SIMPLE B (& ,type) ,reg:temp)
+            ,@clear-map
+            (MOVE/SIMPLE L ,reg:temp (A 1))
+            (JSR ,entry:compiler-assignment-trap)
+            ,@(make-external-label (generate-label)))))))
 \f
 ;;;; Poppers
 
 (define-rule statement
   (MESSAGE-RECEIVER:CLOSURE (? frame-size))
   (record-push!
-   `((MOVE L (& ,(* frame-size 4)) (@-A 7)))))
+   (LAP (MOVE/SIMPLE L (& ,(* frame-size 4)) (@-A 7)))))
 
 (define-rule statement
   (MESSAGE-RECEIVER:STACK (? frame-size))
   (record-push!
-   `((MOVE L (& ,(+ #x00100000 (* frame-size 4))) (@-A 7)))))
+   (LAP (MOVE/SIMPLE L
+                    (& ,(+ #x00100000 (* frame-size 4)))
+                    (@-A 7)))))
 
 (define-rule statement
   (MESSAGE-RECEIVER:SUBPROBLEM (? label))
   (record-continuation-frame-pointer-offset! label)
-  (increment-frame-pointer-offset! 2
-    `((PEA (@PCR ,label))
-      (MOVE B (& ,type-code:return-address) (@A 7))
-      (MOVE L (& #x00200000) (@-A 7)))))
+  (increment-frame-pointer-offset!
+   2
+   (LAP (PEA (@PCR ,label))
+       (MOVE/SIMPLE B (& ,type-code:return-address) (@A 7))
+       (MOVE/SIMPLE L (& #x00200000) (@-A 7)))))
 
 (define (apply-closure-sequence frame-size receiver-offset label)
-  `(,(load-dnw frame-size 1)
-    (LEA (@AO 7 ,(* (+ receiver-offset (frame-pointer-offset)) 4)) (A 0))
-    (LEA (@PCR ,label) (A 1))
-    (JMP ,popper:apply-closure)))
+  (LAP ,(load-dnw frame-size 1)
+       (LEA (@AO 7 ,(* (+ receiver-offset (frame-pointer-offset)) 4))
+           (A 0))
+       (LEA (@PCR ,label) (A 1))
+       (JMP ,popper:apply-closure)))
 
 (define (apply-stack-sequence frame-size receiver-offset n-levels label)
-  `((MOVEQ (& ,n-levels) (D 0))
-    ,(load-dnw frame-size 1)
-    (LEA (@AO 7 ,(* (+ receiver-offset (frame-pointer-offset)) 4)) (A 0))
-    (LEA (@PCR ,label) (A 1))
-    (JMP ,popper:apply-stack)))
+  (LAP (MOVEQ (& ,n-levels) (D 0))
+       ,(load-dnw frame-size 1)
+       (LEA (@AO 7 ,(* (+ receiver-offset (frame-pointer-offset)) 4))
+           (A 0))
+       (LEA (@PCR ,label) (A 1))
+       (JMP ,popper:apply-stack)))
 
 (define-rule statement
   (MESSAGE-SENDER:VALUE (? receiver-offset))
   (disable-frame-pointer-offset!
-   `(,@(clear-map!)
-     ,@(increment-anl 7 (+ receiver-offset (frame-pointer-offset)))
-     (JMP ,popper:value))))
\ No newline at end of file
+   (LAP ,@(clear-map!)
+       ,@(increment-anl 7 (+ receiver-offset (frame-pointer-offset)))
+       (JMP ,popper:value))))
\ No newline at end of file