8// The software must be used only for Non-Commercial Use which means any 9// use which is NOT directed to receiving any direct monetary 10// compensation for, or commercial advantage from such use. Illustrative 11// examples of non-commercial use are academic research, personal study, 12// teaching, education and corporate research & development. 13// Illustrative examples of commercial use are distributing products for 14// commercial advantage and providing services using the software for 15// commercial advantage. 16// 17// If you wish to use this software or functionality therein that may be 18// covered by patents for commercial use, please contact: 19// Director of Intellectual Property Licensing 20// Office of Strategy and Technology 21// Hewlett-Packard Company 22// 1501 Page Mill Road 23// Palo Alto, California 94304 24// 25// Redistributions of source code must retain the above copyright notice, 26// this list of conditions and the following disclaimer. Redistributions 27// in binary form must reproduce the above copyright notice, this list of 28// conditions and the following disclaimer in the documentation and/or 29// other materials provided with the distribution. Neither the name of 30// the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its
| 13// Redistribution and use in source and binary forms, with or without 14// modification, are permitted provided that the following conditions are 15// met: redistributions of source code must retain the above copyright 16// notice, this list of conditions and the following disclaimer; 17// redistributions in binary form must reproduce the above copyright 18// notice, this list of conditions and the following disclaimer in the 19// documentation and/or other materials provided with the distribution; 20// neither the name of the copyright holders nor the names of its
|
41// 42// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 43// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 44// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 45// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 46// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 47// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 48// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 49// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 50// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 51// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 52// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 53// 54// Authors: Gabe Black 55 56output header {{ 57 class CPUIDInst : public X86ISA::X86StaticInst 58 { 59 public: 60 static const RegIndex foldOBit = 0; 61 /// Constructor 62 CPUIDInst(const char *_mnemonic, ExtMachInst _machInst, 63 OpClass __opClass) : 64 X86ISA::X86StaticInst(_mnemonic, _machInst, __opClass) 65 { 66 } 67 68 std::string generateDisassembly(Addr pc, 69 const SymbolTable *symtab) const; 70 }; 71}}; 72 73output decoder {{ 74 std::string CPUIDInst::generateDisassembly(Addr PC, 75 const SymbolTable *symtab) const 76 { 77 std::stringstream response; 78 79 printMnemonic(response, mnemonic); 80 ccprintf(response, " "); 81 printReg(response, _srcRegIdx[0], machInst.opSize); 82 return response.str(); 83 } 84}}; 85 86def template CPUIDExecute {{ 87 Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, 88 Trace::InstRecord *traceData) const 89 { 90 // If the CPUID instruction used a valid function number, this will 91 // be set to true. Otherwise, the instruction does nothing. 92 bool success; 93 %(op_decl)s; 94 %(op_rd)s; 95 %(code)s; 96 if (success) { 97 %(op_wb)s; 98 } 99 return NoFault; 100 } 101}}; 102 103def format CPUIDInst(code, *opt_flags) {{ 104 iop = InstObjParams(name, Name, 'CPUIDInst', code, opt_flags) 105 header_output = BasicDeclare.subst(iop) 106 decoder_output = BasicConstructor.subst(iop) 107 decode_block = BasicDecode.subst(iop) 108 exec_output = CPUIDExecute.subst(iop) 109}}; 110
| 23// 24// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 25// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 26// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 27// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 28// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 29// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 30// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 31// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 32// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 33// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 34// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 35// 36// Authors: Gabe Black 37 38output header {{ 39 class CPUIDInst : public X86ISA::X86StaticInst 40 { 41 public: 42 static const RegIndex foldOBit = 0; 43 /// Constructor 44 CPUIDInst(const char *_mnemonic, ExtMachInst _machInst, 45 OpClass __opClass) : 46 X86ISA::X86StaticInst(_mnemonic, _machInst, __opClass) 47 { 48 } 49 50 std::string generateDisassembly(Addr pc, 51 const SymbolTable *symtab) const; 52 }; 53}}; 54 55output decoder {{ 56 std::string CPUIDInst::generateDisassembly(Addr PC, 57 const SymbolTable *symtab) const 58 { 59 std::stringstream response; 60 61 printMnemonic(response, mnemonic); 62 ccprintf(response, " "); 63 printReg(response, _srcRegIdx[0], machInst.opSize); 64 return response.str(); 65 } 66}}; 67 68def template CPUIDExecute {{ 69 Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, 70 Trace::InstRecord *traceData) const 71 { 72 // If the CPUID instruction used a valid function number, this will 73 // be set to true. Otherwise, the instruction does nothing. 74 bool success; 75 %(op_decl)s; 76 %(op_rd)s; 77 %(code)s; 78 if (success) { 79 %(op_wb)s; 80 } 81 return NoFault; 82 } 83}}; 84 85def format CPUIDInst(code, *opt_flags) {{ 86 iop = InstObjParams(name, Name, 'CPUIDInst', code, opt_flags) 87 header_output = BasicDeclare.subst(iop) 88 decoder_output = BasicConstructor.subst(iop) 89 decode_block = BasicDecode.subst(iop) 90 exec_output = CPUIDExecute.subst(iop) 91}}; 92
|