src/share/vm/c1/c1_LIRGenerator.cpp

Print this page
rev 10065 : 8147844: new method j.l.Runtime.onSpinWait() and the corresponding x86 hotspot instrinsic
Summary: adds c1 & c2 x86 intrinsics for j.l.Runtime.onSpinWait() that utilize the 'pause' instruction
Contributed-by: ikrylov, ygaevsky
Reviewed-by: iveresov, vlivanov, kvn


3151 
3152   case vmIntrinsics::_compareAndSwapObject:
3153     do_CompareAndSwap(x, objectType);
3154     break;
3155   case vmIntrinsics::_compareAndSwapInt:
3156     do_CompareAndSwap(x, intType);
3157     break;
3158   case vmIntrinsics::_compareAndSwapLong:
3159     do_CompareAndSwap(x, longType);
3160     break;
3161 
3162   case vmIntrinsics::_loadFence :
3163     if (os::is_MP()) __ membar_acquire();
3164     break;
3165   case vmIntrinsics::_storeFence:
3166     if (os::is_MP()) __ membar_release();
3167     break;
3168   case vmIntrinsics::_fullFence :
3169     if (os::is_MP()) __ membar();
3170     break;
3171 


3172   case vmIntrinsics::_Reference_get:
3173     do_Reference_get(x);
3174     break;
3175 
3176   case vmIntrinsics::_updateCRC32:
3177   case vmIntrinsics::_updateBytesCRC32:
3178   case vmIntrinsics::_updateByteBufferCRC32:
3179     do_update_CRC32(x);
3180     break;
3181 
3182   default: ShouldNotReachHere(); break;
3183   }
3184 }
3185 
3186 void LIRGenerator::profile_arguments(ProfileCall* x) {
3187   if (compilation()->profile_arguments()) {
3188     int bci = x->bci_of_invoke();
3189     ciMethodData* md = x->method()->method_data_or_null();
3190     ciProfileData* data = md->bci_to_data(bci);
3191     if ((data->is_CallTypeData() && data->as_CallTypeData()->has_arguments()) ||




3151 
3152   case vmIntrinsics::_compareAndSwapObject:
3153     do_CompareAndSwap(x, objectType);
3154     break;
3155   case vmIntrinsics::_compareAndSwapInt:
3156     do_CompareAndSwap(x, intType);
3157     break;
3158   case vmIntrinsics::_compareAndSwapLong:
3159     do_CompareAndSwap(x, longType);
3160     break;
3161 
3162   case vmIntrinsics::_loadFence :
3163     if (os::is_MP()) __ membar_acquire();
3164     break;
3165   case vmIntrinsics::_storeFence:
3166     if (os::is_MP()) __ membar_release();
3167     break;
3168   case vmIntrinsics::_fullFence :
3169     if (os::is_MP()) __ membar();
3170     break;
3171   case vmIntrinsics::_onSpinWait:
3172     __ on_spin_wait();
3173     break;
3174   case vmIntrinsics::_Reference_get:
3175     do_Reference_get(x);
3176     break;
3177 
3178   case vmIntrinsics::_updateCRC32:
3179   case vmIntrinsics::_updateBytesCRC32:
3180   case vmIntrinsics::_updateByteBufferCRC32:
3181     do_update_CRC32(x);
3182     break;
3183 
3184   default: ShouldNotReachHere(); break;
3185   }
3186 }
3187 
3188 void LIRGenerator::profile_arguments(ProfileCall* x) {
3189   if (compilation()->profile_arguments()) {
3190     int bci = x->bci_of_invoke();
3191     ciMethodData* md = x->method()->method_data_or_null();
3192     ciProfileData* data = md->bci_to_data(bci);
3193     if ((data->is_CallTypeData() && data->as_CallTypeData()->has_arguments()) ||