} 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;