Add ISA-dependent settings for RISC-V.
This commit is contained in:
@@ -27,7 +27,7 @@ RV32G / RV64G
|
||||
|
||||
import defs
|
||||
import encodings
|
||||
import settings
|
||||
|
||||
# Re-export the primary target ISA definition.
|
||||
isa = defs.isa
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
RISC-V Encodings.
|
||||
"""
|
||||
from cretonne import base
|
||||
from cretonne.types import i32, i64
|
||||
from defs import RV32, RV64
|
||||
from recipes import OP, R
|
||||
|
||||
|
||||
@@ -18,27 +18,33 @@ from cretonne.formats import Binary
|
||||
# Encbits for the 32-bit recipes are opcode[6:2] | (funct3 << 5) | ...
|
||||
# The functions below encode the encbits.
|
||||
|
||||
|
||||
def LOAD(funct3):
|
||||
assert funct3 <= 0b111
|
||||
return 0b00000 | (funct3 << 5)
|
||||
|
||||
|
||||
def STORE(funct3):
|
||||
assert funct3 <= 0b111
|
||||
return 0b01000 | (funct3 << 5)
|
||||
|
||||
|
||||
def BRANCH(funct3):
|
||||
assert funct3 <= 0b111
|
||||
return 0b11000 | (funct3 << 5)
|
||||
|
||||
|
||||
def OPIMM(funct3):
|
||||
assert funct3 <= 0b111
|
||||
return 0b00100 | (funct3 << 5)
|
||||
|
||||
|
||||
def OP(funct3, funct7):
|
||||
assert funct3 <= 0b111
|
||||
assert funct7 <= 0b1111111
|
||||
return 0b01100 | (funct3 << 5) | (funct7 << 8)
|
||||
|
||||
|
||||
# R-type 32-bit instructions: These are mostly binary arithmetic instructions.
|
||||
# The encbits are `opcode[6:2] | (funct3 << 5) | (funct7 << 8)
|
||||
R = EncRecipe('R', Binary)
|
||||
|
||||
15
meta/isa/riscv/settings.py
Normal file
15
meta/isa/riscv/settings.py
Normal file
@@ -0,0 +1,15 @@
|
||||
"""
|
||||
RISC-V settings.
|
||||
"""
|
||||
|
||||
from cretonne import SettingGroup, BoolSetting
|
||||
from defs import isa
|
||||
|
||||
isa.settings = SettingGroup('riscv')
|
||||
|
||||
supports_m = BoolSetting("CPU supports the 'M' extension (mul/div)")
|
||||
supports_a = BoolSetting("CPU supports the 'A' extension (atomics)")
|
||||
supports_f = BoolSetting("CPU supports the 'F' extension (float)")
|
||||
supports_d = BoolSetting("CPU supports the 'D' extension (double)")
|
||||
|
||||
isa.settings.close(globals())
|
||||
Reference in New Issue
Block a user