diff options
Diffstat (limited to 'includes/compiler/PCode.h')
-rw-r--r-- | includes/compiler/PCode.h | 53 |
1 files changed, 31 insertions, 22 deletions
diff --git a/includes/compiler/PCode.h b/includes/compiler/PCode.h index f1f786c..b38d9e1 100644 --- a/includes/compiler/PCode.h +++ b/includes/compiler/PCode.h @@ -34,19 +34,19 @@ enum { typedef enum { RefType_0, - RefType_1, - RefType_2, - RefType_3, + RefType_1, // like D, but 32-bit? + RefType_2, // matches MW_RELOC_3? + RefType_3, // matches MW_RELOC_4? RefType_4, RefType_5, - RefType_6, - RefType_7, - RefType_8, + RefType_6, // LO16? + RefType_7, // HI16? + RefType_8, // HA16? RefType_9, - RefType_A, - RefType_B, - RefType_C, - RefType_D + RefType_A, // another LO + RefType_B, // another HA + RefType_C, // another HA + RefType_D // another LO } PCRefType; struct PCodeArg { @@ -94,6 +94,12 @@ struct PCodeArg { (_op)->data.reg.reg == (_reg) && \ ((_op)->data.reg.effect & EffectWrite)) +#define PC_OP_IS_R_OR_W_REGISTER(_op, _rclass, _reg) \ +((_op)->kind == PCOp_REGISTER && \ + (_op)->arg == (_rclass) && \ + (_op)->data.reg.reg == (_reg) && \ + ((_op)->data.reg.effect & (EffectRead | EffectWrite))) + #define PC_OP_IS_ANY_REGISTER(_op, _rclass) \ ((_op)->kind == PCOp_REGISTER && \ (_op)->arg == (_rclass)) @@ -152,16 +158,16 @@ struct PCodeBlock { /* PCode Flags */ enum { - fPCodeFlag1 = 1, - fPCodeFlag2 = 2, // some kinda load - fPCodeFlag4 = 4, // some kinda store - fPCodeFlag8 = 8, - fPCodeFlag10 = 0x10, - fPCodeFlag20 = 0x20, + fPCodeFlag1 = 1, // some kinds of branches + fPCodeFlag2 = 2, // read from memory + fPCodeFlag4 = 4, // write to memory + fPCodeFlag8 = 8, // other kinds of branches + fPCodeFlag10 = 0x10, // moves + fPCodeFlag20 = 0x20, // indexed operations // Always valid fIsConst = 0x40, fIsVolatile = 0x80, - fSideEffects = 0x100, + fSideEffects = 0x100, // instructions that do weird stuff with PPC state fPCodeFlag200 = 0x200, // ? fPCodeFlag400 = 0x400, // ? fPCodeFlag800 = 0x800, // ? @@ -171,23 +177,24 @@ enum { fPCodeFlag8000 = 0x8000, fPCodeFlag20000 = 0x20000, // some kinda load? fPCodeFlag40000 = 0x40000, // some kinda store? - // Set 1 only + // Set 1 (branches) only fLink = 0x1000000, fBranchNotTaken = 0x4000000, fBranchTaken = 0x8000000, fAbsolute = 0x10000000, - // Set 2 only + // Set 2 (non-branches) only fIsPtrOp = 0x20, fOverflow = 0x800000, fSetsCarry = 0x10000000, + fPCodeFlag20000000 = 0x20000000, // record bit? // ?? fPCodeFlag2000000 = 0x2000000, fPCodeFlag4000000 = 0x4000000, fPCodeFlag8000000 = 0x8000000, fPCodeFlag10000000 = 0x10000000, - fPCodeFlag20000000 = 0x20000000, // record bit? fPCodeFlag40000000 = 0x40000000, - fPCodeFlag80000000 = 0x80000000 + fPCodeFlag80000000 = 0x80000000, + fPCodeFlagC0000000 = 0xC0000000 }; enum { @@ -198,7 +205,9 @@ enum { fPCBlockFlag10 = 0x10, fPCBlockFlag20 = 0x20, fPCBlockFlag2000 = 0x2000, - fPCBlockFlag4000 = 0x4000 + fPCBlockFlag4000 = 0x4000, + fPCBlockFlag6000 = 0x6000, + fPCBlockFlag8000 = 0x8000 }; extern PCodeBlock *pcbasicblocks; |