1/* 2 * Copyright (c) 2006-2007 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; 9 * redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution; 12 * neither the name of the copyright holders nor the names of its 13 * contributors may be used to endorse or promote products derived from 14 * this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 28 * Authors: Ali Saidi 29 * Gabe Black 30 * Steve Reinhardt 31 */ 32 33#ifndef __ARCH_SPARC_INSTS_INTEGER_HH__ 34#define __ARCH_SPARC_INSTS_INTEGER_HH__ 35 36#include "arch/sparc/insts/static_inst.hh" 37 38namespace SparcISA 39{ 40 41//////////////////////////////////////////////////////////////////// 42// 43// Integer operate instructions 44// 45 46/** 47 * Base class for integer operations. 48 */ 49class IntOp : public SparcStaticInst 50{ 51 protected: 52 using SparcStaticInst::SparcStaticInst; 53 54 std::string generateDisassembly( 55 Addr pc, const SymbolTable *symtab) const override; 56 57 virtual bool printPseudoOps(std::ostream &os, Addr pc, 58 const SymbolTable *symtab) const; 59}; 60 61/** 62 * Base class for immediate integer operations. 63 */ 64class IntOpImm : public IntOp 65{ 66 protected: 67 // Constructor 68 IntOpImm(const char *mnem, ExtMachInst _machInst, 69 OpClass __opClass, int64_t _imm) : 70 IntOp(mnem, _machInst, __opClass), imm(_imm) 71 {} 72 73 int64_t imm; 74 75 std::string generateDisassembly( 76 Addr pc, const SymbolTable *symtab) const override; 77 78 bool printPseudoOps(std::ostream &os, Addr pc, 79 const SymbolTable *symtab) const override; 80}; 81 82/** 83 * Base class for 10 bit immediate integer operations. 84 */ 85class IntOpImm10 : public IntOpImm 86{ 87 protected: 88 // Constructor 89 IntOpImm10(const char *mnem, ExtMachInst _machInst, OpClass __opClass) : 90 IntOpImm(mnem, _machInst, __opClass, sext<10>(bits(_machInst, 9, 0))) 91 {} 92}; 93 94/** 95 * Base class for 11 bit immediate integer operations. 96 */ 97class IntOpImm11 : public IntOpImm 98{ 99 protected: 100 IntOpImm11(const char *mnem, ExtMachInst _machInst, OpClass __opClass) : 101 IntOpImm(mnem, _machInst, __opClass, sext<10>(bits(_machInst, 10, 0))) 102 {} 103}; 104 105/** 106 * Base class for 13 bit immediate integer operations. 107 */ 108class IntOpImm13 : public IntOpImm 109{ 110 protected: 111 IntOpImm13(const char *mnem, ExtMachInst _machInst, OpClass __opClass) : 112 IntOpImm(mnem, _machInst, __opClass, sext<13>(bits(_machInst, 12, 0))) 113 {} 114}; 115 116/** 117 * Base class for sethi. 118 */ 119class SetHi : public IntOpImm 120{ 121 protected: 122 // Constructor 123 SetHi(const char *mnem, ExtMachInst _machInst, OpClass __opClass) : 124 IntOpImm(mnem, _machInst, __opClass, bits(_machInst, 21, 0) << 10) 125 {} 126 127 std::string generateDisassembly( 128 Addr pc, const SymbolTable *symtab) const override; 129}; 130 131} 132 133#endif // __ARCH_SPARCH_INSTS_INTEGER_HH__ 134