001/* 002 * This file is part of the Jikes RVM project (http://jikesrvm.org). 003 * 004 * This file is licensed to You under the Eclipse Public License (EPL); 005 * You may not use this file except in compliance with the License. You 006 * may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/eclipse-1.0.php 009 * 010 * See the COPYRIGHT.txt file distributed with this work for information 011 * regarding copyright ownership. 012 */ 013package org.jikesrvm.compilers.opt.ir; 014 015import org.jikesrvm.VM; 016import org.jikesrvm.compilers.opt.ir.operand.Operand; 017import org.jikesrvm.compilers.opt.regalloc.LiveIntervalElement; 018 019/** 020 * Generic wrappers around machine-specific IR 021 */ 022public abstract class MachineSpecificIR { 023 /* common to all ISAs */ 024 public abstract boolean isConditionOperand(Operand operand); 025 026 public abstract void mutateMIRCondBranch(Instruction cb); 027 028 public abstract boolean isHandledByRegisterUnknown(char opcode); 029 030 public abstract boolean mayEscapeThread(Instruction instruction); 031 032 public abstract boolean mayEscapeMethod(Instruction instruction); 033 034 /* unique to IA32 */ 035 public boolean isAdviseESP(Operator operator) { 036 if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); 037 return false; 038 } 039 040 public boolean isFClear(Operator operator) { 041 if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); 042 return false; 043 } 044 045 public boolean isFNInit(Operator operator) { 046 if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); 047 return false; 048 } 049 050 public boolean isBURSManagedFPROperand(Operand operand) { 051 if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); 052 return false; 053 } 054 055 public int getBURSManagedFPRValue(Operand operand) { 056 if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); 057 return -1; 058 } 059 060 public boolean mutateFMOVs(LiveIntervalElement live, Register register, int dfnbegin, int dfnend) { 061 if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); 062 return false; 063 } 064 065 public void rewriteFPStack(IR ir) { 066 if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); 067 } 068 069 /* unique to PowerPC */ 070 public boolean isPowerPCTrapOperand(Operand operand) { 071 if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); 072 return false; 073 } 074 075 public boolean canFoldNullCheckAndLoad(Instruction s) { 076 if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); 077 return false; 078 } 079}