mirror of
https://github.com/RRZE-HPC/OSACA.git
synced 2025-12-16 17:10:06 +01:00
112 lines
3.0 KiB
Python
112 lines
3.0 KiB
Python
#!/usr/bin/env python3
|
|
|
|
from osaca.parser.operand import Operand
|
|
|
|
class MemoryOperand(Operand):
|
|
def __init__(self, OFFSET_ID = None, BASE_ID = None, INDEX_ID = None
|
|
, SCALE_ID = 1, SEGMENT_EXT_ID = None, MASK = None, PRE_INDEXED = False
|
|
, POST_INDEXED = False, INDEXED_VAL = None):
|
|
super().__init__('memory')
|
|
self._OFFSET_ID = OFFSET_ID
|
|
self._BASE_ID = BASE_ID
|
|
self._INDEX_ID = INDEX_ID
|
|
self._SCALE_ID = SCALE_ID
|
|
self._SEGMENT_EXT_ID = SEGMENT_EXT_ID
|
|
self._MASK = MASK
|
|
self._PRE_INDEXED = PRE_INDEXED
|
|
self._POST_INDEXED = POST_INDEXED
|
|
self._INDEXED_VAL = INDEXED_VAL
|
|
|
|
@property
|
|
def offset(self):
|
|
return self._OFFSET_ID
|
|
|
|
@property
|
|
def immediate(self):
|
|
return self._IMMEDIATE_ID
|
|
|
|
@property
|
|
def base(self):
|
|
return self._BASE_ID
|
|
|
|
@property
|
|
def index(self):
|
|
return self._INDEX_ID
|
|
|
|
@property
|
|
def scale(self):
|
|
return self._SCALE_ID
|
|
|
|
@property
|
|
def segment_ext_id(self):
|
|
return self._SEGMENT_EXT_ID
|
|
|
|
@property
|
|
def mask(self):
|
|
return self._MASK
|
|
|
|
@property
|
|
def pre_indexed(self):
|
|
return self._PRE_INDEXED
|
|
|
|
@property
|
|
def post_indexed(self):
|
|
return self._POST_INDEXED
|
|
|
|
@property
|
|
def indexed_val(self):
|
|
return self._INDEXED_VAL
|
|
|
|
@segment_ext_id.setter
|
|
def segment_ext_id(self, segment):
|
|
self._SEGMENT_EXT_ID= segment
|
|
|
|
@offset.setter
|
|
def offset(self, offset):
|
|
self._OFFSET_ID = offset
|
|
|
|
@base.setter
|
|
def base(self, base):
|
|
self._BASE_ID = base
|
|
|
|
@index.setter
|
|
def index(self, index):
|
|
self._INDEX_ID = index
|
|
|
|
@scale.setter
|
|
def scale(self, scale):
|
|
self._SCALE_ID = scale
|
|
|
|
@mask.setter
|
|
def mask(self, mask):
|
|
self._MASK = mask
|
|
|
|
@pre_indexed.setter
|
|
def pre_indexed(self, pre_indexed):
|
|
self._PRE_INDEXED = pre_indexed
|
|
|
|
@post_indexed.setter
|
|
def post_indexed(self, post_indexed):
|
|
self._POST_INDEXED = post_indexed
|
|
|
|
@indexed_val.setter
|
|
def indexed_val(self, value):
|
|
self._INDEXED_VAL = value
|
|
|
|
def __str__(self):
|
|
return (
|
|
f"MemoryOperand(NAME_ID={self._NAME_ID}, OFFSET_ID={self._OFFSET_ID}, "
|
|
f"BASE_ID={self._BASE_ID}, INDEX_ID={self._INDEX_ID}, SCALE_ID={self._SCALE_ID}, "
|
|
f"SEGMENT_EXT_ID={self._SEGMENT_EXT_ID}, MASK={self._MASK}, "
|
|
f"PRE_INDEXED={self._PRE_INDEXED}, POST_INDEXED={self._POST_INDEXED}, "
|
|
f"INDEXED_VAL={self._INDEXED_VAL})"
|
|
)
|
|
|
|
def __repr__(self):
|
|
return (
|
|
f"MemoryOperand(NAME_ID={self._NAME_ID}, OFFSET_ID={self._OFFSET_ID}, "
|
|
f"BASE_ID={self._BASE_ID}, INDEX_ID={self._INDEX_ID}, SCALE_ID={self._SCALE_ID}, "
|
|
f"SEGMENT_EXT_ID={self._SEGMENT_EXT_ID}, MASK={self._MASK}, "
|
|
f"PRE_INDEXED={self._PRE_INDEXED}, POST_INDEXED={self._POST_INDEXED}, "
|
|
f"INDEXED_VAL={self._INDEXED_VAL})"
|
|
) |