From b9f376bff3db20aa2237eca9b86ea35a6a9e61d3 Mon Sep 17 00:00:00 2001 From: adam Date: Tue, 13 Feb 2007 15:38:39 +0100 Subject: [PATCH] fix sign-extend logic --- src/edu/berkeley/fleet/slipway/Client.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/edu/berkeley/fleet/slipway/Client.java b/src/edu/berkeley/fleet/slipway/Client.java index 1e8ee83..a30f31b 100644 --- a/src/edu/berkeley/fleet/slipway/Client.java +++ b/src/edu/berkeley/fleet/slipway/Client.java @@ -15,11 +15,17 @@ public class Client extends FleetProcess { throw new RuntimeException("not implemented"); } + public static long signExtend(long val) { + if ((val & (1L << 36)) != 0) + val = val | (0xffffffffffffffffL << 36); + return val; + } + public long readWord() { if (isTerminated()) throw new RuntimeException("this fleet has been terminated"); try { - return queue.take(); + return signExtend(queue.take()); } catch (InterruptedException e) { throw new RuntimeException(e); } } @@ -57,7 +63,9 @@ public class Client extends FleetProcess { for(int i=0; i<6; i++) { val = is.read(); if (val==-1) break; - result |= ((long)val) << (i * 8); + long val2 = (val & 0xffL); + val2 = val2 << (i * 8); + result |= val2; } if (val==-1) break; queue.put(result); -- 1.7.10.4