about summary refs log tree commit diff stats
path: root/arch/arch.py
blob: f2be5cba1f91bf7efa6cf52bbfdb8a06bf146bb1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from typing import Iterable

class Arch():
    def __init__(self, archname: str, regnames: Iterable[str]):
        self.archname = archname
        self.regnames = set(name.upper() for name in regnames)

    def to_regname(self, name: str) -> str | None:
        """Transform a string into a standard register name.

        Override to implement things like name aliases etc.

        :param name: The possibly non-standard name to look up.
        :return: The 'corrected' register name, or None if `name` cannot be
                 transformed into a register name.
        """
        name = name.upper()
        if name in self.regnames:
            return name
        return None

    def __eq__(self, other):
        return self.archname == other.archname

    def __repr__(self) -> str:
        return self.archname