0,0 → 1,320 |
/* |
** CC.H -- Symbol Definitions for Small-C compiler. |
*/ |
|
#ifdef _MSC_VER |
#define YES 1 /* true */ |
#define NO 0 /* false */ |
#define CR 13 /* ASCII carriage return */ |
#define LF 10 /* ASCII line feed */ |
#define BELL 7 /* ASCII bell */ |
#define SPACE ' ' /* ASCII space */ |
#define NEWLINE LF /* Small C newline character */ |
|
#endif |
|
/* |
** size of 'int' |
*/ |
|
#define INT32 /* if #defined int = 32 bits, else 16 */ |
|
/* |
** ALIGNMENT |
*/ |
|
#define ALIGN 4 |
|
|
/* |
** machine dependent parameters |
*/ |
#define BPD 4 /* bytes per dword */ |
#define LBPD 2 /* log2(BPD) */ |
#define BPW 2 /* bytes per word */ |
#define LBPW 1 /* log2(BPW) */ |
#define SBPC 1 /* stack bytes per character */ |
#define ERRCODE 7 /* op sys return code */ |
#define INTSIZE 4 |
|
/* |
** symbol table format |
*/ |
#define IDENT 0 |
#define TYPE 1 |
#define CLASS 2 |
#define SIZE 3 |
#define OFFSET 5+2 |
#define NAME (7+4) |
|
#define SYMAVG (12+4) |
#define SYMMAX (16+4) |
|
/* |
** symbol table parameters |
*/ |
#define NUMLOCS 25 |
#define STARTLOC symtab |
#define ENDLOC (symtab+NUMLOCS*SYMAVG) |
#define NUMGLBS 200 |
#define STARTGLB ENDLOC |
#define ENDGLB (ENDLOC+(NUMGLBS-1)*SYMMAX) |
#define SYMTBSZ /*3050*/ (NUMLOCS*SYMAVG + NUMGLBS*SYMMAX) |
|
/* |
** system wide name size (for symbols) |
*/ |
#define NAMESIZE 9 |
#define NAMEMAX 8 |
|
/* |
** values for "IDENT" |
*/ |
#define LABEL 0 |
#define VARIABLE 1 |
#define ARRAY 2 |
#define POINTER 3 |
#define FUNCTION 4 |
|
#define PTRSIZE INTSIZE /* Size of pointer (must match an int!) */ |
|
|
/* |
** values for "TYPE" |
** high order 14 bits give length of object |
** low order 2 bits make type unique within length |
*/ |
/* LABEL 0 */ |
#define CHR ( 1 << 2) |
#define SHORT (BPW << 2) |
#define INT (INTSIZE << 2) |
#define UCHR (( 1 << 2) + 1) |
#define USHORT ((BPW << 2) + 1) |
#define UINT ((INTSIZE << 2) + 1) |
#define UNSIGNED 1 |
|
/* |
** values for "CLASS" |
*/ |
/* LABEL 0 */ |
#define AUTOMATIC 1 |
#define STATIC 2 |
#define EXTERNAL 3 |
#define AUTOEXT 4 |
|
/* |
** segment types |
*/ |
#define DATASEG 1 |
#define CODESEG 2 |
|
/* |
** "switch" table |
*/ |
#define SWSIZ (2*BPW) |
#define SWTABSZ (90*SWSIZ) |
|
/* |
** "while" queue |
*/ |
#define WQTABSZ 30 |
#define WQSIZ 3 |
#define WQMAX (wq+WQTABSZ-WQSIZ) |
|
/* |
** field offsets in "while" queue |
*/ |
#define WQSP 0 |
#define WQLOOP 1 |
#define WQEXIT 2 |
|
/* |
** literal pool |
*/ |
#define LITABSZ 3000 |
#define LITMAX (LITABSZ-1) |
|
/* |
** input line |
*/ |
#define LINEMAX 127 |
#define LINESIZE 128 |
|
/* |
** entries in staging buffer |
*/ |
#define STAGESIZE 200 |
|
/* |
** macro (#define) pool |
*/ |
#define MACNBR 300 |
#define MACNSIZE (MACNBR*(NAMESIZE+2)) |
#define MACNEND (macn+MACNSIZE) |
#define MACQSIZE (MACNBR*7) |
#define MACMAX (MACQSIZE-1) |
|
/* |
** statement types |
*/ |
#define STIF 1 |
#define STWHILE 2 |
#define STRETURN 3 |
#define STBREAK 4 |
#define STCONT 5 |
#define STASM 6 |
#define STEXPR 7 |
#define STDO 8 |
#define STFOR 9 |
#define STSWITCH 10 |
#define STCASE 11 |
#define STDEF 12 |
#define STGOTO 13 |
#define STLABEL 14 |
|
/* |
** p-code symbols |
** |
** legend: |
** 1 = primary register (pr in comments) |
** 2 = secondary register (sr in comments) |
** b = byte |
** f = jump on false condition |
** l = current literal pool label number |
** m = memory reference by label |
** n = numeric constant |
** p = indirect reference thru pointer in sr |
** r = repeated r times |
** s = stack frame reference |
** u = unsigned |
** w = word |
** _ (tail) = another p-code completes this one |
*/ |
|
/* compiler-generated */ |
#define ADD12 1 /* add sr to pr */ |
#define ADDSP 2 /* add to stack pointer */ |
#define AND12 3 /* AND sr to pr */ |
#define ANEG1 4 /* arith negate pr */ |
#define ARGCNTn 5 /* pass arg count to function */ |
#define ASL12 6 /* arith shift left sr by pr into pr */ |
#define ASR12 7 /* arith shift right sr by pr into pr */ |
#define CALL1 8 /* call function thru pr */ |
#define CALLm 9 /* call function directly */ |
#define BYTE_ 10 /* define bytes (part 1) */ |
#define BYTEn 11 /* define byte of value n */ |
#define BYTEr0 12 /* define r bytes of value 0 */ |
#define COM1 13 /* ones complement pr */ |
#define DBL1 14 /* double pr */ |
#define DBL2 15 /* double sr */ |
#define DIV12 16 /* div pr by sr */ |
#define DIV12u 17 /* div pr by sr unsigned */ |
|
#define DWORD_ 111 /* define dword (part 1) */ |
#define DWORDn 112 /* define dword of value n */ |
#define DWORDr0 113 /* define r dwords of value 0 */ |
|
#define ENTER 18 /* set stack frame on function entry */ |
#define EQ10f 19 /* jump if (pr == 0) is false */ |
#define EQ12 20 /* set pr TRUE if (sr == pr) */ |
#define GE10f 21 /* jump if (pr >= 0) is false */ |
#define GE12 22 /* set pr TRUE if (sr >= pr) */ |
#define GE12u 23 /* set pr TRUE if (sr >= pr) unsigned */ |
#define POINT1l 24 /* point pr to function's literal pool */ |
#define POINT1m 25 /* point pr to mem item thru label */ |
#define GETb1m 26 /* get byte into pr from mem thru label */ |
#define GETb1mu 27 /* get unsigned byte into pr from mem thru label */ |
#define GETb1p 28 /* get byte into pr from mem thru sr ptr */ |
#define GETb1pu 29 /* get unsigned byte into pr from mem thru sr ptr */ |
|
#define GETd1m 107 /* get dword into pr from mem thru label */ |
#define GETd1n 108 /* get dword of value n into pr */ |
#define GETd1p 109 /* get dword into pr from mem thru sr ptr */ |
#define GETd2n 110 /* get word of value n into sr */ |
|
#define GETw1m 30 /* get word into pr from mem thru label */ |
#define GETw1n 31 /* get word of value n into pr */ |
#define GETw1p 32 /* get word into pr from mem thru sr ptr */ |
#define GETw2n 33 /* get word of value n into sr */ |
#define GT10f 34 /* jump if (pr > 0) is false */ |
#define GT12 35 /* set pr TRUE if (sr > pr) */ |
#define GT12u 36 /* set pr TRUE if (sr > pr) unsigned */ |
#define WORD_ 37 /* define word (part 1) */ |
#define WORDn 38 /* define word of value n */ |
#define WORDr0 39 /* define r words of value 0 */ |
#define JMPm 40 /* jump to label */ |
#define LABm 41 /* define label m */ |
#define LE10f 42 /* jump if (pr <= 0) is false */ |
#define LE12 43 /* set pr TRUE if (sr <= pr) */ |
#define LE12u 44 /* set pr TRUE if (sr <= pr) unsigned */ |
#define LNEG1 45 /* logical negate pr */ |
#define LT10f 46 /* jump if (pr < 0) is false */ |
#define LT12 47 /* set pr TRUE if (sr < pr) */ |
#define LT12u 48 /* set pr TRUE if (sr < pr) unsigned */ |
#define MOD12 49 /* modulo pr by sr */ |
#define MOD12u 50 /* modulo pr by sr unsigned */ |
#define MOVE21 51 /* move pr to sr */ |
#define MUL12 52 /* multiply pr by sr */ |
#define MUL12u 53 /* multiply pr by sr unsigned */ |
#define NE10f 54 /* jump if (pr != 0) is false */ |
#define NE12 55 /* set pr TRUE if (sr != pr) */ |
#define NEARm 56 /* define near pointer thru label */ |
#define OR12 57 /* OR sr onto pr */ |
#define POINT1s 58 /* point pr to stack item */ |
#define POP2 59 /* pop stack into sr */ |
#define PUSH1 60 /* push pr onto stack */ |
#define PUTbm1 61 /* put pr byte in mem thru label */ |
#define PUTbp1 62 /* put pr byte in mem thru sr ptr */ |
|
#define PUTdm1 114 /* put pr dword in mem thru label */ |
#define PUTdp1 115 /* put pr dword in mem thru sr ptr */ |
|
#define PUTwm1 63 /* put pr word in mem thru label */ |
#define PUTwp1 64 /* put pr word in mem thru sr ptr */ |
#define rDEC1 65 /* dec pr (may repeat) */ |
#define REFm 66 /* finish instruction with label */ |
#define RETURN 67 /* restore stack and return */ |
#define rINC1 68 /* inc pr (may repeat) */ |
#define SUB12 69 /* sub sr from pr */ |
#define SWAP12 70 /* swap pr and sr */ |
#define SWAP1s 71 /* swap pr and top of stack */ |
#define SWITCH 72 /* find switch case */ |
#define XOR12 73 /* XOR pr with sr */ |
|
/* optimizer-generated */ |
#define ADD1n 74 /* add n to pr */ |
#define ADD21 75 /* add pr to sr */ |
#define ADD2n 76 /* add immediate to sr */ |
#define ADDbpn 77 /* add n to mem byte thru sr ptr */ |
#define ADDwpn 78 /* add n to mem word thru sr ptr */ |
#define ADDm_ 79 /* add n to mem byte/word thru label (part 1) */ |
#define COMMAn 80 /* finish instruction with ,n */ |
#define DECbp 81 /* dec mem byte thru sr ptr */ |
#define DECwp 82 /* dec mem word thru sr ptr */ |
#define POINT2m 83 /* point sr to mem thru label */ |
#define POINT2m_ 84 /* point sr to mem thru label (part 1) */ |
#define GETb1s 85 /* get byte into pr from stack */ |
#define GETb1su 86 /* get unsigned byte into pr from stack */ |
#define GETw1m_ 87 /* get word into pr from mem thru label (part 1) */ |
#define GETw1s 88 /* get word into pr from stack */ |
#define GETw2m 89 /* get word into sr from mem (label) */ |
#define GETw2p 90 /* get word into sr thru sr ptr */ |
#define GETw2s 91 /* get word into sr from stack */ |
#define INCbp 92 /* inc byte in mem thru sr ptr */ |
#define INCwp 93 /* inc word in mem thru sr ptr */ |
#define PLUSn 94 /* finish instruction with +n */ |
#define POINT2s 95 /* point sr to stack */ |
#define PUSH2 96 /* push sr */ |
#define PUSHm 97 /* push word from mem thru label */ |
#define PUSHp 98 /* push word from mem thru sr ptr */ |
#define PUSHs 99 /* push word from stack */ |
#define PUT_m_ 100 /* put byte/word into mem thru label (part 1) */ |
#define rDEC2 101 /* dec sr (may repeat) */ |
#define rINC2 102 /* inc sr (may repeat) */ |
#define SUB_m_ 103 /* sub from mem byte/word thru label (part 1) */ |
#define SUB1n 104 /* sub n from pr */ |
#define SUBbpn 105 /* sub n from mem byte thru sr ptr */ |
#define SUBwpn 106 /* sub n from mem word thru sr ptr */ |
|
#define PCODES 116 /* size of code[] (it's a [+ 1]) */ |
|