44# ------------------------------------------------------------------------------
55# The MIT License (MIT)
66#
7- # Copyright (c) 2021-2023 Aarno Labs LLC
7+ # Copyright (c) 2021-2024 Aarno Labs LLC
88#
99# Permission is hereby granted, free of charge, to any person obtaining a copy
1010# of this software and associated documentation files (the "Software"), to deal
@@ -118,12 +118,6 @@ def ast_prov(
118118
119119 annotations : List [str ] = [iaddr , "EOR" ]
120120
121- lhs = xdata .vars [0 ]
122- rhs = xdata .xprs [3 ]
123- rdefs = xdata .reachingdefs
124- defuses = xdata .defuses
125- defuseshigh = xdata .defuseshigh
126-
127121 (ll_lhs , _ , _ ) = self .operands [0 ].ast_lvalue (astree )
128122 (ll_op1 , _ , _ ) = self .operands [0 ].ast_rvalue (astree )
129123 (ll_op2 , _ , _ ) = self .operands [0 ].ast_rvalue (astree )
@@ -136,27 +130,20 @@ def ast_prov(
136130 bytestring = bytestring ,
137131 annotations = annotations )
138132
139- lhsasts = XU .xvariable_to_ast_lvals (lhs , xdata , astree )
140- if len (lhsasts ) == 0 :
141- raise UF .CHBError ("BitwiseExclusiveOr (EOR): no lval found" )
142-
143- if len (lhsasts ) > 1 :
144- raise UF .CHBError (
145- "BitwiseExclusiveOr (EOR): multiple lvals found: "
146- + ", " .join (str (v ) for v in lhsasts ))
133+ rdefs = xdata .reachingdefs
147134
148- hl_lhs = lhsasts [0 ]
135+ astree .add_expr_reachingdefs (ll_op1 , [rdefs [0 ]])
136+ astree .add_expr_reachingdefs (ll_op2 , [rdefs [1 ]])
149137
150- rhsasts = XU .xxpr_to_ast_def_exprs (rhs , xdata , iaddr , astree )
151- if len (rhsasts ) == 0 :
152- raise UF .CHBError ("BitwiseExclusiveOr (EOR): no lval found" )
138+ # high-level assignment
153139
154- if len ( rhsasts ) > 1 :
155- raise UF . CHBError (
156- "BitwiseExclusiveOr (EOR): multiple rhs values found: "
157- + ", " . join ( str ( v ) for v in rhsasts ))
140+ lhs = xdata . vars [ 0 ]
141+ rhs = xdata . xprs [ 3 ]
142+ defuses = xdata . defuses
143+ defuseshigh = xdata . defuseshigh
158144
159- hl_rhs = rhsasts [0 ]
145+ hl_lhs = XU .xvariable_to_ast_lval (lhs , xdata , iaddr , astree )
146+ hl_rhs = XU .xxpr_to_ast_def_expr (rhs , xdata , iaddr , astree )
160147
161148 hl_assign = astree .mk_assign (
162149 hl_lhs ,
@@ -165,13 +152,12 @@ def ast_prov(
165152 bytestring = bytestring ,
166153 annotations = annotations )
167154
168- astree .add_reg_definition (iaddr , hl_lhs , hl_rhs )
169155 astree .add_instr_mapping (hl_assign , ll_assign )
170156 astree .add_instr_address (hl_assign , [iaddr ])
171157 astree .add_expr_mapping (hl_rhs , ll_rhs )
172158 astree .add_lval_mapping (hl_lhs , ll_lhs )
173- astree .add_expr_reachingdefs (ll_op1 , [ rdefs [0 ] ])
174- astree .add_expr_reachingdefs (ll_op2 , [ rdefs [1 ] ])
159+ astree .add_expr_reachingdefs (hl_rhs , rdefs [2 : ])
160+ astree .add_expr_reachingdefs (ll_rhs , rdefs [: 2 ])
175161 astree .add_lval_defuses (hl_lhs , defuses [0 ])
176162 astree .add_lval_defuses_high (hl_lhs , defuseshigh [0 ])
177163
0 commit comments