|
22 | 22 | import sys
|
23 | 23 | from __init__ import __version__
|
24 | 24 | from collections import OrderedDict
|
| 25 | +import subprocess |
25 | 26 | from subprocess import Popen, PIPE
|
26 | 27 | import time
|
27 | 28 | import platform
|
@@ -658,6 +659,27 @@ def locateExe( defaultPath, exeName ): # /opt/rocm/bin, hcc
|
658 | 659 | return exePath
|
659 | 660 | return None
|
660 | 661 |
|
| 662 | +# Try to assemble the asmString for the specified target processor |
| 663 | +# Success is defined as assembler returning no error code or stderr/stdout |
| 664 | +def tryAssembler(isaVersion, asmString): |
| 665 | + asmCmd = "%s -x assembler -target amdgcn-amdhsa -mcpu=%s -" \ |
| 666 | + % (globalParameters["AssemblerPath"], isaVersion) |
| 667 | + |
| 668 | + sysCmd = "echo \"%s\" | %s" % (asmString, asmCmd) |
| 669 | + |
| 670 | + try: |
| 671 | + result = subprocess.check_output([sysCmd], shell=True, stderr=subprocess.STDOUT) |
| 672 | + if globalParameters["PrintLevel"] >=2: |
| 673 | + print "asm_cmd: ", asmCmd |
| 674 | + print "output :", result |
| 675 | + if result != "": |
| 676 | + return 0 # stdout and stderr must be empty |
| 677 | + except subprocess.CalledProcessError, e: |
| 678 | + return 0 # error, not supported |
| 679 | + |
| 680 | + return 1 # syntax works for |
| 681 | + |
| 682 | + |
661 | 683 | ################################################################################
|
662 | 684 | # Assign Global Parameters
|
663 | 685 | # each global parameter has a default parameter, and the user
|
@@ -717,18 +739,11 @@ def assignGlobalParameters( config ):
|
717 | 739 | isaVersion = "gfx" + "".join(map(str,v))
|
718 | 740 | asmCmd = "%s -x assembler -target amdgcn-amdhsa -mcpu=%s -" \
|
719 | 741 | % (globalParameters["AssemblerPath"], isaVersion)
|
720 |
| - globalParameters["AsmCaps"][v]["HasExplicitCO"] = \ |
721 |
| - not os.system ("echo \"v_add_co_u32 v0,vcc,v0,v0\" \ |
722 |
| - | %s %s" % \ |
723 |
| - (asmCmd, "" if globalParameters["PrintLevel"] >=2 else "> /dev/null 2>&1")) |
724 |
| - globalParameters["AsmCaps"][v]["HasDirectToLds"] = \ |
725 |
| - not os.system ("echo \"buffer_load_dword v40, v36, s[24:27], s28 offen offset:0 lds\" \ |
726 |
| - | %s %s" % \ |
727 |
| - (asmCmd, "" if globalParameters["PrintLevel"] >=2 else "> /dev/null 2>&1")) |
728 |
| - globalParameters["AsmCaps"][v]["HasAddLshl"] = \ |
729 |
| - not os.system ("echo \"v_add_lshl_u32 v47, v36, v34, 0x2\" \ |
730 |
| - | %s %s" % \ |
731 |
| - (asmCmd, "" if globalParameters["PrintLevel"] >=2 else "> /dev/null 2>&1")) |
| 742 | + # This doesn't work since assembler politely falls back to default with an unsupported mcpu argument: |
| 743 | + globalParameters["AsmCaps"][v]["SupportedIsa"] = tryAssembler(isaVersion, "") |
| 744 | + globalParameters["AsmCaps"][v]["HasExplicitCO"] = tryAssembler(isaVersion, "v_add_co_u32 v0,vcc,v0,v0") |
| 745 | + globalParameters["AsmCaps"][v]["HasDirectToLds"] = tryAssembler(isaVersion, "buffer_load_dword v40, v36, s[24:27], s28 offen offset:0 lds") |
| 746 | + globalParameters["AsmCaps"][v]["HasAddLshl"] = tryAssembler(isaVersion, "v_add_lshl_u32 v47, v36, v34, 0x2") |
732 | 747 | caps = ""
|
733 | 748 | for k in globalParameters["AsmCaps"][v]:
|
734 | 749 | caps += " %s=%u" % (k, globalParameters["AsmCaps"][v][k])
|
|
0 commit comments