1 cananian 1.1.2.1 // OperVisitor.java, created Sat Sep 19 04:49:05 1998 by cananian 2 cananian 1.1.2.1 // Copyright (C) 1998 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.Quads; 5 cananian 1.1.2.1 6 cananian 1.1.2.1 /** 7 cananian 1.1.2.1 * An <code>OperVisitor</code> is a visitor pattern for opcodes of the OPER 8 cananian 1.1.2.1 * quad. By default, all <code>visit_*</code> methods invoke 9 cananian 1.1.2.1 * <code>visit_default</code>; this can (and should) be changed by 10 cananian 1.1.2.1 * overriding particular <code>visit_*</code> methods. The 11 cananian 1.1.2.1 * <code>visit_unknown</code> method is your ticket to extending OPER's 12 cananian 1.1.2.1 * set of opcodes. By default it throws an <code>Error</code>, but you 13 cananian 1.1.2.1 * can subclass OperVisitor, define visit methods for your new operations, 14 cananian 1.1.2.1 * and then override <code>visit_unknown</code> to dispatch to your new 15 cananian 1.1.2.1 * methods. 16 cananian 1.1.2.1 * 17 cananian 1.1.2.1 * @author C. Scott Ananian <cananian@alumni.princeton.edu> 18 cananian 1.2 * @version $Id: OperVisitor.java,v 1.2 2002/02/25 21:05:12 cananian Exp $ 19 cananian 1.1.2.1 */ 20 cananian 1.1.2.1 21 cananian 1.1.2.1 public abstract class OperVisitor { 22 cananian 1.1.2.1 protected OperVisitor() { } 23 cananian 1.1.2.1 24 cananian 1.1.2.1 public abstract void visit_default(OPER q); 25 cananian 1.1.2.1 26 cananian 1.1.2.1 public void visit_acmpeq(OPER q) { visit_default(q); } 27 cananian 1.1.2.1 public void visit_d2f(OPER q) { visit_default(q); } 28 cananian 1.1.2.1 public void visit_d2i(OPER q) { visit_default(q); } 29 cananian 1.1.2.1 public void visit_d2l(OPER q) { visit_default(q); } 30 cananian 1.1.2.1 public void visit_dadd(OPER q) { visit_default(q); } 31 cananian 1.1.2.1 public void visit_dcmpeq(OPER q) { visit_default(q); } 32 cananian 1.1.2.1 public void visit_dcmpge(OPER q) { visit_default(q); } 33 cananian 1.1.2.1 public void visit_dcmpgt(OPER q) { visit_default(q); } 34 cananian 1.1.2.1 public void visit_ddiv(OPER q) { visit_default(q); } 35 cananian 1.1.2.1 public void visit_dmul(OPER q) { visit_default(q); } 36 cananian 1.1.2.1 public void visit_dneg(OPER q) { visit_default(q); } 37 cananian 1.1.2.1 public void visit_drem(OPER q) { visit_default(q); } 38 cananian 1.1.2.1 public void visit_f2d(OPER q) { visit_default(q); } 39 cananian 1.1.2.1 public void visit_f2i(OPER q) { visit_default(q); } 40 cananian 1.1.2.1 public void visit_f2l(OPER q) { visit_default(q); } 41 cananian 1.1.2.1 public void visit_fadd(OPER q) { visit_default(q); } 42 cananian 1.1.2.1 public void visit_fcmpeq(OPER q) { visit_default(q); } 43 cananian 1.1.2.1 public void visit_fcmpge(OPER q) { visit_default(q); } 44 cananian 1.1.2.1 public void visit_fcmpgt(OPER q) { visit_default(q); } 45 cananian 1.1.2.1 public void visit_fdiv(OPER q) { visit_default(q); } 46 cananian 1.1.2.1 public void visit_fmul(OPER q) { visit_default(q); } 47 cananian 1.1.2.1 public void visit_fneg(OPER q) { visit_default(q); } 48 cananian 1.1.2.1 public void visit_frem(OPER q) { visit_default(q); } 49 cananian 1.1.2.1 public void visit_i2b(OPER q) { visit_default(q); } 50 cananian 1.1.2.1 public void visit_i2c(OPER q) { visit_default(q); } 51 cananian 1.1.2.1 public void visit_i2d(OPER q) { visit_default(q); } 52 cananian 1.1.2.1 public void visit_i2f(OPER q) { visit_default(q); } 53 cananian 1.1.2.1 public void visit_i2l(OPER q) { visit_default(q); } 54 cananian 1.1.2.1 public void visit_i2s(OPER q) { visit_default(q); } 55 cananian 1.1.2.1 public void visit_iadd(OPER q) { visit_default(q); } 56 cananian 1.1.2.1 public void visit_iand(OPER q) { visit_default(q); } 57 cananian 1.1.2.1 public void visit_icmpeq(OPER q) { visit_default(q); } 58 cananian 1.1.2.1 public void visit_icmpgt(OPER q) { visit_default(q); } 59 cananian 1.1.2.1 public void visit_idiv(OPER q) { visit_default(q); } 60 cananian 1.1.2.1 public void visit_imul(OPER q) { visit_default(q); } 61 cananian 1.1.2.1 public void visit_ineg(OPER q) { visit_default(q); } 62 cananian 1.1.2.1 public void visit_ior(OPER q) { visit_default(q); } 63 cananian 1.1.2.1 public void visit_irem(OPER q) { visit_default(q); } 64 cananian 1.1.2.1 public void visit_ishl(OPER q) { visit_default(q); } 65 cananian 1.1.2.1 public void visit_ishr(OPER q) { visit_default(q); } 66 cananian 1.1.2.1 public void visit_iushr(OPER q) { visit_default(q); } 67 cananian 1.1.2.1 public void visit_ixor(OPER q) { visit_default(q); } 68 cananian 1.1.2.1 public void visit_l2d(OPER q) { visit_default(q); } 69 cananian 1.1.2.1 public void visit_l2f(OPER q) { visit_default(q); } 70 cananian 1.1.2.1 public void visit_l2i(OPER q) { visit_default(q); } 71 cananian 1.1.2.1 public void visit_ladd(OPER q) { visit_default(q); } 72 cananian 1.1.2.1 public void visit_land(OPER q) { visit_default(q); } 73 cananian 1.1.2.1 public void visit_lcmpeq(OPER q) { visit_default(q); } 74 cananian 1.1.2.1 public void visit_lcmpgt(OPER q) { visit_default(q); } 75 cananian 1.1.2.1 public void visit_ldiv(OPER q) { visit_default(q); } 76 cananian 1.1.2.1 public void visit_lmul(OPER q) { visit_default(q); } 77 cananian 1.1.2.1 public void visit_lneg(OPER q) { visit_default(q); } 78 cananian 1.1.2.1 public void visit_lor(OPER q) { visit_default(q); } 79 cananian 1.1.2.1 public void visit_lrem(OPER q) { visit_default(q); } 80 cananian 1.1.2.1 public void visit_lshl(OPER q) { visit_default(q); } 81 cananian 1.1.2.1 public void visit_lshr(OPER q) { visit_default(q); } 82 cananian 1.1.2.1 public void visit_lushr(OPER q) { visit_default(q); } 83 cananian 1.1.2.1 public void visit_lxor(OPER q) { visit_default(q); } 84 cananian 1.1.2.1 public void visit_unknown(OPER q) 85 cananian 1.1.2.1 { throw new RuntimeException("Unknown OPER opcode: "+q.opcode); } 86 cananian 1.1.2.1 87 cananian 1.1.2.1 // package-scoped dispatch function. 88 cananian 1.1.2.1 final void dispatch(OPER q) { 89 cananian 1.1.2.1 switch (q.opcode) { 90 cananian 1.1.2.1 case Qop.ACMPEQ: visit_acmpeq(q); break; 91 cananian 1.1.2.1 case Qop.D2F: visit_d2f(q); break; 92 cananian 1.1.2.1 case Qop.D2I: visit_d2i(q); break; 93 cananian 1.1.2.1 case Qop.D2L: visit_d2l(q); break; 94 cananian 1.1.2.1 case Qop.DADD: visit_dadd(q); break; 95 cananian 1.1.2.1 case Qop.DCMPEQ: visit_dcmpeq(q); break; 96 cananian 1.1.2.1 case Qop.DCMPGE: visit_dcmpge(q); break; 97 cananian 1.1.2.1 case Qop.DCMPGT: visit_dcmpgt(q); break; 98 cananian 1.1.2.1 case Qop.DDIV: visit_ddiv(q); break; 99 cananian 1.1.2.1 case Qop.DMUL: visit_dmul(q); break; 100 cananian 1.1.2.1 case Qop.DNEG: visit_dneg(q); break; 101 cananian 1.1.2.1 case Qop.DREM: visit_drem(q); break; 102 cananian 1.1.2.1 case Qop.F2D: visit_f2d(q); break; 103 cananian 1.1.2.1 case Qop.F2I: visit_f2i(q); break; 104 cananian 1.1.2.1 case Qop.F2L: visit_f2l(q); break; 105 cananian 1.1.2.1 case Qop.FADD: visit_fadd(q); break; 106 cananian 1.1.2.1 case Qop.FCMPEQ: visit_fcmpeq(q); break; 107 cananian 1.1.2.1 case Qop.FCMPGE: visit_fcmpge(q); break; 108 cananian 1.1.2.1 case Qop.FCMPGT: visit_fcmpgt(q); break; 109 cananian 1.1.2.1 case Qop.FDIV: visit_fdiv(q); break; 110 cananian 1.1.2.1 case Qop.FMUL: visit_fmul(q); break; 111 cananian 1.1.2.1 case Qop.FNEG: visit_fneg(q); break; 112 cananian 1.1.2.1 case Qop.FREM: visit_frem(q); break; 113 cananian 1.1.2.1 case Qop.I2B: visit_i2b(q); break; 114 cananian 1.1.2.1 case Qop.I2C: visit_i2c(q); break; 115 cananian 1.1.2.1 case Qop.I2D: visit_i2d(q); break; 116 cananian 1.1.2.1 case Qop.I2F: visit_i2f(q); break; 117 cananian 1.1.2.1 case Qop.I2L: visit_i2l(q); break; 118 cananian 1.1.2.1 case Qop.I2S: visit_i2s(q); break; 119 cananian 1.1.2.1 case Qop.IADD: visit_iadd(q); break; 120 cananian 1.1.2.1 case Qop.IAND: visit_iand(q); break; 121 cananian 1.1.2.1 case Qop.ICMPEQ: visit_icmpeq(q); break; 122 cananian 1.1.2.1 case Qop.ICMPGT: visit_icmpgt(q); break; 123 cananian 1.1.2.1 case Qop.IDIV: visit_idiv(q); break; 124 cananian 1.1.2.1 case Qop.IMUL: visit_imul(q); break; 125 cananian 1.1.2.1 case Qop.INEG: visit_ineg(q); break; 126 cananian 1.1.2.1 case Qop.IOR: visit_ior(q); break; 127 cananian 1.1.2.1 case Qop.IREM: visit_irem(q); break; 128 cananian 1.1.2.1 case Qop.ISHL: visit_ishl(q); break; 129 cananian 1.1.2.1 case Qop.ISHR: visit_ishr(q); break; 130 cananian 1.1.2.1 case Qop.IUSHR: visit_iushr(q); break; 131 cananian 1.1.2.1 case Qop.IXOR: visit_ixor(q); break; 132 cananian 1.1.2.1 case Qop.L2D: visit_l2d(q); break; 133 cananian 1.1.2.1 case Qop.L2F: visit_l2f(q); break; 134 cananian 1.1.2.1 case Qop.L2I: visit_l2i(q); break; 135 cananian 1.1.2.1 case Qop.LADD: visit_ladd(q); break; 136 cananian 1.1.2.1 case Qop.LAND: visit_land(q); break; 137 cananian 1.1.2.1 case Qop.LCMPEQ: visit_lcmpeq(q); break; 138 cananian 1.1.2.1 case Qop.LCMPGT: visit_lcmpgt(q); break; 139 cananian 1.1.2.1 case Qop.LDIV: visit_ldiv(q); break; 140 cananian 1.1.2.1 case Qop.LMUL: visit_lmul(q); break; 141 cananian 1.1.2.1 case Qop.LNEG: visit_lneg(q); break; 142 cananian 1.1.2.1 case Qop.LOR: visit_lor(q); break; 143 cananian 1.1.2.1 case Qop.LREM: visit_lrem(q); break; 144 cananian 1.1.2.1 case Qop.LSHL: visit_lshl(q); break; 145 cananian 1.1.2.1 case Qop.LSHR: visit_lshr(q); break; 146 cananian 1.1.2.1 case Qop.LUSHR: visit_lushr(q); break; 147 cananian 1.1.2.1 case Qop.LXOR: visit_lxor(q); break; 148 cananian 1.1.2.1 default: visit_unknown(q); break; 149 cananian 1.1.2.1 } 150 cananian 1.1.2.1 } 151 cananian 1.2 }