Skip to content

Rv64

rv64

Rv64Functions dataclass

Bases: InterpreterFunctions

Source code in xdsl/interpreters/rv64.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 Rv64Functions(InterpreterFunctions):
    @impl(rv64.LiOp)
    def run_li(
        self,
        interpreter: Interpreter,
        op: rv64.LiOp,
        args: tuple[Any, ...],
    ):
        results = (RiscvFunctions.get_immediate_value(interpreter, op.immediate),)
        return RiscvFunctions.set_reg_values(interpreter, op.results, results)

    @impl(rv64.GetRegisterOp)
    def run_get_register(
        self, interpreter: Interpreter, op: rv64.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: rv64.LiOp, args: tuple[Any, ...])

Source code in xdsl/interpreters/rv64.py
19
20
21
22
23
24
25
26
27
@impl(rv64.LiOp)
def run_li(
    self,
    interpreter: Interpreter,
    op: rv64.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: rv64.GetRegisterOp, args: PythonValues) -> PythonValues

Source code in xdsl/interpreters/rv64.py
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
@impl(rv64.GetRegisterOp)
def run_get_register(
    self, interpreter: Interpreter, op: rv64.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,)