/****************************************************/ /* 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