diff --git a/osaca/parser/immediate.py b/osaca/parser/immediate.py index ccf10d1..9879ad2 100644 --- a/osaca/parser/immediate.py +++ b/osaca/parser/immediate.py @@ -10,12 +10,16 @@ class ImmediateOperand(Operand): TYPE_ID=None, VALUE_ID=None, SHIFT_ID=None, + SOURCE=False, + DESTINATION=False ): super().__init__(str(VALUE_ID)) self._IDENTIFIER_ID = IDENTIFIER_ID self._TYPE_ID = TYPE_ID self._VALUE_ID = VALUE_ID self._SHIFT_ID = SHIFT_ID + self._SOURCE = SOURCE + self._DESTINATION = DESTINATION @property def identifier(self): @@ -33,6 +37,22 @@ class ImmediateOperand(Operand): def shift(self): return self._TYPE_ID + @property + def source(self): + return self._SOURCE + + @source.setter + def source(self, source): + self._SOURCE = source + + @property + def destination(self): + return self._DESTINATION + + @destination.setter + def destination(self, destination): + self._DESTINATION = destination + @identifier.setter def identifier(self, identifier): self._IDENTIFIER_ID = identifier diff --git a/osaca/parser/instruction_form.py b/osaca/parser/instruction_form.py index e596614..4e1c4e2 100644 --- a/osaca/parser/instruction_form.py +++ b/osaca/parser/instruction_form.py @@ -8,15 +8,22 @@ class InstructionForm: self, INSTRUCTION_ID=None, OPERANDS_ID=[], + HIDDEN_OPERANDS=[], DIRECTIVE_ID=None, COMMENT_ID=None, LABEL_ID=None, LINE=None, LINE_NUMBER=None, - SEMANTIC_OPERANDS=None, + SEMANTIC_OPERANDS={"source": [], "destination": [], "src_dst": []}, + THROUGHPUT = None, + LATENCY = None, + UOPS = None, + PORT_PRESSURE = None, + BREAKS_DEP = False ): self._INSTRUCTION_ID = INSTRUCTION_ID self._OPERANDS_ID = OPERANDS_ID + self._HIDDEN_OPERANDS = HIDDEN_OPERANDS self._DIRECTIVE_ID = DIRECTIVE_ID self._COMMENT_ID = COMMENT_ID self._LABEL_ID = LABEL_ID @@ -24,14 +31,15 @@ class InstructionForm: self._LINE_NUMBER = LINE_NUMBER self._SEMANTIC_OPERANDS = SEMANTIC_OPERANDS - self._UOPS = None + self._UOPS = UOPS + self._BREAKS_DEP = BREAKS_DEP # self.semantic_operands = {"source": [], "destination": [], "src_dst": []} - self._LATENCY = None - self._THROUGHPUT = None + self._LATENCY = LATENCY + self._THROUGHPUT = THROUGHPUT self._LATENCY_CP = [] self._LATENCY_LCD = [] self._LATENCY_WO_LOAD = None - self._PORT_PRESSURE = [] + self._PORT_PRESSURE = PORT_PRESSURE self._PORT_UOPS = [] self._FLAGS = [] @@ -67,6 +75,10 @@ class InstructionForm: def operands(self): return self._OPERANDS_ID + @property + def hidden_operands(self): + return self._HIDDEN_OPERANDS + @property def port_pressure(self): return self._PORT_PRESSURE @@ -79,6 +91,10 @@ class InstructionForm: def flags(self): return self._FLAGS + @property + def uops(self): + return self._UOPS + @property def throughput(self): return self._THROUGHPUT @@ -91,6 +107,10 @@ class InstructionForm: def latency_wo_load(self): return self._LATENCY_WO_LOAD + @property + def breaks_dep(self): + return self._BREAKS_DEP + @semantic_operands.setter def semantic_operands(self, semantic_operands): self._SEMANTIC_OPERANDS = semantic_operands @@ -111,6 +131,14 @@ class InstructionForm: def operands(self, operands): self._OPERANDS_ID = operands + @hidden_operands.setter + def hidden_operands(self, hidden_operands): + self._HIDDEN_OPERANDS = hidden_operands + + @breaks_dep.setter + def breaks_dep(self, boolean): + self._BREAKS_DEP = boolean + @instruction.setter def instruction(self, instruction): self._INSTRUCTION_ID = instruction @@ -135,6 +163,10 @@ class InstructionForm: def flags(self, flags): self._FLAGS = flags + @uops.setter + def uops(self, uops): + self._UOPS = uops + @throughput.setter def throughput(self, throughput): self._THROUGHPUT = throughput