1 /*
   2  * Copyright 2002 Sun Microsystems, Inc.  All Rights Reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  20  * CA 95054 USA or visit www.sun.com if you need additional information or
  21  * have any questions.
  22  *
  23  */
  24 
  25 package sun.jvm.hotspot.asm.sparc;
  26 
  27 import sun.jvm.hotspot.asm.*;
  28 
  29 public class SPARCInstructionFactoryImpl implements SPARCInstructionFactory {
  30     public SPARCInstruction newCallInstruction(PCRelativeAddress addr) {
  31         return new SPARCCallInstruction(addr);
  32     }
  33 
  34     public SPARCInstruction newNoopInstruction() {
  35         return new SPARCNoopInstruction();
  36     }
  37 
  38     public SPARCInstruction newSethiInstruction(int imm22, SPARCRegister rd) {
  39         return new SPARCSethiInstruction(imm22, rd);
  40     }
  41 
  42     public SPARCInstruction newUnimpInstruction(int const22) {
  43         return new SPARCUnimpInstruction(const22);
  44     }
  45 
  46     public SPARCInstruction newBranchInstruction(String name, PCRelativeAddress addr, boolean isAnnuled, int conditionCode) {
  47         return new SPARCBranchInstruction(name, addr, isAnnuled, conditionCode);
  48     }
  49 
  50     public SPARCInstruction newSpecialLoadInstruction(String name, int specialReg, int cregNum,
  51                                       SPARCRegisterIndirectAddress addr) {
  52         return new SPARCSpecialLoadInstruction(name, specialReg, cregNum, addr);
  53     }
  54 
  55 
  56     public SPARCInstruction newSpecialStoreInstruction(String name, int specialReg, int cregNum,
  57                                       SPARCRegisterIndirectAddress addr) {
  58         return new SPARCSpecialStoreInstruction(name, specialReg, cregNum, addr);
  59     }
  60 
  61     public SPARCInstruction newLoadInstruction(String name, int opcode,
  62                                   SPARCRegisterIndirectAddress addr, SPARCRegister rd,
  63                                   int dataType) {
  64         return new SPARCLoadInstruction(name, opcode, addr, rd, dataType);
  65     }
  66 
  67     public SPARCInstruction newStoreInstruction(String name, int opcode,
  68                                   SPARCRegisterIndirectAddress addr, SPARCRegister rd,
  69                                   int dataType) {
  70         return new SPARCStoreInstruction(name, opcode, addr, rd, dataType);
  71     }
  72 
  73     public SPARCInstruction newStbarInstruction() {
  74         return new SPARCStbarInstruction();
  75     }
  76 
  77     public SPARCInstruction newReadInstruction(int specialReg, int asrRegNum, SPARCRegister rd) {
  78         return new SPARCReadInstruction(specialReg, asrRegNum, rd);
  79     }
  80 
  81     public SPARCInstruction newWriteInstruction(int specialReg, int asrRegNum, SPARCRegister rs1,
  82                                              ImmediateOrRegister operand2) {
  83         return new SPARCWriteInstruction(specialReg, asrRegNum, rs1,operand2);
  84     }
  85 
  86     public SPARCInstruction newIllegalInstruction(int instruction) {
  87         return new SPARCIllegalInstruction(instruction);
  88     }
  89 
  90 
  91     public SPARCInstruction newIndirectCallInstruction(SPARCRegisterIndirectAddress addr,
  92                                   SPARCRegister rd) {
  93         return new SPARCIndirectCallInstruction(addr, rd);
  94     }
  95 
  96     public SPARCInstruction newReturnInstruction(SPARCRegisterIndirectAddress addr,
  97                                   SPARCRegister rd, boolean isLeaf) {
  98         return new SPARCReturnInstruction(addr, rd, isLeaf);
  99     }
 100 
 101     public SPARCInstruction newJmplInstruction(SPARCRegisterIndirectAddress addr,
 102                                   SPARCRegister rd) {
 103         return new SPARCJmplInstruction(addr, rd);
 104     }
 105 
 106     public SPARCInstruction newFPArithmeticInstruction(String name, int opf, int rtlOperation,
 107                                   SPARCFloatRegister rs1, SPARCFloatRegister rs2,
 108                                   SPARCFloatRegister rd) {
 109         return new SPARCFPArithmeticInstruction(name, opf, rtlOperation, rs1, rs2, rd);
 110     }
 111 
 112     public SPARCInstruction newFPMoveInstruction(String name, int opf, SPARCFloatRegister rs, SPARCFloatRegister rd) {
 113         return new SPARCFPMoveInstruction(name, opf, rs, rd);
 114     }
 115 
 116     public SPARCInstruction newFP2RegisterInstruction(String name, int opf, SPARCFloatRegister rs, SPARCFloatRegister rd) {
 117         return new SPARCFP2RegisterInstruction(name, opf, rs, rd);
 118     }
 119 
 120     public SPARCInstruction newFlushInstruction(SPARCRegisterIndirectAddress addr) {
 121         return new SPARCFlushInstruction(addr);
 122     }
 123 
 124     public SPARCInstruction newSaveInstruction(SPARCRegister rs1, ImmediateOrRegister operand2, SPARCRegister rd) {
 125         return new SPARCSaveInstruction(rs1, operand2, rd);
 126     }
 127 
 128     public SPARCInstruction newRestoreInstruction(SPARCRegister rs1, ImmediateOrRegister operand2, SPARCRegister rd) {
 129         return new SPARCRestoreInstruction(rs1, operand2, rd);
 130     }
 131 
 132     public SPARCInstruction newTrapInstruction(String name, int conditionCode) {
 133         return new SPARCTrapInstruction(name, conditionCode);
 134     }
 135 
 136     public SPARCInstruction newRettInstruction(SPARCRegisterIndirectAddress addr) {
 137         return new SPARCRettInstruction(addr);
 138     }
 139 
 140     public SPARCInstruction newArithmeticInstruction(String name, int opcode, int rtlOperation,
 141                                                      SPARCRegister rs1, ImmediateOrRegister operand2,
 142                                                      SPARCRegister rd) {
 143         return new SPARCArithmeticInstruction(name, opcode, rtlOperation, rs1, operand2, rd);
 144     }
 145 
 146     public SPARCInstruction newLogicInstruction(String name, int opcode, int rtlOperation,
 147                                                      SPARCRegister rs1, ImmediateOrRegister operand2,
 148                                                      SPARCRegister rd) {
 149         return new SPARCLogicInstruction(name, opcode, rtlOperation, rs1, operand2, rd);
 150     }
 151 
 152     public SPARCInstruction newMoveInstruction(String name, int opcode,
 153                                                ImmediateOrRegister operand2,
 154                                                SPARCRegister rd) {
 155         return new SPARCMoveInstruction(name, opcode, operand2, rd);
 156     }
 157 
 158     public SPARCInstruction newShiftInstruction(String name, int opcode, int rtlOperation,
 159                                                      SPARCRegister rs1, ImmediateOrRegister operand2,
 160                                                      SPARCRegister rd) {
 161         return new SPARCShiftInstruction(name, opcode, rtlOperation, rs1, operand2, rd);
 162     }
 163 
 164     public SPARCInstruction newCoprocessorInstruction(int instruction, int cpopcode, int opcode,
 165                                                      int rs1Num, int rs2Num, int rd) {
 166         return new SPARCIllegalInstruction(instruction);
 167     }
 168 
 169     public SPARCInstruction newSwapInstruction(String name, SPARCRegisterIndirectAddress addr, SPARCRegister rd) {
 170        return new SPARCSwapInstruction(name, addr, rd);
 171     }
 172 
 173     public SPARCInstruction newLdstubInstruction(String name, SPARCRegisterIndirectAddress addr, SPARCRegister rd) {
 174        return new SPARCLdstubInstruction(name, addr, rd);
 175     }
 176 }