2977 do_CompareAndSwap(x, intType); 2978 break; 2979 case vmIntrinsics::_compareAndSwapLong: 2980 do_CompareAndSwap(x, longType); 2981 break; 2982 2983 case vmIntrinsics::_loadFence : 2984 if (os::is_MP()) __ membar_acquire(); 2985 break; 2986 case vmIntrinsics::_storeFence: 2987 if (os::is_MP()) __ membar_release(); 2988 break; 2989 case vmIntrinsics::_fullFence : 2990 if (os::is_MP()) __ membar(); 2991 break; 2992 2993 case vmIntrinsics::_Reference_get: 2994 do_Reference_get(x); 2995 break; 2996 2997 default: ShouldNotReachHere(); break; 2998 } 2999 } 3000 3001 void LIRGenerator::do_ProfileCall(ProfileCall* x) { 3002 // Need recv in a temporary register so it interferes with the other temporaries 3003 LIR_Opr recv = LIR_OprFact::illegalOpr; 3004 LIR_Opr mdo = new_register(T_OBJECT); 3005 // tmp is used to hold the counters on SPARC 3006 LIR_Opr tmp = new_pointer_register(); 3007 if (x->recv() != NULL) { 3008 LIRItem value(x->recv(), this); 3009 value.load_item(); 3010 recv = new_register(T_OBJECT); 3011 __ move(value.result(), recv); 3012 } 3013 __ profile_call(x->method(), x->bci_of_invoke(), x->callee(), mdo, recv, tmp, x->known_holder()); 3014 } 3015 3016 void LIRGenerator::do_ProfileInvoke(ProfileInvoke* x) { | 2977 do_CompareAndSwap(x, intType); 2978 break; 2979 case vmIntrinsics::_compareAndSwapLong: 2980 do_CompareAndSwap(x, longType); 2981 break; 2982 2983 case vmIntrinsics::_loadFence : 2984 if (os::is_MP()) __ membar_acquire(); 2985 break; 2986 case vmIntrinsics::_storeFence: 2987 if (os::is_MP()) __ membar_release(); 2988 break; 2989 case vmIntrinsics::_fullFence : 2990 if (os::is_MP()) __ membar(); 2991 break; 2992 2993 case vmIntrinsics::_Reference_get: 2994 do_Reference_get(x); 2995 break; 2996 2997 case vmIntrinsics::_updateCRC32: 2998 case vmIntrinsics::_updateBytesCRC32: 2999 case vmIntrinsics::_updateByteBufferCRC32: 3000 do_update_CRC32(x); 3001 break; 3002 3003 default: ShouldNotReachHere(); break; 3004 } 3005 } 3006 3007 void LIRGenerator::do_ProfileCall(ProfileCall* x) { 3008 // Need recv in a temporary register so it interferes with the other temporaries 3009 LIR_Opr recv = LIR_OprFact::illegalOpr; 3010 LIR_Opr mdo = new_register(T_OBJECT); 3011 // tmp is used to hold the counters on SPARC 3012 LIR_Opr tmp = new_pointer_register(); 3013 if (x->recv() != NULL) { 3014 LIRItem value(x->recv(), this); 3015 value.load_item(); 3016 recv = new_register(T_OBJECT); 3017 __ move(value.result(), recv); 3018 } 3019 __ profile_call(x->method(), x->bci_of_invoke(), x->callee(), mdo, recv, tmp, x->known_holder()); 3020 } 3021 3022 void LIRGenerator::do_ProfileInvoke(ProfileInvoke* x) { |