bc2ir.appendInstruction(Move.create(INT_MOVE, op0, new OPT_IntConstantOperand(-1)));
bc2ir.appendInstruction(Move.create(INT_MOVE, op0, new OPT_IntConstantOperand(-1, VM_Type.AddressType)));
  static boolean generatePolymorphicMagic(OPT_BC2IR bc2ir, 					  OPT_GenerationContext gc, 					  VM_Method meth, VM_Atom methodName) {    VM_Type [] paramTypes = meth.getParameterTypes();    VM_Type resultType = meth.getReturnType();    if (methodName == VM_MagicNames.wordFromInt) {       OPT_RegisterOperand reg = gc.temps.makeTemp(resultType);      bc2ir.appendInstruction(Move.create(REF_MOVE, reg, bc2ir.popInt()));      bc2ir.push(reg.copyD2U());    } else if (methodName == VM_MagicNames.wordToInt) {      // a no-op without even a type-conversion      OPT_RegisterOperand reg = gc.temps.makeTempInt();      bc2ir.appendInstruction(Move.create(INT_MOVE, reg, bc2ir.popAddress()));      bc2ir.push(reg.copyD2U());    } else if (methodName == VM_MagicNames.wordToWord) {      OPT_RegisterOperand reg = gc.temps.makeTemp(VM_Type.WordType);      bc2ir.appendInstruction(Move.create(REF_MOVE, reg, bc2ir.popInt()));      bc2ir.push(reg.copyD2U());    } else if (methodName == VM_MagicNames.wordToAddress) {      OPT_RegisterOperand reg = gc.temps.makeTemp(VM_Type.AddressType);      bc2ir.appendInstruction(Move.create(REF_MOVE, reg, bc2ir.popInt()));      bc2ir.push(reg.copyD2U());    }    else if (methodName == VM_MagicNames.wordAdd) {      OPT_Operand o2 = bc2ir.pop();      OPT_Operand o1 = bc2ir.pop();      OPT_RegisterOperand op0 = gc.temps.makeTemp(resultType);      bc2ir.appendInstruction(Binary.create(INT_ADD, op0, o1, o2));      bc2ir.push(op0.copyD2U());    }    else if (methodName == VM_MagicNames.wordSub) {      OPT_Operand o2 = bc2ir.pop();      OPT_Operand o1 = bc2ir.pop();      OPT_RegisterOperand op0 = gc.temps.makeTemp(resultType);      bc2ir.appendInstruction(Binary.create(INT_SUB, op0, o1, o2));      bc2ir.push(op0.copyD2U());    }    else if (methodName == VM_MagicNames.wordDiff) {      OPT_Operand o2 = bc2ir.pop();      OPT_Operand o1 = bc2ir.pop();      OPT_RegisterOperand op0 = gc.temps.makeTemp(resultType);      bc2ir.appendInstruction(Binary.create(INT_SUB, op0, o1, o2));      bc2ir.push(op0.copyD2U());    }    else if (methodName == VM_MagicNames.wordAnd) {      OPT_Operand o2 = bc2ir.pop();      OPT_Operand o1 = bc2ir.pop();      OPT_RegisterOperand op0 = gc.temps.makeTemp(resultType);      bc2ir.appendInstruction(Binary.create(INT_AND, op0, o1, o2));      bc2ir.push(op0.copyD2U());    }    else if (methodName == VM_MagicNames.wordOr) {      OPT_Operand o2 = bc2ir.pop();      OPT_Operand o1 = bc2ir.pop();      OPT_RegisterOperand op0 = gc.temps.makeTemp(resultType);      bc2ir.appendInstruction(Binary.create(INT_OR, op0, o1, o2));      bc2ir.push(op0.copyD2U());    }    else if (methodName == VM_MagicNames.wordXor) {      OPT_Operand o2 = bc2ir.pop();      OPT_Operand o1 = bc2ir.pop();      OPT_RegisterOperand op0 = gc.temps.makeTemp(resultType);      bc2ir.appendInstruction(Binary.create(INT_XOR, op0, o1, o2));      bc2ir.push(op0.copyD2U());    }    else if (methodName == VM_MagicNames.wordNot) {      OPT_Operand o1 = bc2ir.pop();      OPT_RegisterOperand op0 = gc.temps.makeTemp(resultType);      bc2ir.appendInstruction(Unary.create(INT_NOT, op0, o1));      bc2ir.push(op0.copyD2U());    }    else if (methodName == VM_MagicNames.wordZero) {      OPT_RegisterOperand op0 = gc.temps.makeTemp(resultType);      bc2ir.appendInstruction(Move.create(INT_MOVE, op0, new OPT_IntConstantOperand(0)));      bc2ir.push(op0.copyD2U());    }    else if (methodName == VM_MagicNames.wordMax) {      OPT_RegisterOperand op0 = gc.temps.makeTemp(resultType);      bc2ir.appendInstruction(Move.create(INT_MOVE, op0, new OPT_IntConstantOperand(-1)));      bc2ir.push(op0.copyD2U());    }    else if (methodName == VM_MagicNames.wordIsZero) {      OPT_RegisterOperand op0 = gc.temps.makeTemp(resultType);      bc2ir.appendInstruction(Move.create(INT_MOVE, op0, new OPT_IntConstantOperand(0)));      OPT_ConditionOperand cond = OPT_ConditionOperand.EQUAL();      cmpHelper(bc2ir,gc,cond, op0);    }    else if (methodName == VM_MagicNames.wordIsMax) {      OPT_RegisterOperand op0 = gc.temps.makeTemp(resultType);      bc2ir.appendInstruction(Move.create(INT_MOVE, op0, new OPT_IntConstantOperand(-1)));      OPT_ConditionOperand cond = OPT_ConditionOperand.EQUAL();      cmpHelper(bc2ir,gc,cond, op0);    }    else if (methodName == VM_MagicNames.wordLT) {      OPT_ConditionOperand cond = OPT_ConditionOperand.LOWER();      cmpHelper(bc2ir,gc,cond,null);    }    else if (methodName == VM_MagicNames.wordLE) {      OPT_ConditionOperand cond = OPT_ConditionOperand.LOWER_EQUAL();      cmpHelper(bc2ir,gc,cond,null);    }    else if (methodName == VM_MagicNames.wordEQ) {      OPT_ConditionOperand cond = OPT_ConditionOperand.EQUAL();      cmpHelper(bc2ir,gc,cond,null);    }    else if (methodName == VM_MagicNames.wordNE) {      OPT_ConditionOperand cond = OPT_ConditionOperand.NOT_EQUAL();      cmpHelper(bc2ir,gc,cond,null);    }    else if (methodName == VM_MagicNames.wordGT) {      OPT_ConditionOperand cond = OPT_ConditionOperand.HIGHER();      cmpHelper(bc2ir,gc,cond,null);    }    else if (methodName == VM_MagicNames.wordGE) {      OPT_ConditionOperand cond = OPT_ConditionOperand.HIGHER_EQUAL();      cmpHelper(bc2ir,gc,cond,null);    }    else       return false;    return true;  }