Annotation of 43BSDTahoe/ucb/lisp/liszt/io.l, revision 1.1

1.1     ! root        1: (include-if (null (get 'chead 'version)) "../chead.l")
        !             2: (Liszt-file io
        !             3:    "$Header: io.l,v 1.17 87/12/15 17:03:20 sklower Exp $")
        !             4: 
        !             5: ;;; ----       i o                             input output
        !             6: ;;;
        !             7: ;;;                            -[Fri Sep  2 21:37:05 1983 by layer]-
        !             8: 
        !             9: 
        !            10: ;--- d-prelude :: emit code common to beginning of all functions
        !            11: ;
        !            12: (defun d-prelude nil
        !            13:    (let ((loada-op #+(or for-vax for-tahoe) 'movab #+for-68k 'lea)
        !            14:         (sub2-op  #+(or for-vax for-tahoe) 'subl2 #+for-68k 'subl)
        !            15:         (add2-op  #+(or for-vax for-tahoe) 'addl2 #+for-68k 'addl)
        !            16:         (temp-reg #+(or for-vax for-tahoe) '#.fixnum-reg #+for-68k 'a5))
        !            17:        #+for-68k (setq g-stackspace (d-genlab) g-masklab (d-genlab))
        !            18:        (if g-flocal
        !            19:           then #+for-tahoe (e-write2 '".word" '0x0)
        !            20:                (C-push '#.olbot-reg)
        !            21:                (e-write3 loada-op
        !            22:                          `(,(* -4 g-currentargs) #.np-reg) '#.olbot-reg)
        !            23:                (e-writel g-topsym)
        !            24:           else #+(or for-vax for-tahoe) (e-write2 '".word" '0x5c0)
        !            25:                #+for-68k
        !            26:                (progn
        !            27:                    (e-write3 'link 'a6 (concat "#-" g-stackspace))
        !            28:                    (e-write2 'tstb '(-132 sp))
        !            29:                    (e-write3 'moveml `($ ,g-masklab)
        !            30:                              (concat "a6@(-" g-stackspace ")"))
        !            31:                    (e-move '#.Nilatom '#.nil-reg))
        !            32:                (if fl-profile
        !            33:                    then (e-write3 loada-op 'mcnts
        !            34:                                   #+(or for-vax for-tahoe) 'r0 #+for-68k 'a0)
        !            35:                         (e-quick-call 'mcount))
        !            36:                (e-write3 loada-op 'linker '#.bind-reg)
        !            37:                (if (eq g-ftype 'lexpr)
        !            38:                    then ; Here is the method:
        !            39:                         ;  We push the number of arguments, nargs,
        !            40:                         ; on the name stack twice, setting olbot-reg
        !            41:                         ; to point to the second one, so that the user
        !            42:                         ; has a copy that he can set, and we have
        !            43:                         ; one that we can use for address calcs.
        !            44:                         ;  So, the stack will look like this, after
        !            45:                         ; the setup:
        !            46:                         ;np    ->
        !            47:                         ;olbot -> nargs (II)
        !            48:                         ;      -> nargs (I)
        !            49:                         ;      -> (arg nargs)
        !            50:                         ;      -> (arg nargs-1)
        !            51:                         ;...
        !            52:                         ;      -> (arg 1)
        !            53:                         ;
        !            54:                         (if (null $global-reg$)
        !            55:                             then (e-move '#.np-sym '#.np-reg))
        !            56:                         (e-writel g-topsym)
        !            57:                         (e-move '#.np-reg temp-reg)
        !            58:                         (e-write3 sub2-op
        !            59:                                   (if $global-reg$
        !            60:                                       then '#.lbot-reg
        !            61:                                       else '#.lbot-sym) temp-reg)
        !            62:                         (e-write3 add2-op (e-cvt '(fixnum 0)) temp-reg)
        !            63:                         (L-push temp-reg)
        !            64:                         (e-move '#.np-reg '#.olbot-reg)
        !            65:                         (L-push temp-reg)
        !            66:                    else ;   Set up old lbot register, base reg for variable
        !            67:                         ; references, and make sure the np points where
        !            68:                         ; it should since the caller might
        !            69:                         ; have given too few or too many args.
        !            70:                         (e-move
        !            71:                                   (if $global-reg$
        !            72:                                       then '#.lbot-reg
        !            73:                                       else '#.lbot-sym)
        !            74:                                   '#.olbot-reg)
        !            75:                         #+for-68k
        !            76:                         (e-write3 loada-op
        !            77:                                   `(,(* 4 g-currentargs) #.olbot-reg)
        !            78:                                   '#.np-reg)
        !            79:                         (e-writel g-topsym)))))
        !            80: 
        !            81: ;--- d-fini :: emit code  at end of function
        !            82: ;
        !            83: (defun d-fini nil
        !            84:    (if g-flocal
        !            85:        then (C-pop '#.olbot-reg)
        !            86:            (e-write1 #+for-vax 'rsb #+for-tahoe 'ret #+for-68k 'rts)
        !            87:        else #+for-68k
        !            88:            (progn
        !            89:                (e-write3 'moveml (concat "a6@(-" g-stackspace ")")
        !            90:                          `($ ,g-masklab))
        !            91:                (e-write2 'unlk 'a6))
        !            92:            (e-return)))
        !            93: 
        !            94: ;--- d-bindtab :: emit binder table when all functions compiled
        !            95: ;
        !            96: (defun d-bindtab nil
        !            97:   (setq g-skipcode nil)          ; make sure this isnt ignored 
        !            98:   (e-writel "bind_org")
        !            99:   #+(or for-vax for-tahoe)
        !           100:   (progn
        !           101:       (e-write2 ".set linker_size," (length g-lits))
        !           102:       (e-write2 ".set trans_size," (length g-tran)))
        !           103:   #+for-68k
        !           104:   (progn
        !           105:       (e-write2 "linker_size = " (length g-lits))
        !           106:       (e-write2 "trans_size = " (length g-tran)))
        !           107:   (do ((ll (setq g-funcs (nreverse g-funcs)) (cdr ll)))
        !           108:       ((null ll))
        !           109:       (if (memq (caar ll) '(lambda nlambda macro eval))
        !           110:          then (e-write2 '".long"
        !           111:                         (cdr (assoc (caar ll)
        !           112:                                     '((lambda . 0) (nlambda . 1)
        !           113:                                       (macro . 2) (eval . 99)))))
        !           114:          else (comp-err " bad type in lit list " (car ll))))
        !           115:   
        !           116:   (e-write1 ".long -1")
        !           117:   (e-writel "lit_org")
        !           118:   (d-asciiout (nreverse g-lits))
        !           119:   (if g-tran then (d-asciiout (nreverse g-tran)))
        !           120:   (d-asciiout (mapcar '(lambda (x) (if (eq (car x) 'eval)
        !           121:                                       then (cadr x)
        !           122:                                       else (caddr x)))
        !           123:                      g-funcs))
        !           124:   (e-writel "lit_end"))
        !           125: 
        !           126: ;--- d-asciiout :: print a list of asciz strings
        !           127: ;
        !           128: (defun d-asciiout (args)
        !           129:        (do ((lits args (cdr lits))
        !           130:            (form))
        !           131:           ((null lits))
        !           132:           (setq form (explode (car lits))
        !           133:                 formsiz (length form))
        !           134:           (do ((remsiz formsiz)
        !           135:                (curform form)
        !           136:                (thissiz))
        !           137:               ((zerop remsiz))
        !           138:               (if (greaterp remsiz 60) then (sfilewrite '".ascii \"")
        !           139:                   else (sfilewrite '".asciz \""))
        !           140:               (setq thissiz (min 60 remsiz))
        !           141:               (do ((count thissiz (1- count)))
        !           142:                   ((zerop count)
        !           143:                    (sfilewrite (concat '\" (ascii 10)))
        !           144:                    (setq remsiz (difference remsiz thissiz)))
        !           145:                   (if (eq '#.ch-newline (car curform))
        !           146:                       then (sfilewrite '\\012)
        !           147:                    else (if (or (eq '\\ (car curform))
        !           148:                                 (eq '\" (car curform)))
        !           149:                             then (sfilewrite '\\))
        !           150:                         (sfilewrite (car curform)))
        !           151:                   (setq curform (cdr curform))))))
        !           152: 
        !           153: ;--- d-autorunhead
        !           154: ;
        !           155: ; Here is the C program to generate the assembly language:
        !           156: ;      (after some cleaning up)
        !           157: ;
        !           158: ;main(argc,argv,arge)
        !           159: ;register char *argv[];
        !           160: ;register char **arge;
        !           161: ;{
        !           162: ;      *--argv = "-f";
        !           163: ;      *--argv = "/usr/ucb/lisp";
        !           164: ;      execve("/usr/ucb/lisp",argv,arge);
        !           165: ;      exit(0);
        !           166: ;}
        !           167: ;
        !           168: (defun d-printautorun nil
        !           169:    (let ((readtable (makereadtable t)) ; in raw readtable
        !           170:         tport ar-file)
        !           171:       (setsyntax #/; 'vsplicing-macro 'zapline)
        !           172:       (setq ar-file (concat lisp-library-directory
        !           173:                            #+for-vax "/autorun/vax"
        !           174:                            #+for-tahoe "/autorun/tahoe"
        !           175:                            #+for-68k "/autorun/68k"))
        !           176:       (if (null (errset (setq tport (infile ar-file))))
        !           177:         then (comp-err "Can't open autorun header file " ar-file))
        !           178:       (do ((x (read tport '<eof>) (read tport '<eof>)))
        !           179:          ((eq '<eof> x) (close tport))
        !           180:          (sfilewrite x))))
        !           181: 
        !           182: (defun e-cvt (arg)
        !           183:    (if     (eq 'reg arg) then #+(or for-vax for-tahoe) 'r0 #+for-68k 'd0
        !           184:     elseif (eq 'areg arg) then #+(or for-vax for-tahoe) 'r0 #+for-68k 'a0
        !           185:     elseif (eq 'Nil arg) then #+(or for-vax for-tahoe) '($ 0)
        !           186:                              #+for-68k '#.nil-reg
        !           187:     elseif (eq 'T arg)
        !           188:        then (if g-trueloc
        !           189:                thenret
        !           190:                else (setq g-trueloc (e-cvt (d-loclit t nil))))
        !           191:     elseif (eq 'stack arg) then '(+ #.np-reg)
        !           192:     elseif (eq 'unstack arg) then (progn #+for-tahoe (e-sub '($ 4) '#.np-reg)
        !           193:                                         '(- #.np-reg))
        !           194:     elseif (or (atom arg) (symbolp arg)) then arg
        !           195:     elseif (dtpr arg)
        !           196:        then (caseq (car arg)
        !           197:                   (stack       `(,(* 4 (1- (cadr arg))) #.olbot-reg))
        !           198:                   (vstack      `(* ,(* 4 (1- (cadr arg))) #.olbot-reg))
        !           199:                   (bind        `(* ,(* 4 (1- (cadr arg))) #.bind-reg))
        !           200:                   (lbind       `(,(* 4 (1- (cadr arg))) #.bind-reg))
        !           201:                   (fixnum      `(\# ,(cadr arg)))
        !           202:                   (immed       `($ ,(cadr arg)))
        !           203:                   (racc        (cdr arg))
        !           204:                   (t           (comp-err " bad arg to e-cvt : "
        !           205:                                          (or arg))))
        !           206:        else  (comp-warn "bad arg to e-cvt : " (or arg))))
        !           207: 
        !           208: ;--- e-uncvt :: inverse of e-cvt, used for making comments pretty
        !           209: ;
        !           210: (defun e-uncvt (arg)
        !           211:    (if (atom arg)
        !           212:        then (if (eq 'Nil arg)
        !           213:                then nil
        !           214:                else arg)
        !           215:     elseif (eq 'stack (car arg))
        !           216:        then (do ((i g-loccnt)
        !           217:                 (ll g-locs))
        !           218:                ((and (equal i (cadr arg)) (atom (car ll))) (car ll))
        !           219:                (if (atom (car ll))
        !           220:                    then (setq ll (cdr ll)
        !           221:                               i (1- i))
        !           222:                    else (setq ll (cdr ll))))
        !           223:     elseif (or (eq 'bind (car arg)) (eq 'lbind (car arg)))
        !           224:        then (do ((i g-litcnt (1- i))
        !           225:                 (ll g-lits (cdr ll)))
        !           226:                ((equal i (cadr arg))
        !           227:                 (cond ((eq 'lbind (car arg))
        !           228:                        (list 'quote (car ll)))
        !           229:                       (t (car ll)))))
        !           230:        else arg))
        !           231: 
        !           232: ;--- e-cvtas :: convert an EIADR to vax unix assembler fmt and print it
        !           233: ;      - form : an EIADR form
        !           234: ;
        !           235: #+(or for-vax for-tahoe)
        !           236: (defun e-cvtas (form)
        !           237:   (if (atom form)
        !           238:       then (sfilewrite form)
        !           239:       else (if (eq '* (car form))
        !           240:               then (if (eq '\# (cadr form))
        !           241:                        then (setq form `($ ,(caddr form)))
        !           242:                        else (sfilewrite "*")
        !           243:                             (setq form (cdr form))))
        !           244:           (if (numberp (car form))
        !           245:               then (sfilewrite (car form))
        !           246:                    (sfilewrite "(")
        !           247:                    (sfilewrite (cadr form))
        !           248:                    (sfilewrite ")")
        !           249:                    (if (caddr form)
        !           250:                        then (sfilewrite "[")
        !           251:                             (sfilewrite (caddr form))
        !           252:                             (sfilewrite "]"))
        !           253:            elseif (eq '+ (car form))
        !           254:               then (sfilewrite '"(")
        !           255:                    (sfilewrite (cadr form))
        !           256:                    (sfilewrite '")")
        !           257:                    #-for-tahoe (sfilewrite '"+")
        !           258:            elseif (eq '- (car form))
        !           259:               then #-for-tahoe (sfilewrite '"-")
        !           260:                    (sfilewrite '"(")
        !           261:                    (sfilewrite (cadr form))
        !           262:                    (sfilewrite '")")
        !           263:            elseif (eq '\# (car form))  ; 5120 is base of small fixnums
        !           264:               then (sfilewrite (concat "$" (+ (* (cadr form) 4) 5120)))
        !           265:            elseif (eq '$ (car form))
        !           266:               then (sfilewrite '"$")
        !           267:                    (sfilewrite (cadr form)))))
        !           268: 
        !           269: #+for-68k
        !           270: (defun e-cvtas (form)
        !           271:    (if (atom form)
        !           272:        then (sfilewrite form)
        !           273:        else (if (eq '* (car form))
        !           274:                then (if (eq '\# (cadr form))
        !           275:                         then (setq form `($ ,(caddr form)))))
        !           276:            (if (numberp (car form))
        !           277:                then (sfilewrite (cadr form))
        !           278:                     (sfilewrite "@")
        !           279:                     (if (not (zerop (car form)))
        !           280:                         then (sfilewrite "(")
        !           281:                              (sfilewrite (car form))
        !           282:                              (sfilewrite ")"))
        !           283:            elseif (eq '% (car form))
        !           284:               then (setq form (cdr form))
        !           285:                    (sfilewrite (cadr form))
        !           286:                    (sfilewrite "@(")
        !           287:                    (sfilewrite (car form))
        !           288:                    (sfilewrite ",")
        !           289:                    (sfilewrite (caddr form))
        !           290:                    (sfilewrite ":L)")
        !           291:             elseif (eq '+ (car form))
        !           292:                then (sfilewrite (cadr form))
        !           293:                     (sfilewrite '"@+")
        !           294:             elseif (eq '- (car form))
        !           295:                then (sfilewrite (cadr form))
        !           296:                     (sfilewrite '"@-")
        !           297:             elseif (eq '\# (car form))
        !           298:                then (sfilewrite (concat '#.Nilatom "+0x1400"
        !           299:                                         (if (null (signp l (cadr form)))
        !           300:                                             then "+" else "")
        !           301:                                         (* (cadr form) 4)))
        !           302:             elseif (eq '$ (car form))
        !           303:                then (sfilewrite '"#")
        !           304:                     (sfilewrite (cadr form))
        !           305:               else (comp-err " bad arg to e-cvtas : " (or form)))))
        !           306: 
        !           307: ;--- e-postinc :: handle postincrement for the tahoe machine
        !           308: ;
        !           309: 
        !           310: #+for-tahoe
        !           311: (defun e-postinc (addr)
        !           312:    (if (and (dtpr addr) (eq (car addr) '+))
        !           313:        (e-add '($ 4) (cadr addr))))
        !           314: 
        !           315: 
        !           316: ;--- e-docomment :: print any comment lines
        !           317: ;
        !           318: (defun e-docomment nil
        !           319:   (if g-comments
        !           320:       then (do ((ll (nreverse g-comments) (cdr ll)))
        !           321:               ((null ll))
        !           322:               (sfilewrite "    ")
        !           323:               (sfilewrite #.comment-char)
        !           324:               (do ((ll (exploden (car ll)) (cdr ll)))
        !           325:                   ((null ll))
        !           326:                   (tyo (car ll) vp-sfile)
        !           327:                   (cond ((eq #\newline (car ll))
        !           328:                          (sfilewrite #.comment-char))))
        !           329:               (terpr vp-sfile))
        !           330:           (setq g-comments nil)
        !           331:      else (terpr vp-sfile)))
        !           332: 
        !           333: ;--- e-goto :: emit code to jump to the location given
        !           334: ;
        !           335: (defun e-goto (lbl)
        !           336:   (e-jump lbl))
        !           337: 
        !           338: ;--- e-gotonil :: emit code to jump if nil was last computed
        !           339: ;
        !           340: (defun e-gotonil (lbl)
        !           341:   (e-write2 g-falseop lbl))
        !           342: 
        !           343: ;--- e-gotot :: emit code to jump if t was last computed
        !           344: (defun e-gotot (lbl)
        !           345:   (e-write2  g-trueop lbl))
        !           346: 
        !           347: ;--- e-label :: emit a label
        !           348: (defun e-label (lbl)
        !           349:   (setq g-skipcode nil)
        !           350:   (e-writel lbl))
        !           351: 
        !           352: ;--- e-pop :: pop the given number of args from the stack
        !           353: ; g-locs is not! fixed
        !           354: ;
        !           355: (defun e-pop (nargs)
        !           356:   (if (greaterp nargs 0)
        !           357:       then (e-dropnp nargs)))
        !           358: 
        !           359: ;--- e-pushnil :: push a given number of nils on the stack
        !           360: ;
        !           361: #+for-vax
        !           362: (defun e-pushnil (nargs)
        !           363:    (do ((i nargs))
        !           364:        ((zerop i))
        !           365:        (if (>& i 1)
        !           366:           then (e-write2 'clrq '#.np-plus)
        !           367:                (setq i (- i 2))
        !           368:        elseif (equal i 1)
        !           369:           then (e-write2 'clrl '#.np-plus)
        !           370:                (setq i (1- i)))))
        !           371: 
        !           372: #+for-tahoe
        !           373: (defun e-pushnil (nargs)
        !           374:   (do ((i nargs))
        !           375:       ((zerop i))
        !           376:       (e-write2 'clrl '#.np-plus)
        !           377:       (setq i (1- i))))
        !           378: 
        !           379: #+for-68k
        !           380: (defun e-pushnil (nargs)
        !           381:   (do ((i nargs))
        !           382:       ((zerop i))
        !           383:       (L-push '#.nil-reg)
        !           384:       (setq i (1- i))))
        !           385: 
        !           386: ;--- e-setupbind :: setup for shallow binding
        !           387: ;
        !           388: (defun e-setupbind nil
        !           389:   (e-move '#.bnp-sym '#.bnp-reg))
        !           390: 
        !           391: ;--- e-unsetupbind :: restore temp value of bnp to real loc
        !           392: ;
        !           393: (defun e-unsetupbind nil
        !           394:   (e-move '#.bnp-reg '#.bnp-sym))
        !           395: 
        !           396: ;--- e-shallowbind :: shallow bind value of variable and initialize it
        !           397: ;      - name : variable name
        !           398: ;      - val : IADR value for variable
        !           399: ;
        !           400: #+(or for-vax for-68k)
        !           401: (defun e-shallowbind (name val)
        !           402:   (let ((vloc (d-loclit name t)))
        !           403:        (e-move (e-cvt vloc) '(+ #.bnp-reg))    ; store old val
        !           404:        (e-move (e-cvt `(lbind ,@(cdr vloc)))
        !           405:                       '(+ #.bnp-reg))          ; now name
        !           406:        (d-move val vloc)))             
        !           407: 
        !           408: #+for-tahoe
        !           409: (defun e-shallowbind (name val)
        !           410:   (let ((vloc (d-loclit name t)))
        !           411:        (e-move (e-cvt vloc) '(0 #.bnp-reg))    ; store old val
        !           412:        (e-add '($ 4) '#.bnp-reg)
        !           413:        (e-move (e-cvt `(lbind ,@(cdr vloc)))
        !           414:                       '(0 #.bnp-reg))          ; now name
        !           415:        (e-add '($ 4) '#.bnp-reg)
        !           416:        (d-move val vloc)))             
        !           417: 
        !           418: ;--- e-unshallowbind :: un shallow bind n variable from top of stack
        !           419: ;
        !           420: #+(or for-vax for-tahoe)
        !           421: (defun e-unshallowbind (n)
        !           422:   (e-setupbind)                ; set up binding register
        !           423:   (do ((i 1 (1+ i)))
        !           424:       ((greaterp i n))
        !           425:       (e-move `(,(* -8 i) #.bnp-reg) `(* ,(+ 4 (* -8 i)) #.bnp-reg)))
        !           426:   (e-sub3 `($ ,(* 8 n)) '#.bnp-reg '#.bnp-sym))
        !           427: 
        !           428: #+for-68k
        !           429: (defun e-unshallowbind (n)
        !           430:   (makecomment "e-unshallowbind begin...")
        !           431:   (e-setupbind)                ; set up binding register
        !           432:   (do ((i 1 (1+ i)))
        !           433:       ((greaterp i n))
        !           434:       (e-move `(,(* -8 i) #.bnp-reg) `(* ,(+ 4 (* -8 i)) #.bnp-reg)))
        !           435:   (e-move '#.bnp-reg '#.bnp-sym)
        !           436:   (e-sub `($ ,(* 8 n)) '#.bnp-sym)
        !           437:   (makecomment "...end e-unshallowbind"))
        !           438: 
        !           439: ;----------- very low level routines
        !           440: ; all output to the assembler file goes through these routines.
        !           441: ; They filter out obviously extraneous instructions as well as 
        !           442: ; combine sequential drops of np.
        !           443: 
        !           444: ;--- e-dropnp :: unstack n values from np.
        !           445: ; rather than output the instruction now, we just remember that it
        !           446: ; must be done before any other instructions are done.  This will
        !           447: ; enable us to catch sequential e-dropnp's
        !           448: ;
        !           449: (defun e-dropnp (n)
        !           450:   (if (not g-skipcode)
        !           451:       then (setq g-dropnpcnt (+ n (if g-dropnpcnt thenret else 0)))))
        !           452: 
        !           453: ;--- em-checknpdrop :: check if we have a pending npdrop
        !           454: ; and do it if so.
        !           455: ;
        !           456: (defmacro em-checknpdrop nil
        !           457:    `(if g-dropnpcnt
        !           458:        then (let ((dr g-dropnpcnt))
        !           459:                 (setq g-dropnpcnt nil)
        !           460:                 (e-sub `($ ,(* dr 4)) '#.np-reg))))
        !           461: 
        !           462: ;--- em-checkskip :: check if we are skipping this code due to jump
        !           463: ;
        !           464: (defmacro em-checkskip nil
        !           465:   '(if g-skipcode then (sfilewrite #.comment-char)))
        !           466: 
        !           467: 
        !           468: ;--- e-jump :: jump to given label
        !           469: ; and set g-skipcode so that all code following until the next label
        !           470: ; will be skipped.
        !           471: ;
        !           472: (defun e-jump (l)
        !           473:   (em-checknpdrop)
        !           474:   (e-write2 #+(or for-vax for-tahoe) 'jbr #+for-68k 'jra l)
        !           475:   (setq g-skipcode t))
        !           476: 
        !           477: ;--- e-return :: do return, and dont check for np drop
        !           478: ;
        !           479: (defun e-return nil
        !           480:   (setq g-dropnpcnt nil)  ; we dont need to worry about nps
        !           481:   #+(or for-vax for-tahoe) (e-write1 'ret)
        !           482:   #+for-68k (progn  (e-write1 'rts)
        !           483:                    (sfilewrite
        !           484:                       (concat g-masklab " = " (d-makemask) '#.ch-newline))
        !           485:                    (sfilewrite
        !           486:                       (concat g-stackspace " = "
        !           487:                               (Cstackspace) '#.ch-newline))))
        !           488: 
        !           489: ;--- e-writel :: write out a label
        !           490: ;
        !           491: (defun e-writel (label)
        !           492:   (setq g-skipcode nil)
        !           493:   (em-checknpdrop)
        !           494:   (sfilewrite label)
        !           495:   (sfilewrite ":")
        !           496:   (e-docomment))
        !           497: 
        !           498: ;--- e-write1 :: write out one litteral
        !           499: ;
        !           500: (defun e-write1 (lit)
        !           501:   (em-checkskip)
        !           502:   (em-checknpdrop)
        !           503:   (sfilewrite "        ")
        !           504:   (sfilewrite lit)
        !           505:   (e-docomment))
        !           506: 
        !           507: ;--- e-write2 :: write one one litteral, and one operand
        !           508: ;
        !           509: #+(or for-vax for-tahoe)
        !           510: (defun e-write2 (lit frm)
        !           511:   (em-checkskip)
        !           512:   (em-checknpdrop)
        !           513:   (sfilewrite "        ")
        !           514:   (sfilewrite lit)
        !           515:   (sfilewrite "        ")
        !           516:   (e-cvtas frm)
        !           517:   (e-docomment)
        !           518:   #+for-tahoe (e-postinc frm))
        !           519: 
        !           520: #+for-68k
        !           521: (defun e-write2 (lit frm)
        !           522:   (em-checkskip)
        !           523:   (em-checknpdrop)
        !           524:   (if (and (dtpr frm) (eq (car frm) '*))
        !           525:       then (e-move (cdr frm) 'a5)
        !           526:           (sfilewrite "        ")
        !           527:           (sfilewrite lit)
        !           528:           (sfilewrite '"       ")
        !           529:           (e-cvtas '(0 a5))
        !           530:       else (sfilewrite "       ")
        !           531:           (sfilewrite lit)
        !           532:           (sfilewrite '"       ")
        !           533:           (e-cvtas frm))
        !           534:   (e-docomment))
        !           535: 
        !           536: ;--- e-write3 :: write one one litteral, and two operands
        !           537: ;
        !           538: #+(or for-vax for-tahoe)
        !           539: (defun e-write3 (lit frm1 frm2)
        !           540:   (em-checkskip)
        !           541:   (em-checknpdrop)
        !           542:   (sfilewrite "        ")
        !           543:   (sfilewrite lit)
        !           544:   (sfilewrite "        ")
        !           545:   (e-cvtas frm1)
        !           546:   (sfilewrite ",")
        !           547:   (e-cvtas frm2)
        !           548:   (e-docomment)
        !           549:   #+for-tahoe (e-postinc frm1)
        !           550:   #+for-tahoe (e-postinc frm2))
        !           551: 
        !           552: #+for-68k
        !           553: (defun e-write3 (lit frm1 frm2)
        !           554:    (em-checkskip)
        !           555:    (em-checknpdrop)
        !           556:    (if (and (dtpr frm1) (eq (car frm1) '*)
        !           557:            (not (and (dtpr frm2) (eq (car frm2) '*))))
        !           558:        then (e-move (cdr frm1) 'a5)
        !           559:            (sfilewrite "       ")
        !           560:            (sfilewrite lit)
        !           561:            (sfilewrite '"      ")
        !           562:            (e-cvtas '(0 a5))
        !           563:            (sfilewrite '",")
        !           564:            (e-cvtas frm2)
        !           565:            (e-docomment)
        !           566:     elseif (and (not (and (dtpr frm1) (eq (car frm1) '*)))
        !           567:                (dtpr frm2) (eq (car frm2) '*))
        !           568:        then (e-move (cdr frm2) 'a5)
        !           569:            (sfilewrite "       ")
        !           570:            (sfilewrite lit)
        !           571:            (sfilewrite '"      ")
        !           572:            (e-cvtas frm1)
        !           573:            (sfilewrite '",")
        !           574:            (e-cvtas '(0 a5))
        !           575:            (e-docomment)
        !           576:     elseif (and (dtpr frm1) (eq (car frm1) '*)
        !           577:                (dtpr frm2) (eq (car frm2) '*))
        !           578:        then (d-regused 'd6)
        !           579:            (e-move (cdr frm1) 'a5)
        !           580:            (e-move '(0 a5) 'd6)
        !           581:            (e-move (cdr frm2) 'a5)
        !           582:            (sfilewrite "       ")
        !           583:            (sfilewrite lit)
        !           584:            (sfilewrite '"      ")
        !           585:            (e-cvtas 'd6)
        !           586:            (sfilewrite '",")
        !           587:            (e-cvtas '(0 a5))
        !           588:            (e-docomment)
        !           589:        else (sfilewrite "      ")
        !           590:            (sfilewrite lit)
        !           591:            (sfilewrite '"      ")
        !           592:            (e-cvtas frm1)
        !           593:            (sfilewrite '",")
        !           594:            (e-cvtas frm2)
        !           595:            (e-docomment)))
        !           596: 
        !           597: ;--- e-write4 :: write one one litteral, and three operands
        !           598: ;
        !           599: #+(or for-vax for-tahoe)
        !           600: (defun e-write4 (lit frm1 frm2 frm3)
        !           601:   (em-checkskip)
        !           602:   (em-checknpdrop)
        !           603:   (sfilewrite "        ")
        !           604:   (sfilewrite lit)
        !           605:   (sfilewrite "        ")
        !           606:   (e-cvtas frm1)
        !           607:   (sfilewrite ",")
        !           608:   (e-cvtas frm2)
        !           609:   (sfilewrite ",")
        !           610:   (e-cvtas frm3)
        !           611:   (e-docomment)
        !           612:   #+for-tahoe (e-postinc frm1)
        !           613:   #+for-tahoe (e-postinc frm2)
        !           614:   #+for-tahoe (e-postinc frm3))
        !           615: 
        !           616: 
        !           617: ;--- e-write5 :: write one one litteral, and four operands
        !           618: ;
        !           619: #+(or for-vax for-tahoe)
        !           620: (defun e-write5 (lit frm1 frm2 frm3 frm4)
        !           621:   (em-checkskip)
        !           622:   (em-checknpdrop)
        !           623:   (sfilewrite "        ")
        !           624:   (sfilewrite lit)
        !           625:   (sfilewrite "        ")
        !           626:   (e-cvtas frm1)
        !           627:   (sfilewrite ",")
        !           628:   (e-cvtas frm2)
        !           629:   (sfilewrite ",")
        !           630:   (e-cvtas frm3)
        !           631:   (sfilewrite ",")
        !           632:   (e-cvtas frm4)
        !           633:   (e-docomment)
        !           634:   #+for-tahoe (e-postinc frm1)
        !           635:   #+for-tahoe (e-postinc frm2)
        !           636:   #+for-tahoe (e-postinc frm3)
        !           637:   #+for-tahoe (e-postinc frm4))
        !           638: 
        !           639: ;--- d-printdocstuff
        !           640: ;
        !           641: ; describe this version
        !           642: ;
        !           643: (defun d-printdocstuff nil
        !           644:    (sfilewrite (concat ".data "
        !           645:                       #.comment-char
        !           646:                       " this is just for documentation "))
        !           647:    (terpr vp-sfile)
        !           648:    (sfilewrite (concat ".asciz \"@(#)Compiled by " compiler-name
        !           649:                 " on " (status ctime) '\"))
        !           650:    (terpr vp-sfile)
        !           651:    (do ((xx Liszt-file-names (cdr xx)))
        !           652:        ((null xx))
        !           653:        (sfilewrite (concat ".asciz \"" (car xx) '\"))
        !           654:        (terpr vp-sfile)))

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.