src/cpu/sparc/vm/sharedRuntime_sparc.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/cpu/sparc/vm/sharedRuntime_sparc.cpp

src/cpu/sparc/vm/sharedRuntime_sparc.cpp

Print this page
rev 10388 : 8148353: [linux-sparc] Crash in libawt.so on Linux SPARC
Summary: gcc expects clean 32 bit int in 64 bit register on function entry
Reviewed-by:

*** 1347,1359 **** // stack to reg __ ld(FP, reg2offset(src.first()) + STACK_BIAS, dst.first()->as_Register()); } } else if (dst.first()->is_stack()) { // reg to stack ! __ st_ptr(src.first()->as_Register(), SP, reg2offset(dst.first()) + STACK_BIAS); } else { ! __ mov(src.first()->as_Register(), dst.first()->as_Register()); } } static void move_ptr(MacroAssembler* masm, VMRegPair src, VMRegPair dst) { --- 1347,1365 ---- // stack to reg __ ld(FP, reg2offset(src.first()) + STACK_BIAS, dst.first()->as_Register()); } } else if (dst.first()->is_stack()) { // reg to stack ! Register src_reg = src.first()->as_Register(); ! // Some compiler (gcc) expects a clean 32 bit value on function entry ! __ sra(src_reg, 0, L5); ! __ st_ptr(L5, SP, reg2offset(dst.first()) + STACK_BIAS); } else { ! Register src_reg = src.first()->as_Register(); ! // Some compiler (gcc) expects a clean 32 bit value on function entry ! __ sra(src_reg, 0, L5); ! __ mov(L5, dst.first()->as_Register()); } } static void move_ptr(MacroAssembler* masm, VMRegPair src, VMRegPair dst) {
src/cpu/sparc/vm/sharedRuntime_sparc.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File