# HG changeset patch # User bharadwaj # Date 1366920603 25200 # Node ID e8a7a5995e656d0538574e7118ecc8c3f3506cf6 # Parent 1ea6a35dcbe5537e2ee732a6e7cc4216ece821e1# Parent 47766e2d2527c7006e50f178e7dd549b0d64b61a Merge diff -r 1ea6a35dcbe5 -r e8a7a5995e65 src/cpu/x86/vm/templateInterpreter_x86_32.cpp --- a/src/cpu/x86/vm/templateInterpreter_x86_32.cpp Tue Apr 23 12:32:17 2013 -0400 +++ b/src/cpu/x86/vm/templateInterpreter_x86_32.cpp Thu Apr 25 13:10:03 2013 -0700 @@ -360,7 +360,7 @@ const Address mdo_invocation_counter(rax, in_bytes(MethodData::invocation_counter_offset()) + in_bytes(InvocationCounter::counter_offset())); __ increment_mask_and_jump(mdo_invocation_counter, increment, mask, rcx, false, Assembler::zero, overflow); - __ jmpb(done); + __ jmp(done); } __ bind(no_mdo); // Increment counter in MethodCounters diff -r 1ea6a35dcbe5 -r e8a7a5995e65 src/cpu/x86/vm/templateInterpreter_x86_64.cpp --- a/src/cpu/x86/vm/templateInterpreter_x86_64.cpp Tue Apr 23 12:32:17 2013 -0400 +++ b/src/cpu/x86/vm/templateInterpreter_x86_64.cpp Thu Apr 25 13:10:03 2013 -0700 @@ -315,7 +315,7 @@ const Address mdo_invocation_counter(rax, in_bytes(MethodData::invocation_counter_offset()) + in_bytes(InvocationCounter::counter_offset())); __ increment_mask_and_jump(mdo_invocation_counter, increment, mask, rcx, false, Assembler::zero, overflow); - __ jmpb(done); + __ jmp(done); } __ bind(no_mdo); // Increment counter in MethodCounters diff -r 1ea6a35dcbe5 -r e8a7a5995e65 src/cpu/x86/vm/x86_64.ad --- a/src/cpu/x86/vm/x86_64.ad Tue Apr 23 12:32:17 2013 -0400 +++ b/src/cpu/x86/vm/x86_64.ad Thu Apr 25 13:10:03 2013 -0700 @@ -2222,12 +2222,6 @@ $$$emit32$src$$constant; %} - enc_class Con64(immL src) - %{ - // Output immediate - emit_d64($src$$constant); - %} - enc_class Con32F_as_bits(immF src) %{ // Output Float immediate bits @@ -7608,7 +7602,7 @@ ins_pipe( pipe_cmpxchg ); %} -instruct xaddL_no_res( memory mem, Universe dummy, immL add, rFlagsReg cr) %{ +instruct xaddL_no_res( memory mem, Universe dummy, immL32 add, rFlagsReg cr) %{ predicate(n->as_LoadStore()->result_not_used()); match(Set dummy (GetAndAddL mem add)); effect(KILL cr); diff -r 1ea6a35dcbe5 -r e8a7a5995e65 src/share/vm/c1/c1_RangeCheckElimination.cpp --- a/src/share/vm/c1/c1_RangeCheckElimination.cpp Tue Apr 23 12:32:17 2013 -0400 +++ b/src/share/vm/c1/c1_RangeCheckElimination.cpp Thu Apr 25 13:10:03 2013 -0700 @@ -459,7 +459,7 @@ // Iterate over all different indices if (_optimistic) { - for (int i=0; iid()]; assert(info != NULL, "Info must not be null"); @@ -531,9 +531,7 @@ remove_range_check(ai); } } - _access_indexed_info[index_instruction->id()] = NULL; } - indices.clear(); if (list_constant.length() > 1) { AccessIndexed *first = list_constant.at(0); @@ -560,6 +558,13 @@ } } } + + // Clear data structures for next array + for (int i = 0; i < indices.length(); i++) { + Instruction *index_instruction = indices.at(i); + _access_indexed_info[index_instruction->id()] = NULL; + } + indices.clear(); } } diff -r 1ea6a35dcbe5 -r e8a7a5995e65 test/compiler/8011901/Test8011901.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/compiler/8011901/Test8011901.java Thu Apr 25 13:10:03 2013 -0700 @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8011901 + * @summary instruct xaddL_no_res shouldn't allow 64 bit constants. + * @run main/othervm -XX:-BackgroundCompilation Test8011901 + * + */ + +import java.lang.reflect.*; +import sun.misc.*; + +public class Test8011901 { + + private long ctl; + + private static final sun.misc.Unsafe U; + private static final long CTL; + + static { + try { + Field unsafe = sun.misc.Unsafe.class.getDeclaredField("theUnsafe"); + unsafe.setAccessible(true); + U = (sun.misc.Unsafe) unsafe.get(null); + CTL = U.objectFieldOffset(Test8011901.class.getDeclaredField("ctl")); + } catch (Exception e) { + throw new Error(e); + } + } + + public static void main(String[] args) { + for(int c = 0; c < 20000; c++) { + new Test8011901().makeTest(); + } + System.out.println("Test Passed"); + } + + public static final long EXPECTED = 1L << 42; + + public void makeTest() { + U.getAndAddLong(this, CTL, EXPECTED); + if (ctl != EXPECTED) { + throw new RuntimeException("Test failed. Expected: " + EXPECTED + ", but got = " + ctl); + } + } +}