1/* 2 * Copyright (c) 2007 The Hewlett-Packard Development Company 3 * All rights reserved. 4 * 5 * Redistribution and use of this software in source and binary forms, 6 * with or without modification, are permitted provided that the 7 * following conditions are met: 8 * --- 49 unchanged lines hidden (view full) --- 58#include "arch/x86/insts/microregop.hh" 59#include "arch/x86/miscregs.hh" 60#include "base/condcodes.hh" 61#include <string> 62 63namespace X86ISA 64{ 65 uint64_t RegOpBase::genFlags(uint64_t oldFlags, uint64_t flagMask, |
66 uint64_t _dest, uint64_t _src1, uint64_t _src2, 67 bool subtract) const |
68 { |
69 DPRINTF(Sparc, "flagMask = %#x\n", flagMask); |
70 uint64_t flags = oldFlags & ~flagMask; |
71 if(flagMask & CFBit) 72 if(findCarry(dataSize*8, _dest, _src1, _src2)) 73 flags |= CFBit; 74 if(subtract) 75 flags ^= CFBit; 76 if(flagMask & PFBit && findParity(dataSize*8, _dest)) |
77 flags |= PFBit; |
78 if(flagMask & ECFBit && findCarry(dataSize*8, _dest, _src1, _src2)) |
79 flags |= ECFBit; |
80 if(flagMask & AFBit) 81 if(findCarry(4, _dest, _src1, _src2)) 82 flags |= AFBit; 83 if(subtract) 84 flags ^= AFBit; 85 if(flagMask & EZFBit && findZero(dataSize*8, _dest)) |
86 flags |= EZFBit; |
87 if(flagMask & ZFBit && findZero(dataSize*8, _dest)) |
88 flags |= ZFBit; |
89 if(flagMask & SFBit && findNegative(dataSize*8, _dest)) |
90 flags |= SFBit; |
91 if(flagMask & OFBit && findOverflow(dataSize*8, _dest, _src1, _src2)) |
92 flags |= OFBit; 93 return flags; 94 } 95 96 bool RegOpBase::checkCondition(uint64_t flags) const 97 { 98 CCFlagBits ccflags = flags; 99 switch(ext) --- 97 unchanged lines hidden --- |