[657] | 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:
|
---|
| 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:
|
---|
| 25 | void Init(int _op, RegisterEnum _reg0, MappedRegisterStruct _reg1, MappedRegisterStruct _reg2)
|
---|
| 26 | { op = _op; reg[0].reg = _reg0; reg[1] = _reg1; reg[2] = _reg2; }
|
---|
| 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:
|
---|
| 36 | void Init(OpStruct _op0, OpStruct _op1, OpStruct _op2) { op[0] = _op0; op[1] = _op1; op[2] = _op2; numOps = 3; }
|
---|
| 37 | void Init(OpStruct _op0, OpStruct _op1) { op[0] = _op0; op[1] = _op1; numOps = 2; }
|
---|
| 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:
|
---|
| 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:
|
---|
| 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; }
|
---|
| 64 | void Init(GeneralPortionStruct _portion0, GeneralPortionStruct _portion1, ConstColorStruct _cc0)
|
---|
| 65 | { portion[0] = _portion0; portion[1] = _portion1; numPortions = 2; cc[0] = _cc0; numConsts = 1; }
|
---|
| 66 | void Init(GeneralPortionStruct _portion0, GeneralPortionStruct _portion1)
|
---|
| 67 | { portion[0] = _portion0; portion[1] = _portion1; numPortions = 2; numConsts = 0; }
|
---|
| 68 |
|
---|
| 69 | void Init(GeneralPortionStruct _portion0, ConstColorStruct _cc0, ConstColorStruct _cc1)
|
---|
| 70 | { portion[0] = _portion0; numPortions = 1; cc[0] = _cc0; cc[1] = _cc1; numConsts = 2; }
|
---|
| 71 | void Init(GeneralPortionStruct _portion0, ConstColorStruct _cc0)
|
---|
| 72 | { portion[0] = _portion0; numPortions = 1; cc[0] = _cc0; numConsts = 1; }
|
---|
| 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:
|
---|
| 88 | void Init() {num = 0;}
|
---|
| 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
|
---|