|
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.
|