Bases: InterpreterFunctions
Source code in xdsl/interpreters/rv32.py
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 | @register_impls
class Rv32Functions(InterpreterFunctions):
@impl(rv32.LiOp)
def run_li(
self,
interpreter: Interpreter,
op: rv32.LiOp,
args: tuple[Any, ...],
):
results = (RiscvFunctions.get_immediate_value(interpreter, op.immediate),)
return RiscvFunctions.set_reg_values(interpreter, op.results, results)
@impl(rv32.GetRegisterOp)
def run_get_register(
self, interpreter: Interpreter, op: rv32.GetRegisterOp, args: PythonValues
) -> PythonValues:
attr = op.res.type
if not attr.is_allocated:
raise InterpretationError(
f"Cannot get value for unallocated register {attr}"
)
name = attr.register_name
registers = RiscvFunctions.registers(interpreter)
if name not in registers:
raise InterpretationError(f"Value not found for register name {name.data}")
stored_value = registers[name]
return (stored_value,)
|
run_li(interpreter: Interpreter, op: rv32.LiOp, args: tuple[Any, ...])
Source code in xdsl/interpreters/rv32.py
19
20
21
22
23
24
25
26
27 | @impl(rv32.LiOp)
def run_li(
self,
interpreter: Interpreter,
op: rv32.LiOp,
args: tuple[Any, ...],
):
results = (RiscvFunctions.get_immediate_value(interpreter, op.immediate),)
return RiscvFunctions.set_reg_values(interpreter, op.results, results)
|
run_get_register(interpreter: Interpreter, op: rv32.GetRegisterOp, args: PythonValues) -> PythonValues
Source code in xdsl/interpreters/rv32.py
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 | @impl(rv32.GetRegisterOp)
def run_get_register(
self, interpreter: Interpreter, op: rv32.GetRegisterOp, args: PythonValues
) -> PythonValues:
attr = op.res.type
if not attr.is_allocated:
raise InterpretationError(
f"Cannot get value for unallocated register {attr}"
)
name = attr.register_name
registers = RiscvFunctions.registers(interpreter)
if name not in registers:
raise InterpretationError(f"Value not found for register name {name.data}")
stored_value = registers[name]
return (stored_value,)
|