utility.hh revision 4587:2c9a2534a489
12428SN/A/* 22428SN/A * Copyright (c) 2007 The Hewlett-Packard Development Company 32428SN/A * All rights reserved. 42428SN/A * 52428SN/A * Redistribution and use of this software in source and binary forms, 62428SN/A * with or without modification, are permitted provided that the 72428SN/A * following conditions are met: 82428SN/A * 92428SN/A * The software must be used only for Non-Commercial Use which means any 102428SN/A * use which is NOT directed to receiving any direct monetary 112428SN/A * compensation for, or commercial advantage from such use. Illustrative 122428SN/A * examples of non-commercial use are academic research, personal study, 132428SN/A * teaching, education and corporate research & development. 142428SN/A * Illustrative examples of commercial use are distributing products for 152428SN/A * commercial advantage and providing services using the software for 162428SN/A * commercial advantage. 172428SN/A * 182428SN/A * If you wish to use this software or functionality therein that may be 192428SN/A * covered by patents for commercial use, please contact: 202428SN/A * Director of Intellectual Property Licensing 212428SN/A * Office of Strategy and Technology 222428SN/A * Hewlett-Packard Company 232428SN/A * 1501 Page Mill Road 242428SN/A * Palo Alto, California 94304 252428SN/A * 262428SN/A * Redistributions of source code must retain the above copyright notice, 272665Ssaidi@eecs.umich.edu * this list of conditions and the following disclaimer. Redistributions 282665Ssaidi@eecs.umich.edu * in binary form must reproduce the above copyright notice, this list of 292665Ssaidi@eecs.umich.edu * conditions and the following disclaimer in the documentation and/or 302428SN/A * other materials provided with the distribution. Neither the name of 312428SN/A * the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its 322428SN/A * contributors may be used to endorse or promote products derived from 332428SN/A * this software without specific prior written permission. No right of 342428SN/A * sublicense is granted herewith. Derivatives of the software and 356214Snate@binkert.org * output created using the software may be prepared, but only for 362428SN/A * Non-Commercial Uses. Derivatives of the software may be shared with 375569Snate@binkert.org * others provided: (i) the others agree to abide by the list of 385569Snate@binkert.org * conditions herein which includes the Non-Commercial Use restrictions; 395569Snate@binkert.org * and (ii) such Derivatives of the software include the above copyright 405569Snate@binkert.org * notice to acknowledge the contribution from this software where 415569Snate@binkert.org * applicable, this list of conditions and the disclaimer below. 425569Snate@binkert.org * 435569Snate@binkert.org * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 445569Snate@binkert.org * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 455569Snate@binkert.org * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 465569Snate@binkert.org * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 475569Snate@binkert.org * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 485569Snate@binkert.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 495569Snate@binkert.org * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 505569Snate@binkert.org * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 515569Snate@binkert.org * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 525569Snate@binkert.org * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 535569Snate@binkert.org * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 542428SN/A * 555569Snate@binkert.org * Authors: Gabe Black 565569Snate@binkert.org */ 575569Snate@binkert.org 585569Snate@binkert.org#ifndef __ARCH_X86_UTILITY_HH__ 592428SN/A#define __ARCH_X86_UTILITY_HH__ 605569Snate@binkert.org 615569Snate@binkert.org#include "arch/x86/types.hh" 625569Snate@binkert.org#include "base/hashmap.hh" 635569Snate@binkert.org#include "base/misc.hh" 645569Snate@binkert.org#include "cpu/thread_context.hh" 655569Snate@binkert.org#include "sim/host.hh" 662428SN/A 675569Snate@binkert.orgclass ThreadContext; 685569Snate@binkert.org 695569Snate@binkert.orgnamespace __hash_namespace { 705569Snate@binkert.org template<> 712428SN/A struct hash<X86ISA::ExtMachInst> { 722428SN/A size_t operator()(const X86ISA::ExtMachInst &emi) const { 732428SN/A return (((uint64_t)emi.legacy << 56) | 745569Snate@binkert.org ((uint64_t)emi.rex << 48) | 75 ((uint64_t)emi.modRM << 40) | 76 ((uint64_t)emi.sib << 32) | 77 ((uint64_t)emi.opcode.num << 24) | 78 ((uint64_t)emi.opcode.prefixA << 16) | 79 ((uint64_t)emi.opcode.prefixB << 8) | 80 ((uint64_t)emi.opcode.op)) ^ 81 emi.immediate ^ emi.displacement ^ 82 emi.mode ^ 83 emi.opSize ^ emi.addrSize ^ emi.stackSize; 84 }; 85 }; 86} 87 88namespace X86ISA 89{ 90 static inline bool 91 inUserMode(ThreadContext *tc) 92 { 93 return false; 94 } 95 96 inline bool isCallerSaveIntegerRegister(unsigned int reg) { 97 panic("register classification not implemented"); 98 return false; 99 } 100 101 inline bool isCalleeSaveIntegerRegister(unsigned int reg) { 102 panic("register classification not implemented"); 103 return false; 104 } 105 106 inline bool isCallerSaveFloatRegister(unsigned int reg) { 107 panic("register classification not implemented"); 108 return false; 109 } 110 111 inline bool isCalleeSaveFloatRegister(unsigned int reg) { 112 panic("register classification not implemented"); 113 return false; 114 } 115 116 // Instruction address compression hooks 117 inline Addr realPCToFetchPC(const Addr &addr) 118 { 119 return addr; 120 } 121 122 inline Addr fetchPCToRealPC(const Addr &addr) 123 { 124 return addr; 125 } 126 127 // the size of "fetched" instructions (not necessarily the size 128 // of real instructions for PISA) 129 inline size_t fetchInstSize() 130 { 131 return sizeof(MachInst); 132 } 133 134 /** 135 * Function to insure ISA semantics about 0 registers. 136 * @param tc The thread context. 137 */ 138 template <class TC> 139 void zeroRegisters(TC *tc); 140 141 inline void initCPU(ThreadContext *tc, int cpuId) 142 { 143 panic("initCPU not implemented!\n"); 144 } 145 146 inline void startupCPU(ThreadContext *tc, int cpuId) 147 { 148 tc->activate(0); 149 } 150}; 151 152#endif // __ARCH_X86_UTILITY_HH__ 153