📄 cc.h
字号:
/*** CC.H -- Symbol Definitions for Small-C compiler.*/#ifdef __GNUC__#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/*** 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]) */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -