31a32,35
> ////////////////////////////////////////////////////////////////////
> //
> // Common microop templates
> //
32a37,48
> def template MicroConstructor {{
> inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
> RegIndex _ura,
> RegIndex _urb,
> uint8_t _imm)
> : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
> _ura, _urb, _imm)
> {
> %(constructor)s;
> }
> }};
>
35c51
< // Integer = Integer op Immediate microops
---
> // Load/store microops
38c54
< def template MicroIntDeclare {{
---
> def template MicroMemDeclare {{
45a62,63
> %(InitiateAccDeclare)s
> %(CompleteAccDeclare)s
49,55c67,100
< def template MicroIntConstructor {{
< inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
< RegIndex _ura,
< RegIndex _urb,
< uint8_t _imm)
< : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
< _ura, _urb, _imm)
---
> let {{
> microLdrUopIop = InstObjParams('ldr_uop', 'MicroLdrUop',
> 'MicroMemOp',
> {'memacc_code': 'Ra = Mem;',
> 'ea_code': 'EA = Rb + (UP ? imm : -imm);',
> 'predicate_test': predicateTest},
> ['IsMicroop'])
>
> microStrUopIop = InstObjParams('str_uop', 'MicroStrUop',
> 'MicroMemOp',
> {'memacc_code': 'Mem = Ra;',
> 'ea_code': 'EA = Rb + (UP ? imm : -imm);',
> 'predicate_test': predicateTest},
> ['IsMicroop'])
>
> header_output = MicroMemDeclare.subst(microLdrUopIop) + \
> MicroMemDeclare.subst(microStrUopIop)
> decoder_output = MicroConstructor.subst(microLdrUopIop) + \
> MicroConstructor.subst(microStrUopIop)
> exec_output = LoadExecute.subst(microLdrUopIop) + \
> StoreExecute.subst(microStrUopIop) + \
> LoadInitiateAcc.subst(microLdrUopIop) + \
> StoreInitiateAcc.subst(microStrUopIop) + \
> LoadCompleteAcc.subst(microLdrUopIop) + \
> StoreCompleteAcc.subst(microStrUopIop)
> }};
>
> ////////////////////////////////////////////////////////////////////
> //
> // Integer = Integer op Immediate microops
> //
>
> def template MicroIntDeclare {{
> class %(class_name)s : public %(base_class)s
57,58c102,107
< %(constructor)s;
< }
---
> public:
> %(class_name)s(ExtMachInst machInst,
> RegIndex _ura, RegIndex _urb,
> uint8_t _imm);
> %(BasicExecDeclare)s
> };
76,77c125,126
< decoder_output = MicroIntConstructor.subst(microAddiUopIop) + \
< MicroIntConstructor.subst(microSubiUopIop)
---
> decoder_output = MicroConstructor.subst(microAddiUopIop) + \
> MicroConstructor.subst(microSubiUopIop)
151c200,203
< microOps[i] = gen_ldrstr_uop(machInst, loadop, j, start_addr);
---
> if (loadop)
> microOps[i] = new MicroLdrUop(machInst, j, 17, start_addr);
> else
> microOps[i] = new MicroStrUop(machInst, j, 17, start_addr);