Skip to content

Commit

Permalink
Add CSR encodings for Go and remove call to Go fmt (#329)
Browse files Browse the repository at this point in the history
* Don't run go fmt error in go_utils.py

go_utils.py currently runs go fmt to pretty print the generated
inst.go file. Unfortunately, this call to go fmt always fails as
inst.go contains an internal import and go fmt is being run out of
tree. Here we remove the code that attempts to format inst.go
resulting in a clean run of go_utils.py without any errors. The
generated file, inst.go, can be formatted when it's copied into the
Go source tree, prior to its submission to the Golang project.

* Add CSR support to go_utils.py

go_utils.py now generates a Go map that maps CSR numbers to CSR
names. The resulting map is written into inst.go for use by the
Go assembler.
  • Loading branch information
markdryan authored Jan 9, 2025
1 parent 34e1d81 commit 3c73392
Showing 1 changed file with 10 additions and 7 deletions.
17 changes: 10 additions & 7 deletions go_utils.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import logging
import pprint
import subprocess
import sys

from constants import csrs
from shared_utils import InstrDict, signed

pp = pprint.PrettyPrinter(indent=2)
Expand Down Expand Up @@ -32,9 +32,14 @@ def make_go(instr_dict: InstrDict):
switch a {
"""

endoffile = """ }
csrs_map_str = """ }
return nil
}
var csrs = map[uint16]string {
"""

endoffile = """}
"""

instr_str = ""
Expand All @@ -49,13 +54,11 @@ def make_go(instr_dict: InstrDict):
instr_str += f""" case A{i.upper().replace("_","")}:
return &inst{{ {hex(opcode)}, {hex(funct3)}, {hex(rs1)}, {hex(rs2)}, {signed(csr,12)}, {hex(funct7)} }}
"""
for num, name in sorted(csrs, key=lambda row: row[0]):
csrs_map_str += f'{hex(num)} : "{name.upper()}",\n'

with open("inst.go", "w", encoding="utf-8") as file:
file.write(prelude)
file.write(instr_str)
file.write(csrs_map_str)
file.write(endoffile)

try:
subprocess.run(["go", "fmt", "inst.go"], check=True)
except: # pylint: disable=bare-except
pass

0 comments on commit 3c73392

Please sign in to comment.