X-Git-Url: https://jxself.org/git/?p=pdp10-muddle.git;a=blobdiff_plain;f=mim%2Fdevelopment%2Fmim%2Fvaxc%2Fgcgen.mud;fp=mim%2Fdevelopment%2Fmim%2Fvaxc%2Fgcgen.mud;h=fe96a9c55c040ea2f466c08f3d9c309442c89b39;hp=0000000000000000000000000000000000000000;hb=d73ace3f3292e320b461b8fcd2e9f5dc5d9684d7;hpb=d530283ea60fb0ddcc28e9c5bd072456afe06e07 diff --git a/mim/development/mim/vaxc/gcgen.mud b/mim/development/mim/vaxc/gcgen.mud new file mode 100644 index 0000000..fe96a9c --- /dev/null +++ b/mim/development/mim/vaxc/gcgen.mud @@ -0,0 +1,644 @@ + + + + + + + + + + FIX>> + + FIX>> + + FIX>> + + + + + + + + +>> + +) "AUX" RLEN STK? ALLOCADDR ENDADDR + (BOUNDS-LAB ) (IB-LAB ) + (F-LAB ) (EXIT-LAB ) + (M-LAB )) + >)> + + + >) + (<==? .HINT GBIND> + + >) + (<==? .HINT LBIND> + + ) + (T + )> + + > + '(AC-0 AC-1 AC-2 AC-3 AC-4 AC-5 AC-6)> + > 4>>> + > 4>>> + > + ; "See if this guy is on the stack" + ,LAST-INST-LENGTH> + >> > + ,LAST-INST-LENGTH> + + + > + + > + ,LAST-INST-LENGTH> + > + > + ,LAST-INST-LENGTH> + )> + > + >> + ,LAST-INST-LENGTH> + > + > > + ,LAST-INST-LENGTH> + ; "Jump if already marked" + + >> + > + > > + > + > + ,LAST-INST-LENGTH> + + LONG> + > > + + > + > + > > + + >> + > + .ALLOCADDR> + > + >> + > + > + + + >) + (T + )> + NORMAL> + + + > + '(AC-0 AC-1 AC-2 AC-3 AC-4 AC-5 AC-6)> + > + + > + > + > + ; "Actual dope word pointer" + > + ; "Number of bytes including slop in last word" + > + + + > + '(AC-0 AC-1 AC-2 AC-3 AC-4 AC-5 AC-6)> + > + > + > + > + +; "Call this guy with ac-0 set up to have number of bytes to subtract from + dope word pointer to get new pointer; ac-1 has pointer to dope word. 0-6 + have been munged." +) + (BLT-LOOP ) (NF-LAB ) + (F-LAB ) (SHT-LAB ) + (DONE-LAB )) + #DECL ((VAR) VARTBL (ALLOC-ATOM END-ATOM NEXT-ATOM) ATOM + (RES) ) + > 4>>> + > 4>>> + ;"Pointers to GVAL slots for AL and END-SPACE" + > + ,LAST-INST-LENGTH> + > + ;"can be BBSS when assembler and friends hacked" + > ;"Save for making new pointer" + > + ;"Size of whole structure" + > ;"in bytes" + > + > ;"Current allocation" + > + ,LAST-INST-LENGTH> + ;"See if overflowed--won't fit" + > + > + ;"See if won't fit in current area" + ,LAST-INST-LENGTH> + + + LONG> + > + > + ;"Go to another area" + > ;"get AL back" + > + > + ;"get stuff back from stack" + > ;"compute new AL" + + > + ;"stuff relocation into dope word + now points to 1st dw" + > + .ALLOCADDR> ;"update AL" + > + ;"Get gross byte count back" + > ;"Top old structure" + > + + > + > + > + > + + > + > + > + > + ;"Turn off mark bit" + > + > + > + + > + ; "Point to top" + > + + + LONG> + ) + (T + > + )> + NORMAL> + +) + (F-LAB ) (LOOP-LAB ) + (NM-LAB ) (DONE-LAB ) + (M-LAB )) + > 4>>> + > 4>>> + + > + '(AC-0 AC-1 AC-2 AC-3 AC-4 AC-5 AC-6)> + > > + ; "Allocate temps" + > + > + > + > + ; "2 has # of bytes in current pointer; 3 points to first dw" + > + ,LAST-INST-LENGTH> + ; "jump if already marked" + > + > + > + ; "# of words in whole structure" + > + ; "Bytes in structure" + > + > + > + ,LAST-INST-LENGTH> + > + > + ,LAST-INST-LENGTH> + + > + > + + LONG> + > + + > + > + > + > + ; "New AL" + + > + ; "Stuff pointer to new dw into old" + > + ; "copy dope words" + > + ; "Clear mark bit in new" + > + .ALLOCADDR> + > + ; "Flush dope words from byte count" + > + ; "Point to top of old (ac 1 points to top of new)" + > + ; "Number of elements to mark" + ,LAST-INST-LENGTH> + > + + > + > + ; "See if this guy is structured" + ,LAST-INST-LENGTH> + > + > + + > + + > + > + + > + > + > + > + ,LAST-INST-LENGTH> + + > + + > + > + > + > > + + >) + ()> + NORMAL> + +) (DONE-LAB ) + (LOOP-LAB ) (NF-LAB ) + (F-LAB ) (NB-LAB ) + (MC-LAB ) (UNDO? <>)) + > + ) + ()> + > 4>>> + > 4>>> + + > + '(AC-0 AC-1 AC-2 AC-3 AC-4 AC-5 AC-6)> + > > + > + > + + > + ,LAST-INST-LENGTH> + > + ;"Mark bit set, need to hack this up." + > + > + > + > + ,LAST-INST-LENGTH> + + > + + LONG> + LONG> + + > + > + > + + > + .ALLOCADDR> + > + ;"Point to right part of list cell" + > + ;"Pick up pointer to previous cell" + ,LAST-INST-LENGTH> + > + ;"Fix up cdr pointer in previous cell" + + > + ;"New previous cell pointer" + > + ;"Pick up cdr pointer" + > + ;"Relocation for old cell" + > + ;"Make sure new cell doesn't have garbage in cdr slot" + > + > + > + ;"See if car's type needs marking" + ,LAST-INST-LENGTH> + > + > + ;"Save pointer to old cell" + ;"Save old cdr pointer" + + > + ;"Mark the guy" + > + > + + > + > + >)> + > + ;"Move cdr pointer to right place" + ,LAST-INST-LENGTH> + ;"All done if empty cdr" + > + + LONG> + LONG> + ;"Check bounds of list cdr" + > + > + ,LAST-INST-LENGTH> + ;"Loop back if in bounds" + ,LAST-INST-LENGTH> + + > + ;"Pick up pointer to last cell" + ,LAST-INST-LENGTH> + ;"None, just clean up and leave" + > + ;"Clean up last cell" + + > > + > + > + + >) + (T )> + NORMAL> + + PREF-VAL>> + + NORMAL> + +) + >> + > + >)> + > + + > + + >)> + + .VAC> + +) + + >) + (ELSE + > + > + + >)>)>> + +)) + #DECL ((VAR) VARTBL (VAL) ) + + NORMAL> + +)> + +) + + NORMAL> + +) + + NORMAL> + +) + <> .VAR .VAL> + NORMAL> + +) + > + + NORMAL> + +) VAR + "AUX" (TLAB ) (ELAB ) NAC ADDR) + #DECL ((VAC) AC) + > + <>> + > + + + >>>)> + <>> + > + > > + + + > + >) + (ELSE >)> + > + ) + (ELSE )>> + +> + > + + >)> + > + + > + >)> + + .VAC> + +)) + #DECL ((VAR) VARTBL) + + NORMAL> + +)) + #DECL ((VAR) VARTBL) + + NORMAL> + +)) + #DECL ((VAR) VARTBL) + + NORMAL> + +)> + +) + .VAR> + NORMAL> + +) + .VAR .GCP> + NORMAL> + +) + .VAR> + NORMAL> + +) (TLAB ) + (TLAB2 ) (ELAB )) + #DECL ((VAR) VARTBL (RES) ) + PREF-VAL>>> + + ) + (ELSE >)>> + + ) + (ELSE )>> + <>> + + ) + (ELSE )>> + + ) + (ELSE >)>> + + ) + (ELSE )>> + <>> + + ) + (T )>> + <>> + > + + ) + (ELSE >)>> + > + + .TAC .RES>)> + NORMAL> + +) (TLAB ) + (ELAB ) LV) + #DECL ((VAR) VARTBL (RES) ) + PREF-VAL>>> + > + <>> + > + > + NORMAL> + + <> .VAR>> + + <> .VAR>> + + <> .VAR>> + +> + > + > + +) "AUX" VAC1 VAC2) + PREF-VAL>>> + PREF-VAL>> + > + + + + + + + +)> + +) "AUX" (VAC <>) + (LAB ) (LAB1 ) VVAC) + > + '(AC-0 AC-1 AC-2 AC-3 AC-4 AC-5 AC-6)> + + > + > + + + + + >) + (T + >> + >> + + + .VVAC>) + (ELSE + + .VVAC>)> + + + + + > + > + .VAC LONG> + + + > + .VVAC> + >)> + NORMAL> + + .PGS>> \ No newline at end of file