summaryrefslogtreecommitdiff
path: root/src/ToolBox
diff options
context:
space:
mode:
authorEgor Chesakov <Egor.Chesakov@microsoft.com>2019-05-30 16:26:12 -0700
committerGitHub <noreply@github.com>2019-05-30 16:26:12 -0700
commit5ee8a09345ea63f80996f0dde7ee4d8396efd902 (patch)
tree2732aff2c9f1664486d3fe24310ee26bcc422c64 /src/ToolBox
parentfa8383fb28be945cae900a5579afd5920f274fd4 (diff)
downloadcoreclr-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.cpp27
-rw-r--r--src/ToolBox/superpmi/superpmi/jitinstance.cpp22
-rw-r--r--src/ToolBox/superpmi/superpmi/superpmi.cpp13
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
}