Skip to content

Commit cccecf7

Browse files
committed
Reducing reg access time by removing a check that is no lonfer needed
1 parent e53290d commit cccecf7

File tree

1 file changed

+7
-11
lines changed

1 file changed

+7
-11
lines changed

qiling/arch/register.py

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,19 @@ class QlRegisterManager:
1616
"""
1717

1818
def __init__(self, ql: Qiling):
19-
self.register_mapping: MutableMapping[str, int] = {}
19+
# this funny way of initialization is used to avoid calling self setattr and
20+
# getattr upon init. if it did, it would go into an endless recursion
21+
self.register_mapping: MutableMapping[str, int]
22+
super().__setattr__('register_mapping', {})
23+
2024
self.ql = ql
2125
self.uc_pc = 0
2226
self.uc_sp = 0
2327

2428
def __getattr__(self, name: str) -> Any:
2529
name = name.lower()
2630

27-
# this is checked first to prevent endless recursion upon init
28-
if name == 'register_mapping':
29-
return super().__getattribute__(name)
30-
31-
elif name in self.register_mapping:
31+
if name in self.register_mapping:
3232
return self.ql.uc.reg_read(self.register_mapping[name])
3333

3434
else:
@@ -38,11 +38,7 @@ def __getattr__(self, name: str) -> Any:
3838
def __setattr__(self, name: str, value: Any):
3939
name = name.lower()
4040

41-
# this is checked first to prevent endless recursion upon init
42-
if name == 'register_mapping':
43-
super().__setattr__(name, value)
44-
45-
elif name in self.register_mapping:
41+
if name in self.register_mapping:
4642
self.ql.uc.reg_write(self.register_mapping[name], value)
4743

4844
else:

0 commit comments

Comments
 (0)