From 6eb05e5eab47606b3677451a13141f857ed2679b Mon Sep 17 00:00:00 2001 From: adam Date: Sun, 13 Apr 2008 03:33:21 +0100 Subject: [PATCH] clean up literal-setting code --- src/edu/berkeley/fleet/ies44/InstructionEncoder.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/edu/berkeley/fleet/ies44/InstructionEncoder.java b/src/edu/berkeley/fleet/ies44/InstructionEncoder.java index c533f7c..c064487 100644 --- a/src/edu/berkeley/fleet/ies44/InstructionEncoder.java +++ b/src/edu/berkeley/fleet/ies44/InstructionEncoder.java @@ -194,15 +194,11 @@ public abstract class InstructionEncoder { } else if (d instanceof Instruction.Literal) { long il = ((Instruction.Literal)d).literal; - long literal = ((Instruction.Literal)d).literal; - long allones = ~(-1L << WIDTH_WORD); - il = literal = literal & allones; - long top_half = il >> LITERAL_HIGH_ZERO.getWidth(); - long bot_half = il & ~(-1L << LITERAL_HIGH_ZERO.getWidth()); - if (((il & (-1L << 19)) & allones) == 0) instr = LITERAL.setval(LITERAL_HIGH_ZERO.set(instr), il); - else if (((il | ~(-1L << 19)) & allones) == allones) instr = LITERAL.setval(LITERAL_HIGH_ONE.set(instr), il & ~(-1L<<19)); - else if (((il & ~(-1L << 19)) & allones) == 0) instr = LITERAL.setval(LITERAL_LOW_ZERO.set(instr), il >> 19); - else if (((il | (-1L << 19)) & allones) == allones) instr = LITERAL.setval(LITERAL_LOW_ONE.set(instr), (il >> 19)); + if (TOP_HALF_ONE.get(il)) instr = LITERAL_LO.setval(LITERAL_HIGH_ONE.set(instr), BOT_HALF_LITERAL.getval(il)); + else if (TOP_HALF_LITERAL.getval(il)==0) instr = LITERAL_LO.setval(LITERAL_HIGH_ZERO.set(instr), BOT_HALF_LITERAL.getval(il)); + else if (BOT_HALF_ONE.get(il)) instr = LITERAL_HI.setval(LITERAL_LOW_ONE.set(instr), TOP_HALF_LITERAL.getval(il)); + else if (BOT_HALF_LITERAL.getval(il)==0) instr = LITERAL_HI.setval(LITERAL_LOW_ZERO.set(instr), TOP_HALF_LITERAL.getval(il)); + else throw new RuntimeException("literal cannot be encoded using a single instruction"); } else if (d instanceof Instruction.HalfLiteral) { Instruction.HalfLiteral inst = (Instruction.HalfLiteral)d; -- 1.7.10.4