diff options
Diffstat (limited to 'includes/compiler/IroLinearForm.h')
-rw-r--r-- | includes/compiler/IroLinearForm.h | 165 |
1 files changed, 0 insertions, 165 deletions
diff --git a/includes/compiler/IroLinearForm.h b/includes/compiler/IroLinearForm.h deleted file mode 100644 index 1e7df4f..0000000 --- a/includes/compiler/IroLinearForm.h +++ /dev/null @@ -1,165 +0,0 @@ -#ifndef COMPILER_IROLINEARFORM_H -#define COMPILER_IROLINEARFORM_H - -#include "compiler/IrOptimizer.h" -#include "compiler/Switch.h" -#include "compiler/enode.h" - -#ifdef __MWERKS__ -#pragma options align=mac68k -#endif - -typedef struct IROLinearIRSave { - IROLinear *firstLinear; - IROLinear *lastLinear; - UInt32 numLinear; - Statement *curStat; - Boolean disableDueToAsm; - Boolean isLeafFunction; - Boolean functionHasReturn; - void *nullCheckList; - Statement *currStmt; - Statement *prevStmt; -} IROLinearIRSave; - -typedef enum IROLinearType { - IROLinearNop, - IROLinearOperand, - IROLinearOp1Arg, - IROLinearOp2Arg, - IROLinearGoto, - IROLinearIf, - IROLinearIfNot, - IROLinearReturn, - IROLinearLabel, - IROLinearSwitch, - IROLinearOp3Arg, - IROLinearFunccall, - IROLinearEntry, - IROLinearExit, - IROLinearBeginCatch, - IROLinearEndCatch, - IROLinearEndCatchDtor, - IROLinearAsm, - IROLinear18, - IROLinear19, - IROLinearEnd -} IROLinearType; - -enum { - IROLF_1 = 0x1, - IROLF_Reffed = 0x2, - IROLF_Assigned = 0x4, - IROLF_8 = 0x8, - IROLF_Used = 0x10, - IROLF_Ind = 0x20, - IROLF_Subs = 0x40, - IROLF_80 = 0x80, - IROLF_LoopInvariant = 0x100, - IROLF_BeginLoop = 0x200, - IROLF_EndLoop = 0x400, - IROLF_Ris = 0x800, - IROLF_Immind = 0x1000, - IROLF_VecOp = 0x2000, - IROLF_4000 = 0x4000, - IROLF_8000 = 0x8000, - IROLF_VecOpBase = 0x10000, - IROLF_20000 = 0x20000, - IROLF_CounterLoop = 0x40000, - IROLF_BitfieldIndirect = 0x80000, - IROLF_CouldError = 0x100000 -}; - -// actual name is LinearNode as per mwccppc v8 -struct IROLinear { - IROLinearType type; - ENodeType nodetype; - SInt32 flags; - UInt16 nodeflags; - unsigned short index; - Statement *stmt; - Type *rtype; - IROExpr *expr; - struct ERange *x16; - PointsToFunction *pointsToFunction; - Boolean x1E; - union { - struct { - void *data1; - void *data2; - void *data3; - void *data4; - void *data5; - } idk; - // Operand - ENode *node; - // Op1Arg - IROLinear *monadic; - // Op2Arg - struct { - IROLinear *left; - IROLinear *right; - } diadic; - // Op3Arg - struct { - IROLinear *a; - IROLinear *b; - IROLinear *c; - } args3; - // Funccall - struct { - char ispascal; - short argCount; - IROLinear **args; - IROLinear *linear8; // funcref - TypeFunc *functype; - struct LocationSetSet *returnedLocs; - } funccall; - // Asm - Statement *asm_stmt; - // If, IfNot, Goto, Label - struct { - CLabel *label; - IROLinear *x4; // if,ifnot only?? - } label; - struct { - SwitchInfo *info; - IROLinear *x4; - } swtch; - // BeginCatch, EndCatch, EndCatchDtor - struct { - IROLinear *linear; - int x4; - int x8; - } ctch; - } u; - IROLinear *next; -}; - -#ifdef __MWERKS__ -#pragma options align=reset -#endif - -extern IROLinear *IRO_FirstLinear; -extern IROLinear *IRO_LastLinear; -extern UInt32 IRO_NumLinear; -extern Statement *CurStat; - -extern IROLinear *IRO_NewLinear(IROLinearType type); -extern void IRO_PreLinearize(Statement *stmt); -extern void IRO_Linearize(Statement *stmt); -extern ENode *IRO_NewENode(ENodeType nodetype); -extern Statement *IRO_Delinearize(IRONode *node, IROLinear *linear); -extern void IRO_RenumberInts(void); -extern void IRO_UpdateFlagsOnInts(void); -extern void IRO_SaveLinearIR(IROLinearIRSave *save); -extern void IRO_RestoreLinearIR(IROLinearIRSave *save); - -#define IS_LINEAR_ENODE(_linear, _nodetype) ( ((_linear)->type == IROLinearOperand) && ((_linear)->u.node->type) == (_nodetype) ) -#define IS_LINEAR_MONADIC(_linear, _nodetype) ( ((_linear)->type == IROLinearOp1Arg) && ((_linear)->nodetype) == (_nodetype) ) -#define IS_LINEAR_MONADIC_2(_linear, _nodetype1, _nodetype2) ( ((_linear)->type == IROLinearOp1Arg) && (((_linear)->nodetype) == (_nodetype1) || ((_linear)->nodetype) == (_nodetype2)) ) -#define IS_LINEAR_DIADIC(_linear, _nodetype) ( ((_linear)->type == IROLinearOp2Arg) && ((_linear)->nodetype) == (_nodetype) ) -#define IS_LINEAR_DIADIC_2(_linear, _nodetype1, _nodetype2) ( ((_linear)->type == IROLinearOp2Arg) && (((_linear)->nodetype) == (_nodetype1) || ((_linear)->nodetype) == (_nodetype2)) ) -#define IS_LINEAR_DIADIC_3(_linear, _nodetype1, _nodetype2, _nodetype3) ( ((_linear)->type == IROLinearOp2Arg) && (((_linear)->nodetype) == (_nodetype1) || ((_linear)->nodetype) == (_nodetype2) || ((_linear)->nodetype) == (_nodetype3)) ) - -#endif |