From 71df0bfb0646247a48d307b97031d29eec1fec8d Mon Sep 17 00:00:00 2001 From: Edwin Joy Date: Wed, 27 Dec 2023 10:31:45 +0530 Subject: [PATCH 01/10] get_march_mabi initial commit --- riscv_config/isa_validator.py | 39 +++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/riscv_config/isa_validator.py b/riscv_config/isa_validator.py index 5c7681e..efde84d 100644 --- a/riscv_config/isa_validator.py +++ b/riscv_config/isa_validator.py @@ -161,4 +161,43 @@ def get_extension_list(isa): return (extension_list, err, err_list) +def get_march_mabi (isa : str): + ''' + This function returns the corresponding march and mabi argument values + for RISC-V GCC + arguments: + isa: (string) this is the isa string in canonical order + + returns: + march: (string) this is the string to be passed to -march to gcc for a given isa + mabi: (string) this is the string to be passed to -mabi for given isa + ''' + + # march generation + + march = isa + # remove privilege modes + if 'SU' in march: + march = march.replace('SU', '') # remove supervisor + elif 'U'in march: + march = march.replace('U', '') # remove user mode + + march = march.lower() + + march = march.replace('smrnmi_', '') # remove smrnmi + march = march.replace('sdext_', '') # remove sdext + march = march.replace('zicntr_', '') # remove zicntr + march = march.replace('zihpm_', '') # remove zihpm + + # remove zbp and zbt if zbpbo is present + if 'zbpbo_' in march: + march = march.replace('zbp_', '') + march = march.replace('zbt_', '') + + # mabi generation + mabi = 'ilp32' + if 'rv64' in march: + mabi = 'ilp64d' + + return march, mabi From e4e9e4ed729ae62ab4c369af35a9554844549144 Mon Sep 17 00:00:00 2001 From: Edwin Joy Date: Wed, 27 Dec 2023 10:56:52 +0530 Subject: [PATCH 02/10] maintain separate list for invalid gcc extensions --- riscv_config/isa_validator.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/riscv_config/isa_validator.py b/riscv_config/isa_validator.py index efde84d..3552f27 100644 --- a/riscv_config/isa_validator.py +++ b/riscv_config/isa_validator.py @@ -185,10 +185,30 @@ def get_march_mabi (isa : str): march = march.lower() - march = march.replace('smrnmi_', '') # remove smrnmi - march = march.replace('sdext_', '') # remove sdext - march = march.replace('zicntr_', '') # remove zicntr - march = march.replace('zihpm_', '') # remove zihpm + # extensions to be nullified + null_ext = [ + # rnmi + 'smrnmi_', + + # debug mode + 'sdext_', + + # performance counter + 'zicntr_', + 'zihpm_', + + # unratified Zb* extensions + 'zbe_', + 'zbf_', + 'zbm_', + 'zbr_', + ] + + # nullify all extensions present in null_ext + for each in null_ext: + march = march.replace(each, '') + + # handle special cases here # remove zbp and zbt if zbpbo is present if 'zbpbo_' in march: From 12247090442f853035ac5c7766e8b25848ca7247 Mon Sep 17 00:00:00 2001 From: Edwin Joy Date: Wed, 27 Dec 2023 16:42:52 +0530 Subject: [PATCH 03/10] fixed mabi gen logic --- riscv_config/isa_validator.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/riscv_config/isa_validator.py b/riscv_config/isa_validator.py index 3552f27..8cebdfe 100644 --- a/riscv_config/isa_validator.py +++ b/riscv_config/isa_validator.py @@ -217,7 +217,12 @@ def get_march_mabi (isa : str): # mabi generation mabi = 'ilp32' + if 'FD' in isa: + mabi += 'd' + elif 'F' in isa: + mabi += 'f' + if 'rv64' in march: - mabi = 'ilp64d' + mabi = mabi.replace('ilp32', 'lp64') return march, mabi From f2dcda1ef2b116d34d8c0d60b11b66243acb2cc9 Mon Sep 17 00:00:00 2001 From: Edwin Joy Date: Wed, 27 Dec 2023 20:16:41 +0530 Subject: [PATCH 04/10] fix march construction logic; using isa_validator --- riscv_config/isa_validator.py | 45 +++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/riscv_config/isa_validator.py b/riscv_config/isa_validator.py index 8cebdfe..6bf6919 100644 --- a/riscv_config/isa_validator.py +++ b/riscv_config/isa_validator.py @@ -187,33 +187,42 @@ def get_march_mabi (isa : str): # extensions to be nullified null_ext = [ + # privilege modes + 'U', + 'S', + # rnmi - 'smrnmi_', + 'Smrnmi', # debug mode - 'sdext_', + 'Sdext', # performance counter - 'zicntr_', - 'zihpm_', + 'Zicntr', + 'Zihpm', # unratified Zb* extensions - 'zbe_', - 'zbf_', - 'zbm_', - 'zbr_', + 'Zbe', + 'Zbf', + 'Zbm', + 'Zbr', ] - # nullify all extensions present in null_ext - for each in null_ext: - march = march.replace(each, '') - - # handle special cases here - - # remove zbp and zbt if zbpbo is present - if 'zbpbo_' in march: - march = march.replace('zbp_', '') - march = march.replace('zbt_', '') + # add Zbp and Zbt to null_ext if Zbpbo is present + if 'Zbpbo' in ext_list: + null_ext += ['Zbp', 'Zbt'] + + # construct march + for ext in ext_list: + if ext not in null_ext: + if len(ext) == 1: + march += ext.lower() + else: + # suffix multiline extensions with '_' + march = march + ext.lower() + '_' + + # trim final underscore if exists + march = march[0:-1] if march[-1] == '_' else march # mabi generation mabi = 'ilp32' From fe2f02c1a3d770ff015bcc1510d78662e4f55688 Mon Sep 17 00:00:00 2001 From: Edwin Joy Date: Wed, 27 Dec 2023 20:17:18 +0530 Subject: [PATCH 05/10] added logic when isa_validation fails --- riscv_config/isa_validator.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/riscv_config/isa_validator.py b/riscv_config/isa_validator.py index 6bf6919..bffe2cc 100644 --- a/riscv_config/isa_validator.py +++ b/riscv_config/isa_validator.py @@ -172,18 +172,20 @@ def get_march_mabi (isa : str): returns: march: (string) this is the string to be passed to -march to gcc for a given isa mabi: (string) this is the string to be passed to -mabi for given isa + + None: if ISA validation throws error ''' # march generation - march = isa - # remove privilege modes - if 'SU' in march: - march = march.replace('SU', '') # remove supervisor - elif 'U'in march: - march = march.replace('U', '') # remove user mode + march = 'rv32' if '32' in isa else 'rv64' + + # get extension list + (ext_list, err, err_list) = get_extension_list(isa) - march = march.lower() + # if isa validation throws errors, return None + if err: + return None # extensions to be nullified null_ext = [ From e3873ff419b25d55213ecb757804b59ee5e23029 Mon Sep 17 00:00:00 2001 From: Edwin Joy Date: Wed, 27 Dec 2023 20:19:59 +0530 Subject: [PATCH 06/10] typo in comment --- riscv_config/isa_validator.py | 1 + 1 file changed, 1 insertion(+) diff --git a/riscv_config/isa_validator.py b/riscv_config/isa_validator.py index bffe2cc..9cce96b 100644 --- a/riscv_config/isa_validator.py +++ b/riscv_config/isa_validator.py @@ -217,6 +217,7 @@ def get_march_mabi (isa : str): # construct march for ext in ext_list: if ext not in null_ext: + # suffix multicharacter extensions with '_' if len(ext) == 1: march += ext.lower() else: From fd38551dbdd6426d84914cda34dc55eb781a61f0 Mon Sep 17 00:00:00 2001 From: Neel Gala Date: Mon, 1 Jan 2024 11:40:40 +0530 Subject: [PATCH 07/10] return march as list --- riscv_config/isa_validator.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/riscv_config/isa_validator.py b/riscv_config/isa_validator.py index 9cce96b..65bf73f 100644 --- a/riscv_config/isa_validator.py +++ b/riscv_config/isa_validator.py @@ -179,6 +179,8 @@ def get_march_mabi (isa : str): # march generation march = 'rv32' if '32' in isa else 'rv64' + march_list = [] + march_list.append(march) # get extension list (ext_list, err, err_list) = get_extension_list(isa) @@ -213,28 +215,25 @@ def get_march_mabi (isa : str): # add Zbp and Zbt to null_ext if Zbpbo is present if 'Zbpbo' in ext_list: null_ext += ['Zbp', 'Zbt'] - # construct march for ext in ext_list: if ext not in null_ext: + march_list.append(ext.lower()) # suffix multicharacter extensions with '_' if len(ext) == 1: march += ext.lower() else: # suffix multiline extensions with '_' - march = march + ext.lower() + '_' - - # trim final underscore if exists - march = march[0:-1] if march[-1] == '_' else march + march = march + '_' + ext.lower() # mabi generation mabi = 'ilp32' - if 'FD' in isa: + if 'F' in ext_list and 'D' in ext_list: mabi += 'd' - elif 'F' in isa: + elif 'F' in ext_list: mabi += 'f' if 'rv64' in march: mabi = mabi.replace('ilp32', 'lp64') - return march, mabi + return (march, mabi, march_list) From 06dd3a3b07bbc8e1767e35d8086cfa33ca299228 Mon Sep 17 00:00:00 2001 From: Edwin Joy Date: Mon, 1 Jan 2024 13:31:40 +0530 Subject: [PATCH 08/10] =?UTF-8?q?Bump=20version:=203.14.3=20=E2=86=92=203.?= =?UTF-8?q?15.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- riscv_config/__init__.py | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/riscv_config/__init__.py b/riscv_config/__init__.py index e8dd3aa..b9924a8 100644 --- a/riscv_config/__init__.py +++ b/riscv_config/__init__.py @@ -1,4 +1,4 @@ from pkgutil import extend_path __path__ = extend_path(__path__, __name__) -__version__ = '3.14.3' +__version__ = '3.15.0' diff --git a/setup.cfg b/setup.cfg index 102806c..3cb111e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 3.14.3 +current_version = 3.15.0 commit = True tag = True From 5cfcab03204080f4ec4d34ca54e5f6e306a63597 Mon Sep 17 00:00:00 2001 From: Edwin Joy Date: Mon, 1 Jan 2024 13:34:25 +0530 Subject: [PATCH 09/10] added march_list to returns in function doc --- riscv_config/isa_validator.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/riscv_config/isa_validator.py b/riscv_config/isa_validator.py index 65bf73f..1e8d674 100644 --- a/riscv_config/isa_validator.py +++ b/riscv_config/isa_validator.py @@ -170,10 +170,10 @@ def get_march_mabi (isa : str): isa: (string) this is the isa string in canonical order returns: - march: (string) this is the string to be passed to -march to gcc for a given isa - mabi: (string) this is the string to be passed to -mabi for given isa - - None: if ISA validation throws error + march: (string) this is the string to be passed to -march to gcc for a given isa + mabi: (string) this is the string to be passed to -mabi for given isa + march_list: (list) gives march as a list of all extensions as elements + None: if ISA validation throws error ''' # march generation From b9d91474fcc5047fdc5e05d0cb4bef2a8ca61475 Mon Sep 17 00:00:00 2001 From: Edwin Joy Date: Mon, 1 Jan 2024 13:35:53 +0530 Subject: [PATCH 10/10] updated CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5bb947c..43e9d86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [3.15.0] - 2024-01-01 + - Added function that returns the march and mabi for gcc from a given ISA ## [3.14.3] - 2023-12-01 - Add support for Zimop extension