5151
5252
5353class ARMMoveXData (ARMOpcodeXData ):
54+ """Data format:
55+ - variables:
56+ 0: vrd
57+
58+ - expressions:
59+ 0: xrm
60+ 1: result
61+
62+ - c expressions:
63+ 0: cresult
64+ """
5465
5566 def __init__ (self , xdata : InstrXData ) -> None :
5667 ARMOpcodeXData .__init__ (self , xdata )
@@ -67,9 +78,23 @@ def xrm(self) -> "XXpr":
6778 def result (self ) -> "XXpr" :
6879 return self .xpr (1 , "result" )
6980
81+ @property
82+ def is_result_ok (self ) -> bool :
83+ return self .is_xpr_ok (1 )
84+
85+ @property
86+ def cresult (self ) -> "XXpr" :
87+ return self .cxpr (0 , "cresult" )
88+
89+ @property
90+ def is_cresult_ok (self ) -> bool :
91+ return self .is_cxpr_ok (0 )
92+
7093 @property
7194 def annotation (self ) -> str :
72- assignment = str (self .vrd ) + " := " + str (self .result )
95+ cx = " (C: " + (str (self .cresult ) if self .is_cresult_ok else "None" ) + ")"
96+ rhs = str (self .result ) if self .is_result_ok else str (self .xrm )
97+ assignment = str (self .vrd ) + " := " + rhs + cx
7398 return self .add_instruction_condition (assignment )
7499
75100
@@ -87,11 +112,8 @@ class ARMMove(ARMOpcode):
87112 args[3]: is-wide (thumb)
88113 args[4]: wide
89114
90- xdata format: a:vxxrdh
91- ----------------------
92- vars[0]: lhs
93- xprs[0]: rhs
94- xprs[1]: rhs (simplified)
115+ xdata format
116+ ------------
95117 rdefs[0]: rhs
96118 rdefs[1..]: rhs (simplified)
97119 uses[0]: lhs
@@ -134,10 +156,7 @@ def annotation(self, xdata: InstrXData) -> str:
134156 return "NOP"
135157
136158 xd = ARMMoveXData (xdata )
137- if xd .is_ok :
138- return xd .annotation
139- else :
140- return "Error value"
159+ return xd .annotation
141160
142161 def ast_prov_subsumed (
143162 self ,
@@ -178,7 +197,6 @@ def ast_prov(
178197 xdata : InstrXData ) -> Tuple [
179198 List [AST .ASTInstruction ], List [AST .ASTInstruction ]]:
180199
181- xd = ARMMoveXData (xdata )
182200 annotations : List [str ] = [iaddr , "MOV" ]
183201
184202 if xdata .is_nop :
@@ -208,12 +226,16 @@ def ast_prov(
208226
209227 # high-level assignment
210228
211- if not xd .is_ok :
212- chklogger .logger .error ("Error value encountered at %s" , iaddr )
213- return ([], [])
229+ xd = ARMMoveXData (xdata )
230+
231+ if xd .is_cresult_ok :
232+ rhs = xd .cresult
233+ elif xd .is_result_ok :
234+ rhs = xd .result
235+ else :
236+ rhs = xd .xrm
214237
215238 lhs = xd .vrd
216- rhs = xd .result
217239 rdefs = xdata .reachingdefs
218240 defuses = xdata .defuses
219241 defuseshigh = xdata .defuseshigh
0 commit comments