summaryrefslogtreecommitdiff
path: root/chapter19/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'chapter19/src/main/java')
-rw-r--r--chapter19/src/main/java/com/seaofnodes/simple/node/LoadNode.java8
1 files changed, 4 insertions, 4 deletions
diff --git a/chapter19/src/main/java/com/seaofnodes/simple/node/LoadNode.java b/chapter19/src/main/java/com/seaofnodes/simple/node/LoadNode.java
index 6c74042b..4004f87f 100644
--- a/chapter19/src/main/java/com/seaofnodes/simple/node/LoadNode.java
+++ b/chapter19/src/main/java/com/seaofnodes/simple/node/LoadNode.java
@@ -201,10 +201,10 @@ public class LoadNode extends MemOpNode {
return new AndNode(null,val,con(ti._max));
// Signed extension
int shift = Long.numberOfLeadingZeros(ti._max)-1;
- Node shf = con(shift);
- if( shf._type==TypeInteger.ZERO )
+ if( shift==0 )
return val;
- //return peep(new SarNode(null,peep(new ShlNode(null,val,shf.keep())),shf.unkeep()));
- throw Utils.TODO();
+ Node shf = con(shift);
+ Node shl = new ShlNode(null,val,shf.keep()).peephole();
+ return new SarNode(null,shl,shf.unkeep());
}
}