diff options
author | Egor Chesakov <Egor.Chesakov@microsoft.com> | 2019-05-30 16:26:12 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-30 16:26:12 -0700 |
commit | 5ee8a09345ea63f80996f0dde7ee4d8396efd902 (patch) | |
tree | 2732aff2c9f1664486d3fe24310ee26bcc422c64 /src/ToolBox | |
parent | fa8383fb28be945cae900a5579afd5920f274fd4 (diff) | |
download | coreclr-5ee8a09345ea63f80996f0dde7ee4d8396efd902.tar.gz coreclr-5ee8a09345ea63f80996f0dde7ee4d8396efd902.tar.bz2 coreclr-5ee8a09345ea63f80996f0dde7ee4d8396efd902.zip |
Support running SuperPMI with ARM protononjit.dll (#24840)
Diffstat (limited to 'src/ToolBox')
-rw-r--r-- | src/ToolBox/superpmi/superpmi/commandline.cpp | 27 | ||||
-rw-r--r-- | src/ToolBox/superpmi/superpmi/jitinstance.cpp | 22 | ||||
-rw-r--r-- | src/ToolBox/superpmi/superpmi/superpmi.cpp | 13 |
3 files changed, 50 insertions, 12 deletions
diff --git a/src/ToolBox/superpmi/superpmi/commandline.cpp b/src/ToolBox/superpmi/superpmi/commandline.cpp index 372ee849d9..47473110fe 100644 --- a/src/ToolBox/superpmi/superpmi/commandline.cpp +++ b/src/ToolBox/superpmi/superpmi/commandline.cpp @@ -107,7 +107,7 @@ void CommandLine::DumpHelp(const char* program) printf("\n"); printf(" -target <target>\n"); printf(" Used by the assembly differences calculator. This specifies the target\n"); - printf(" architecture for cross-compilation. Currently allowed <target> value: arm64\n"); + printf(" architecture for cross-compilation. Currently allowed <target> values: arm, arm64\n"); printf("\n"); printf(" -coredistools\n"); printf(" Use disassembly tools from the CoreDisTools library\n"); @@ -593,11 +593,28 @@ bool CommandLine::Parse(int argc, char* argv[], /* OUT */ Options* o) DumpHelp(argv[0]); return false; } - if (o->targetArchitecture != nullptr && (0 != _stricmp(o->targetArchitecture, "arm64"))) + if (o->targetArchitecture != nullptr) { - LogError("Illegal target architecture specified with -target (only arm64 is supported)."); - DumpHelp(argv[0]); - return false; + const char* errorMessage = nullptr; +#ifdef _TARGET_AMD64_ + if (0 != _stricmp(o->targetArchitecture, "arm64")) + { + errorMessage = "Illegal target architecture specified with -target (only arm64 is supported on x64 host)."; + } +#elif defined(_TARGET_X86_) + if (0 != _stricmp(o->targetArchitecture, "arm")) + { + errorMessage = "Illegal target architecture specified with -target (only arm is supported on x86 host)."; + } +#else + errorMessage = "-target is unsupported on this platform."; +#endif + if (errorMessage != nullptr) + { + LogError(errorMessage); + DumpHelp(argv[0]); + return false; + } } if (o->skipCleanup && !o->parallel) { diff --git a/src/ToolBox/superpmi/superpmi/jitinstance.cpp b/src/ToolBox/superpmi/superpmi/jitinstance.cpp index 85d7ca0b74..ec426616e1 100644 --- a/src/ToolBox/superpmi/superpmi/jitinstance.cpp +++ b/src/ToolBox/superpmi/superpmi/jitinstance.cpp @@ -310,22 +310,32 @@ JitInstance::Result JitInstance::CompileMethod(MethodContext* MethodToCompile, i { pParam->pThis->lt.Start(); } - CorJitResult temp = pParam->pThis->pJitInstance->compileMethod(pParam->pThis->icji, &pParam->info, + CorJitResult jitResult = pParam->pThis->pJitInstance->compileMethod(pParam->pThis->icji, &pParam->info, pParam->flags, &NEntryBlock, &NCodeSizeBlock); if (pParam->collectThroughput) { pParam->pThis->lt.Stop(); pParam->pThis->times[0] = pParam->pThis->lt.GetCycles(); } - if ((SpmiTargetArchitecture == SPMI_TARGET_ARCHITECTURE_ARM64) && (temp == CORJIT_SKIPPED)) + if (jitResult == CORJIT_SKIPPED) { // For altjit, treat SKIPPED as OK - temp = CORJIT_OK; +#ifdef _TARGET_AMD64_ + if (SpmiTargetArchitecture == SPMI_TARGET_ARCHITECTURE_ARM64) + { + jitResult = CORJIT_OK; + } +#elif defined(_TARGET_X86_) + if (SpmiTargetArchitecture == SPMI_TARGET_ARCHITECTURE_ARM) + { + jitResult = CORJIT_OK; + } +#endif } - if (temp == CORJIT_OK) + if (jitResult == CORJIT_OK) { // capture the results of compilation - pParam->pThis->mc->cr->recCompileMethod(&NEntryBlock, &NCodeSizeBlock, temp); + pParam->pThis->mc->cr->recCompileMethod(&NEntryBlock, &NCodeSizeBlock, jitResult); pParam->pThis->mc->cr->recAllocMemCapture(); pParam->pThis->mc->cr->recAllocGCInfoCapture(); @@ -333,7 +343,7 @@ JitInstance::Result JitInstance::CompileMethod(MethodContext* MethodToCompile, i } else { - LogDebug("compileMethod failed with result %d", temp); + LogDebug("compileMethod failed with result %d", jitResult); pParam->result = RESULT_ERROR; } } diff --git a/src/ToolBox/superpmi/superpmi/superpmi.cpp b/src/ToolBox/superpmi/superpmi/superpmi.cpp index 558185a87c..514ae5f992 100644 --- a/src/ToolBox/superpmi/superpmi/superpmi.cpp +++ b/src/ToolBox/superpmi/superpmi/superpmi.cpp @@ -45,9 +45,20 @@ void SetSuperPmiTargetArchitecture(const char* targetArchitecture) SpmiTargetArchitecture = SPMI_TARGET_ARCHITECTURE_AMD64; } #elif defined(_TARGET_X86_) - SpmiTargetArchitecture = SPMI_TARGET_ARCHITECTURE_X86; + if ((targetArchitecture != nullptr) && (0 == _stricmp(targetArchitecture, "arm"))) + { + SpmiTargetArchitecture = SPMI_TARGET_ARCHITECTURE_ARM; + } + else + { + SpmiTargetArchitecture = SPMI_TARGET_ARCHITECTURE_X86; + } #elif defined(_TARGET_ARM_) SpmiTargetArchitecture = SPMI_TARGET_ARCHITECTURE_ARM; +#elif defined(_TARGET_ARM64_) + SpmiTargetArchitecture = SPMI_TARGET_ARCHITECTURE_ARM64; +#else +#error Unsupported architecture #endif } |