Register R12 must be preserved for stub calls (e.g. deopt handler). There is no easy test for this issue. It showed in our tests after we ported C1, which caused new, different execution behaviour. It depends on compiler optimizations as register allocation. Nevertheless it's an obvious violation of register constraints.