1 #ifndef _RC10_GENERAL_H 2 #define _RC10_GENERAL_H 3 4 #include "rc1.0_register.h" 5 #include "nvparse_errors.h" 6 #include "nvparse_externs.h" 7 8 enum { 9 RCP_MUL = 0, 10 RCP_DOT, 11 RCP_MUX, 12 RCP_SUM 13 }; 14 15 class ConstColorStruct { 16 public: Init(RegisterEnum _reg,float _v0,float _v1,float _v2,float _v3)17 void Init(RegisterEnum _reg, float _v0, float _v1, float _v2, float _v3) 18 { reg = _reg; v[0] = _v0; v[1] = _v1; v[2] = _v2; v[3] = _v3; } 19 RegisterEnum reg; 20 float v[4]; 21 }; 22 23 class OpStruct { 24 public: Init(int _op,RegisterEnum _reg0,MappedRegisterStruct _reg1,MappedRegisterStruct _reg2)25 void Init(int _op, RegisterEnum _reg0, MappedRegisterStruct _reg1, MappedRegisterStruct _reg2) 26 { op = _op; reg[0].reg = _reg0; reg[1] = _reg1; reg[2] = _reg2; } Init(int _op,RegisterEnum _reg0)27 void Init(int _op, RegisterEnum _reg0) 28 { op = _op; reg[0].reg = _reg0; } 29 int op; 30 MappedRegisterStruct reg[3]; 31 void Validate(int stage, int portion); 32 }; 33 34 class GeneralFunctionStruct { 35 public: Init(OpStruct _op0,OpStruct _op1,OpStruct _op2)36 void Init(OpStruct _op0, OpStruct _op1, OpStruct _op2) { op[0] = _op0; op[1] = _op1; op[2] = _op2; numOps = 3; } Init(OpStruct _op0,OpStruct _op1)37 void Init(OpStruct _op0, OpStruct _op1) { op[0] = _op0; op[1] = _op1; numOps = 2; } Init(OpStruct _op0)38 void Init(OpStruct _op0) { op[0] = _op0; numOps = 1; } 39 void Validate(int stage, int portion); 40 void Invoke(int stage, int portion, BiasScaleEnum bs); 41 void ZeroOut(); 42 int numOps; 43 OpStruct op[3]; 44 }; 45 46 47 class GeneralPortionStruct { 48 public: Init(int _designator,GeneralFunctionStruct _gf,BiasScaleEnum _bs)49 void Init(int _designator, GeneralFunctionStruct _gf, BiasScaleEnum _bs) 50 { designator = _designator; gf = _gf; bs = _bs; } 51 52 void Validate(int stage); 53 void Invoke(int stage); 54 void ZeroOut(); 55 int designator; 56 GeneralFunctionStruct gf; 57 BiasScaleEnum bs; 58 }; 59 60 class GeneralCombinerStruct { 61 public: Init(GeneralPortionStruct _portion0,GeneralPortionStruct _portion1,ConstColorStruct _cc0,ConstColorStruct _cc1)62 void Init(GeneralPortionStruct _portion0, GeneralPortionStruct _portion1, ConstColorStruct _cc0, ConstColorStruct _cc1) 63 { portion[0] = _portion0; portion[1] = _portion1; numPortions = 2; cc[0] = _cc0; cc[1] = _cc1; numConsts = 2; } Init(GeneralPortionStruct _portion0,GeneralPortionStruct _portion1,ConstColorStruct _cc0)64 void Init(GeneralPortionStruct _portion0, GeneralPortionStruct _portion1, ConstColorStruct _cc0) 65 { portion[0] = _portion0; portion[1] = _portion1; numPortions = 2; cc[0] = _cc0; numConsts = 1; } Init(GeneralPortionStruct _portion0,GeneralPortionStruct _portion1)66 void Init(GeneralPortionStruct _portion0, GeneralPortionStruct _portion1) 67 { portion[0] = _portion0; portion[1] = _portion1; numPortions = 2; numConsts = 0; } 68 Init(GeneralPortionStruct _portion0,ConstColorStruct _cc0,ConstColorStruct _cc1)69 void Init(GeneralPortionStruct _portion0, ConstColorStruct _cc0, ConstColorStruct _cc1) 70 { portion[0] = _portion0; numPortions = 1; cc[0] = _cc0; cc[1] = _cc1; numConsts = 2; } Init(GeneralPortionStruct _portion0,ConstColorStruct _cc0)71 void Init(GeneralPortionStruct _portion0, ConstColorStruct _cc0) 72 { portion[0] = _portion0; numPortions = 1; cc[0] = _cc0; numConsts = 1; } Init(GeneralPortionStruct _portion0)73 void Init(GeneralPortionStruct _portion0) 74 { portion[0] = _portion0; numPortions = 1; numConsts = 0; } 75 76 void Validate(int stage); 77 void SetUnusedLocalConsts(int numGlobalConsts, ConstColorStruct *globalCCs); 78 void Invoke(int stage); 79 void ZeroOut(); 80 GeneralPortionStruct portion[2]; 81 int numPortions; 82 ConstColorStruct cc[2]; 83 int numConsts; 84 }; 85 86 class GeneralCombinersStruct { 87 public: Init()88 void Init() {num = 0;} Init(GeneralCombinerStruct _gc)89 void Init(GeneralCombinerStruct _gc) { num = 1; general[0] = _gc; } 90 GeneralCombinersStruct& operator+=(GeneralCombinerStruct& _gc) 91 { 92 if (num < RCP_NUM_GENERAL_COMBINERS) 93 general[num++] = _gc; 94 else 95 errors.set("Too many general combiners."); 96 return *this; 97 } 98 void Validate(int numConsts, ConstColorStruct *cc); 99 void Invoke(); 100 GeneralCombinerStruct general[RCP_NUM_GENERAL_COMBINERS]; 101 int num; 102 private: 103 int localConsts; 104 }; 105 106 107 #endif 108