Mercurial > hg > truffle
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 } |