Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2. ** CC.H -- Symbol Definitions for Small-C compiler.
  3. */
  4.  
  5. #ifdef _MSC_VER
  6. #define YES      1  /* true */
  7. #define NO       0  /* false */
  8. #define CR      13  /* ASCII carriage return */
  9. #define LF      10  /* ASCII line feed */
  10. #define BELL     7  /* ASCII bell */
  11. #define SPACE  ' '  /* ASCII space */
  12. #define NEWLINE LF  /* Small C newline character */
  13.  
  14. #endif
  15.  
  16. /*
  17. ** size of 'int'
  18. */
  19.  
  20. #define INT32       /* if #defined int = 32 bits, else 16 */
  21.  
  22. /*
  23. ** ALIGNMENT
  24. */
  25.  
  26. #define ALIGN   4
  27.  
  28.  
  29. /*
  30. ** machine dependent parameters
  31. */
  32. #define BPD     4   /* bytes per dword */
  33. #define LBPD    2   /* log2(BPD) */
  34. #define BPW     2   /* bytes per word */
  35. #define LBPW    1   /* log2(BPW) */
  36. #define SBPC    1   /* stack bytes per character */
  37. #define ERRCODE 7   /* op sys return code */
  38. #define INTSIZE 4
  39.  
  40. /*
  41. ** symbol table format
  42. */
  43. #define IDENT    0
  44. #define TYPE     1
  45. #define CLASS    2
  46. #define SIZE     3
  47. #define OFFSET   5+2
  48. #define NAME     (7+4)
  49.  
  50. #define SYMAVG  (12+4)
  51. #define SYMMAX  (16+4)
  52.  
  53. /*
  54. ** symbol table parameters
  55. */
  56. #define NUMLOCS   25
  57. #define STARTLOC  symtab
  58. #define ENDLOC    (symtab+NUMLOCS*SYMAVG)
  59. #define NUMGLBS   200
  60. #define STARTGLB  ENDLOC
  61. #define ENDGLB    (ENDLOC+(NUMGLBS-1)*SYMMAX)
  62. #define SYMTBSZ   /*3050*/ (NUMLOCS*SYMAVG + NUMGLBS*SYMMAX)
  63.  
  64. /*
  65. ** system wide name size (for symbols)
  66. */
  67. #define NAMESIZE 9
  68. #define NAMEMAX  8
  69.  
  70. /*
  71. ** values for "IDENT"
  72. */
  73. #define LABEL    0
  74. #define VARIABLE 1
  75. #define ARRAY    2
  76. #define POINTER  3
  77. #define FUNCTION 4
  78.  
  79. #define PTRSIZE  INTSIZE        /* Size of pointer (must match an int!) */
  80.  
  81.  
  82. /*
  83. ** values for "TYPE"
  84. **    high order 14 bits give length of object
  85. **    low order 2 bits make type unique within length
  86. */
  87. /*      LABEL   0 */
  88. #define CHR     (  1 << 2)
  89. #define SHORT   (BPW << 2)
  90. #define INT     (INTSIZE << 2)
  91. #define UCHR   ((  1 << 2) + 1)
  92. #define USHORT ((BPW << 2) + 1)
  93. #define UINT   ((INTSIZE << 2) + 1)
  94. #define UNSIGNED             1
  95.  
  96. /*
  97. ** values for "CLASS"
  98. */
  99. /*      LABEL     0 */
  100. #define AUTOMATIC 1
  101. #define STATIC    2
  102. #define EXTERNAL  3
  103. #define AUTOEXT   4
  104.  
  105. /*
  106. ** segment types
  107. */
  108. #define DATASEG 1
  109. #define CODESEG 2
  110.  
  111. /*
  112. ** "switch" table
  113. */
  114. #define SWSIZ   (2*BPW)
  115. #define SWTABSZ (90*SWSIZ)
  116.  
  117. /*
  118. ** "while" queue
  119. */
  120. #define WQTABSZ  30
  121. #define WQSIZ     3
  122. #define WQMAX   (wq+WQTABSZ-WQSIZ)
  123.  
  124. /*
  125. ** field offsets in "while" queue
  126. */
  127. #define WQSP    0
  128. #define WQLOOP  1
  129. #define WQEXIT  2
  130.  
  131. /*
  132. ** literal pool
  133. */
  134. #define LITABSZ 3000
  135. #define LITMAX  (LITABSZ-1)
  136.  
  137. /*
  138. ** input line
  139. */
  140. #define LINEMAX  127
  141. #define LINESIZE 128
  142.  
  143. /*
  144. ** entries in staging buffer
  145. */
  146. #define STAGESIZE   200
  147.  
  148. /*
  149. ** macro (#define) pool
  150. */
  151. #define MACNBR   300
  152. #define MACNSIZE (MACNBR*(NAMESIZE+2))
  153. #define MACNEND  (macn+MACNSIZE)
  154. #define MACQSIZE (MACNBR*7)
  155. #define MACMAX   (MACQSIZE-1)
  156.  
  157. /*
  158. ** statement types
  159. */
  160. #define STIF      1
  161. #define STWHILE   2
  162. #define STRETURN  3
  163. #define STBREAK   4
  164. #define STCONT    5
  165. #define STASM     6
  166. #define STEXPR    7
  167. #define STDO      8
  168. #define STFOR     9
  169. #define STSWITCH 10
  170. #define STCASE   11
  171. #define STDEF    12
  172. #define STGOTO   13
  173. #define STLABEL  14
  174.  
  175. /*
  176. ** p-code symbols
  177. **
  178. ** legend:
  179. **  1 = primary register (pr in comments)
  180. **  2 = secondary register (sr in comments)
  181. **  b = byte
  182. **  f = jump on false condition
  183. **  l = current literal pool label number
  184. **  m = memory reference by label
  185. **  n = numeric constant
  186. **  p = indirect reference thru pointer in sr
  187. **  r = repeated r times
  188. **  s = stack frame reference
  189. **  u = unsigned
  190. **  w = word
  191. **  _ (tail) = another p-code completes this one
  192. */
  193.  
  194.         /* compiler-generated */
  195. #define ADD12     1   /* add sr to pr */
  196. #define ADDSP     2   /* add to stack pointer */
  197. #define AND12     3   /* AND sr to pr */
  198. #define ANEG1     4   /* arith negate pr */
  199. #define ARGCNTn   5   /* pass arg count to function */
  200. #define ASL12     6   /* arith shift left sr by pr into pr */
  201. #define ASR12     7   /* arith shift right sr by pr into pr */
  202. #define CALL1     8   /* call function thru pr */
  203. #define CALLm     9   /* call function directly */
  204. #define BYTE_    10   /* define bytes (part 1) */
  205. #define BYTEn    11   /* define byte of value n */
  206. #define BYTEr0   12   /* define r bytes of value 0 */
  207. #define COM1     13   /* ones complement pr */
  208. #define DBL1     14   /* double pr */
  209. #define DBL2     15   /* double sr */
  210. #define DIV12    16   /* div pr by sr */
  211. #define DIV12u   17   /* div pr by sr unsigned */
  212.  
  213. #define DWORD_  111   /* define dword (part 1) */
  214. #define DWORDn  112   /* define dword of value n */
  215. #define DWORDr0 113   /* define r dwords of value 0 */
  216.  
  217. #define ENTER    18   /* set stack frame on function entry */
  218. #define EQ10f    19   /* jump if (pr == 0) is false */
  219. #define EQ12     20   /* set pr TRUE if (sr == pr) */
  220. #define GE10f    21   /* jump if (pr >= 0) is false */
  221. #define GE12     22   /* set pr TRUE if (sr >= pr) */
  222. #define GE12u    23   /* set pr TRUE if (sr >= pr) unsigned */
  223. #define POINT1l  24   /* point pr to function's literal pool */
  224. #define POINT1m  25   /* point pr to mem item thru label */
  225. #define GETb1m   26   /* get byte into pr from mem thru label */
  226. #define GETb1mu  27   /* get unsigned byte into pr from mem thru label */
  227. #define GETb1p   28   /* get byte into pr from mem thru sr ptr */
  228. #define GETb1pu  29   /* get unsigned byte into pr from mem thru sr ptr */
  229.  
  230. #define GETd1m  107   /* get dword into pr from mem thru label */
  231. #define GETd1n  108   /* get dword of value n into pr */
  232. #define GETd1p  109   /* get dword into pr from mem thru sr ptr */
  233. #define GETd2n  110   /* get word of value n into sr */
  234.  
  235. #define GETw1m   30   /* get word into pr from mem thru label */
  236. #define GETw1n   31   /* get word of value n into pr */
  237. #define GETw1p   32   /* get word into pr from mem thru sr ptr */
  238. #define GETw2n   33   /* get word of value n into sr */
  239. #define GT10f    34   /* jump if (pr > 0) is false */
  240. #define GT12     35   /* set pr TRUE if (sr > pr) */
  241. #define GT12u    36   /* set pr TRUE if (sr > pr) unsigned */
  242. #define WORD_    37   /* define word (part 1) */
  243. #define WORDn    38   /* define word of value n */
  244. #define WORDr0   39   /* define r words of value 0 */
  245. #define JMPm     40   /* jump to label */
  246. #define LABm     41   /* define label m */
  247. #define LE10f    42   /* jump if (pr <= 0) is false */
  248. #define LE12     43   /* set pr TRUE if (sr <= pr) */
  249. #define LE12u    44   /* set pr TRUE if (sr <= pr) unsigned */
  250. #define LNEG1    45   /* logical negate pr */
  251. #define LT10f    46   /* jump if (pr < 0) is false */
  252. #define LT12     47   /* set pr TRUE if (sr < pr) */
  253. #define LT12u    48   /* set pr TRUE if (sr < pr) unsigned */
  254. #define MOD12    49   /* modulo pr by sr */
  255. #define MOD12u   50   /* modulo pr by sr unsigned */
  256. #define MOVE21   51   /* move pr to sr */
  257. #define MUL12    52   /* multiply pr by sr */
  258. #define MUL12u   53   /* multiply pr by sr unsigned */
  259. #define NE10f    54   /* jump if (pr != 0) is false */
  260. #define NE12     55   /* set pr TRUE if (sr != pr) */
  261. #define NEARm    56   /* define near pointer thru label */
  262. #define OR12     57   /* OR sr onto pr */
  263. #define POINT1s  58   /* point pr to stack item */
  264. #define POP2     59   /* pop stack into sr */
  265. #define PUSH1    60   /* push pr onto stack */
  266. #define PUTbm1   61   /* put pr byte in mem thru label */
  267. #define PUTbp1   62   /* put pr byte in mem thru sr ptr */
  268.  
  269. #define PUTdm1  114   /* put pr dword in mem thru label */
  270. #define PUTdp1  115   /* put pr dword in mem thru sr ptr */
  271.  
  272. #define PUTwm1   63   /* put pr word in mem thru label */
  273. #define PUTwp1   64   /* put pr word in mem thru sr ptr */
  274. #define rDEC1    65   /* dec pr (may repeat) */
  275. #define REFm     66   /* finish instruction with label */
  276. #define RETURN   67   /* restore stack and return */
  277. #define rINC1    68   /* inc pr (may repeat) */
  278. #define SUB12    69   /* sub sr from pr */
  279. #define SWAP12   70   /* swap pr and sr */
  280. #define SWAP1s   71   /* swap pr and top of stack */
  281. #define SWITCH   72   /* find switch case */
  282. #define XOR12    73   /* XOR pr with sr */
  283.  
  284.         /* optimizer-generated */
  285. #define ADD1n    74   /* add n to pr */
  286. #define ADD21    75   /* add pr to sr */
  287. #define ADD2n    76   /* add immediate to sr */
  288. #define ADDbpn   77   /* add n to mem byte thru sr ptr */
  289. #define ADDwpn   78   /* add n to mem word thru sr ptr */
  290. #define ADDm_    79   /* add n to mem byte/word thru label (part 1) */
  291. #define COMMAn   80   /* finish instruction with ,n */
  292. #define DECbp    81   /* dec mem byte thru sr ptr */
  293. #define DECwp    82   /* dec mem word thru sr ptr */
  294. #define POINT2m  83   /* point sr to mem thru label */
  295. #define POINT2m_ 84   /* point sr to mem thru label (part 1) */
  296. #define GETb1s   85   /* get byte into pr from stack */
  297. #define GETb1su  86   /* get unsigned byte into pr from stack */
  298. #define GETw1m_  87   /* get word into pr from mem thru label (part 1) */
  299. #define GETw1s   88   /* get word into pr from stack */
  300. #define GETw2m   89   /* get word into sr from mem (label) */
  301. #define GETw2p   90   /* get word into sr thru sr ptr */
  302. #define GETw2s   91   /* get word into sr from stack */
  303. #define INCbp    92   /* inc byte in mem thru sr ptr */
  304. #define INCwp    93   /* inc word in mem thru sr ptr */
  305. #define PLUSn    94   /* finish instruction with +n */
  306. #define POINT2s  95   /* point sr to stack */
  307. #define PUSH2    96   /* push sr */
  308. #define PUSHm    97   /* push word from mem thru label */
  309. #define PUSHp    98   /* push word from mem thru sr ptr */
  310. #define PUSHs    99   /* push word from stack */
  311. #define PUT_m_  100   /* put byte/word into mem thru label (part 1) */
  312. #define rDEC2   101   /* dec sr (may repeat) */
  313. #define rINC2   102   /* inc sr (may repeat) */
  314. #define SUB_m_  103   /* sub from mem byte/word thru label (part 1) */
  315. #define SUB1n   104   /* sub n from pr */
  316. #define SUBbpn  105   /* sub n from mem byte thru sr ptr */
  317. #define SUBwpn  106   /* sub n from mem word thru sr ptr */
  318.  
  319. #define PCODES  116   /* size of code[] (it's a [+ 1]) */
  320.  
  321.