Handle direct call ReadyToRun helpers
authorJan Kotas <jkotas@microsoft.com>
Thu, 24 Sep 2015 01:34:37 +0000 (18:34 -0700)
committerJan Kotas <jkotas@microsoft.com>
Thu, 24 Sep 2015 01:34:37 +0000 (18:34 -0700)
Add missing check in the JIT to generate correct code for direct call ReadyToRun helpers. I have run into this bug while experimenting with ReadyToRun optimizations. It is not observable bug today because of crossgen happens to always emit ReadyToRun helpers as indirect calls.

src/jit/codegenxarch.cpp

index 1f590ab..7099de3 100644 (file)
@@ -5097,7 +5097,7 @@ void CodeGen::genCallInstruction(GenTreePtr node)
 #if defined(_TARGET_AMD64_) && defined(FEATURE_READYTORUN_COMPILER)
     else if (call->gtEntryPoint.addr != nullptr)
     {
-        genEmitCall(emitter::EC_FUNC_TOKEN_INDIR,
+        genEmitCall((call->gtEntryPoint.accessType == IAT_VALUE) ? emitter::EC_FUNC_TOKEN : emitter::EC_FUNC_TOKEN_INDIR,
                     methHnd,
                     INDEBUG_LDISASM_COMMA(sigInfo)
                     (void*) call->gtEntryPoint.addr,