From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17977 invoked by alias); 13 Nov 2007 19:59:11 -0000 Received: (qmail 17926 invoked by uid 9708); 13 Nov 2007 19:59:11 -0000 Date: Tue, 13 Nov 2007 19:59:00 -0000 Message-ID: <20071113195911.17911.qmail@sourceware.org> From: tthomas@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Implement logical negation (!) for float and Address Types. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: b9945ac4ff2ab204f6c340a90bbaba11f8265266 X-Git-Newrev: fc228ee2d3554182856206ca08158e551ed5dfcb Mailing-List: contact frysk-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: frysk-cvs-owner@sourceware.org Reply-To: frysk@sourceware.org X-SW-Source: 2007-q4/txt/msg00355.txt.bz2 The branch, master has been updated via fc228ee2d3554182856206ca08158e551ed5dfcb (commit) via 9fd6262cfe554b85e3333b6b46d0988729ae1a25 (commit) via c3260297538be6ea92f807cf3192dfbef1c0b8f1 (commit) from b9945ac4ff2ab204f6c340a90bbaba11f8265266 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit fc228ee2d3554182856206ca08158e551ed5dfcb Author: Teresa Thomas Date: Tue Nov 13 14:49:36 2007 -0500 Implement logical negation (!) for float and Address Types. frysk-core/frysk/value/ChangeLog 2007-11-13 Teresa Thomas * ArithmeticUnit.java (logicalNegation): Add task mem to parmeter list. * IntegerUnit.java (logicalNegation): Update. * AddressUnit.java (logicalNegation): New. * FloatingPointUnit.java (logicalNegation): New. * TestValue.java (testFloatOps): Test for above. (testAddressOps): New. frysk-core/frysk/pkglibdir/ChangeLog 2007-11-13 Teresa Thomas * funit-addresses.c (ptr): New. ase enter the commit message for your changes. commit 9fd6262cfe554b85e3333b6b46d0988729ae1a25 Merge: c3260297538be6ea92f807cf3192dfbef1c0b8f1 b9945ac4ff2ab204f6c340a90bbaba11f8265266 Author: Teresa Thomas Date: Tue Nov 13 14:43:43 2007 -0500 Merge branch 'master' of ssh://sources.redhat.com/git/frysk commit c3260297538be6ea92f807cf3192dfbef1c0b8f1 Author: Teresa Thomas Date: Tue Nov 13 14:40:13 2007 -0500 Add new getALU with no type arguments. Use for unary operations. frysk-core/frysk/expr/ChangeLog 2007-11-13 Teresa Thomas * CExprEvaluator.g: Update. frysk-core/frysk/value/ChangeLog 2007-11-13 Teresa Thomas * ArrayType.java (getALU): New. * PointerType.java (getALU): New. * Type.java (getALU): New. * FloatingPointType.java (getALU): New. * IntegerType.java (getALU): New. * IntegerUnit.java (IntegerUnit): New. ----------------------------------------------------------------------- Summary of changes: frysk-core/frysk/expr/CExprEvaluator.g | 9 ++++----- frysk-core/frysk/expr/ChangeLog | 4 ++++ frysk-core/frysk/pkglibdir/ChangeLog | 4 ++++ frysk-core/frysk/pkglibdir/funit-addresses.c | 3 ++- frysk-core/frysk/value/AddressUnit.java | 6 ++++++ frysk-core/frysk/value/ArithmeticUnit.java | 3 ++- frysk-core/frysk/value/ArrayType.java | 4 ++++ frysk-core/frysk/value/ChangeLog | 17 +++++++++++++++++ frysk-core/frysk/value/FloatingPointType.java | 4 ++++ frysk-core/frysk/value/FloatingPointUnit.java | 11 ++++++++++- frysk-core/frysk/value/IntegerType.java | 4 ++++ frysk-core/frysk/value/IntegerUnit.java | 12 +++++++++++- frysk-core/frysk/value/PointerType.java | 4 ++++ frysk-core/frysk/value/TestValue.java | 21 ++++++++++++++++++++- frysk-core/frysk/value/Type.java | 4 ++++ 15 files changed, 100 insertions(+), 10 deletions(-) First 500 lines of diff: diff --git a/frysk-core/frysk/expr/CExprEvaluator.g b/frysk-core/frysk/expr/CExprEvaluator.g index 411e134..4f06c19 100644 --- a/frysk-core/frysk/expr/CExprEvaluator.g +++ b/frysk-core/frysk/expr/CExprEvaluator.g @@ -266,13 +266,12 @@ expr returns [Value returnVar=null] .logicalOr(v1, v2); } | #(NOT v1=expr) { - returnVar = v1.getType().getALU(v1.getType(), - exprSymTab.getWordSize()) - .logicalNegation(v1); + // byte buffer needed for Pointer/Address types + returnVar = v1.getType().getALU(exprSymTab.getWordSize()) + .logicalNegation(v1, exprSymTab.taskMemory()); } | #(TILDE v1=expr) { - returnVar = v1.getType().getALU(v1.getType(), - exprSymTab.getWordSize()) + returnVar = v1.getType().getALU(exprSymTab.getWordSize()) .bitWiseComplement(v1); } | #(COND_EXPR log_expr=expr v1=expr v2=expr) { diff --git a/frysk-core/frysk/expr/ChangeLog b/frysk-core/frysk/expr/ChangeLog index 24693ab..4d06e8a 100644 --- a/frysk-core/frysk/expr/ChangeLog +++ b/frysk-core/frysk/expr/ChangeLog @@ -1,3 +1,7 @@ +2007-11-13 Teresa Thomas + + * CExprEvaluator.g: Update. + 2007-11-09 Teresa Thomas * CExprEvaluator.g: Update evaluator to diff --git a/frysk-core/frysk/pkglibdir/ChangeLog b/frysk-core/frysk/pkglibdir/ChangeLog index 891af0c..ea6107a 100644 --- a/frysk-core/frysk/pkglibdir/ChangeLog +++ b/frysk-core/frysk/pkglibdir/ChangeLog @@ -1,3 +1,7 @@ +2007-11-13 Teresa Thomas + + * funit-addresses.c (ptr): New. + 2007-11-12 Andrew Cagney * funit-stack-inlined.c: Rename funit-inlined.c diff --git a/frysk-core/frysk/pkglibdir/funit-addresses.c b/frysk-core/frysk/pkglibdir/funit-addresses.c index a0422a2..e35142d 100644 --- a/frysk-core/frysk/pkglibdir/funit-addresses.c +++ b/frysk-core/frysk/pkglibdir/funit-addresses.c @@ -62,7 +62,8 @@ int twoD[2][3] = { {99, 88, 77}, {11, 12, 13}, }; int oneD[] = { 4, 3, 2, 1}; -char* string = "hello world\n"; +char* string = "hello world"; +int* ptr = NULL; int main(int argc, char* argv[]) { diff --git a/frysk-core/frysk/value/AddressUnit.java b/frysk-core/frysk/value/AddressUnit.java index 5f9b8f5..8917459 100644 --- a/frysk-core/frysk/value/AddressUnit.java +++ b/frysk-core/frysk/value/AddressUnit.java @@ -40,6 +40,7 @@ package frysk.value; import inua.eio.ByteOrder; +import inua.eio.ByteBuffer; /** * Operation handling for pointers and addresses. */ @@ -123,4 +124,9 @@ extends ArithmeticUnit Value v2Neg = new Value (v2.getType(), l); return add (v1, v2Neg); } + + public Value logicalNegation(Value v1, ByteBuffer mem) { + return intType.createValue + (v1.toPrint(Format.NATURAL, mem).equals("0x0")? 1:0); + } } \ No newline at end of file diff --git a/frysk-core/frysk/value/ArithmeticUnit.java b/frysk-core/frysk/value/ArithmeticUnit.java index e68df96..acfe985 100644 --- a/frysk-core/frysk/value/ArithmeticUnit.java +++ b/frysk-core/frysk/value/ArithmeticUnit.java @@ -40,6 +40,7 @@ package frysk.value; import inua.eio.ByteOrder; +import inua.eio.ByteBuffer; /** * Arithmetic and Logical Operation handling @@ -148,7 +149,7 @@ public abstract class ArithmeticUnit throw new InvalidOperatorException (v1.getType(), v2.getType(), "||"); } - public Value logicalNegation(Value v1) { + public Value logicalNegation(Value v1, ByteBuffer mem) { throw new InvalidOperatorException (v1.getType(), "!"); } diff --git a/frysk-core/frysk/value/ArrayType.java b/frysk-core/frysk/value/ArrayType.java index 12d2480..7813722 100644 --- a/frysk-core/frysk/value/ArrayType.java +++ b/frysk-core/frysk/value/ArrayType.java @@ -264,4 +264,8 @@ public class ArrayType public ArithmeticUnit getALU(PointerType type, int wordSize) { throw new RuntimeException("Invalid Pointer Arithmetic"); } + // Use for unary operations. + public ArithmeticUnit getALU(int wordSize) { + return new AddressUnit(this, wordSize); + } } diff --git a/frysk-core/frysk/value/ChangeLog b/frysk-core/frysk/value/ChangeLog index 9744fcc..43d1291 100644 --- a/frysk-core/frysk/value/ChangeLog +++ b/frysk-core/frysk/value/ChangeLog @@ -1,3 +1,20 @@ +2007-11-13 Teresa Thomas + + * ArithmeticUnit.java (logicalNegation): Add task mem to + parmeter list. + * IntegerUnit.java (logicalNegation): Update. + * AddressUnit.java (logicalNegation): New. + * FloatingPointUnit.java (logicalNegation): New. + * TestValue.java (testFloatOps): Test for above. + (testAddressOps): New. + + * ArrayType.java (getALU): New. + * PointerType.java (getALU): New. + * Type.java (getALU): New. + * FloatingPointType.java (getALU): New. + * IntegerType.java (getALU): New. + * IntegerUnit.java (IntegerUnit): New. + 2007-11-12 Teresa Thomas * ArithmeticUnit.java (intType): New. diff --git a/frysk-core/frysk/value/FloatingPointType.java b/frysk-core/frysk/value/FloatingPointType.java index f0456d2..63aa570 100644 --- a/frysk-core/frysk/value/FloatingPointType.java +++ b/frysk-core/frysk/value/FloatingPointType.java @@ -108,4 +108,8 @@ public class FloatingPointType public ArithmeticUnit getALU(PointerType type, int wordSize) { throw new RuntimeException("Invalid Pointer Arithmetic"); } + // Use for unary operations. + public ArithmeticUnit getALU(int wordSize) { + return new FloatingPointUnit(this, wordSize); + } } diff --git a/frysk-core/frysk/value/FloatingPointUnit.java b/frysk-core/frysk/value/FloatingPointUnit.java index c7bee21..3e1ff5e 100644 --- a/frysk-core/frysk/value/FloatingPointUnit.java +++ b/frysk-core/frysk/value/FloatingPointUnit.java @@ -38,6 +38,7 @@ // exception. package frysk.value; +import inua.eio.ByteBuffer; /** * Arithmetic and logical operation handling @@ -101,5 +102,13 @@ public class FloatingPointUnit public Value notEqual (Value v1, Value v2) { return retType.createValue (v1.doubleValue() != v2.doubleValue() ? 1:0); - } + } + + /** + * @param mem - unused here. + */ + public Value logicalNegation(Value v1, ByteBuffer mem) { + return intType.createValue + (v1.doubleValue() == 0.0? 1 : 0); + } } \ No newline at end of file diff --git a/frysk-core/frysk/value/IntegerType.java b/frysk-core/frysk/value/IntegerType.java index 28ed015..db9166b 100644 --- a/frysk-core/frysk/value/IntegerType.java +++ b/frysk-core/frysk/value/IntegerType.java @@ -96,4 +96,8 @@ public abstract class IntegerType public ArithmeticUnit getALU(ArrayType type, int wordSize) { return new AddressUnit(type, wordSize); } + // Use for unary operations. + public ArithmeticUnit getALU(int wordSize) { + return new IntegerUnit(this, wordSize); + } } diff --git a/frysk-core/frysk/value/IntegerUnit.java b/frysk-core/frysk/value/IntegerUnit.java index 1f96e2c..e43adbd 100644 --- a/frysk-core/frysk/value/IntegerUnit.java +++ b/frysk-core/frysk/value/IntegerUnit.java @@ -40,6 +40,7 @@ package frysk.value; import java.math.BigInteger; +import inua.eio.ByteBuffer; /** * Arithmetic and logical Operation handling @@ -55,6 +56,12 @@ public class IntegerUnit retType = (t1.getSize() > t2.getSize()) ? t1 : t2; } + + public IntegerUnit (IntegerType t1, int wordSize) { + super (wordSize); + // Return type should be the larger type. + retType = t1 ; + } public Value add(Value v1, Value v2) { return retType.createValue @@ -138,7 +145,10 @@ public class IntegerUnit ((v1.asBigInteger().compareTo(BigInteger.ZERO) == 0 ? false : true) || (v1.asBigInteger().compareTo(BigInteger.ZERO) == 0 ? false : true) ? 1 : 0); } - public Value logicalNegation(Value v1) { + /** + * @ param mem - unused here. + */ + public Value logicalNegation(Value v1, ByteBuffer mem) { return retType.createValue (v1.asBigInteger().compareTo(BigInteger.ZERO) == 0 ? 1 : 0); } diff --git a/frysk-core/frysk/value/PointerType.java b/frysk-core/frysk/value/PointerType.java index d056ec1..5b238d7 100644 --- a/frysk-core/frysk/value/PointerType.java +++ b/frysk-core/frysk/value/PointerType.java @@ -148,4 +148,8 @@ public class PointerType public ArithmeticUnit getALU(ArrayType type, int wordSize) { throw new RuntimeException("Invalid Pointer Arithmetic"); } + // Use for unary operations. + public ArithmeticUnit getALU(int wordSize) { + return new AddressUnit(this, wordSize); + } } diff --git a/frysk-core/frysk/value/TestValue.java b/frysk-core/frysk/value/TestValue.java index 13f6142..d8c8289 100644 --- a/frysk-core/frysk/value/TestValue.java +++ b/frysk-core/frysk/value/TestValue.java @@ -39,6 +39,7 @@ package frysk.value; +import inua.eio.ArrayByteBuffer; import inua.eio.ByteOrder; import frysk.junit.TestCase; @@ -140,7 +141,7 @@ public class TestValue assertEquals ("9 & 4", 1, v3.asLong()); v3 = v1.getType().getALU(v2.getType(), 0).logicalOr(v2, v1); assertEquals ("9 | 4", 1, v3.asLong()); - v3 = v1.getType().getALU(v1.getType(), 0).logicalNegation(v1); + v3 = v1.getType().getALU(v1.getType(), 0).logicalNegation(v1, null); assertEquals ("!4", 0, v3.asLong()); bool = v2.getType().getALU(v2.getType(), 0).getLogicalValue(v2); assertEquals ("bool(9)", true, bool); @@ -205,5 +206,23 @@ public class TestValue assertEquals ("v3 /= 4", 4, v3.doubleValue(), 0); v3 = v3.getType().getALU(v1.getType(), 0).modEqual(v3, v1); assertEquals ("v3 %= 4", 0, v3.doubleValue(), 0); + // Note: Return type of logical expression is int. + v3 = v1.getType().getALU(v1.getType(), 0).logicalNegation(v1, null); + assertEquals ("!4", 0, v3.asLong()); } + + public void testAddressOps() { + // Construct a buffer with a string in it. + ArrayByteBuffer memory + = new ArrayByteBuffer("0123Hello World\0>>>".getBytes()); + Type t = new PointerType("xxx", ByteOrder.BIG_ENDIAN, 1, + new CharType("char", ByteOrder.BIG_ENDIAN, + 1, true)); + // Construct the pointer to it. + Location l = new ScratchLocation(new byte[] { 4 }); + Value string = new Value (t, l); + + Value v = t.getALU(8).logicalNegation(string, memory); + assertEquals("!string", 0, v.asLong()); + } } diff --git a/frysk-core/frysk/value/Type.java b/frysk-core/frysk/value/Type.java index 9188070..f61d137 100644 --- a/frysk-core/frysk/value/Type.java +++ b/frysk-core/frysk/value/Type.java @@ -142,11 +142,15 @@ public abstract class Type { throw new RuntimeException("Invalid Arithmetic Unit"); } public ArithmeticUnit getALU(PointerType type, int wordSize) { + System.out.println ("Type:PType"); throw new RuntimeException("Invalid Arithmetic Unit"); } public ArithmeticUnit getALU(ArrayType type, int wordSize) { throw new RuntimeException("Invalid Arithmetic Unit"); } + public ArithmeticUnit getALU(int wordSize) { + throw new RuntimeException("Invalid Arithmetic Unit"); + } public Value addressOf(Value var1, ByteOrder order, int wordSize) { PointerType pType = new PointerType("AddressPtr", order, wordSize, this); hooks/post-receive -- frysk system monitor/debugger