From: Mikhail Skvortcov Date: Mon, 20 Feb 2017 14:56:54 +0000 (+0300) Subject: RyuJIT/ARM32: Fix helper kill mask and call target consuming X-Git-Tag: submit/tizen/20210909.063632~11030^2~7978^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=493defac3aaf0a9ed30482896d0fab84531a382f;p=platform%2Fupstream%2Fdotnet%2Fruntime.git RyuJIT/ARM32: Fix helper kill mask and call target consuming Commit migrated from https://github.com/dotnet/coreclr/commit/79817a4110f0fcf016f44432dc47fb56d7891b0c --- diff --git a/src/coreclr/src/jit/codegenarm.cpp b/src/coreclr/src/jit/codegenarm.cpp index 580cad5..ca6ae01 100644 --- a/src/coreclr/src/jit/codegenarm.cpp +++ b/src/coreclr/src/jit/codegenarm.cpp @@ -1404,6 +1404,8 @@ void CodeGen::genCallInstruction(GenTreePtr node) // For ARM a call target can not be a contained indirection assert(!target->isContainedIndir()); + genConsumeReg(target); + // We have already generated code for gtControlExpr evaluating it into a register. // We just need to emit "call reg" in this case. // diff --git a/src/coreclr/src/jit/lsra.cpp b/src/coreclr/src/jit/lsra.cpp index ac76e29..2d317a7 100644 --- a/src/coreclr/src/jit/lsra.cpp +++ b/src/coreclr/src/jit/lsra.cpp @@ -2782,9 +2782,6 @@ regMaskTP LinearScan::getKillSetForNode(GenTree* tree) if (compiler->codeGen->gcInfo.gcIsWriteBarrierAsgNode(tree)) { killMask = RBM_CALLEE_TRASH_NOGC; -#if !NOGC_WRITE_BARRIERS && (defined(_TARGET_ARM_) || defined(_TARGET_AMD64_)) - killMask |= (RBM_ARG_0 | RBM_ARG_1); -#endif // !NOGC_WRITE_BARRIERS && (defined(_TARGET_ARM_) || defined(_TARGET_AMD64_)) } break; diff --git a/src/coreclr/src/jit/target.h b/src/coreclr/src/jit/target.h index cb2609f..474847e 100644 --- a/src/coreclr/src/jit/target.h +++ b/src/coreclr/src/jit/target.h @@ -1246,7 +1246,11 @@ typedef unsigned short regPairNoSmall; // arm: need 12 bits #define RBM_CALLEE_SAVED (RBM_INT_CALLEE_SAVED | RBM_FLT_CALLEE_SAVED) #define RBM_CALLEE_TRASH (RBM_INT_CALLEE_TRASH | RBM_FLT_CALLEE_TRASH) +#ifdef LEGACY_BACKEND #define RBM_CALLEE_TRASH_NOGC (RBM_R2|RBM_R3|RBM_LR) +#else + #define RBM_CALLEE_TRASH_NOGC RBM_CALLEE_TRASH +#endif #define REG_DEFAULT_HELPER_CALL_TARGET REG_R12 #define RBM_ALLINT (RBM_INT_CALLEE_SAVED | RBM_INT_CALLEE_TRASH)