diff --git a/.gitignore b/.gitignore index 4ddba6b5..b1f4b5d6 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,5 @@ inst.sverilog instr_dict.yaml __pycache__/ + +/.venv diff --git a/Makefile b/Makefile index cce19cdc..06e0f805 100644 --- a/Makefile +++ b/Makefile @@ -5,35 +5,36 @@ ENV_H := ../riscv-tests/env/encoding.h OPENOCD_H := ../riscv-openocd/src/target/riscv/encoding.h INSTALL_HEADER_FILES := $(ISASIM_H) $(PK_H) $(ENV_H) $(OPENOCD_H) +.PHONY : default default: everything .PHONY : everything everything: - @./parse.py -c -go -chisel -sverilog -rust -latex -spinalhdl $(EXTENSIONS) + @./parse.sh -c -go -chisel -sverilog -rust -latex -spinalhdl $(EXTENSIONS) .PHONY : encoding.out.h encoding.out.h: - @./parse.py -c rv* unratified/rv_* unratified/rv32* unratified/rv64* + @./parse.sh -c rv* unratified/rv_* unratified/rv32* unratified/rv64* .PHONY : inst.chisel inst.chisel: - @./parse.py -chisel $(EXTENSIONS) + @./parse.sh -chisel $(EXTENSIONS) .PHONY : inst.go inst.go: - @./parse.py -go $(EXTENSIONS) + @./parse.sh -go $(EXTENSIONS) .PHONY : latex latex: - @./parse.py -latex $(EXTENSIONS) + @./parse.sh -latex $(EXTENSIONS) .PHONY : inst.sverilog inst.sverilog: - @./parse.py -sverilog $(EXTENSIONS) + @./parse.sh -sverilog $(EXTENSIONS) .PHONY : inst.rs inst.rs: - @./parse.py -rust $(EXTENSIONS) + @./parse.sh -rust $(EXTENSIONS) .PHONY : clean clean: @@ -51,4 +52,4 @@ priv-instr-table.tex: latex .PHONY: inst.spinalhdl inst.spinalhdl: - @./parse.py -spinalhdl $(EXTENSIONS) + @./parse.sh -spinalhdl $(EXTENSIONS) diff --git a/parse.sh b/parse.sh new file mode 100755 index 00000000..bd5daa34 --- /dev/null +++ b/parse.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +# This is a simple script to handle Python's venv nonsense. + +set -e + +# Create the virtual environment if it doesn't already exist. +if [ ! -e ".venv/bin/activate" ]; then + echo "Creating venv" + python3 -m venv ".venv" +fi + +# Activate it +. ".venv/bin/activate" + +# See https://github.com/microsoft/pyright/issues/6209#issuecomment-1772924061 +# for why editable_mode=compat is required. +python3 -m pip install --config-settings editable_mode=compat --editable . + +riscv_opcodes $@ diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..1298ed1c --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,26 @@ +[project] +name = "riscv-opcodes" +version = "0.1.0" +description = "Machine readable information about RISC-V instruction opcodes" +dependencies = [ + "PyYAML>=6.0.0, <7" +] +readme = "README.md" +requires-python = ">= 3.7" + +[project.scripts] +riscv_opcodes = "riscv_opcodes.parse:main" + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.rye] +managed = true +dev-dependencies = [] + +[tool.hatch.metadata] +allow-direct-references = true + +[tool.hatch.build.targets.wheel] +packages = ["src/riscv_opcodes"] diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index c3726e8b..00000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -pyyaml diff --git a/constants.py b/src/riscv_opcodes/constants.py similarity index 98% rename from constants.py rename to src/riscv_opcodes/constants.py index 18b0613b..1520dee3 100644 --- a/constants.py +++ b/src/riscv_opcodes/constants.py @@ -1,6 +1,6 @@ import re import csv - +from importlib.resources import open_text overlapping_extensions = { 'rv_zcmt': {'rv_c_d'}, @@ -42,14 +42,14 @@ def read_csv(filename): """ Reads a CSV file and returns a list of tuples. Each tuple contains an integer value (from the first column) and a string (from the second column). - + Args: filename (str): The name of the CSV file to read. - + Returns: list of tuple: A list of (int, str) tuples extracted from the CSV file. """ - with open(filename) as f: + with open_text("riscv_opcodes.opcodes", filename) as f: csv_reader = csv.reader(f, skipinitialspace=True) return [(int(row[0], 0), row[1]) for row in csv_reader] @@ -58,7 +58,7 @@ def read_csv(filename): csrs32 = read_csv("csrs32.csv") arg_lut = {} -with open("arg_lut.csv") as f: +with open_text("riscv_opcodes.opcodes", "arg_lut.csv") as f: csv_reader = csv.reader(f, skipinitialspace=True) for row in csv_reader: k = row[0] diff --git a/encoding.h b/src/riscv_opcodes/encoding.h similarity index 100% rename from encoding.h rename to src/riscv_opcodes/encoding.h diff --git a/arg_lut.csv b/src/riscv_opcodes/opcodes/arg_lut.csv similarity index 100% rename from arg_lut.csv rename to src/riscv_opcodes/opcodes/arg_lut.csv diff --git a/causes.csv b/src/riscv_opcodes/opcodes/causes.csv similarity index 100% rename from causes.csv rename to src/riscv_opcodes/opcodes/causes.csv diff --git a/csrs.csv b/src/riscv_opcodes/opcodes/csrs.csv similarity index 100% rename from csrs.csv rename to src/riscv_opcodes/opcodes/csrs.csv diff --git a/csrs32.csv b/src/riscv_opcodes/opcodes/csrs32.csv similarity index 100% rename from csrs32.csv rename to src/riscv_opcodes/opcodes/csrs32.csv diff --git a/rv32_c b/src/riscv_opcodes/opcodes/ratified/rv32_c similarity index 100% rename from rv32_c rename to src/riscv_opcodes/opcodes/ratified/rv32_c diff --git a/rv32_c_f b/src/riscv_opcodes/opcodes/ratified/rv32_c_f similarity index 100% rename from rv32_c_f rename to src/riscv_opcodes/opcodes/ratified/rv32_c_f diff --git a/rv32_d_zfa b/src/riscv_opcodes/opcodes/ratified/rv32_d_zfa similarity index 100% rename from rv32_d_zfa rename to src/riscv_opcodes/opcodes/ratified/rv32_d_zfa diff --git a/rv32_i b/src/riscv_opcodes/opcodes/ratified/rv32_i similarity index 100% rename from rv32_i rename to src/riscv_opcodes/opcodes/ratified/rv32_i diff --git a/rv32_zbb b/src/riscv_opcodes/opcodes/ratified/rv32_zbb similarity index 100% rename from rv32_zbb rename to src/riscv_opcodes/opcodes/ratified/rv32_zbb diff --git a/rv32_zbkb b/src/riscv_opcodes/opcodes/ratified/rv32_zbkb similarity index 100% rename from rv32_zbkb rename to src/riscv_opcodes/opcodes/ratified/rv32_zbkb diff --git a/rv32_zbs b/src/riscv_opcodes/opcodes/ratified/rv32_zbs similarity index 100% rename from rv32_zbs rename to src/riscv_opcodes/opcodes/ratified/rv32_zbs diff --git a/rv32_zicntr b/src/riscv_opcodes/opcodes/ratified/rv32_zicntr similarity index 100% rename from rv32_zicntr rename to src/riscv_opcodes/opcodes/ratified/rv32_zicntr diff --git a/rv32_zk b/src/riscv_opcodes/opcodes/ratified/rv32_zk similarity index 100% rename from rv32_zk rename to src/riscv_opcodes/opcodes/ratified/rv32_zk diff --git a/rv32_zkn b/src/riscv_opcodes/opcodes/ratified/rv32_zkn similarity index 100% rename from rv32_zkn rename to src/riscv_opcodes/opcodes/ratified/rv32_zkn diff --git a/rv32_zknd b/src/riscv_opcodes/opcodes/ratified/rv32_zknd similarity index 100% rename from rv32_zknd rename to src/riscv_opcodes/opcodes/ratified/rv32_zknd diff --git a/rv32_zkne b/src/riscv_opcodes/opcodes/ratified/rv32_zkne similarity index 100% rename from rv32_zkne rename to src/riscv_opcodes/opcodes/ratified/rv32_zkne diff --git a/rv32_zknh b/src/riscv_opcodes/opcodes/ratified/rv32_zknh similarity index 100% rename from rv32_zknh rename to src/riscv_opcodes/opcodes/ratified/rv32_zknh diff --git a/rv32_zks b/src/riscv_opcodes/opcodes/ratified/rv32_zks similarity index 100% rename from rv32_zks rename to src/riscv_opcodes/opcodes/ratified/rv32_zks diff --git a/rv64_a b/src/riscv_opcodes/opcodes/ratified/rv64_a similarity index 100% rename from rv64_a rename to src/riscv_opcodes/opcodes/ratified/rv64_a diff --git a/rv64_c b/src/riscv_opcodes/opcodes/ratified/rv64_c similarity index 100% rename from rv64_c rename to src/riscv_opcodes/opcodes/ratified/rv64_c diff --git a/rv64_d b/src/riscv_opcodes/opcodes/ratified/rv64_d similarity index 100% rename from rv64_d rename to src/riscv_opcodes/opcodes/ratified/rv64_d diff --git a/rv64_f b/src/riscv_opcodes/opcodes/ratified/rv64_f similarity index 100% rename from rv64_f rename to src/riscv_opcodes/opcodes/ratified/rv64_f diff --git a/rv64_h b/src/riscv_opcodes/opcodes/ratified/rv64_h similarity index 100% rename from rv64_h rename to src/riscv_opcodes/opcodes/ratified/rv64_h diff --git a/rv64_i b/src/riscv_opcodes/opcodes/ratified/rv64_i similarity index 100% rename from rv64_i rename to src/riscv_opcodes/opcodes/ratified/rv64_i diff --git a/rv64_m b/src/riscv_opcodes/opcodes/ratified/rv64_m similarity index 100% rename from rv64_m rename to src/riscv_opcodes/opcodes/ratified/rv64_m diff --git a/rv64_q b/src/riscv_opcodes/opcodes/ratified/rv64_q similarity index 100% rename from rv64_q rename to src/riscv_opcodes/opcodes/ratified/rv64_q diff --git a/rv64_q_zfa b/src/riscv_opcodes/opcodes/ratified/rv64_q_zfa similarity index 100% rename from rv64_q_zfa rename to src/riscv_opcodes/opcodes/ratified/rv64_q_zfa diff --git a/rv64_zacas b/src/riscv_opcodes/opcodes/ratified/rv64_zacas similarity index 100% rename from rv64_zacas rename to src/riscv_opcodes/opcodes/ratified/rv64_zacas diff --git a/rv64_zba b/src/riscv_opcodes/opcodes/ratified/rv64_zba similarity index 100% rename from rv64_zba rename to src/riscv_opcodes/opcodes/ratified/rv64_zba diff --git a/rv64_zbb b/src/riscv_opcodes/opcodes/ratified/rv64_zbb similarity index 100% rename from rv64_zbb rename to src/riscv_opcodes/opcodes/ratified/rv64_zbb diff --git a/rv64_zbkb b/src/riscv_opcodes/opcodes/ratified/rv64_zbkb similarity index 100% rename from rv64_zbkb rename to src/riscv_opcodes/opcodes/ratified/rv64_zbkb diff --git a/rv64_zbs b/src/riscv_opcodes/opcodes/ratified/rv64_zbs similarity index 100% rename from rv64_zbs rename to src/riscv_opcodes/opcodes/ratified/rv64_zbs diff --git a/rv64_zcb b/src/riscv_opcodes/opcodes/ratified/rv64_zcb similarity index 100% rename from rv64_zcb rename to src/riscv_opcodes/opcodes/ratified/rv64_zcb diff --git a/rv64_zfh b/src/riscv_opcodes/opcodes/ratified/rv64_zfh similarity index 100% rename from rv64_zfh rename to src/riscv_opcodes/opcodes/ratified/rv64_zfh diff --git a/rv64_zk b/src/riscv_opcodes/opcodes/ratified/rv64_zk similarity index 100% rename from rv64_zk rename to src/riscv_opcodes/opcodes/ratified/rv64_zk diff --git a/rv64_zkn b/src/riscv_opcodes/opcodes/ratified/rv64_zkn similarity index 100% rename from rv64_zkn rename to src/riscv_opcodes/opcodes/ratified/rv64_zkn diff --git a/rv64_zknd b/src/riscv_opcodes/opcodes/ratified/rv64_zknd similarity index 100% rename from rv64_zknd rename to src/riscv_opcodes/opcodes/ratified/rv64_zknd diff --git a/rv64_zkne b/src/riscv_opcodes/opcodes/ratified/rv64_zkne similarity index 100% rename from rv64_zkne rename to src/riscv_opcodes/opcodes/ratified/rv64_zkne diff --git a/rv64_zknh b/src/riscv_opcodes/opcodes/ratified/rv64_zknh similarity index 100% rename from rv64_zknh rename to src/riscv_opcodes/opcodes/ratified/rv64_zknh diff --git a/rv64_zks b/src/riscv_opcodes/opcodes/ratified/rv64_zks similarity index 100% rename from rv64_zks rename to src/riscv_opcodes/opcodes/ratified/rv64_zks diff --git a/rv_a b/src/riscv_opcodes/opcodes/ratified/rv_a similarity index 100% rename from rv_a rename to src/riscv_opcodes/opcodes/ratified/rv_a diff --git a/rv_c b/src/riscv_opcodes/opcodes/ratified/rv_c similarity index 100% rename from rv_c rename to src/riscv_opcodes/opcodes/ratified/rv_c diff --git a/rv_c_d b/src/riscv_opcodes/opcodes/ratified/rv_c_d similarity index 100% rename from rv_c_d rename to src/riscv_opcodes/opcodes/ratified/rv_c_d diff --git a/rv_c_zihintntl b/src/riscv_opcodes/opcodes/ratified/rv_c_zihintntl similarity index 100% rename from rv_c_zihintntl rename to src/riscv_opcodes/opcodes/ratified/rv_c_zihintntl diff --git a/rv_d b/src/riscv_opcodes/opcodes/ratified/rv_d similarity index 100% rename from rv_d rename to src/riscv_opcodes/opcodes/ratified/rv_d diff --git a/rv_d_zfa b/src/riscv_opcodes/opcodes/ratified/rv_d_zfa similarity index 100% rename from rv_d_zfa rename to src/riscv_opcodes/opcodes/ratified/rv_d_zfa diff --git a/rv_d_zfh b/src/riscv_opcodes/opcodes/ratified/rv_d_zfh similarity index 100% rename from rv_d_zfh rename to src/riscv_opcodes/opcodes/ratified/rv_d_zfh diff --git a/rv_f b/src/riscv_opcodes/opcodes/ratified/rv_f similarity index 100% rename from rv_f rename to src/riscv_opcodes/opcodes/ratified/rv_f diff --git a/rv_f_zfa b/src/riscv_opcodes/opcodes/ratified/rv_f_zfa similarity index 100% rename from rv_f_zfa rename to src/riscv_opcodes/opcodes/ratified/rv_f_zfa diff --git a/rv_h b/src/riscv_opcodes/opcodes/ratified/rv_h similarity index 100% rename from rv_h rename to src/riscv_opcodes/opcodes/ratified/rv_h diff --git a/rv_i b/src/riscv_opcodes/opcodes/ratified/rv_i similarity index 100% rename from rv_i rename to src/riscv_opcodes/opcodes/ratified/rv_i diff --git a/rv_m b/src/riscv_opcodes/opcodes/ratified/rv_m similarity index 100% rename from rv_m rename to src/riscv_opcodes/opcodes/ratified/rv_m diff --git a/rv_q b/src/riscv_opcodes/opcodes/ratified/rv_q similarity index 100% rename from rv_q rename to src/riscv_opcodes/opcodes/ratified/rv_q diff --git a/rv_q_zfa b/src/riscv_opcodes/opcodes/ratified/rv_q_zfa similarity index 100% rename from rv_q_zfa rename to src/riscv_opcodes/opcodes/ratified/rv_q_zfa diff --git a/rv_q_zfh b/src/riscv_opcodes/opcodes/ratified/rv_q_zfh similarity index 100% rename from rv_q_zfh rename to src/riscv_opcodes/opcodes/ratified/rv_q_zfh diff --git a/rv_s b/src/riscv_opcodes/opcodes/ratified/rv_s similarity index 100% rename from rv_s rename to src/riscv_opcodes/opcodes/ratified/rv_s diff --git a/rv_sdext b/src/riscv_opcodes/opcodes/ratified/rv_sdext similarity index 100% rename from rv_sdext rename to src/riscv_opcodes/opcodes/ratified/rv_sdext diff --git a/rv_svinval b/src/riscv_opcodes/opcodes/ratified/rv_svinval similarity index 100% rename from rv_svinval rename to src/riscv_opcodes/opcodes/ratified/rv_svinval diff --git a/rv_system b/src/riscv_opcodes/opcodes/ratified/rv_system similarity index 100% rename from rv_system rename to src/riscv_opcodes/opcodes/ratified/rv_system diff --git a/rv_v b/src/riscv_opcodes/opcodes/ratified/rv_v similarity index 100% rename from rv_v rename to src/riscv_opcodes/opcodes/ratified/rv_v diff --git a/rv_v_aliases b/src/riscv_opcodes/opcodes/ratified/rv_v_aliases similarity index 100% rename from rv_v_aliases rename to src/riscv_opcodes/opcodes/ratified/rv_v_aliases diff --git a/rv_zabha b/src/riscv_opcodes/opcodes/ratified/rv_zabha similarity index 100% rename from rv_zabha rename to src/riscv_opcodes/opcodes/ratified/rv_zabha diff --git a/rv_zacas b/src/riscv_opcodes/opcodes/ratified/rv_zacas similarity index 100% rename from rv_zacas rename to src/riscv_opcodes/opcodes/ratified/rv_zacas diff --git a/rv_zawrs b/src/riscv_opcodes/opcodes/ratified/rv_zawrs similarity index 100% rename from rv_zawrs rename to src/riscv_opcodes/opcodes/ratified/rv_zawrs diff --git a/rv_zba b/src/riscv_opcodes/opcodes/ratified/rv_zba similarity index 100% rename from rv_zba rename to src/riscv_opcodes/opcodes/ratified/rv_zba diff --git a/rv_zbb b/src/riscv_opcodes/opcodes/ratified/rv_zbb similarity index 100% rename from rv_zbb rename to src/riscv_opcodes/opcodes/ratified/rv_zbb diff --git a/rv_zbc b/src/riscv_opcodes/opcodes/ratified/rv_zbc similarity index 100% rename from rv_zbc rename to src/riscv_opcodes/opcodes/ratified/rv_zbc diff --git a/rv_zbkb b/src/riscv_opcodes/opcodes/ratified/rv_zbkb similarity index 100% rename from rv_zbkb rename to src/riscv_opcodes/opcodes/ratified/rv_zbkb diff --git a/rv_zbkc b/src/riscv_opcodes/opcodes/ratified/rv_zbkc similarity index 100% rename from rv_zbkc rename to src/riscv_opcodes/opcodes/ratified/rv_zbkc diff --git a/rv_zbkx b/src/riscv_opcodes/opcodes/ratified/rv_zbkx similarity index 100% rename from rv_zbkx rename to src/riscv_opcodes/opcodes/ratified/rv_zbkx diff --git a/rv_zbs b/src/riscv_opcodes/opcodes/ratified/rv_zbs similarity index 100% rename from rv_zbs rename to src/riscv_opcodes/opcodes/ratified/rv_zbs diff --git a/rv_zcb b/src/riscv_opcodes/opcodes/ratified/rv_zcb similarity index 100% rename from rv_zcb rename to src/riscv_opcodes/opcodes/ratified/rv_zcb diff --git a/rv_zcmop b/src/riscv_opcodes/opcodes/ratified/rv_zcmop similarity index 100% rename from rv_zcmop rename to src/riscv_opcodes/opcodes/ratified/rv_zcmop diff --git a/rv_zcmp b/src/riscv_opcodes/opcodes/ratified/rv_zcmp similarity index 100% rename from rv_zcmp rename to src/riscv_opcodes/opcodes/ratified/rv_zcmp diff --git a/rv_zcmt b/src/riscv_opcodes/opcodes/ratified/rv_zcmt similarity index 100% rename from rv_zcmt rename to src/riscv_opcodes/opcodes/ratified/rv_zcmt diff --git a/rv_zfh b/src/riscv_opcodes/opcodes/ratified/rv_zfh similarity index 100% rename from rv_zfh rename to src/riscv_opcodes/opcodes/ratified/rv_zfh diff --git a/rv_zfh_zfa b/src/riscv_opcodes/opcodes/ratified/rv_zfh_zfa similarity index 100% rename from rv_zfh_zfa rename to src/riscv_opcodes/opcodes/ratified/rv_zfh_zfa diff --git a/rv_zicbo b/src/riscv_opcodes/opcodes/ratified/rv_zicbo similarity index 100% rename from rv_zicbo rename to src/riscv_opcodes/opcodes/ratified/rv_zicbo diff --git a/rv_zicntr b/src/riscv_opcodes/opcodes/ratified/rv_zicntr similarity index 100% rename from rv_zicntr rename to src/riscv_opcodes/opcodes/ratified/rv_zicntr diff --git a/rv_zicond b/src/riscv_opcodes/opcodes/ratified/rv_zicond similarity index 100% rename from rv_zicond rename to src/riscv_opcodes/opcodes/ratified/rv_zicond diff --git a/rv_zicsr b/src/riscv_opcodes/opcodes/ratified/rv_zicsr similarity index 100% rename from rv_zicsr rename to src/riscv_opcodes/opcodes/ratified/rv_zicsr diff --git a/rv_zifencei b/src/riscv_opcodes/opcodes/ratified/rv_zifencei similarity index 100% rename from rv_zifencei rename to src/riscv_opcodes/opcodes/ratified/rv_zifencei diff --git a/rv_zihintntl b/src/riscv_opcodes/opcodes/ratified/rv_zihintntl similarity index 100% rename from rv_zihintntl rename to src/riscv_opcodes/opcodes/ratified/rv_zihintntl diff --git a/rv_zimop b/src/riscv_opcodes/opcodes/ratified/rv_zimop similarity index 100% rename from rv_zimop rename to src/riscv_opcodes/opcodes/ratified/rv_zimop diff --git a/rv_zk b/src/riscv_opcodes/opcodes/ratified/rv_zk similarity index 100% rename from rv_zk rename to src/riscv_opcodes/opcodes/ratified/rv_zk diff --git a/rv_zkn b/src/riscv_opcodes/opcodes/ratified/rv_zkn similarity index 100% rename from rv_zkn rename to src/riscv_opcodes/opcodes/ratified/rv_zkn diff --git a/rv_zknh b/src/riscv_opcodes/opcodes/ratified/rv_zknh similarity index 100% rename from rv_zknh rename to src/riscv_opcodes/opcodes/ratified/rv_zknh diff --git a/rv_zks b/src/riscv_opcodes/opcodes/ratified/rv_zks similarity index 100% rename from rv_zks rename to src/riscv_opcodes/opcodes/ratified/rv_zks diff --git a/rv_zksed b/src/riscv_opcodes/opcodes/ratified/rv_zksed similarity index 100% rename from rv_zksed rename to src/riscv_opcodes/opcodes/ratified/rv_zksed diff --git a/rv_zksh b/src/riscv_opcodes/opcodes/ratified/rv_zksh similarity index 100% rename from rv_zksh rename to src/riscv_opcodes/opcodes/ratified/rv_zksh diff --git a/rv_zvbb b/src/riscv_opcodes/opcodes/ratified/rv_zvbb similarity index 100% rename from rv_zvbb rename to src/riscv_opcodes/opcodes/ratified/rv_zvbb diff --git a/rv_zvbc b/src/riscv_opcodes/opcodes/ratified/rv_zvbc similarity index 100% rename from rv_zvbc rename to src/riscv_opcodes/opcodes/ratified/rv_zvbc diff --git a/rv_zvkg b/src/riscv_opcodes/opcodes/ratified/rv_zvkg similarity index 100% rename from rv_zvkg rename to src/riscv_opcodes/opcodes/ratified/rv_zvkg diff --git a/rv_zvkn b/src/riscv_opcodes/opcodes/ratified/rv_zvkn similarity index 100% rename from rv_zvkn rename to src/riscv_opcodes/opcodes/ratified/rv_zvkn diff --git a/rv_zvkned b/src/riscv_opcodes/opcodes/ratified/rv_zvkned similarity index 100% rename from rv_zvkned rename to src/riscv_opcodes/opcodes/ratified/rv_zvkned diff --git a/rv_zvknha b/src/riscv_opcodes/opcodes/ratified/rv_zvknha similarity index 100% rename from rv_zvknha rename to src/riscv_opcodes/opcodes/ratified/rv_zvknha diff --git a/rv_zvknhb b/src/riscv_opcodes/opcodes/ratified/rv_zvknhb similarity index 100% rename from rv_zvknhb rename to src/riscv_opcodes/opcodes/ratified/rv_zvknhb diff --git a/rv_zvks b/src/riscv_opcodes/opcodes/ratified/rv_zvks similarity index 100% rename from rv_zvks rename to src/riscv_opcodes/opcodes/ratified/rv_zvks diff --git a/rv_zvksed b/src/riscv_opcodes/opcodes/ratified/rv_zvksed similarity index 100% rename from rv_zvksed rename to src/riscv_opcodes/opcodes/ratified/rv_zvksed diff --git a/rv_zvksh b/src/riscv_opcodes/opcodes/ratified/rv_zvksh similarity index 100% rename from rv_zvksh rename to src/riscv_opcodes/opcodes/ratified/rv_zvksh diff --git a/unratified/rv64_zbp b/src/riscv_opcodes/opcodes/unratified/rv64_zbp similarity index 100% rename from unratified/rv64_zbp rename to src/riscv_opcodes/opcodes/unratified/rv64_zbp diff --git a/unratified/rv_c_zicfiss b/src/riscv_opcodes/opcodes/unratified/rv_c_zicfiss similarity index 100% rename from unratified/rv_c_zicfiss rename to src/riscv_opcodes/opcodes/unratified/rv_c_zicfiss diff --git a/unratified/rv_smdbltrp b/src/riscv_opcodes/opcodes/unratified/rv_smdbltrp similarity index 100% rename from unratified/rv_smdbltrp rename to src/riscv_opcodes/opcodes/unratified/rv_smdbltrp diff --git a/unratified/rv_smrnmi b/src/riscv_opcodes/opcodes/unratified/rv_smrnmi similarity index 100% rename from unratified/rv_smrnmi rename to src/riscv_opcodes/opcodes/unratified/rv_smrnmi diff --git a/unratified/rv_zalasr b/src/riscv_opcodes/opcodes/unratified/rv_zalasr similarity index 100% rename from unratified/rv_zalasr rename to src/riscv_opcodes/opcodes/unratified/rv_zalasr diff --git a/unratified/rv_zbp b/src/riscv_opcodes/opcodes/unratified/rv_zbp similarity index 100% rename from unratified/rv_zbp rename to src/riscv_opcodes/opcodes/unratified/rv_zbp diff --git a/unratified/rv_zfbfmin b/src/riscv_opcodes/opcodes/unratified/rv_zfbfmin similarity index 100% rename from unratified/rv_zfbfmin rename to src/riscv_opcodes/opcodes/unratified/rv_zfbfmin diff --git a/unratified/rv_zicfilp b/src/riscv_opcodes/opcodes/unratified/rv_zicfilp similarity index 100% rename from unratified/rv_zicfilp rename to src/riscv_opcodes/opcodes/unratified/rv_zicfilp diff --git a/unratified/rv_zicfiss b/src/riscv_opcodes/opcodes/unratified/rv_zicfiss similarity index 100% rename from unratified/rv_zicfiss rename to src/riscv_opcodes/opcodes/unratified/rv_zicfiss diff --git a/unratified/rv_zvfbfmin b/src/riscv_opcodes/opcodes/unratified/rv_zvfbfmin similarity index 100% rename from unratified/rv_zvfbfmin rename to src/riscv_opcodes/opcodes/unratified/rv_zvfbfmin diff --git a/unratified/rv_zvfbfwma b/src/riscv_opcodes/opcodes/unratified/rv_zvfbfwma similarity index 100% rename from unratified/rv_zvfbfwma rename to src/riscv_opcodes/opcodes/unratified/rv_zvfbfwma diff --git a/parse.py b/src/riscv_opcodes/parse.py similarity index 98% rename from parse.py rename to src/riscv_opcodes/parse.py index 839fd230..d79edbdc 100755 --- a/parse.py +++ b/src/riscv_opcodes/parse.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -from constants import * +from .constants import * import copy import re import glob @@ -11,6 +11,9 @@ import yaml import sys +from importlib.resources import open_text, read_text, contents +from fnmatch import fnmatch + pp = pprint.PrettyPrinter(indent=2) logging.basicConfig(level=logging.INFO, format='%(levelname)s:: %(message)s') @@ -118,7 +121,7 @@ def process_enc_line(line, ext): existing_arg, new_arg = parts if existing_arg in arg_lut: arg_lut[a] = arg_lut[existing_arg] - + else: logging.error(f' Found field {existing_arg} in variable {a} in instruction {name} whose mapping in arg_lut does not exist') raise SystemExit(1) @@ -242,19 +245,20 @@ def create_inst_dict(file_filter, include_pseudo=False, include_pseudo_ops=[]): ''' - opcodes_dir = os.path.dirname(os.path.realpath(__file__)) instr_dict = {} # file_names contains all files to be parsed in the riscv-opcodes directory file_names = [] - for fil in file_filter: - file_names += glob.glob(f'{opcodes_dir}/{fil}') + for package in ["riscv_opcodes.opcodes.ratified", "riscv_opcodes.opcodes.unratified"]: + for file in contents(package): + if any(fnmatch(file, fil) for fil in file_filter): + file_names += file file_names.sort(reverse=True) # first pass if for standard/regular instructions logging.debug('Collecting standard instructions first') for f in file_names: logging.debug(f'Parsing File: {f} for standard instructions') - with open(f) as fp: + with open_text(f) as fp: lines = (line.rstrip() for line in fp) # All lines including the blank ones lines = list(line for line in lines if line) # Non-blank lines @@ -952,8 +956,7 @@ def make_c(instr_dict): mask = ((1 << (end - begin + 1)) - 1) << begin arg_str += f"#define INSN_FIELD_{sanitized_name.upper()} {hex(mask)}\n" - with open(f'{os.path.dirname(__file__)}/encoding.h', 'r') as file: - enc_header = file.read() + enc_header = read_text("riscv_opcodes", "encoding.h") commit = os.popen('git log -1 --format="format:%h"').read() @@ -1027,7 +1030,7 @@ def make_go(instr_dict): instr_str += f''' case A{i.upper().replace("_","")}: return &inst{{ {hex(opcode)}, {hex(funct3)}, {hex(rs1)}, {hex(rs2)}, {signed(csr,12)}, {hex(funct7)} }} ''' - + with open('inst.go','w') as file: file.write(prelude) file.write(instr_str) @@ -1046,7 +1049,7 @@ def signed(value, width): return value - (1<