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