ARM: Add floating point load/store microops.
This commit is contained in:
parent
3a11412c99
commit
cb631d87c3
1 changed files with 29 additions and 15 deletions
|
@ -58,6 +58,13 @@ let {{
|
||||||
'predicate_test': predicateTest},
|
'predicate_test': predicateTest},
|
||||||
['IsMicroop'])
|
['IsMicroop'])
|
||||||
|
|
||||||
|
microLdrFpUopIop = InstObjParams('ldrfp_uop', 'MicroLdrFpUop',
|
||||||
|
'MicroMemOp',
|
||||||
|
{'memacc_code': 'Fa = Mem;',
|
||||||
|
'ea_code': 'EA = Rb + (up ? imm : -imm);',
|
||||||
|
'predicate_test': predicateTest},
|
||||||
|
['IsMicroop'])
|
||||||
|
|
||||||
microLdrRetUopCode = '''
|
microLdrRetUopCode = '''
|
||||||
Ra = Mem;
|
Ra = Mem;
|
||||||
uint32_t newCpsr =
|
uint32_t newCpsr =
|
||||||
|
@ -80,21 +87,28 @@ let {{
|
||||||
'predicate_test': predicateTest},
|
'predicate_test': predicateTest},
|
||||||
['IsMicroop'])
|
['IsMicroop'])
|
||||||
|
|
||||||
header_output = MicroMemDeclare.subst(microLdrUopIop) + \
|
microStrFpUopIop = InstObjParams('strfp_uop', 'MicroStrFpUop',
|
||||||
MicroMemDeclare.subst(microLdrRetUopIop) + \
|
'MicroMemOp',
|
||||||
MicroMemDeclare.subst(microStrUopIop)
|
{'memacc_code': 'Mem = Fa;',
|
||||||
decoder_output = MicroMemConstructor.subst(microLdrUopIop) + \
|
'ea_code': 'EA = Rb + (up ? imm : -imm);',
|
||||||
MicroMemConstructor.subst(microLdrRetUopIop) + \
|
'predicate_test': predicateTest},
|
||||||
MicroMemConstructor.subst(microStrUopIop)
|
['IsMicroop'])
|
||||||
exec_output = LoadExecute.subst(microLdrUopIop) + \
|
|
||||||
LoadExecute.subst(microLdrRetUopIop) + \
|
header_output = decoder_output = exec_output = ''
|
||||||
StoreExecute.subst(microStrUopIop) + \
|
|
||||||
LoadInitiateAcc.subst(microLdrUopIop) + \
|
loadIops = (microLdrUopIop, microLdrFpUopIop, microLdrRetUopIop)
|
||||||
LoadInitiateAcc.subst(microLdrRetUopIop) + \
|
storeIops = (microStrUopIop, microStrFpUopIop)
|
||||||
StoreInitiateAcc.subst(microStrUopIop) + \
|
for iop in loadIops + storeIops:
|
||||||
LoadCompleteAcc.subst(microLdrUopIop) + \
|
header_output += MicroMemDeclare.subst(iop)
|
||||||
LoadCompleteAcc.subst(microLdrRetUopIop) + \
|
decoder_output += MicroMemConstructor.subst(iop)
|
||||||
StoreCompleteAcc.subst(microStrUopIop)
|
for iop in loadIops:
|
||||||
|
exec_output += LoadExecute.subst(iop) + \
|
||||||
|
LoadInitiateAcc.subst(iop) + \
|
||||||
|
LoadCompleteAcc.subst(iop)
|
||||||
|
for iop in storeIops:
|
||||||
|
exec_output += StoreExecute.subst(iop) + \
|
||||||
|
StoreInitiateAcc.subst(iop) + \
|
||||||
|
StoreCompleteAcc.subst(iop)
|
||||||
}};
|
}};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
Loading…
Reference in a new issue