From 7827d0b6b179a56292d6ed106d95963a7743fde5 Mon Sep 17 00:00:00 2001 From: adam Date: Sun, 13 Apr 2008 03:14:38 +0100 Subject: [PATCH] remove magic constant 19 from literal encodings --- src/edu/berkeley/fleet/ies44/InstructionEncoder.java | 6 +++--- src/edu/berkeley/fleet/util/Mask.java | 11 ++++++++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/edu/berkeley/fleet/ies44/InstructionEncoder.java b/src/edu/berkeley/fleet/ies44/InstructionEncoder.java index 2fc3386..13b1acf 100644 --- a/src/edu/berkeley/fleet/ies44/InstructionEncoder.java +++ b/src/edu/berkeley/fleet/ies44/InstructionEncoder.java @@ -112,10 +112,10 @@ public abstract class InstructionEncoder { if (LITERAL_HI.get(inst)) return new Instruction.HalfLiteral(name, dl, predicate, LITERAL_HI.getval(inst), 0, true); if (LITERAL.get(inst)) { long literal = LITERAL.getval(inst); - if (LITERAL_LOW_ZERO.get(inst)) literal = literal << 19; - else if (LITERAL_LOW_ONE.get(inst)) literal = (literal << 19) | ~(-1L << 19); + if (LITERAL_LOW_ZERO.get(inst)) literal = literal << LITERAL_HIGH_ZERO.getWidth(); + else if (LITERAL_LOW_ONE.get(inst)) literal = (literal << LITERAL_HIGH_ZERO.getWidth()) | ~(-1L << LITERAL_HIGH_ZERO.getWidth()); else if (LITERAL_HIGH_ZERO.get(inst)) literal = literal; - else if (LITERAL_HIGH_ONE.get(inst)) literal = literal | (-1L << 19); + else if (LITERAL_HIGH_ONE.get(inst)) literal = literal | (-1L << LITERAL_HIGH_ZERO.getWidth()); if ((literal & (1L<<(WIDTH_WORD-1))) != 0) literal |= (-1L << WIDTH_WORD); return new Instruction.Literal(name, dl, predicate, literal); } diff --git a/src/edu/berkeley/fleet/util/Mask.java b/src/edu/berkeley/fleet/util/Mask.java index f75c4be..4ed743c 100644 --- a/src/edu/berkeley/fleet/util/Mask.java +++ b/src/edu/berkeley/fleet/util/Mask.java @@ -10,7 +10,6 @@ public class Mask { public final long valmask; public final int valmaskmin; - public String verilog(String var) { return "(("+var+" & "+mask+")=="+val+")"; } @@ -32,6 +31,16 @@ public class Mask { return (in & mask) == val; } + public int getWidth() { + int ret = 0; + long m = 1; + for(int i=0; i<64; i++) { + if ((valmask & m)!=0) ret++; + m = m << 1; + } + return ret; + } + public Mask(String s) { long mask = 0; long valmask = 0; -- 1.7.10.4