/** Return a string rep of the operand (ie the effective address) */ public String toString() { String addr = (base == null) ? "<0" : "<[" + base + "]"; if (index != null) { addr += "+[" + index; switch (scale) { case 0: addr += "]"; break; case 1: addr += "*2]"; break; case 2: addr += "*4]"; break; case 3: addr += "*8]"; break; default: OptimizingCompilerException.UNREACHABLE(); } } if (!disp.isZero()) { addr += "+" + disp.toInt(); } switch (size) { case 1: addr += ">B"; break; case 2: addr += ">W"; break; case 4: addr += ">DW"; break; case 8: addr += ">QW"; break; case 16: addr += ">PARAGRAPH"; break; default: OptimizingCompilerException.UNREACHABLE(); } if (loc != null && guard != null) { addr += " (" + loc + ", " + guard + ")"; } else if (loc != null) { addr += " (" + loc + ")"; } else if (guard != null) { addr += " (" + guard + ")"; } return addr; }
/** Is a specified condition operand 'safe' to transfer into an FCMP instruction? */ private boolean fpConditionOK(ConditionOperand c) { // FCOMI sets ZF, PF, and CF as follows: // Compare Results ZF PF CF // left > right 0 0 0 // left < right 0 0 1 // left == right 1 0 0 // UNORDERED 1 1 1 switch (c.value) { case ConditionOperand.CMPL_EQUAL: return false; // (ZF == 1) but ordered case ConditionOperand.CMPL_NOT_EQUAL: return false; // (ZF == 0) but unordered case ConditionOperand.CMPG_LESS: return false; // (CF == 1) but ordered case ConditionOperand.CMPG_GREATER_EQUAL: return false; // (CF == 0) but unordered case ConditionOperand.CMPG_LESS_EQUAL: return false; // (CF == 1 || ZF == 1) but ordered case ConditionOperand.CMPG_GREATER: return false; // (CF == 0 && ZF == 0) but unordered case ConditionOperand.CMPL_GREATER: return true; // (CF == 0 && ZF == 0) and ordered case ConditionOperand.CMPL_LESS_EQUAL: return true; // (CF == 1 || ZF == 1) and unordered case ConditionOperand.CMPL_GREATER_EQUAL: return true; // (CF == 0) and ordered case ConditionOperand.CMPL_LESS: return true; // (CF == 1) and unordered default: OptimizingCompilerException.UNREACHABLE(); return false; // keep jikes happy } }
/** * Get a constructor object for this compiler phase * * @return exception/null as this phase can't be created */ public Constructor<CompilerPhase> getClassConstructor() { OptimizingCompilerException.UNREACHABLE(); return null; }