private void shiftParameters(int delta) { int insnSize = insns.size(); int lastParameter = unreservedRegCount + reservedCount + reservedParameterCount; int firstParameter = lastParameter - paramSize; BasicRegisterMapper mapper = new BasicRegisterMapper(lastParameter); for (int i = 0; i < lastParameter; i++) { if (i >= firstParameter) { mapper.addMapping(i, i + delta, 1); } else { mapper.addMapping(i, i, 1); } } for (int i = 0; i < insnSize; i++) { DalvInsn insn = insns.get(i); // Since there is no need to replace CodeAddress since it does not use registers, skips it to // avoid to update all TargetInsn that contain a reference to CodeAddress if (!(insn instanceof CodeAddress)) { insns.set(i, insn.withMapper(mapper)); } } } }
private void shiftParameters(int delta) { int insnSize = insns.size(); int lastParameter = unreservedRegCount + reservedCount + reservedParameterCount; int firstParameter = lastParameter - paramSize; BasicRegisterMapper mapper = new BasicRegisterMapper(lastParameter); for (int i = 0; i < lastParameter; i++) { if (i >= firstParameter) { mapper.addMapping(i, i + delta, 1); } else { mapper.addMapping(i, i, 1); } } for (int i = 0; i < insnSize; i++) { DalvInsn insn = insns.get(i); // Since there is no need to replace CodeAddress since it does not use registers, skips it to // avoid to update all TargetInsn that contain a reference to CodeAddress if (!(insn instanceof CodeAddress)) { insns.set(i, insn.withMapper(mapper)); } } } }
private void shiftParameters(int delta) { int insnSize = insns.size(); int lastParameter = unreservedRegCount + reservedCount + reservedParameterCount; int firstParameter = lastParameter - paramSize; BasicRegisterMapper mapper = new BasicRegisterMapper(lastParameter); for (int i = 0; i < lastParameter; i++) { if (i >= firstParameter) { mapper.addMapping(i, i + delta, 1); } else { mapper.addMapping(i, i, 1); } } for (int i = 0; i < insnSize; i++) { DalvInsn insn = insns.get(i); // Since there is no need to replace CodeAddress since it does not use registers, skips it to // avoid to update all TargetInsn that contain a reference to CodeAddress if (!(insn instanceof CodeAddress)) { insns.set(i, insn.withMapper(mapper)); } } } }
/** {@inheritDoc} */ @Override public void addMapping(int oldReg, int newReg, int category) { super.addMapping(oldReg, newReg, category); addInterfence(newReg, oldReg); if (category == 2) { addInterfence(newReg + 1, oldReg); } }
/** {@inheritDoc} */ @Override public RegisterMapper allocateRegisters() { int oldRegCount = ssaMeth.getRegCount(); BasicRegisterMapper mapper = new BasicRegisterMapper(oldRegCount); for (int i = 0; i < oldRegCount; i++) { mapper.addMapping(i, i*2, 2); } return mapper; } }
/** {@inheritDoc} */ @Override public RegisterMapper allocateRegisters() { int oldRegCount = ssaMeth.getRegCount(); BasicRegisterMapper mapper = new BasicRegisterMapper(oldRegCount); for (int i = 0; i < oldRegCount; i++) { mapper.addMapping(i, i*2, 2); } return mapper; } }
/** {@inheritDoc} */ @Override public void addMapping(int oldReg, int newReg, int category) { super.addMapping(oldReg, newReg, category); addInterfence(newReg, oldReg); if (category == 2) { addInterfence(newReg + 1, oldReg); } }
/** {@inheritDoc} */ @Override public RegisterMapper allocateRegisters() { int oldRegCount = ssaMeth.getRegCount(); BasicRegisterMapper mapper = new BasicRegisterMapper(oldRegCount); for (int i = 0; i < oldRegCount; i++) { mapper.addMapping(i, i*2, 2); } return mapper; } }
/** {@inheritDoc} */ @Override public RegisterMapper allocateRegisters() { int oldRegCount = ssaMeth.getRegCount(); BasicRegisterMapper mapper = new BasicRegisterMapper(oldRegCount); for (int i = 0; i < oldRegCount; i++) { mapper.addMapping(i, i*2, 2); } return mapper; } }
/** {@inheritDoc} */ @Override public void addMapping(int oldReg, int newReg, int category) { super.addMapping(oldReg, newReg, category); addInterfence(newReg, oldReg); if (category == 2) { addInterfence(newReg + 1, oldReg); } }
/** {@inheritDoc} */ @Override public RegisterMapper allocateRegisters() { int oldRegCount = ssaMeth.getRegCount(); BasicRegisterMapper mapper = new BasicRegisterMapper(oldRegCount); for (int i = 0; i < oldRegCount; i++) { mapper.addMapping(i, i*2, 2); } return mapper; } }
/** {@inheritDoc} */ @Override public void addMapping(int oldReg, int newReg, int category) { super.addMapping(oldReg, newReg, category); addInterfence(newReg, oldReg); if (category == 2) { addInterfence(newReg + 1, oldReg); } }
/** {@inheritDoc} */ @Override public void addMapping(int oldReg, int newReg, int category) { super.addMapping(oldReg, newReg, category); addInterfence(newReg, oldReg); if (category == 2) { addInterfence(newReg + 1, oldReg); } }
/** {@inheritDoc} */ @Override public void addMapping(int oldReg, int newReg, int category) { super.addMapping(oldReg, newReg, category); addInterfence(newReg, oldReg); if (category == 2) { addInterfence(newReg + 1, oldReg); } }
/** {@inheritDoc} */ @Override public RegisterMapper allocateRegisters() { int oldRegCount = ssaMeth.getRegCount(); BasicRegisterMapper mapper = new BasicRegisterMapper(oldRegCount); for (int i = 0; i < oldRegCount; i++) { mapper.addMapping(i, i*2, 2); } return mapper; } }
/** {@inheritDoc} */ @Override public void addMapping(int oldReg, int newReg, int category) { super.addMapping(oldReg, newReg, category); addInterfence(newReg, oldReg); if (category == 2) { addInterfence(newReg + 1, oldReg); } }
/** {@inheritDoc} */ @Override public RegisterMapper allocateRegisters() { int oldRegCount = ssaMeth.getRegCount(); BasicRegisterMapper mapper = new BasicRegisterMapper(oldRegCount); for (int i = 0; i < oldRegCount; i++) { mapper.addMapping(i, i*2, 2); } return mapper; } }
/** {@inheritDoc} */ @Override public RegisterMapper allocateRegisters() { int oldRegCount = ssaMeth.getRegCount(); BasicRegisterMapper mapper = new BasicRegisterMapper(oldRegCount); for (int i = 0; i < oldRegCount; i++) { mapper.addMapping(i, i*2, 2); } return mapper; } }
/** {@inheritDoc} */ @Override public void addMapping(int oldReg, int newReg, int category) { super.addMapping(oldReg, newReg, category); addInterfence(newReg, oldReg); if (category == 2) { addInterfence(newReg + 1, oldReg); } }
/** * Moves the parameter registers, which allocateRegisters() places * at the bottom of the frame, up to the top of the frame to match * Dalvik calling convention. */ private void moveParametersToHighRegisters() { int paramWidth = ssaMeth.getParamWidth(); BasicRegisterMapper mapper = new BasicRegisterMapper(ssaMeth.getRegCount()); int regCount = ssaMeth.getRegCount(); for (int i = 0; i < regCount; i++) { if (i < paramWidth) { mapper.addMapping(i, regCount - paramWidth + i, 1); } else { mapper.addMapping(i, i - paramWidth, 1); } } if (DEBUG) { System.out.printf("Moving %d registers from 0 to %d\n", paramWidth, regCount - paramWidth); } ssaMeth.mapRegisters(mapper); }