"CODE IS STORED IN A LIST OF UVECTORS. EACH INSTRUCTION IS A FIX. THE INSTRUCTION CONTAINS THE INSTRUCTION BYTE (8 BITS) + INFORMATION TO FIX UP THE INSTRUCTION. WHEN AN INSTRUCTION DOES NOT FIT INTO A SINGLE FIX IT IS FOLLOWED BY ADDITIONAL FIXES. EVERY INSTRUCTION TAKES UP AN INTEGER NUMBER OF FIXES EVEN THOUGH THE OUTPUT VERSION MAY BE DIFFERENT. THERE IS A TEMPORARY FIXUP TABLE WHICH IS USED TO DETERMINE THE LOCATION OF THE TEMPORARIES AND ALSO A LABEL FIXUP TABLE TO KEEP TRACK OF THE LABELS. THE SYSTEM ATTEMPTS TO FIX UP LABELS IN PARTICULAR INTERVALS SO THAT IT DOESN'T HAVE TO KEEP TRACK OF TOO MANY LABELS. ANY NON-LOOPING LABELS WILL BE FLUSHED AS SOON AS THEY ARE FIXED UP. THERE IS ALSO A CONSTANT TABLE WHICH KEEPS TRACK OF THE LOCATION OF ALL FULL-WORD CONSTANTS. THESE ARE FIXED UP LIKE LABELS. IN GENERAL THE FIRST OCCURANCE OF A 32 BIT CONSTANT WILL BE OUTPUT AS AN IMMEDIATE INSTRUCTION. ALL OTHER OCCURANCES WILL BE OUTPUT AS A REFERENCE TO THAT CONSTANT IN PC-RELATIVE MODE (THIS WILL BE AN OPTION. WE MAY EVENTUALLY GENERATE ALL CONSTANTS IMMEDIATE IF THAT PROVES TO GENERATE FASTER RUNNING CODE" #WORD *4161262110* 1024 = TEMP4> ISTR6 ISTRE7 #WORD *15055105314* )> > #WORD *7273431076* AGAIN10 PHRASE12 PHRASE15 #WORD *16276717004* AGAIN11 PHRASE13 PHRASE16 #WORD *33337566645*
RESTL12 RESTL13 1024 = CCODE6> ISTR16 ISTRE17 PHRASE15 PHRASE18 #WORD *4545712702* = STACK> )> #WORD *1534135646* LABEL-REF) LREF4> )> #WORD *31705261531* 128 = TMP5> ISTR9 ISTRE10 + BOOL11> BOOL11 #WORD *20545430565* OPT4 OPT5> OPT4 > OPT5 + TAG11> - PHRASE10> TAG11 PHRASE10 COND9 + PHRASE14> + PHRASE16> PHRASE16 2 = STR7 (TYPE STRING)> - COND13> PHRASE14 = TEMP12> COND13 #WORD *31521250146* 5 = TEMP9 (TYPE VECTOR)> = RES6> #WORD *20767101443* PTN-SAVE) PSAVE4> > (TYPE FALSE)> MAP6 > MAPAP9 #WORD *23210600123* CODEVEC ATOM LINKVAR) CODE4 KIND5 LVAR6> 5 = TEMP9 (TYPE VECTOR)> = PTN7> (TYPE FALSE)> MAP13 MAPAP16 #WORD *21131445017* RESTL8 RESTL9 #WORD *22070677772* #WORD *3007150023* )> "UPDATE THE LABEL TABLES FOR A BRANCH" #WORD *35753643504* FIX ANY ANY BOOLEAN) LABEL4 CODEPTR5 STATUS?6 LILEN7 FORCEL?8> #WORD *1136336146* "OPTIONAL" ANY) LABEL6 JUST-LOOKING?7> OPT4 OPT5> OPT4 > OPT5 MAP11 - PHRASE27> > PHRASE27 PHRASE24 MAPAP14 #WORD *6317027030* ) NAME4> > > > 9 = TEMP6> = TEMP6> #WORD *20223320465* LABEL-REF) LREF4> )> PHRASE8 "FINDS AND REMOVES A LABEL FROM THE OUTSTANDING LABEL TABLE. THE LABEL WILL NOT BE REMOVED IF IT IS A LOOP LABEL" #WORD *17601262437* ) LABEL4> AGAIN12 > PHRASE14 - BOOL20> + PHRASE19> BOOL20 PHRASE19 PHRASE21 PHRASE24 "UPDATE LABEL TABLES WHEN ENCOUNTERING AN ACTUAL LABEL" #WORD *26432674645* FIX ) LABEL4 CODEPTR5 LOOP?6> - PHRASE13> PHRASE13 > COND12 PHRASE17 TAG18 TAG20 COND16 #WORD *15765006677* FIX) XREFS4 TABPTR5> (TYPE FALSE)> MAP7 MAPAP10 #WORD *27255067700* > > > > 12 = TEMP11 (TYPE VECTOR)> = XREF9> #WORD *37064422603* ANY ANY "OPTIONAL" ANY BOOLEAN ANY) INST8 LABEL9 STATUS?10 LILEN11 ACNUM12 FORCEL?13 XT14> OPT4 OPT5 OPT6 OPT7> OPT4 > OPT5 > OPT6 > OPT7 MAP25 MAPAP28 PHRASE20 + PHRASE40> PHRASE40 #WORD *24023410742* ) LABEL4 LOOP?5> "THE CONSTANT TABLE CONSISTS OF CONSTANT ADDRESS PAIRS. THE ADDRESS MAY HAVE 3 STATES. IF IT IS NON-ZERO. THEN IT IS THE ADDRESS OF THE MOST RECENT EMITTED VERSION OF A CONSTANT. IF IT IS ZERO THEN IT INDICATES THAT A VERSION OF THE CONSTANT WILL BE EMITTED BY SOME INSTRUCTION IN THE CURRENT SUBROUTINE -1 IS USED BY THE SCAN PASS TO INDICATE THAT THE CONSTANT WILL HAVE BEEN BEEN EMITTED BY A PREVIOUS INSTRUCTION" #WORD *21312317016* )> 1024 = TEMP4> ISTR6 ISTRE7 #WORD *36566107600* "WARNING: THIS ADDS AN ENTRY TO THE CONSTANT TABLE IF IT IS NOT ALREADY THERE. THE INITIAL VERSION OF THIS ALGORITHM USES LINEAR SEARCH. THIS MAY SLOW DOWN THE WORLD" #WORD *37733576264* AGAIN11 TEMP14 = NTAB6> ISTR17 ISTRE18 MAP20 MAPAP23 PHRASE16 PHRASE13 PHRASE33 #WORD *23213651406* #WORD *37311264752* 0 = STACK> 2 = TEMP10 (TYPE VECTOR)> = NPATCH5> #WORD *16227066403* RESTL8 RESTL10 #WORD *24646603517* #WORD *10233410137* ANY "TUPLE" ANY) INST4> - PHRASE7> TAG9 TAG8 PHRASE7 > #WORD *7743236241* FIX TUPLE ) INST4 FIELDS5 WHERE6> - PHRASE14> PHRASE14 = TEMP12> MAP16 TAG40 TAG37 PHRASE34 + PHRASE43> + PHRASE43> TAG45 TAG44 PHRASE43 - PHRASE48> = IMWRD32> PHRASE48 PHRASE49 PHRASE51 TAG57 TAG56 PHRASE54 BOOL66 BOOL63 BOOL62 PHRASE61 BOOL68 PHRASE67 BOOL73 PHRASE72 BOOL81 PHRASE80 PHRASE82 PHRASE77 PHRASE59 PHRASE86 + PHRASE92> PHRASE92 PHRASE94 PHRASE88 AGAIN97 + PHRASE108> PHRASE108 PHRASE110 EXIT96 MAPAP19 TAG117 TAG116 PHRASE113 > TAG121 + PHRASE123> PHRASE123 #WORD *27062413266* > MAP16 MAPAP19 PHRASE11 #WORD *5017277160* ANY ANY ATOM "OPTIONAL" ANY) EA16 EA27 MSIZE8 EXTRA9> OPT4 OPT5> OPT4 OPT5 PHRASE12 PHRASE13 PHRASE14 PHRASE15 PHRASE16 + PHRASE18> + PHRASE18> TAG26 TAG24 PHRASE21 PHRASE18 #WORD *5124206455* FIX EFF-ADDR EFF-ADDR ATOM) PTR4 EA15 EA26 MSIZE7> PHRASE12 PHRASE13 PHRASE14 PHRASE15 "MAKE SURE CONSTANT IS CORRECT IF IMMEDIATE. IF LONG WORD OPERATION SHOULD USE CONSTANT TABLE" #WORD *1264330352* = TEMP11> PHRASE19 = TEMP11> PHRASE28 PHRASE17 PHRASE31 #WORD *23357175353* )> + PHRASE6> PHRASE6 #WORD *25142624022* )> MAP8 MAPAP11 TEMP15 = START6 (TYPE UVECTOR)> AGAIN26 PHRASE28 PHRASE31 EXIT23 > PHRASE34 #WORD *34135235317* ANY ANY ANY "OPTIONAL" ANY) EA16 EA27 SZ8 EXTRA9> OPT4 OPT5> OPT4 > OPT5 - PHRASE17> - PHRASE17> = TEMP20> PHRASE25 TAG28 PHRASE30 PHRASE32 PHRASE17 - PHRASE35> PHRASE35 PHRASE40 PHRASE47 PHRASE48 PHRASE49 (TYPE FALSE)> TAG51 PHRASE50 PHRASE43 = EA16> PHRASE60 PHRASE66 PHRASE67 (TYPE FALSE)> TAG69 PHRASE68 PHRASE54 PHRASE71 PHRASE75 PHRASE76 PHRASE78 PHRASE81 PHRASE85 PHRASE86 = TEMP20> PHRASE89 = TEMP20> PHRASE91 (TYPE FALSE)> TAG100 = TB13> = TEMP20> = TEMP20> PHRASE99 PHRASE73 #WORD *2225472261* ATOM) EADDR4 SZ5> = STACK> #WORD *35063655163* ATOM) EADDR4 SZ5> - PHRASE7> = STACK> PHRASE7 = STACK> = STACK> #WORD *20160750671* "OPTIONAL" ANY) LENGTH6> OPT4 OPT5> OPT4 OPT5 PHRASE9 PHRASE11 PHRASE12 PHRASE13 PHRASE14 = STACK> #WORD *22373733175* ATOM) NAME4> (TYPE FALSE)> MAP6 + PHRASE19> PHRASE19 MAPAP9 #WORD *33227427356* ATOM FIX) NAME4 NARGS5> + PHRASE8> PHRASE8 #WORD *25224345555* CALL-ENTRY FIX) CE4 NARGS5> (TYPE FALSE)> AGAIN11 BOOL12 BOOL14 + PHRASE18> PHRASE18 PHRASE22 PHRASE24 #WORD *10527575716* )> #WORD *21621777610* )> #WORD *13563431243* > FIX ) NUMARGS4 LABEL5> (TYPE FALSE)> MAP8 (TYPE FALSE)> TAG22 2 = TEMP16 (TYPE VECTOR)> = LREF19> PHRASE21 MAPAP11 #WORD *1102137400* MAP8 MAPAP11 TEMP16 = NARGS20 (TYPE UVECTOR)> 2 = TEMP18 (TYPE VECTOR)> = TEMP16> >> #WORD *33406771763* [REST ]>>)> (TYPE FALSE)> MAP5 > MAPAP8 #WORD *22354442762* 4 = TEMP11 (TYPE VECTOR)> = UC6> PHRASE13 #WORD *21766200705* TEMP7 = NEWVEC6 (TYPE VECTOR)> MAP9 MAPAP12 >> #WORD *10050242242* #WORD *16120257040* ) LABEL4> PHRASE12 >> #WORD *10131242150* #WORD *24203253174* ANY) LABEL4 EA5> PHRASE13