Index: vm/jitrino/src/codegenerator/ia32/Ia32IRManager.cpp =================================================================== --- vm/jitrino/src/codegenerator/ia32/Ia32IRManager.cpp (revision 541236) +++ vm/jitrino/src/codegenerator/ia32/Ia32IRManager.cpp (working copy) @@ -2238,7 +2238,7 @@ if (!isInternalHelper) { CompilationInterface* ci = CompilationContext::getCurrentContext()->getVMCompilationInterface(); isNonGCVMHelper = rt && rt->getKind() == Opnd::RuntimeInfo::Kind_HelperAddress - && !ci->isGCInterruptible((CompilationInterface::RuntimeHelperId)(POINTER_SIZE_INT)rt->getValue(0)); + && !ci->mayBeInterruptible((CompilationInterface::RuntimeHelperId)(POINTER_SIZE_INT)rt->getValue(0)); } bool isGCPoint = !isInternalHelper && !isNonGCVMHelper; return isGCPoint; Index: vm/jitrino/src/codegenerator/ia32/Ia32BBPolling.cpp =================================================================== --- vm/jitrino/src/codegenerator/ia32/Ia32BBPolling.cpp (revision 541236) +++ vm/jitrino/src/codegenerator/ia32/Ia32BBPolling.cpp (working copy) @@ -393,14 +393,17 @@ if (!ri) { return false; } else { - if ( ri->getKind() == Opnd::RuntimeInfo::Kind_HelperAddress ) { - return true; - } if ( ri->getKind() == Opnd::RuntimeInfo::Kind_MethodDirectAddr && ((MethodDesc*)ri->getValue(0))->isNative() ) { return true; } + CompilationInterface* ci = CompilationContext::getCurrentContext()->getVMCompilationInterface(); + if ( ri->getKind() == Opnd::RuntimeInfo::Kind_HelperAddress && + ci->isInterruptible((CompilationInterface::RuntimeHelperId)(POINTER_SIZE_INT)ri->getValue(0)) ) + { + return true; + } } } return false; Index: vm/jitrino/src/vm/drl/DrlVMInterface.cpp =================================================================== --- vm/jitrino/src/vm/drl/DrlVMInterface.cpp (revision 541236) +++ vm/jitrino/src/vm/drl/DrlVMInterface.cpp (working copy) @@ -595,12 +595,18 @@ } bool -CompilationInterface::isGCInterruptible(RuntimeHelperId runtimeHelperId) { +CompilationInterface::isInterruptible(RuntimeHelperId runtimeHelperId) { VM_RT_SUPPORT drlHelperId = translateHelperId(runtimeHelperId); - return vm_helper_is_gc_interruptible(drlHelperId); + return INTERRUPTIBLE_ALWAYS == vm_helper_get_interruptibility_kind(drlHelperId); } +bool +CompilationInterface::mayBeInterruptible(RuntimeHelperId runtimeHelperId) { + VM_RT_SUPPORT drlHelperId = translateHelperId(runtimeHelperId); + return INTERRUPTIBLE_NEVER != vm_helper_get_interruptibility_kind(drlHelperId); +} + bool CompilationInterface::compileMethod(MethodDesc *method) { if (Log::isEnabled()) { Index: vm/jitrino/src/vm/VMInterface.h =================================================================== --- vm/jitrino/src/vm/VMInterface.h (revision 541236) +++ vm/jitrino/src/vm/VMInterface.h (working copy) @@ -380,7 +380,8 @@ static RuntimeHelperId str2rid( const char * helperName ); VmCallingConvention getRuntimeHelperCallingConvention(RuntimeHelperId id); - bool isGCInterruptible(RuntimeHelperId id); + bool isInterruptible(RuntimeHelperId id); + bool mayBeInterruptible(RuntimeHelperId id); void* getRuntimeHelperAddress(RuntimeHelperId); void* getRuntimeHelperAddressForType(RuntimeHelperId, Type*);