home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 June / SIMTEL_0692.cdr / msdos / aijournl / ai_feb87.arc / COMPIL.FEB < prev    next >
Text File  |  1987-01-29  |  5KB  |  170 lines

  1.  
  2.  
  3.                     Compiling LISP Procedures
  4.                        by Bruce A. Pumplin
  5.                     February 1987 LISP issue
  6.                        Tables and Listings
  7.  
  8.  
  9.  
  10.  
  11. Table 1.
  12.  
  13.  
  14.                MOVEI   Ri   CONST      Load register i with a constant
  15.                                          ( the load immediate instruction )
  16.  
  17.                PUSH    SP   Ri         Push the contents of Ri onto the stack
  18.  
  19.                POP     SP   Ri         Pop the top of the stack into Ri
  20.  
  21.                PUSHJ   SP   LOC        The subroutine entry instruction:
  22.                                          Push the current contents of
  23.                                          the program counter onto the
  24.                                          stack and branch to memory loc-
  25.                                          ation LOC
  26.  
  27.                CALL    LOC             The same as PUSHJ  SP LOC
  28.  
  29.                POPJ    SP              The subroutine return instruction:
  30.                                          Pop the top of the stack into
  31.                                          the program counter
  32.  
  33.                MOVE    Ri   LOC        Load Ri with the contents of LOC
  34.  
  35.                MOVE    Ri   Rj         Load Ri with the contents of Rj
  36.  
  37.                MOVEM   Ri   LOC        Store the contents of Ri in memory
  38.                                          location LOC
  39.  
  40.                JUMP    LOC             Unconditional branch to memory location
  41.                                          LOC
  42.  
  43.                JUMPF   Ri   LOC        Branch to memory location LOC if Ri
  44.                                          contains the constant False
  45.  
  46.                JUMPT   Ri   LOC        Branch to memory location LOC if Ri
  47.                                          does not contain the constant False
  48.                                          (Note: anything other than False is
  49.                                           assumed to be True)
  50.  
  51.  
  52.  
  53. Listing 1.
  54.  
  55.  
  56.             ;;;   THE PRIMARY PROCEDURES
  57.  
  58.  
  59.       (DEFUN COMPEXP (EXP)
  60.         (COND ((ISCONST EXP)
  61.                (LIST (MKSEND 1 EXP)))
  62.               (T (COMPAPPLY (FUNC EXP)
  63.                             (COMPLIS (ARGLIST EXP))
  64.                             (LENGTH (ARGLIST EXP))))
  65.       ) )
  66.  
  67.  
  68.       (DEFUN COMPLIS (U)
  69.         (COND ((NULL U) '())
  70.               ((NULL (REST U))
  71.                (COMPEXP (FIRST U)))
  72.               (T (APPEND-3 (COMPEXP (FIRST U))
  73.                            (LIST (MKALLOC 1))
  74.                            (COMPLIS (REST U))))
  75.       ) )
  76.  
  77.  
  78.       (DEFUN COMPAPPLY (FN VALS N)
  79.         (APPEND-3 VALS
  80.                   (MKLINK N)
  81.                   (LIST (MKCALL FN))
  82.       ) )
  83.  
  84.  
  85.  
  86. Listing 2.
  87.  
  88.             ;;;   THE RECOGNIZER PROCEDURE
  89.  
  90.  
  91.       (DEFUN ISCONST (X)
  92.         (OR (NUMBERP X)
  93.             (EQ X T)
  94.             (EQ X NIL)
  95.             (AND (NOT (ATOM X))
  96.                  (EQ (FIRST X) 'QUOTE))
  97.       ) )
  98.  
  99.  
  100.             ;;;   THE SELECTOR PROCEDURES
  101.  
  102.  
  103.       (DEFUN FUNC (X) (FIRST X))
  104.       (DEFUN ARGLIST (X) (REST X))
  105.  
  106.  
  107.             ;;;   THE CONSTRUCTOR PROCEDURES
  108.  
  109.       (DEFUN MKSEND (DEST VAL) (LIST 'MOVEI DEST VAL))
  110.       (DEFUN MKALLOC (DEST) (LIST 'PUSH 'SP DEST))
  111.       (DEFUN MKCALL (FN) (LIST 'CALL FN))
  112.       (DEFUN MKLINK (N)
  113.         (COND ((= N 1) '())
  114.               (T (CONCAT (MKMOVE N 1)
  115.                          (MKLINK1 (SUB1 N))))
  116.       ) )
  117.       (DEFUN MKLINK1 (N)
  118.         (COND ((ZEROP N) '())
  119.               (T (CONCAT (MKPOP N)
  120.                          (MKLINK1 (SUB1 N))))
  121.       ) )
  122.       (DEFUN MKPOP (N) (LIST 'POP 'SP N))
  123.       (DEFUN MKMOVE (DEST VAL) (LIST 'MOVE DEST VAL))
  124.  
  125.  
  126. Listing 3.
  127.  
  128.             ;;;   THE AUXILIARY PROCEDURES
  129.  
  130.  
  131.       (DEFUN FIRST (X) (CAR X))
  132.       (DEFUN REST (X) (CDR X))
  133.       (DEFUN CONCAT (ELEMENT SEQUENCE)
  134.         (COND ((LISTP SEQUENCE)
  135.                (CONS ELEMENT SEQUENCE))
  136.               (T '())
  137.       ) )
  138.  
  139.       (DEFUN APPEND-3 (L1 L2 L3)
  140.         (APPEND L1 (APPEND L2 L3))
  141.       )
  142.  
  143.       (DEFUN LISP (X)
  144.         (COND ((CONSP X) T)
  145.               ((NULL X) T)
  146.               (T NIL)
  147.       ) )
  148.  
  149.  
  150.  
  151. Listing 4.
  152.  
  153.               STEP   INSTRUCTION           R1      R2     STACK  (Top...Bottom)
  154.               -----------------------------------------------------------------
  155.  
  156.                 0                          ??      ??     ---
  157.                 1    (MOVEI 1 (QUOTE A))   A       ??     ---
  158.                 2    (CALL G)              A              Return-Address
  159.                                            (G A)   ??     ---
  160.                 3    (PUSH SP 1)           (G A)   ??     (G A)
  161.                 4    (MOVEI 1 (QUOTE B))   B       ??     (G A)
  162.                 5    (CALL H)              B       ??     Return-Address  (G A)
  163.                                            (H B)   ??     (G A)
  164.                 6    (MOVE 2 1)            (H B)   (H B)  (G A)
  165.                 7    (POP SP 1)            (G A)   (H B)  ---
  166.                 8    (CALL F)              (G A)   (H B)  Return-Address
  167.                                            (F  )   ??     ---
  168.  
  169.     8    (CALL F)              (G A)   (H B)  Return-Address
  170.