1 cananian 1.1.2.1 // POPER.java, created Wed Jan 20 23:39:35 1999 by cananian 2 cananian 1.1.2.1 // Copyright (C) 1999 C. Scott Ananian <cananian@alumni.princeton.edu> 3 cananian 1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 cananian 1.1.2.1 package harpoon.IR.LowQuad; 5 cananian 1.1.2.1 6 cananian 1.1.2.1 import harpoon.ClassFile.HClass; 7 cananian 1.1.2.1 import harpoon.ClassFile.HCodeElement; 8 cananian 1.1.2.1 import harpoon.Temp.Temp; 9 cananian 1.1.2.1 import harpoon.Temp.TempMap; 10 cananian 1.1.2.1 import harpoon.Util.Util; 11 cananian 1.1.2.1 /** 12 cananian 1.1.2.1 * <code>POPER</code> is an extended version of 13 cananian 1.1.2.2 * <code>harpoon.IR.Quads.OPER</code>, with new opcodes defined in 14 cananian 1.1.2.2 * <code>LQop</code>. 15 cananian 1.1.2.1 * 16 cananian 1.1.2.1 * @author C. Scott Ananian <cananian@alumni.princeton.edu> 17 cananian 1.4 * @version $Id: POPER.java,v 1.4 2002/04/10 03:04:57 cananian Exp $ 18 cananian 1.1.2.1 */ 19 cananian 1.1.2.1 public class POPER extends harpoon.IR.Quads.OPER { 20 cananian 1.1.2.1 21 cananian 1.1.2.1 /** Creates a <code>POPER</code>. */ 22 cananian 1.1.2.1 public POPER(LowQuadFactory qf, HCodeElement source, 23 cananian 1.1.2.1 int opcode, Temp dst, Temp[] operands) { 24 cananian 1.1.2.1 super(qf, source, opcode, dst, operands); 25 cananian 1.1.2.1 if (kind()==LowQuadKind.POPER) // allow subclassing 26 cananian 1.3.2.1 assert LQop.isValid(opcode); 27 cananian 1.1.2.1 } 28 cananian 1.1.2.1 public int kind() { return LowQuadKind.POPER; } 29 cananian 1.1.2.1 30 cananian 1.1.2.1 public harpoon.IR.Quads.Quad rename(harpoon.IR.Quads.QuadFactory qf, 31 cananian 1.1.2.1 TempMap defMap, TempMap useMap) { 32 cananian 1.1.2.1 return new POPER((LowQuadFactory)qf, this, opcode, 33 cananian 1.1.2.1 map(defMap, dst), map(useMap, operands)); 34 cananian 1.1.2.1 } 35 cananian 1.1.2.1 36 cananian 1.1.2.3 public void accept(harpoon.IR.Quads.QuadVisitor v) { 37 cananian 1.1.2.1 ((LowQuadVisitor)v).visit(this); 38 cananian 1.1.2.1 } 39 cananian 1.1.2.1 40 cananian 1.1.2.1 /** Returns a human-readable representation of this Quad. */ 41 cananian 1.1.2.1 public String toString() { 42 cananian 1.1.2.1 StringBuffer sb = new StringBuffer(dst.toString()); 43 cananian 1.1.2.1 sb.append(" = POPER " + LQop.toString(opcode) + "("); 44 cananian 1.1.2.1 for (int i=0; i<operands.length; i++) { 45 cananian 1.1.2.1 sb.append(operands[i].toString()); 46 cananian 1.1.2.1 if (i<operands.length-1) 47 cananian 1.1.2.1 sb.append(", "); 48 cananian 1.1.2.1 } 49 cananian 1.1.2.1 sb.append(')'); 50 cananian 1.1.2.1 return sb.toString(); 51 cananian 1.1.2.1 } 52 cananian 1.1.2.1 53 cananian 1.1.2.1 // ------------------------------------------------------- 54 cananian 1.1.2.1 // Evaluation functions. 55 cananian 1.1.2.1 56 cananian 1.1.2.1 /** Determines the result type of an <code>OPER</code>. */ 57 cananian 1.1.2.1 public HClass evalType() { 58 cananian 1.1.2.1 return LQop.resultType(opcode); 59 cananian 1.1.2.1 } 60 cananian 1.1.2.1 61 cananian 1.1.2.1 /** Evaluates a constant value for the result of an <code>OPER</code>, 62 cananian 1.1.2.1 * given constant values for the operands. */ 63 cananian 1.1.2.1 public Object evalValue(Object[] opvalues) { 64 cananian 1.1.2.1 return LQop.evaluate(opcode, opvalues); 65 cananian 1.1.2.1 } 66 cananian 1.2 }