Hi Gabe,
I think your code has not yet made into stable/master branch. I see that in
develop branch INTREG_IMPLICIT is no longer there and is replaced by
INTREG_PRODHI and INTREG_PRODLO
However, I see that even in develop branch there are two classes that are
generated - Mul1s and Mul1sFlags. In Mul1s INTREG_PRODLO and INTREG_PRODHI are
not added as source and are only added as destination. But in Mul1sFlags class
they are added both as source and destination.
class Mul1s : public X86ISA::RegOpT<X86ISA::FoldedSrc1Op, X86ISA::FoldedSrc2Op>
{
...
setSrcRegIdx(_numSrcRegs++, RegId(IntRegClass, src1));
setSrcRegIdx(_numSrcRegs++, RegId(IntRegClass, src2));
setDestRegIdx(_numDestRegs++, RegId(IntRegClass,
X86ISA::INTREG_PRODLOW));
_numIntDestRegs++;
setDestRegIdx(_numDestRegs++, RegId(IntRegClass,
X86ISA::INTREG_PRODHI));
_numIntDestRegs++;
...
}
class Mul1sFlags : public X86ISA::RegOpT<X86ISA::FoldedSrc1Op,
X86ISA::FoldedSrc2Op>
{
.....
setSrcRegIdx(_numSrcRegs++, RegId(IntRegClass, src1));
setSrcRegIdx(_numSrcRegs++, RegId(IntRegClass, src2));
setSrcRegIdx(_numSrcRegs++, RegId(IntRegClass, X86ISA::INTREG_PRODLOW));
setDestRegIdx(_numDestRegs++, RegId(IntRegClass,
X86ISA::INTREG_PRODLOW));
_numIntDestRegs++;
setSrcRegIdx(_numSrcRegs++, RegId(IntRegClass, X86ISA::INTREG_PRODHI));
setDestRegIdx(_numDestRegs++, RegId(IntRegClass,
X86ISA::INTREG_PRODHI));
}
Any idea why that would be? Does it have anything to do with how Mul1s is
defined in src/arch/x86/isa/microops/regop.isa. I see that flags_code in that
definition does read ProdHi and ProdLow but it is being produced by the same
instruction. Does isa_parser naively treat it as source because it is RHS in
flags code? My understanding of isa_parser is very primitive so any help there
will be appreciated.
Thanks!
_______________________________________________
gem5-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s