diff options
Diffstat (limited to 'src/arch/x86/isa/microops/mediaop.isa')
-rw-r--r-- | src/arch/x86/isa/microops/mediaop.isa | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/arch/x86/isa/microops/mediaop.isa b/src/arch/x86/isa/microops/mediaop.isa index 0c4827990..7178f1f52 100644 --- a/src/arch/x86/isa/microops/mediaop.isa +++ b/src/arch/x86/isa/microops/mediaop.isa @@ -1490,12 +1490,15 @@ let {{ // Less than 0 0 1 // Equal 1 0 0 // OF = SF = AF = 0 - ccFlagBits = ccFlagBits & ~(OFBit | SFBit | AFBit | - ZFBit | PFBit | CFBit); - if (std::isnan(arg1) || std::isnan(arg2)) - ccFlagBits = ccFlagBits | (ZFBit | PFBit | CFBit); + ccFlagBits = ccFlagBits & ~(SFBit | AFBit | ZFBit | PFBit); + cfofBits = cfofBits & ~(OFBit | CFBit); + + if (std::isnan(arg1) || std::isnan(arg2)) { + ccFlagBits = ccFlagBits | (ZFBit | PFBit); + cfofBits = cfofBits | CFBit; + } else if(arg1 < arg2) - ccFlagBits = ccFlagBits | CFBit; + cfofBits = cfofBits | CFBit; else if(arg1 == arg2) ccFlagBits = ccFlagBits | ZFBit; ''' |