--- old/src/cpu/sparc/vm/assembler_sparc.inline.hpp 2010-04-27 04:45:30.360638189 -0700 +++ new/src/cpu/sparc/vm/assembler_sparc.inline.hpp 2010-04-27 04:45:29.946486394 -0700 @@ -206,12 +206,18 @@ inline void Assembler::ldd( Register s1, RegisterOrConstant s2, Register d) { ldd( Address(s1, s2), d); } // form effective addresses this way: -inline void Assembler::add( Register s1, RegisterOrConstant s2, Register d, int offset) { - if (s2.is_register()) add(s1, s2.as_register(), d); +inline void Assembler::add(Register s1, RegisterOrConstant s2, Register d, int offset) { + if (s2.is_register()) add(s1, s2.as_register(), d); else { add(s1, s2.as_constant() + offset, d); offset = 0; } if (offset != 0) add(d, offset, d); } +inline void Assembler::andn(Register s1, RegisterOrConstant s2, Register d, int offset) { + if (s2.is_register()) andn(s1, s2.as_register(), d); + else { andn(s1, s2.as_constant() + offset, d); offset = 0; } + if (offset != 0) andn(d, offset, d); +} + inline void Assembler::ldstub( Register s1, Register s2, Register d) { emit_long( op(ldst_op) | rd(d) | op3(ldstub_op3) | rs1(s1) | rs2(s2) ); } inline void Assembler::ldstub( Register s1, int simm13a, Register d) { emit_data( op(ldst_op) | rd(d) | op3(ldstub_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }