C1 does sign-extension when it loads ints and shorts from memory to 64-bit registers. This causes problems for C2 because it relies on the fact the int passed in a 64-bit register is zero-extended. Webrev: http://cr.openjdk.java.net/~iveresov/6946892/webrev.00/ Thanks, igor