private TemporaryLocalVariable getUnboxedVar(Class reqdType, Map<Variable, TemporaryLocalVariable> unboxMap, Variable v, boolean createNew) { TemporaryLocalVariable unboxedVar = unboxMap.get(v); // FIXME: This is a bit broken -- SSA will eliminate this need for type verification if ((unboxedVar == null && createNew) || !matchingTypes(reqdType, unboxedVar.getType())) { unboxedVar = problem.getScope().getNewUnboxedVariable(reqdType); unboxMap.put(v, unboxedVar); } else if (unboxedVar == null) { // FIXME: throw an exception here System.out.println("ERROR: No unboxed var for : " + v); } return unboxedVar; }
private TemporaryLocalVariable getUnboxedVar(Class reqdType, Map<Variable, TemporaryLocalVariable> unboxMap, Variable v, boolean createNew) { TemporaryLocalVariable unboxedVar = unboxMap.get(v); // FIXME: This is a bit broken -- SSA will eliminate this need for type verification if ((unboxedVar == null && createNew) || !matchingTypes(reqdType, unboxedVar.getType())) { unboxedVar = problem.getScope().getNewUnboxedVariable(reqdType); unboxMap.put(v, unboxedVar); } else if (unboxedVar == null) { // FIXME: throw an exception here System.out.println("ERROR: No unboxed var for : " + v); } return unboxedVar; }
public void boxVar(UnboxState state, Class reqdType, Map<Variable, TemporaryLocalVariable> unboxMap, Variable v, List<Instr> newInstrs) { TemporaryLocalVariable unboxedV = getUnboxedVar(reqdType, unboxMap, v); TemporaryVariableType vType = unboxedV.getType(); if (vType == TemporaryVariableType.BOOLEAN) { newInstrs.add(new BoxBooleanInstr(v, unboxedV)); } else if (vType == TemporaryVariableType.FLOAT) { // SSS FIXME: This is broken newInstrs.add(new BoxFloatInstr(v, unboxedV)); } else if (vType == TemporaryVariableType.FIXNUM) { // CON FIXME: So this is probably broken too newInstrs.add(new BoxFixnumInstr(v, unboxedV)); } state.unboxedDirtyVars.remove(v); // System.out.println("BOXING for " + v); }
public void boxVar(UnboxState state, Class reqdType, Map<Variable, TemporaryLocalVariable> unboxMap, Variable v, List<Instr> newInstrs) { TemporaryLocalVariable unboxedV = getUnboxedVar(reqdType, unboxMap, v); TemporaryVariableType vType = unboxedV.getType(); if (vType == TemporaryVariableType.BOOLEAN) { newInstrs.add(new BoxBooleanInstr(v, unboxedV)); } else if (vType == TemporaryVariableType.FLOAT) { // SSS FIXME: This is broken newInstrs.add(new BoxFloatInstr(v, unboxedV)); } else if (vType == TemporaryVariableType.FIXNUM) { // CON FIXME: So this is probably broken too newInstrs.add(new BoxFixnumInstr(v, unboxedV)); } state.unboxedDirtyVars.remove(v); // System.out.println("BOXING for " + v); }
@Override public void encode(IRWriterEncoder e) { super.encode(e); e.encode((byte) getType().ordinal()); e.encode(offset); }
@Override public void encode(IRWriterEncoder e) { super.encode(e); e.encode((byte) getType().ordinal()); e.encode(offset); }
private void jvmStoreLocal(Runnable source, Variable variable) { if (variable instanceof LocalVariable) { jvmLoadLocal(DYNAMIC_SCOPE); source.run(); genSetValue((LocalVariable) variable); } else if (variable instanceof TemporaryLocalVariable) { source.run(); switch (((TemporaryLocalVariable)variable).getType()) { case FLOAT: jvmAdapter().dstore(getJVMLocalVarIndex(variable)); break; case FIXNUM: jvmAdapter().lstore(getJVMLocalVarIndex(variable)); break; case BOOLEAN: jvmAdapter().istore(getJVMLocalVarIndex(variable)); break; default: jvmMethod().storeLocal(getJVMLocalVarIndex(variable)); break; } } else { source.run(); jvmMethod().storeLocal(getJVMLocalVarIndex(variable)); } }
private void jvmStoreLocal(Runnable source, Variable variable) { if (variable instanceof LocalVariable) { jvmLoadLocal(DYNAMIC_SCOPE); source.run(); genSetValue((LocalVariable) variable); } else if (variable instanceof TemporaryLocalVariable) { source.run(); switch (((TemporaryLocalVariable)variable).getType()) { case FLOAT: jvmAdapter().dstore(getJVMLocalVarIndex(variable)); break; case FIXNUM: jvmAdapter().lstore(getJVMLocalVarIndex(variable)); break; case BOOLEAN: jvmAdapter().istore(getJVMLocalVarIndex(variable)); break; default: jvmMethod().storeLocal(getJVMLocalVarIndex(variable)); break; } } else { source.run(); jvmMethod().storeLocal(getJVMLocalVarIndex(variable)); } }
private int getJVMLocalVarIndex(Variable variable) { if (variable instanceof TemporaryLocalVariable) { switch (((TemporaryLocalVariable)variable).getType()) { case FLOAT: return jvm.methodData().local(variable, JVM.DOUBLE_TYPE); case FIXNUM: return jvm.methodData().local(variable, JVM.LONG_TYPE); case BOOLEAN: return jvm.methodData().local(variable, JVM.BOOLEAN_TYPE); default: return jvm.methodData().local(variable); } } else { return jvm.methodData().local(variable); } }
private int getJVMLocalVarIndex(Variable variable) { if (variable instanceof TemporaryLocalVariable) { switch (((TemporaryLocalVariable)variable).getType()) { case FLOAT: return jvm.methodData().local(variable, JVM.DOUBLE_TYPE); case FIXNUM: return jvm.methodData().local(variable, JVM.LONG_TYPE); case BOOLEAN: return jvm.methodData().local(variable, JVM.BOOLEAN_TYPE); default: return jvm.methodData().local(variable); } } else { return jvm.methodData().local(variable); } }
private void jvmLoadLocal(Variable variable) { if (variable instanceof TemporaryLocalVariable) { switch (((TemporaryLocalVariable)variable).getType()) { case FLOAT: jvmAdapter().dload(getJVMLocalVarIndex(variable)); break; case FIXNUM: jvmAdapter().lload(getJVMLocalVarIndex(variable)); break; case BOOLEAN: jvmAdapter().iload(getJVMLocalVarIndex(variable)); break; default: jvmMethod().loadLocal(getJVMLocalVarIndex(variable)); break; } } else { jvmMethod().loadLocal(getJVMLocalVarIndex(variable)); } }
private void jvmLoadLocal(Variable variable) { if (variable instanceof TemporaryLocalVariable) { switch (((TemporaryLocalVariable)variable).getType()) { case FLOAT: jvmAdapter().dload(getJVMLocalVarIndex(variable)); break; case FIXNUM: jvmAdapter().lload(getJVMLocalVarIndex(variable)); break; case BOOLEAN: jvmAdapter().iload(getJVMLocalVarIndex(variable)); break; default: jvmMethod().loadLocal(getJVMLocalVarIndex(variable)); break; } } else { jvmMethod().loadLocal(getJVMLocalVarIndex(variable)); } }
private void jvmStoreLocal(Variable variable) { if (variable instanceof LocalVariable) { jvmLoadLocal(DYNAMIC_SCOPE); jvmAdapter().swap(); genSetValue((LocalVariable) variable); } else if (variable instanceof TemporaryLocalVariable) { switch (((TemporaryLocalVariable)variable).getType()) { case FLOAT: jvmAdapter().dstore(getJVMLocalVarIndex(variable)); break; case FIXNUM: jvmAdapter().lstore(getJVMLocalVarIndex(variable)); break; case BOOLEAN: jvmAdapter().istore(getJVMLocalVarIndex(variable)); break; default: jvmMethod().storeLocal(getJVMLocalVarIndex(variable)); break; } } else { jvmMethod().storeLocal(getJVMLocalVarIndex(variable)); } }
private void jvmStoreLocal(Variable variable) { if (variable instanceof LocalVariable) { jvmLoadLocal(DYNAMIC_SCOPE); jvmAdapter().swap(); genSetValue((LocalVariable) variable); } else if (variable instanceof TemporaryLocalVariable) { switch (((TemporaryLocalVariable)variable).getType()) { case FLOAT: jvmAdapter().dstore(getJVMLocalVarIndex(variable)); break; case FIXNUM: jvmAdapter().lstore(getJVMLocalVarIndex(variable)); break; case BOOLEAN: jvmAdapter().istore(getJVMLocalVarIndex(variable)); break; default: jvmMethod().storeLocal(getJVMLocalVarIndex(variable)); break; } } else { jvmMethod().storeLocal(getJVMLocalVarIndex(variable)); } }