diff --git a/hipamd/src/amd_hsa_elf.hpp b/hipamd/src/amd_hsa_elf.hpp index 45cf5c22aa..ca22fd1f6c 100644 --- a/hipamd/src/amd_hsa_elf.hpp +++ b/hipamd/src/amd_hsa_elf.hpp @@ -22,6 +22,9 @@ THE SOFTWARE. #pragma once +// This header file is partially copied from +// https://github.com/llvm/llvm-project/blob/main/llvm/include/llvm/BinaryFormat/ELF.h + // AMDGPU OS for HSA compatible compute kernels. enum { ELFOSABI_AMDGPU_HSA = 64, ELFOSABI_AMDGPU_PAL = 65, ELFOSABI_AMDGPU_MESA3D = 66 }; @@ -57,38 +60,51 @@ enum : unsigned { EF_AMDGPU_MACH_R600_FIRST = EF_AMDGPU_MACH_R600_R600, EF_AMDGPU_MACH_R600_LAST = EF_AMDGPU_MACH_R600_TURKS, - EF_AMDGPU_MACH_AMDGCN_GFX600 = 0x020, - EF_AMDGPU_MACH_AMDGCN_GFX601 = 0x021, - EF_AMDGPU_MACH_AMDGCN_GFX700 = 0x022, - EF_AMDGPU_MACH_AMDGCN_GFX701 = 0x023, - EF_AMDGPU_MACH_AMDGCN_GFX702 = 0x024, - EF_AMDGPU_MACH_AMDGCN_GFX703 = 0x025, - EF_AMDGPU_MACH_AMDGCN_GFX704 = 0x026, - EF_AMDGPU_MACH_AMDGCN_RESERVED_0X027 = 0x027, - EF_AMDGPU_MACH_AMDGCN_GFX801 = 0x028, - EF_AMDGPU_MACH_AMDGCN_GFX802 = 0x029, - EF_AMDGPU_MACH_AMDGCN_GFX803 = 0x02a, - EF_AMDGPU_MACH_AMDGCN_GFX810 = 0x02b, - EF_AMDGPU_MACH_AMDGCN_GFX900 = 0x02c, - EF_AMDGPU_MACH_AMDGCN_GFX902 = 0x02d, - EF_AMDGPU_MACH_AMDGCN_GFX904 = 0x02e, - EF_AMDGPU_MACH_AMDGCN_GFX906 = 0x02f, - EF_AMDGPU_MACH_AMDGCN_GFX908 = 0x030, - EF_AMDGPU_MACH_AMDGCN_GFX909 = 0x031, - EF_AMDGPU_MACH_AMDGCN_GFX90C = 0x032, - EF_AMDGPU_MACH_AMDGCN_GFX1010 = 0x033, - EF_AMDGPU_MACH_AMDGCN_GFX1011 = 0x034, - EF_AMDGPU_MACH_AMDGCN_GFX1012 = 0x035, - EF_AMDGPU_MACH_AMDGCN_GFX1030 = 0x036, - EF_AMDGPU_MACH_AMDGCN_GFX1031 = 0x037, - EF_AMDGPU_MACH_AMDGCN_GFX1032 = 0x038, - EF_AMDGPU_MACH_AMDGCN_GFX1033 = 0x039, - EF_AMDGPU_MACH_AMDGCN_GFX602 = 0x03a, - EF_AMDGPU_MACH_AMDGCN_GFX705 = 0x03b, - EF_AMDGPU_MACH_AMDGCN_GFX805 = 0x03c, - EF_AMDGPU_MACH_AMDGCN_GFX90A = 0x03f, + // AMDGCN-based processors. + EF_AMDGPU_MACH_AMDGCN_GFX600 = 0x020, + EF_AMDGPU_MACH_AMDGCN_GFX601 = 0x021, + EF_AMDGPU_MACH_AMDGCN_GFX700 = 0x022, + EF_AMDGPU_MACH_AMDGCN_GFX701 = 0x023, + EF_AMDGPU_MACH_AMDGCN_GFX702 = 0x024, + EF_AMDGPU_MACH_AMDGCN_GFX703 = 0x025, + EF_AMDGPU_MACH_AMDGCN_GFX704 = 0x026, + EF_AMDGPU_MACH_AMDGCN_RESERVED_0X27 = 0x027, + EF_AMDGPU_MACH_AMDGCN_GFX801 = 0x028, + EF_AMDGPU_MACH_AMDGCN_GFX802 = 0x029, + EF_AMDGPU_MACH_AMDGCN_GFX803 = 0x02a, + EF_AMDGPU_MACH_AMDGCN_GFX810 = 0x02b, + EF_AMDGPU_MACH_AMDGCN_GFX900 = 0x02c, + EF_AMDGPU_MACH_AMDGCN_GFX902 = 0x02d, + EF_AMDGPU_MACH_AMDGCN_GFX904 = 0x02e, + EF_AMDGPU_MACH_AMDGCN_GFX906 = 0x02f, + EF_AMDGPU_MACH_AMDGCN_GFX908 = 0x030, + EF_AMDGPU_MACH_AMDGCN_GFX909 = 0x031, + EF_AMDGPU_MACH_AMDGCN_GFX90C = 0x032, + EF_AMDGPU_MACH_AMDGCN_GFX1010 = 0x033, + EF_AMDGPU_MACH_AMDGCN_GFX1011 = 0x034, + EF_AMDGPU_MACH_AMDGCN_GFX1012 = 0x035, + EF_AMDGPU_MACH_AMDGCN_GFX1030 = 0x036, + EF_AMDGPU_MACH_AMDGCN_GFX1031 = 0x037, + EF_AMDGPU_MACH_AMDGCN_GFX1032 = 0x038, + EF_AMDGPU_MACH_AMDGCN_GFX1033 = 0x039, + EF_AMDGPU_MACH_AMDGCN_GFX602 = 0x03a, + EF_AMDGPU_MACH_AMDGCN_GFX705 = 0x03b, + EF_AMDGPU_MACH_AMDGCN_GFX805 = 0x03c, + EF_AMDGPU_MACH_AMDGCN_GFX1035 = 0x03d, + EF_AMDGPU_MACH_AMDGCN_GFX1034 = 0x03e, + EF_AMDGPU_MACH_AMDGCN_GFX90A = 0x03f, + EF_AMDGPU_MACH_AMDGCN_GFX940 = 0x040, + EF_AMDGPU_MACH_AMDGCN_GFX1100 = 0x041, + EF_AMDGPU_MACH_AMDGCN_GFX1013 = 0x042, + EF_AMDGPU_MACH_AMDGCN_RESERVED_0X43 = 0x043, + EF_AMDGPU_MACH_AMDGCN_GFX1103 = 0x044, + EF_AMDGPU_MACH_AMDGCN_GFX1036 = 0x045, + EF_AMDGPU_MACH_AMDGCN_GFX1101 = 0x046, + EF_AMDGPU_MACH_AMDGCN_GFX1102 = 0x047, + + // First/last AMDGCN-based processors. EF_AMDGPU_MACH_AMDGCN_FIRST = EF_AMDGPU_MACH_AMDGCN_GFX600, - EF_AMDGPU_MACH_AMDGCN_LAST = EF_AMDGPU_MACH_AMDGCN_GFX90A, + EF_AMDGPU_MACH_AMDGCN_LAST = EF_AMDGPU_MACH_AMDGCN_GFX1102, // Indicates if the "xnack" target feature is enabled for all code contained // in the object. diff --git a/hipamd/src/hip_code_object.cpp b/hipamd/src/hip_code_object.cpp index 0d5fb1b4da..0709c1a05d 100644 --- a/hipamd/src/hip_code_object.cpp +++ b/hipamd/src/hip_code_object.cpp @@ -172,6 +172,11 @@ static bool getProcName(uint32_t EFlags, std::string& proc_name, bool& xnackSupp sramEccSupported = false; proc_name = "gfx90c"; break; + case EF_AMDGPU_MACH_AMDGCN_GFX940: + xnackSupported = true; + sramEccSupported = true; + proc_name = "gfx940"; + break; case EF_AMDGPU_MACH_AMDGCN_GFX1010: xnackSupported = true; sramEccSupported = false; @@ -187,6 +192,11 @@ static bool getProcName(uint32_t EFlags, std::string& proc_name, bool& xnackSupp sramEccSupported = false; proc_name = "gfx1012"; break; + case EF_AMDGPU_MACH_AMDGCN_GFX1013: + xnackSupported = true; + sramEccSupported = false; + proc_name = "gfx1013"; + break; case EF_AMDGPU_MACH_AMDGCN_GFX1030: xnackSupported = false; sramEccSupported = false; @@ -207,6 +217,41 @@ static bool getProcName(uint32_t EFlags, std::string& proc_name, bool& xnackSupp sramEccSupported = false; proc_name = "gfx1033"; break; + case EF_AMDGPU_MACH_AMDGCN_GFX1034: + xnackSupported = false; + sramEccSupported = false; + proc_name = "gfx1034"; + break; + case EF_AMDGPU_MACH_AMDGCN_GFX1035: + xnackSupported = false; + sramEccSupported = false; + proc_name = "gfx1035"; + break; + case EF_AMDGPU_MACH_AMDGCN_GFX1036: + xnackSupported = false; + sramEccSupported = false; + proc_name = "gfx1036"; + break; + case EF_AMDGPU_MACH_AMDGCN_GFX1100: + xnackSupported = false; + sramEccSupported = false; + proc_name = "gfx1100"; + break; + case EF_AMDGPU_MACH_AMDGCN_GFX1101: + xnackSupported = false; + sramEccSupported = false; + proc_name = "gfx1101"; + break; + case EF_AMDGPU_MACH_AMDGCN_GFX1102: + xnackSupported = false; + sramEccSupported = false; + proc_name = "gfx1102"; + break; + case EF_AMDGPU_MACH_AMDGCN_GFX1103: + xnackSupported = false; + sramEccSupported = false; + proc_name = "gfx1103"; + break; default: return false; } diff --git a/hipamd/src/hiprtc/hiprtcComgrHelper.cpp b/hipamd/src/hiprtc/hiprtcComgrHelper.cpp index b8dca86c0a..c3794c618b 100644 --- a/hipamd/src/hiprtc/hiprtcComgrHelper.cpp +++ b/hipamd/src/hiprtc/hiprtcComgrHelper.cpp @@ -157,6 +157,11 @@ static bool getProcName(uint32_t EFlags, std::string& proc_name, bool& xnackSupp sramEccSupported = false; proc_name = "gfx90c"; break; + case EF_AMDGPU_MACH_AMDGCN_GFX940: + xnackSupported = true; + sramEccSupported = true; + proc_name = "gfx940"; + break; case EF_AMDGPU_MACH_AMDGCN_GFX1010: xnackSupported = true; sramEccSupported = false; @@ -172,6 +177,11 @@ static bool getProcName(uint32_t EFlags, std::string& proc_name, bool& xnackSupp sramEccSupported = false; proc_name = "gfx1012"; break; + case EF_AMDGPU_MACH_AMDGCN_GFX1013: + xnackSupported = true; + sramEccSupported = false; + proc_name = "gfx1013"; + break; case EF_AMDGPU_MACH_AMDGCN_GFX1030: xnackSupported = false; sramEccSupported = false; @@ -192,6 +202,41 @@ static bool getProcName(uint32_t EFlags, std::string& proc_name, bool& xnackSupp sramEccSupported = false; proc_name = "gfx1033"; break; + case EF_AMDGPU_MACH_AMDGCN_GFX1034: + xnackSupported = false; + sramEccSupported = false; + proc_name = "gfx1034"; + break; + case EF_AMDGPU_MACH_AMDGCN_GFX1035: + xnackSupported = false; + sramEccSupported = false; + proc_name = "gfx1035"; + break; + case EF_AMDGPU_MACH_AMDGCN_GFX1036: + xnackSupported = false; + sramEccSupported = false; + proc_name = "gfx1036"; + break; + case EF_AMDGPU_MACH_AMDGCN_GFX1100: + xnackSupported = false; + sramEccSupported = false; + proc_name = "gfx1100"; + break; + case EF_AMDGPU_MACH_AMDGCN_GFX1101: + xnackSupported = false; + sramEccSupported = false; + proc_name = "gfx1101"; + break; + case EF_AMDGPU_MACH_AMDGCN_GFX1102: + xnackSupported = false; + sramEccSupported = false; + proc_name = "gfx1102"; + break; + case EF_AMDGPU_MACH_AMDGCN_GFX1103: + xnackSupported = false; + sramEccSupported = false; + proc_name = "gfx1103"; + break; default: return false; }