src/cpu/x86/vm/x86_32.ad
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/cpu/x86/vm/x86_32.ad

src/cpu/x86/vm/x86_32.ad

Print this page
rev 10047 : 8147386: assert(size == calc_size) failed: incorrect size calculattion x86_32.ad
Summary: incorrect offset used in spill code for vectors
Reviewed-by:

*** 966,983 **** int dst_offset_size = (dst_offset == 0) ? 0 : ((dst_offset < 0x80) ? 1 : 4); switch (ireg) { case Op_VecS: calc_size = 3+src_offset_size + 3+dst_offset_size; break; ! case Op_VecD: calc_size = 3+src_offset_size + 3+dst_offset_size; ! src_offset += 4; ! dst_offset += 4; ! src_offset_size = (src_offset == 0) ? 0 : ((src_offset < 0x80) ? 1 : 4); ! dst_offset_size = (dst_offset == 0) ? 0 : ((dst_offset < 0x80) ? 1 : 4); calc_size += 3+src_offset_size + 3+dst_offset_size; break; case Op_VecX: case Op_VecY: case Op_VecZ: calc_size = 6 + 6 + 5+src_offset_size + 5+dst_offset_size; break; --- 966,984 ---- int dst_offset_size = (dst_offset == 0) ? 0 : ((dst_offset < 0x80) ? 1 : 4); switch (ireg) { case Op_VecS: calc_size = 3+src_offset_size + 3+dst_offset_size; break; ! case Op_VecD: { calc_size = 3+src_offset_size + 3+dst_offset_size; ! int tmp_src_offset = src_offset + 4; ! int tmp_dst_offset = dst_offset + 4; ! src_offset_size = (tmp_src_offset == 0) ? 0 : ((tmp_src_offset < 0x80) ? 1 : 4); ! dst_offset_size = (tmp_dst_offset == 0) ? 0 : ((tmp_dst_offset < 0x80) ? 1 : 4); calc_size += 3+src_offset_size + 3+dst_offset_size; break; + } case Op_VecX: case Op_VecY: case Op_VecZ: calc_size = 6 + 6 + 5+src_offset_size + 5+dst_offset_size; break;
*** 1018,1028 **** break; default: ShouldNotReachHere(); } int size = __ offset() - offset; ! assert(size == calc_size, "incorrect size calculattion"); return size; #ifndef PRODUCT } else if (!do_size) { switch (ireg) { case Op_VecS: --- 1019,1029 ---- break; default: ShouldNotReachHere(); } int size = __ offset() - offset; ! assert(size == calc_size, "incorrect size calculation"); return size; #ifndef PRODUCT } else if (!do_size) { switch (ireg) { case Op_VecS:
src/cpu/x86/vm/x86_32.ad
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File