public inbox for frysk-cvs@sourceware.org help / color / mirror / Atom feed
From: tthomas@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] frysk system monitor/debugger branch, master, updated. 718026a59c0ed8ed3a4e7eb97090244332b8c210 Date: Wed, 07 Nov 2007 19:11:00 -0000 [thread overview] Message-ID: <20071107191128.22467.qmail@sourceware.org> (raw) The branch, master has been updated via 718026a59c0ed8ed3a4e7eb97090244332b8c210 (commit) from 925c031c35d3340a51b3ae57bae38b1818a5e278 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 718026a59c0ed8ed3a4e7eb97090244332b8c210 Author: Teresa Thomas <tthomas@redhat.com> Date: Wed Nov 7 14:07:52 2007 -0500 Implement *, /, *=, /= in Arithmetic Unit. frysk-core/frysk/value/ChangeLog 2007-11-07 Teresa Thomas <tthomas@redhat.com> * FloatingPointUnit.java (multiply): New. (divide): New. (mod): New. * IntegerUnit.java (multiply): New. (divide): New. (mod): New. * ArithmeticUnit.java (divide): New. (multiply): New. (timesEqual): New. (divideEqual): New. (mod): New. (modEqual): New.. * ArithmeticType.java (multiply): Delete. (timesEqual): Delete. (divide): Delete. (divideEqual): Delete. (mod): Delete (modEqual): Delete. * TypeDecorator.java (multiply): Delete. (timesEqual): Delete. (divide): Delete. (divideEqual): Delete. (mod): Delete. (modEqual): Delete. * Type.java (multiply): Delete. (timesEqual): Delete. (divide): Delete. (divideEqual): Delete. (mod): Delete. (modEqual): Delete. * TestValue.java: Updated. frysk-core/frysk/expr/ChangeLog 2007-11-06 Teresa Thomas <tthomas@redhat.com> * CExprEvaluator.g (STAR): Use Arithmetic Unit. (TIMESEQUAL): Ditto. (DIVIDE): Ditto. (DIVIDEEQUAL): Ditto. (MOD): Ditto. (MODEQUAL): Ditto. ----------------------------------------------------------------------- Summary of changes: frysk-core/frysk/expr/CExprEvaluator.g | 62 +++++++++++++++---------- frysk-core/frysk/expr/ChangeLog | 9 ++++ frysk-core/frysk/value/AddressUnit.java | 4 +- frysk-core/frysk/value/ArithmeticType.java | 42 ----------------- frysk-core/frysk/value/ArithmeticUnit.java | 40 +++++++++++++++- frysk-core/frysk/value/ChangeLog | 34 +++++++++++++ frysk-core/frysk/value/FloatingPointUnit.java | 18 +++++++- frysk-core/frysk/value/IntegerUnit.java | 18 +++++++- frysk-core/frysk/value/TestValue.java | 30 ++++++------ frysk-core/frysk/value/Type.java | 20 +-------- frysk-core/frysk/value/TypeDecorator.java | 19 +------- 11 files changed, 173 insertions(+), 123 deletions(-) First 500 lines of diff: diff --git a/frysk-core/frysk/expr/CExprEvaluator.g b/frysk-core/frysk/expr/CExprEvaluator.g index d5bf068..087ca64 100644 --- a/frysk-core/frysk/expr/CExprEvaluator.g +++ b/frysk-core/frysk/expr/CExprEvaluator.g @@ -137,38 +137,64 @@ identifier returns [String idSpelling=null] expr returns [Value returnVar=null] { Value v1, v2, log_expr; String s1; } : #(PLUS v1=expr v2=expr) { - returnVar = v1.getType().getALU(v2.getType(), exprSymTab.getWordSize()) + returnVar = v1.getType().getALU(v2.getType(), + exprSymTab.getWordSize()) .add(v1, v2); } | #(PLUSEQUAL v1=expr v2=expr) { - returnVar = v1.getType().getALU(v2.getType(), exprSymTab.getWordSize()) + returnVar = v1.getType().getALU(v2.getType(), + exprSymTab.getWordSize()) .plusEqual(v1, v2); } | ( #(MINUS expr expr) )=> #(MINUS v1=expr v2=expr) { - returnVar = v1.getType().getALU(v2.getType(), exprSymTab.getWordSize()) + returnVar = v1.getType().getALU(v2.getType(), + exprSymTab.getWordSize()) .subtract(v1, v2); } | #(MINUSEQUAL v1=expr v2=expr) { - returnVar = v1.getType().getALU(v2.getType(), exprSymTab.getWordSize()) + returnVar = v1.getType().getALU(v2.getType(), + exprSymTab.getWordSize()) .minusEqual(v1, v2); } | #(MINUS v1=expr ) { returnVar = intType.createValue(0); - returnVar = returnVar.getType().getALU(v1.getType(), exprSymTab.getWordSize()) + returnVar = returnVar.getType().getALU(v1.getType(), + exprSymTab.getWordSize()) .subtract(returnVar, v1); } | ( #(STAR expr expr) )=> #(STAR v1=expr v2=expr) { - returnVar = v1.getType().multiply(v1, v2); + returnVar = v1.getType().getALU(v2.getType(), + exprSymTab.getWordSize()) + .multiply(v1, v2); } + | #(TIMESEQUAL v1=expr v2=expr) { + returnVar = v1.getType().getALU(v2.getType(), + exprSymTab.getWordSize()) + .timesEqual(v1, v2); + } + | #(DIVIDE v1=expr v2=expr) { + returnVar = v1.getType().getALU(v2.getType(), + exprSymTab.getWordSize()) + .divide(v1, v2); + } + | #(DIVIDEEQUAL v1=expr v2=expr) { + returnVar = v1.getType().getALU(v2.getType(), + exprSymTab.getWordSize()) + .divideEqual(v1, v2); + } + | #(MOD v1=expr v2=expr) { + returnVar = v1.getType().getALU(v2.getType(), + exprSymTab.getWordSize()) + .mod(v1, v2); + } + | #(MODEQUAL v1=expr v2=expr) { + returnVar = v1.getType().getALU(v2.getType(), + exprSymTab.getWordSize()) + .modEqual(v1, v2); + } | #(MEMORY v1=expr ) { returnVar = v1.getType().dereference(v1, exprSymTab.taskMemory()); } - | #(DIVIDE v1=expr v2=expr) { - returnVar = v1.getType().divide(v1, v2); - } - | #(MOD v1=expr v2=expr) { - returnVar = v1.getType().mod(v1, v2); - } | #(SHIFTLEFT v1=expr v2=expr) { returnVar = v1.getType().shiftLeft(v1, v2); } @@ -264,18 +290,6 @@ expr returns [Value returnVar=null] v1.assign(v2); returnVar = v1; } - | #(TIMESEQUAL v1=expr v2=expr) { - v1.getType().timesEqual(v1, v2); - returnVar = v1; - } - | #(DIVIDEEQUAL v1=expr v2=expr) { - v1.getType().divideEqual(v1, v2); - returnVar = v1; - } - | #(MODEQUAL v1=expr v2=expr) { - v1.getType().modEqual(v1, v2); - returnVar = v1; - } | #(SHIFTLEFTEQUAL v1=expr v2=expr) { v1.getType().shiftLeftEqual(v1, v2); returnVar = v1; diff --git a/frysk-core/frysk/expr/ChangeLog b/frysk-core/frysk/expr/ChangeLog index 1f93590..a316bff 100644 --- a/frysk-core/frysk/expr/ChangeLog +++ b/frysk-core/frysk/expr/ChangeLog @@ -1,5 +1,14 @@ 2007-11-06 Teresa Thomas <tthomas@redhat.com> + * CExprEvaluator.g (STAR): Use Arithmetic Unit. + (TIMESEQUAL): Ditto. + (DIVIDE): Ditto. + (DIVIDEEQUAL): Ditto. + (MOD): Ditto. + (MODEQUAL): Ditto. + +2007-11-06 Teresa Thomas <tthomas@redhat.com> + * CExprEvaluator.g (MINUS): Use Arithmetic Unit. (MINUSEQUAL): Ditto. diff --git a/frysk-core/frysk/value/AddressUnit.java b/frysk-core/frysk/value/AddressUnit.java index cf2b316..ea9e285 100644 --- a/frysk-core/frysk/value/AddressUnit.java +++ b/frysk-core/frysk/value/AddressUnit.java @@ -41,7 +41,7 @@ package frysk.value; import inua.eio.ByteOrder; /** - * Arithmetic Operation handling for pointers and addresses. + * Operation handling for pointers and addresses. */ public class AddressUnit extends ArithmeticUnit @@ -64,6 +64,8 @@ extends ArithmeticUnit v2.getType() instanceof ArrayType ) return addArray(v1, v2); + // Commutative operation, so identify pointer + // and integer value. PointerType ptrType; Value ptrValue; Value intValue; diff --git a/frysk-core/frysk/value/ArithmeticType.java b/frysk-core/frysk/value/ArithmeticType.java index 8a2ee4d..96f8a79 100644 --- a/frysk-core/frysk/value/ArithmeticType.java +++ b/frysk-core/frysk/value/ArithmeticType.java @@ -119,36 +119,6 @@ public abstract class ArithmeticType } } - public Value multiply(Value var1, Value var2) { - ArithmeticType type = returnType(var1, var2); - if (type instanceof IntegerType) - return type.createValue(var1.asLong() * var2.asLong()); - else if (type instanceof FloatingPointType) - return type.createValue(var1.doubleValue() * var2.doubleValue()); - else - throw new RuntimeException("type conversion botch"); - } - - public Value divide(Value var1, Value var2) { - ArithmeticType type = returnType(var1, var2); - if (type instanceof IntegerType) - return type.createValue(var1.asLong() / var2.asLong()); - else if (type instanceof FloatingPointType) - return type.createValue(var1.doubleValue() / var2.doubleValue()); - else - throw new RuntimeException("type conversion botch"); - } - - public Value mod(Value var1, Value var2) { - ArithmeticType type = returnType(var1, var2); - if (type instanceof IntegerType) - return type.createValue(var1.asLong() % var2.asLong()); - else if (type instanceof FloatingPointType) - return type.createValue(var1.doubleValue() % var2.doubleValue()); - else - throw new RuntimeException("type conversion botch"); - } - public Value shiftLeft(Value var1, Value var2) { ArithmeticType type = returnType(var1, var2); if (type instanceof IntegerType) @@ -287,18 +257,6 @@ public abstract class ArithmeticType return var1.assign(var2); } - public Value timesEqual(Value var1, Value var2) { - return var1.assign(multiply(var1, var2)); - } - - public Value divideEqual(Value var1, Value var2) { - return var1.assign(divide(var1, var2)); - } - - public Value modEqual(Value var1, Value var2) { - return var1.assign(mod(var1, var2)); - } - public Value shiftLeftEqual(Value var1, Value var2) { return var1.assign(shiftLeft(var1, var2)); } diff --git a/frysk-core/frysk/value/ArithmeticUnit.java b/frysk-core/frysk/value/ArithmeticUnit.java index c8aae93..736f89a 100644 --- a/frysk-core/frysk/value/ArithmeticUnit.java +++ b/frysk-core/frysk/value/ArithmeticUnit.java @@ -40,15 +40,37 @@ package frysk.value; /** - * Arithmetic Operation handling for different types. + * Arithmetic and Logical Operation handling + * for different types. */ public abstract class ArithmeticUnit { protected ArithmeticType retType; - public abstract Value add(Value v1, Value v2); + public Value add(Value v1, Value v2) { + throw new InvalidOperatorException + (v1.getType(), v2.getType(), "+"); + } + + public Value subtract(Value v1, Value v2) { + throw new InvalidOperatorException + (v1.getType(), v2.getType(), "-"); + } + + public Value multiply (Value v1, Value v2) { + throw new InvalidOperatorException + (v1.getType(), v2.getType(), "*"); + } + + public Value divide(Value v1, Value v2) { + throw new InvalidOperatorException + (v1.getType(), v2.getType(), "/"); + } - public abstract Value subtract(Value v1, Value v2); + public Value mod(Value v1, Value v2) { + throw new InvalidOperatorException + (v1.getType(), v2.getType(), "%"); + } public Value plusEqual(Value v1, Value v2) { return v1.assign(add(v1, v2)); @@ -57,4 +79,16 @@ public abstract class ArithmeticUnit public Value minusEqual(Value v1, Value v2) { return v1.assign(subtract(v1, v2)); } + + public Value timesEqual(Value v1, Value v2) { + return v1.assign(multiply(v1, v2)); + } + + public Value divideEqual (Value v1, Value v2) { + return v1.assign(divide(v1, v2)); + } + + public Value modEqual(Value v1, Value v2) { + return v1.assign(mod(v1, v2)); + } } \ No newline at end of file diff --git a/frysk-core/frysk/value/ChangeLog b/frysk-core/frysk/value/ChangeLog index 8be698c..108511e 100644 --- a/frysk-core/frysk/value/ChangeLog +++ b/frysk-core/frysk/value/ChangeLog @@ -1,3 +1,37 @@ +2007-11-07 Teresa Thomas <tthomas@redhat.com> + + * FloatingPointUnit.java (multiply): New. + (divide): New. + (mod): New. + * IntegerUnit.java (multiply): New. + (divide): New. + (mod): New. + * ArithmeticUnit.java (divide): New. + (multiply): New. + (timesEqual): New. + (divideEqual): New. + (mod): New. + (modEqual): New.. + * ArithmeticType.java (multiply): Delete. + (timesEqual): Delete. + (divide): Delete. + (divideEqual): Delete. + (mod): Delete + (modEqual): Delete. + * TypeDecorator.java (multiply): Delete. + (timesEqual): Delete. + (divide): Delete. + (divideEqual): Delete. + (mod): Delete. + (modEqual): Delete. + * Type.java (multiply): Delete. + (timesEqual): Delete. + (divide): Delete. + (divideEqual): Delete. + (mod): Delete. + (modEqual): Delete. + * TestValue.java: Updated. + 2007-11-06 Teresa Thomas <tthomas@redhat.com> * InvalidOperatorException.java diff --git a/frysk-core/frysk/value/FloatingPointUnit.java b/frysk-core/frysk/value/FloatingPointUnit.java index f10a103..96cbd83 100644 --- a/frysk-core/frysk/value/FloatingPointUnit.java +++ b/frysk-core/frysk/value/FloatingPointUnit.java @@ -40,7 +40,8 @@ package frysk.value; /** - * Arithmetic Operation handling for floating points. + * Arithmetic and logical operation handling + * for floating points. */ public class FloatingPointUnit extends ArithmeticUnit @@ -63,4 +64,19 @@ public class FloatingPointUnit return retType.createValue (v1.doubleValue() - v2.doubleValue()); } + + public Value multiply (Value v1, Value v2) { + return retType.createValue + (v1.doubleValue() * v2.doubleValue()); + } + + public Value divide (Value v1, Value v2) { + return retType.createValue + (v1.doubleValue() / v2.doubleValue()); + } + + public Value mod (Value v1, Value v2) { + return retType.createValue + (v1.doubleValue() % v2.doubleValue()); + } } \ No newline at end of file diff --git a/frysk-core/frysk/value/IntegerUnit.java b/frysk-core/frysk/value/IntegerUnit.java index 32defa8..aff19e2 100644 --- a/frysk-core/frysk/value/IntegerUnit.java +++ b/frysk-core/frysk/value/IntegerUnit.java @@ -40,7 +40,8 @@ package frysk.value; /** - * Arithmetic Operation handling for integers. + * Arithmetic and logical Operation handling + * for integers. */ public class IntegerUnit extends ArithmeticUnit @@ -60,4 +61,19 @@ public class IntegerUnit return retType.createValue (v1.asBigInteger().subtract(v2.asBigInteger())); } + + public Value multiply (Value v1, Value v2) { + return retType.createValue + (v1.asBigInteger().multiply(v2.asBigInteger())); + } + + public Value divide (Value v1, Value v2) { + return retType.createValue + (v1.asBigInteger().divide(v2.asBigInteger())); + } + + public Value mod(Value v1, Value v2) { + return retType.createValue + (v1.asBigInteger().mod(v2.asBigInteger())); + } } \ No newline at end of file diff --git a/frysk-core/frysk/value/TestValue.java b/frysk-core/frysk/value/TestValue.java index 7dbf48c..37c7967 100644 --- a/frysk-core/frysk/value/TestValue.java +++ b/frysk-core/frysk/value/TestValue.java @@ -102,13 +102,14 @@ public class TestValue { Value v1 = intType.createValue(4); Value v2 = shortType.createValue(9); + // Give bogus word size values. Value v3 = v1.getType().getALU(v2.getType(), 0).add(v1, v2); assertEquals ("4 + 9", 4 + 9, v3.asLong()); v3 = v1.getType().getALU(v2.getType(), 0).subtract(v2, v1); assertEquals ("9 - 4", 9 - 4, v3.asLong()); - v3 = v1.getType().multiply(v2, v1); + v3 = v1.getType().getALU(v2.getType(), 0).multiply(v2, v1); assertEquals ("9 * 4", 9 * 4, v3.asLong()); - v3 = v1.getType().mod(v2, v1); + v3 = v1.getType().getALU(v2.getType(), 0).mod(v2, v1); assertEquals ("9 % 4", 9 % 4, v3.asLong()); v3 = v1.getType().shiftLeft(v2, v1); assertEquals ("9 << 4", 9 << 4, v3.asLong()); @@ -140,15 +141,15 @@ public class TestValue assertEquals ("9 | 4", 1, v3.asLong()); v3 = v3.assign(v1); assertEquals ("v3 = 4", 4, v3.asLong()); - v3 = v1.getType().getALU(v2.getType(), 0).plusEqual(v3, v1); + v3 = v3.getType().getALU(v1.getType(), 0).plusEqual(v3, v1); assertEquals ("v3 += 4", 8, v3.asLong()); - v3 = v1.getType().getALU(v2.getType(), 0).minusEqual(v3, v1); + v3 = v3.getType().getALU(v1.getType(), 0).minusEqual(v3, v1); assertEquals ("v3 -= 4", 4, v3.asLong()); - v3 = v1.getType().timesEqual(v3, v1); + v3 = v3.getType().getALU(v1.getType(), 0).timesEqual(v3, v1); assertEquals ("v3 *= 4", 16, v3.asLong()); - v3 = v1.getType().divideEqual(v3, v1); + v3 = v3.getType().getALU(v1.getType(), 0).divideEqual(v3, v1); assertEquals ("v3 /= 4", 4, v3.asLong()); - v3 = v1.getType().modEqual(v3, v1); + v3 = v3.getType().getALU(v1.getType(), 0).modEqual(v3, v1); assertEquals ("v3 %= 4", 0, v3.asLong()); v3 = v1.getType().shiftLeftEqual(v3, v1); assertEquals ("v3 <<= 4", 0, v3.asLong()); @@ -166,13 +167,14 @@ public class TestValue { Value v1 = floatType.createValue((float)4.0); Value v2 = doubleType.createValue(9.0); + // Give bogus word size values. Value v3 = v1.getType().getALU(v2.getType(), 0).add(v1, v2); assertEquals ("4 + 9", 4 + 9, v3.doubleValue(), 0); v3 = v1.getType().getALU(v2.getType(), 0).subtract(v2, v1); assertEquals ("9 - 4", 9 - 4, v3.doubleValue(), 0); - v3 = v1.getType().multiply(v2, v1); + v3 = v1.getType().getALU(v2.getType(), 0).multiply(v2, v1); assertEquals ("9 * 4", 9 * 4, v3.doubleValue(), 0); - v3 = v1.getType().mod(v2, v1); + v3 = v1.getType().getALU(v2.getType(), 0).mod(v2, v1); assertEquals ("9 % 4", 9 % 4, v3.doubleValue(), 0); v3 = v1.getType().lessThan(v2, v1); assertEquals ("9 < 4", 9 < 4, isTrue(v3.doubleValue())); @@ -188,15 +190,15 @@ public class TestValue assertEquals ("9 != 4", v2 != v1, isTrue(v3.doubleValue())); v3 = v3.assign(v1); assertEquals ("v3 = 4", 4, v3.doubleValue(), 0); - v3 = v1.getType().getALU(v3.getType(), 0).plusEqual(v3, v1); + v3 = v3.getType().getALU(v1.getType(), 0).plusEqual(v3, v1); assertEquals ("v3 += 4", 8, v3.doubleValue(), 0); - v3 = v1.getType().getALU(v2.getType(), 0).minusEqual(v3, v1); + v3 = v3.getType().getALU(v1.getType(), 0).minusEqual(v3, v1); assertEquals ("v3 -= 4", 4, v3.doubleValue(), 0); - v3 = v1.getType().timesEqual(v3, v1); + v3 = v3.getType().getALU(v1.getType(), 0).timesEqual(v3, v1); assertEquals ("v3 *= 4", 16, v3.doubleValue(), 0); - v3 = v1.getType().divideEqual(v3, v1); + v3 = v3.getType().getALU(v1.getType(), 0).divideEqual(v3, v1); assertEquals ("v3 /= 4", 4, v3.doubleValue(), 0); - v3 = v1.getType().modEqual(v3, v1); + v3 = v3.getType().getALU(v1.getType(), 0).modEqual(v3, v1); assertEquals ("v3 %= 4", 0, v3.doubleValue(), 0); } } diff --git a/frysk-core/frysk/value/Type.java b/frysk-core/frysk/value/Type.java index cb204aa..c13cb2e 100644 --- a/frysk-core/frysk/value/Type.java +++ b/frysk-core/frysk/value/Type.java @@ -143,16 +143,7 @@ public abstract class Type { public ArithmeticUnit getALU(ArrayType type, int wordSize) { throw new RuntimeException("Invalid Arithmetic Unit"); } - - public Value multiply (Value var1, Value var2) { - throw new InvalidOperatorException(this, "*"); - } - public Value divide (Value var1, Value var2) { - throw new InvalidOperatorException(this, "/"); - } - public Value mod (Value var1, Value var2) { - throw new InvalidOperatorException(this, "%"); - } + public Value shiftLeft (Value var1, Value var2) { throw new InvalidOperatorException(this, "<<"); } @@ -198,15 +189,6 @@ public abstract class Type { public Value logicalNegation(Value var1) { throw new InvalidOperatorException(this, "!"); } - public Value timesEqual (Value var1, Value var2) { - throw new InvalidOperatorException(this, "*="); - } - public Value divideEqual (Value var1, Value var2) { - throw new InvalidOperatorException(this, "/="); - } - public Value modEqual (Value var1, Value var2) { - throw new InvalidOperatorException(this, "%="); - } public Value shiftLeftEqual (Value var1, Value var2) { throw new InvalidOperatorException(this, "<<="); } diff --git a/frysk-core/frysk/value/TypeDecorator.java b/frysk-core/frysk/value/TypeDecorator.java index 30e2fc7..98d0461 100644 --- a/frysk-core/frysk/value/TypeDecorator.java +++ b/frysk-core/frysk/value/TypeDecorator.java @@ -89,15 +89,7 @@ abstract class TypeDecorator extends Type { decorated.toPrint(writer); hooks/post-receive -- frysk system monitor/debugger
reply other threads:[~2007-11-07 19:11 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20071107191128.22467.qmail@sourceware.org \ --to=tthomas@sourceware.org \ --cc=frysk-cvs@sourceware.org \ --cc=frysk@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).