initial commit
This commit is contained in:
86
src/code.h
Normal file
86
src/code.h
Normal file
@@ -0,0 +1,86 @@
|
||||
/****************************************************/
|
||||
/* File: code.h */
|
||||
/* Code emitting utilities for the TINY compiler */
|
||||
/* and interface to the TM machine */
|
||||
/* Compiler Construction: Principles and Practice */
|
||||
/* Kenneth C. Louden */
|
||||
/****************************************************/
|
||||
|
||||
#ifndef _CODE_H_
|
||||
#define _CODE_H_
|
||||
|
||||
/* pc = program counter */
|
||||
#define pc 7
|
||||
|
||||
/* mp = "memory pointer" points
|
||||
* to top of memory (for temp storage)
|
||||
*/
|
||||
#define mp 6
|
||||
|
||||
/* gp = "global pointer" points
|
||||
* to bottom of memory for (global)
|
||||
* variable storage
|
||||
*/
|
||||
#define gp 5
|
||||
|
||||
/* accumulator */
|
||||
#define ac 0
|
||||
|
||||
/* 2nd accumulator */
|
||||
#define ac1 1
|
||||
|
||||
/* code emitting utilities */
|
||||
|
||||
/* Procedure emitComment prints a comment line
|
||||
* with comment c in the code file
|
||||
*/
|
||||
void emitComment( char * c );
|
||||
|
||||
/* Procedure emitRO emits a register-only
|
||||
* TM instruction
|
||||
* op = the opcode
|
||||
* r = target register
|
||||
* s = 1st source register
|
||||
* t = 2nd source register
|
||||
* c = a comment to be printed if TraceCode is TRUE
|
||||
*/
|
||||
void emitRO( char *op, int r, int s, int t, char *c);
|
||||
|
||||
/* Procedure emitRM emits a register-to-memory
|
||||
* TM instruction
|
||||
* op = the opcode
|
||||
* r = target register
|
||||
* d = the offset
|
||||
* s = the base register
|
||||
* c = a comment to be printed if TraceCode is TRUE
|
||||
*/
|
||||
void emitRM( char * op, int r, int d, int s, char *c);
|
||||
|
||||
/* Function emitSkip skips "howMany" code
|
||||
* locations for later backpatch. It also
|
||||
* returns the current code position
|
||||
*/
|
||||
int emitSkip( int howMany);
|
||||
|
||||
/* Procedure emitBackup backs up to
|
||||
* loc = a previously skipped location
|
||||
*/
|
||||
void emitBackup( int loc);
|
||||
|
||||
/* Procedure emitRestore restores the current
|
||||
* code position to the highest previously
|
||||
* unemitted position
|
||||
*/
|
||||
void emitRestore(void);
|
||||
|
||||
/* Procedure emitRM_Abs converts an absolute reference
|
||||
* to a pc-relative reference when emitting a
|
||||
* register-to-memory TM instruction
|
||||
* op = the opcode
|
||||
* r = target register
|
||||
* a = the absolute location in memory
|
||||
* c = a comment to be printed if TraceCode is TRUE
|
||||
*/
|
||||
void emitRM_Abs( char *op, int r, int a, char * c);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user