src/share/vm/opto/c2compiler.cpp

Print this page
rev 10271 : 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
Reviewed-by: iveresov, kvn, vlivanov
Contributed-by: Ivan Krylov <ivan@azul.com>, Yuri Gaevsky <ygaevsky@azul.com>


 286     break;
 287   case vmIntrinsics::_decrementExactL:
 288   case vmIntrinsics::_subtractExactL:
 289     if (!Matcher::match_rule_supported(Op_OverflowSubL)) return false;
 290     break;
 291   case vmIntrinsics::_negateExactI:
 292     if (!Matcher::match_rule_supported(Op_OverflowSubI)) return false;
 293     break;
 294   case vmIntrinsics::_negateExactL:
 295     if (!Matcher::match_rule_supported(Op_OverflowSubL)) return false;
 296     break;
 297   case vmIntrinsics::_multiplyExactI:
 298     if (!Matcher::match_rule_supported(Op_OverflowMulI)) return false;
 299     break;
 300   case vmIntrinsics::_multiplyExactL:
 301     if (!Matcher::match_rule_supported(Op_OverflowMulL)) return false;
 302     break;
 303   case vmIntrinsics::_getCallerClass:
 304     if (SystemDictionary::reflect_CallerSensitive_klass() == NULL) return false;
 305     break;



 306   case vmIntrinsics::_hashCode:
 307   case vmIntrinsics::_identityHashCode:
 308   case vmIntrinsics::_getClass:
 309   case vmIntrinsics::_dsin:
 310   case vmIntrinsics::_dcos:
 311   case vmIntrinsics::_dtan:
 312   case vmIntrinsics::_dabs:
 313   case vmIntrinsics::_datan2:
 314   case vmIntrinsics::_dsqrt:
 315   case vmIntrinsics::_dexp:
 316   case vmIntrinsics::_dlog:
 317   case vmIntrinsics::_dlog10:
 318   case vmIntrinsics::_dpow:
 319   case vmIntrinsics::_min:
 320   case vmIntrinsics::_max:
 321   case vmIntrinsics::_arraycopy:
 322   case vmIntrinsics::_indexOfL:
 323   case vmIntrinsics::_indexOfU:
 324   case vmIntrinsics::_indexOfUL:
 325   case vmIntrinsics::_indexOfIL:




 286     break;
 287   case vmIntrinsics::_decrementExactL:
 288   case vmIntrinsics::_subtractExactL:
 289     if (!Matcher::match_rule_supported(Op_OverflowSubL)) return false;
 290     break;
 291   case vmIntrinsics::_negateExactI:
 292     if (!Matcher::match_rule_supported(Op_OverflowSubI)) return false;
 293     break;
 294   case vmIntrinsics::_negateExactL:
 295     if (!Matcher::match_rule_supported(Op_OverflowSubL)) return false;
 296     break;
 297   case vmIntrinsics::_multiplyExactI:
 298     if (!Matcher::match_rule_supported(Op_OverflowMulI)) return false;
 299     break;
 300   case vmIntrinsics::_multiplyExactL:
 301     if (!Matcher::match_rule_supported(Op_OverflowMulL)) return false;
 302     break;
 303   case vmIntrinsics::_getCallerClass:
 304     if (SystemDictionary::reflect_CallerSensitive_klass() == NULL) return false;
 305     break;
 306   case vmIntrinsics::_onSpinWait:
 307     if (!Matcher::match_rule_supported(Op_OnSpinWait)) return false;
 308     break;
 309   case vmIntrinsics::_hashCode:
 310   case vmIntrinsics::_identityHashCode:
 311   case vmIntrinsics::_getClass:
 312   case vmIntrinsics::_dsin:
 313   case vmIntrinsics::_dcos:
 314   case vmIntrinsics::_dtan:
 315   case vmIntrinsics::_dabs:
 316   case vmIntrinsics::_datan2:
 317   case vmIntrinsics::_dsqrt:
 318   case vmIntrinsics::_dexp:
 319   case vmIntrinsics::_dlog:
 320   case vmIntrinsics::_dlog10:
 321   case vmIntrinsics::_dpow:
 322   case vmIntrinsics::_min:
 323   case vmIntrinsics::_max:
 324   case vmIntrinsics::_arraycopy:
 325   case vmIntrinsics::_indexOfL:
 326   case vmIntrinsics::_indexOfU:
 327   case vmIntrinsics::_indexOfUL:
 328   case vmIntrinsics::_indexOfIL: