1/* 2 * Copyright (c) 2007 The Hewlett-Packard Development Company 3 * Copyright (c) 2011 Advanced Micro Devices, Inc. 4 * All rights reserved. 5 * 6 * The license below extends only to copyright in the software and shall 7 * not be construed as granting a license to any other intellectual 8 * property including but not limited to intellectual property relating --- 230 unchanged lines hidden (view full) --- 239copyRegs(ThreadContext *src, ThreadContext *dest) 240{ 241 //copy int regs 242 for (int i = 0; i < NumIntRegs; ++i) 243 dest->setIntReg(i, src->readIntReg(i)); 244 //copy float regs 245 for (int i = 0; i < NumFloatRegs; ++i) 246 dest->setFloatRegBits(i, src->readFloatRegBits(i)); |
247 //copy condition-code regs 248 for (int i = 0; i < NumCCRegs; ++i) 249 dest->setCCReg(i, src->readCCReg(i)); |
250 copyMiscRegs(src, dest); 251 dest->pcState(src->pcState()); 252} 253 254void 255skipFunction(ThreadContext *tc) 256{ 257 panic("Not implemented for x86\n"); 258} 259 260uint64_t 261getRFlags(ThreadContext *tc) 262{ 263 const uint64_t ncc_flags(tc->readMiscRegNoEffect(MISCREG_RFLAGS)); |
264 const uint64_t cc_flags(tc->readIntReg(X86ISA::CCREG_ZAPS)); 265 const uint64_t cfof_bits(tc->readIntReg(X86ISA::CCREG_CFOF)); 266 const uint64_t df_bit(tc->readIntReg(X86ISA::CCREG_DF)); |
267 // ecf (PSEUDO(3)) & ezf (PSEUDO(4)) are only visible to 268 // microcode, so we can safely ignore them. 269 270 // Reconstruct the real rflags state, mask out internal flags, and 271 // make sure reserved bits have the expected values. 272 return ((ncc_flags | cc_flags | cfof_bits | df_bit) & 0x3F7FD5) 273 | 0x2; 274} 275 276void 277setRFlags(ThreadContext *tc, uint64_t val) 278{ |
279 tc->setIntReg(X86ISA::CCREG_ZAPS, val & ccFlagMask); 280 tc->setIntReg(X86ISA::CCREG_CFOF, val & cfofMask); 281 tc->setIntReg(X86ISA::CCREG_DF, val & DFBit); |
282 283 // Internal microcode registers (ECF & EZF) |
284 tc->setIntReg(X86ISA::CCREG_ECF, 0); 285 tc->setIntReg(X86ISA::CCREG_EZF, 0); |
286 287 // Update the RFLAGS misc reg with whatever didn't go into the 288 // magic registers. 289 tc->setMiscReg(MISCREG_RFLAGS, val & ~(ccFlagMask | cfofMask | DFBit)); 290} 291 292uint8_t 293convX87TagsToXTags(uint16_t ftw) --- 81 unchanged lines hidden --- |