150,176d149
< // Moving to/from double floating point registers
< //
<
< let {{
< microMvtdUopIop = InstObjParams('mvtd_uop', 'MicroMvtdUop',
< 'PredOp',
< {'code': 'Fd.ud = (Rhi.ud << 32) | Rlo;',
< 'predicate_test': predicateTest},
< ['IsMicroop'])
<
< microMvfdUopIop = InstObjParams('mvfd_uop', 'MicroMvfdUop',
< 'PredOp',
< {'code': '''Rhi = bits(Fd.ud, 63, 32);
< Rlo = bits(Fd.ud, 31, 0);''',
< 'predicate_test': predicateTest},
< ['IsMicroop'])
<
< header_output = BasicDeclare.subst(microMvtdUopIop) + \
< BasicDeclare.subst(microMvfdUopIop)
< decoder_output = BasicConstructor.subst(microMvtdUopIop) + \
< BasicConstructor.subst(microMvfdUopIop)
< exec_output = PredOpExecute.subst(microMvtdUopIop) + \
< PredOpExecute.subst(microMvfdUopIop)
< }};
<
< ////////////////////////////////////////////////////////////////////
< //
278,338d250
< def template MacroFPAConstructor {{
< inline %(class_name)s::%(class_name)s(ExtMachInst machInst)
< : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s)
< {
< %(constructor)s;
<
< uint32_t start_addr = 0;
<
< if (prepost)
< start_addr = disp8;
< else
< start_addr = 0;
<
< emit_ldfstf_uops(microOps, 0, machInst, loadop, up, start_addr);
<
< if (writeback)
< {
< if (up) {
< microOps[numMicroops - 1] =
< new MicroAddiUop(machInst, RN, RN, disp8);
< } else {
< microOps[numMicroops - 1] =
< new MicroSubiUop(machInst, RN, RN, disp8);
< }
< }
< microOps[numMicroops - 1]->setLastMicroop();
< }
<
< }};
<
<
< def template MacroFMConstructor {{
< inline %(class_name)s::%(class_name)s(ExtMachInst machInst)
< : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s)
< {
< %(constructor)s;
<
< uint32_t start_addr = 0;
<
< if (prepost)
< start_addr = disp8;
< else
< start_addr = 0;
<
< for (int i = 0; i < count; i++)
< emit_ldfstf_uops(microOps, 3*i, machInst, loadop, up, start_addr);
<
< if (writeback) {
< if (up) {
< microOps[numMicroops - 1] =
< new MicroAddiUop(machInst, RN, RN, disp8);
< } else {
< microOps[numMicroops - 1] =
< new MicroSubiUop(machInst, RN, RN, disp8);
< }
< }
< microOps[numMicroops - 1]->setLastMicroop();
< }
< }};
<
<
346,367d257
<
< def format ArmMacroFPAOp(code, mem_flags = [], inst_flag = [], *opt_flags) {{
< iop = InstObjParams(name, Name, 'ArmMacroFPAOp',
< {"code": code,
< "predicate_test": predicateTest},
< opt_flags)
< header_output = BasicDeclare.subst(iop)
< decoder_output = MacroFPAConstructor.subst(iop)
< decode_block = BasicDecode.subst(iop)
< exec_output = PredOpExecute.subst(iop)
< }};
<
< def format ArmMacroFMOp(code, mem_flags = [], inst_flag = [], *opt_flags) {{
< iop = InstObjParams(name, Name, 'ArmMacroFMOp',
< {"code": code,
< "predicate_test": predicateTest},
< opt_flags)
< header_output = BasicDeclare.subst(iop)
< decoder_output = MacroFMConstructor.subst(iop)
< decode_block = BasicDecode.subst(iop)
< exec_output = PredOpExecute.subst(iop)
< }};