[libamdhsacode] Support COV6/Generic Targets

Change-Id: I4680577eb56dc436fbc134b169f172dd476bff37
This commit is contained in:
pvanhout
2024-02-20 10:59:06 +01:00
committed by Chiranjeevi Pattigidi
parent 5402842d5f
commit a93c18dc90
5 changed files with 61 additions and 20 deletions
@@ -483,6 +483,10 @@ namespace code {
*major = 5;
*minor = 0;
return true;
case ELF::ELFABIVERSION_AMDGPU_HSA_V6:
*major = 6;
*minor = 0;
return true;
}
return false;
@@ -600,6 +604,10 @@ namespace code {
case ELF::EF_AMDGPU_MACH_AMDGCN_GFX1103: MI.Name = "gfx1103"; MI.XnackSupported = false; MI.SrameccSupported = false; break;
case ELF::EF_AMDGPU_MACH_AMDGCN_GFX1150: MI.Name = "gfx1150"; MI.XnackSupported = false; MI.SrameccSupported = false; break;
case ELF::EF_AMDGPU_MACH_AMDGCN_GFX1151: MI.Name = "gfx1151"; MI.XnackSupported = false; MI.SrameccSupported = false; break;
case ELF::EF_AMDGPU_MACH_AMDGCN_GFX9_GENERIC: MI.Name = "gfx9-generic"; MI.XnackSupported = true; MI.SrameccSupported = false; break;
case ELF::EF_AMDGPU_MACH_AMDGCN_GFX10_1_GENERIC: MI.Name = "gfx10-1-generic"; MI.XnackSupported = true; MI.SrameccSupported = false; break;
case ELF::EF_AMDGPU_MACH_AMDGCN_GFX10_3_GENERIC: MI.Name = "gfx10-3-generic"; MI.XnackSupported = false; MI.SrameccSupported = false; break;
case ELF::EF_AMDGPU_MACH_AMDGCN_GFX11_GENERIC: MI.Name = "gfx11-generic"; MI.XnackSupported = false; MI.SrameccSupported = false; break;
default: return false;
}
return true;
@@ -687,13 +695,17 @@ namespace code {
return MI.Name;
}
bool AmdHsaCode::GetIsa(std::string& isa_name)
bool AmdHsaCode::GetIsa(std::string& isa_name, unsigned *genericVersion)
{
isa_name.clear();
uint32_t code_object_major_version = 0;
uint32_t code_object_minor_version = 0;
// Generic versioning starts at 1, so zero means no generic version.
if (genericVersion)
*genericVersion = 0;
switch (img->EClass()) {
case ELFCLASS64:
// There is no e_machine and/or OS ABI for R600 so rely on checking
@@ -740,7 +752,7 @@ namespace code {
MI.Name += ":xnack+";
else if (MI.XnackSupported)
MI.Name += ":xnack-";
} else if (code_object_major_version == 4 || code_object_major_version == 5) {
} else if (code_object_major_version >= 4) {
switch (img->EFlags() & ELF::EF_AMDGPU_FEATURE_SRAMECC_V4) {
case ELF::EF_AMDGPU_FEATURE_SRAMECC_OFF_V4:
MI.Name += ":sramecc-";
@@ -758,6 +770,12 @@ namespace code {
MI.Name += ":xnack+";
break;
}
// Generic version is not part of the ISA name.
// Only parse it when the caller wants it.
if (genericVersion && code_object_major_version >= 6) {
*genericVersion = (img->EFlags() & ELF::EF_AMDGPU_GENERIC_VERSION) >> ELF::EF_AMDGPU_GENERIC_VERSION_OFFSET;
}
} else {
return false;
}