comparison src/cpu/sparc/vm/methodHandles_sparc.cpp @ 4979:18a5539bf19b

More diff vs hsx24 optimizations.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Mon, 27 Feb 2012 21:43:51 +0100
parents 33df1aeaebbf
children 957c266d8bc5
comparison
equal deleted inserted replaced
4978:99d3d8a72252 4979:18a5539bf19b
874 __ stop("valid bounds (copy up)"); 874 __ stop("valid bounds (copy up)");
875 __ BIND(L_ok); 875 __ BIND(L_ok);
876 } 876 }
877 #endif 877 #endif
878 __ cmp_and_brx_short(bottom_reg, top_reg, Assembler::greaterEqualUnsigned, Assembler::pn, L_break); 878 __ cmp_and_brx_short(bottom_reg, top_reg, Assembler::greaterEqualUnsigned, Assembler::pn, L_break);
879 >> 879 // work top down to bottom, copying contiguous data upwards
880 // In pseudo-code:
881 // while (--top >= bottom) *(top + distance) = *(top + 0);
882 RegisterOrConstant offset = __ argument_offset(positive_distance_in_slots, positive_distance_in_slots.register_or_noreg());
883 __ BIND(L_loop);
884 __ sub(top_reg, wordSize, top_reg);
885 __ ld_ptr( Address(top_reg, 0 ), temp2_reg);
886 __ st_ptr(temp2_reg, Address(top_reg, offset) );
880 __ cmp_and_brx_short(top_reg, bottom_reg, Assembler::greaterUnsigned, Assembler::pt, L_loop); 887 __ cmp_and_brx_short(top_reg, bottom_reg, Assembler::greaterUnsigned, Assembler::pt, L_loop);
881 assert(Interpreter::stackElementSize == wordSize, "else change loop"); 888 assert(Interpreter::stackElementSize == wordSize, "else change loop");
882 __ BIND(L_break); 889 __ BIND(L_break);
883 BLOCK_COMMENT("} move_arg_slots_up"); 890 BLOCK_COMMENT("} move_arg_slots_up");
884 } 891 }