From: <mic...@us...> - 2007-08-14 17:25:21
|
Revision: 165 http://pearcolator.svn.sourceforge.net/pearcolator/?rev=165&view=rev Author: michael_baer Date: 2007-08-14 10:25:25 -0700 (Tue, 14 Aug 2007) Log Message: ----------- - Fixed bug with overlapping translator registers during MultiplyAccumulate - Check in missing file from last commit Modified Paths: -------------- src/org/binarytranslator/arch/arm/decoder/ARM_Translator.java src/org/binarytranslator/arch/arm/os/abi/semihosting/AngelSystemCalls.java Added Paths: ----------- src/org/binarytranslator/generic/fault/InsufficientMemoryException.java Modified: src/org/binarytranslator/arch/arm/decoder/ARM_Translator.java =================================================================== --- src/org/binarytranslator/arch/arm/decoder/ARM_Translator.java 2007-08-14 15:32:09 UTC (rev 164) +++ src/org/binarytranslator/arch/arm/decoder/ARM_Translator.java 2007-08-14 17:25:25 UTC (rev 165) @@ -1955,12 +1955,16 @@ OPT_RegisterOperand result = arm2ir.getRegister(i.Rd); //calculate the result - arm2ir.appendInstruction(Binary.create(INT_MUL, result, operand1, operand2)); - if (i.accumulate) { + OPT_RegisterOperand tmp = arm2ir.getTempInt(0); + arm2ir.appendInstruction(Binary.create(INT_MUL, tmp, operand1, operand2)); + OPT_Operand operand3 = arm2ir.getRegister(i.Rn); - arm2ir.appendInstruction(Binary.create(INT_ADD, result.copyRO(), result.copy(), operand3)); + arm2ir.appendInstruction(Binary.create(INT_ADD, result.copyRO(), tmp.copy(), operand3)); } + else { + arm2ir.appendInstruction(Binary.create(INT_MUL, result, operand1, operand2)); + } if (i.updateConditionCodes) { //set the negative & zero flag Modified: src/org/binarytranslator/arch/arm/os/abi/semihosting/AngelSystemCalls.java =================================================================== --- src/org/binarytranslator/arch/arm/os/abi/semihosting/AngelSystemCalls.java 2007-08-14 15:32:09 UTC (rev 164) +++ src/org/binarytranslator/arch/arm/os/abi/semihosting/AngelSystemCalls.java 2007-08-14 17:25:25 UTC (rev 165) @@ -665,7 +665,7 @@ } writeString(cmdLine, ptrBuffer); - ps.memory.store32(ptrParamBlock + 4, cmdLine.length() + 1); + ps.memory.store32(ptrParamBlock + 4, cmdLine.length()); setReturn(0); } } Added: src/org/binarytranslator/generic/fault/InsufficientMemoryException.java =================================================================== --- src/org/binarytranslator/generic/fault/InsufficientMemoryException.java (rev 0) +++ src/org/binarytranslator/generic/fault/InsufficientMemoryException.java 2007-08-14 17:25:25 UTC (rev 165) @@ -0,0 +1,20 @@ +package org.binarytranslator.generic.fault; + +import org.binarytranslator.generic.os.process.ProcessSpace; + +/** + * Thrown when a process space runs out of (virtual) memory when performing an operation. + * + */ +public class InsufficientMemoryException extends RuntimeException { + private final String operation; + + public InsufficientMemoryException(ProcessSpace ps, String operation) { + this.operation = operation; + } + + @Override + public String toString() { + return "InsufficientMemoryException (Operation: " + operation + ")"; + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |