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 SPARCSethiInstruction extends SPARCInstruction 30 implements MoveInstruction { 31 final private SPARCRegister register; 32 final private ImmediateOrRegister value; 33 final private String description; 34 35 public SPARCSethiInstruction(int value, SPARCRegister register) { 36 super("sethi"); 37 this.register = register; 38 value <<= 10; 39 this.value = new Immediate(new Integer(value)); 40 description = initDescription(value); 41 } 42 43 private String initDescription(int val) { 44 if (val == 0 && register == SPARCRegisters.G0) { 45 return "nop"; 46 } else { 47 StringBuffer buf = new StringBuffer(); 48 buf.append(getName()); 49 buf.append(spaces); 50 buf.append("%hi(0x"); 51 buf.append(Integer.toHexString(val)); 52 buf.append(')'); 53 buf.append(comma); 54 buf.append(register.toString()); 55 return buf.toString(); 56 } 57 } 58 59 public String asString(long currentPc, SymbolFinder symFinder) { 60 return description; 61 } 62 63 public Register getMoveDestination() { 64 return register; 65 } 66 67 public ImmediateOrRegister getMoveSource() { 68 return value; 69 } 70 71 public boolean isConditional() { 72 return false; 73 } 74 }