MCPcopy Create free account
hub / github.com/SeaOfNodes/Simple / zsMask

Method zsMask

chapter23/src/main/java/com/seaofnodes/simple/Parser.java:1568–1583  ·  view source on GitHub ↗
(Node val, Type t )

Source from the content-addressed store, hash-verified

1566 // zero/sign extend. "i" is limited to either classic unsigned (min==0) or
1567 // classic signed (min=minus-power-of-2); max=power-of-2-minus-1.
1568 private Node zsMask(Node val, Type t ) {
1569 if( !(val._type instanceof TypeInteger tval && t instanceof TypeInteger t0 && !tval.isa(t0)) ) {
1570 if( !(val._type instanceof TypeFloat tval && t instanceof TypeFloat t0 && !tval.isa(t0)) )
1571 return val;
1572 // Float rounding
1573 return peep(new RoundF32Node(val));
1574 }
1575 if( t0._min==0 ) // Unsigned
1576 return peep(new AndNode(null,val,con(t0._max)));
1577 // Signed extension
1578 int shift = Long.numberOfLeadingZeros(t0._max)-1;
1579 Node shf = con(shift);
1580 if( shf._type==TypeInteger.ZERO )
1581 return val;
1582 return peep(new SarNode(null,peep(new ShlNode(null,val,shf.keep())),shf.unkeep()));
1583 }
1584
1585 /**
1586 * Parse a function body; the caller will parse the surrounding "{}"

Callers 2

liftExprMethod · 0.95
parseUnaryMethod · 0.95

Calls 5

peepMethod · 0.95
conMethod · 0.95
keepMethod · 0.95
unkeepMethod · 0.95
isaMethod · 0.45

Tested by

no test coverage detected