|
|
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)))
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.