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
@@ -123,6 +123,22 @@ def ast_prov(
123123
124124 annotations : List [str ] = [iaddr , "ASR" ]
125125
126+ # low-level assignment
127+
128+ (ll_lhs , _ , _ ) = self .opargs [0 ].ast_lvalue (astree )
129+ (ll_rhs1 , _ , _ ) = self .opargs [1 ].ast_rvalue (astree )
130+ (ll_rhs2 , _ , _ ) = self .opargs [2 ].ast_rvalue (astree )
131+ ll_asr = astree .mk_binary_op ("asr" , ll_rhs1 , ll_rhs2 )
132+
133+ ll_assign = astree .mk_assign (
134+ ll_lhs ,
135+ ll_asr ,
136+ iaddr = iaddr ,
137+ bytestring = bytestring ,
138+ annotations = annotations )
139+
140+ # high-level assignment
141+
126142 lhs = xdata .vars [0 ]
127143 rhs1 = xdata .xprs [0 ]
128144 rhs2 = xdata .xprs [1 ]
@@ -131,43 +147,25 @@ def ast_prov(
131147 defuses = xdata .defuses
132148 defuseshigh = xdata .defuseshigh
133149
134- (ll_lhs , _ , _ ) = self .opargs [0 ].ast_lvalue (astree )
135- (ll_rhs1 , _ , _ ) = self .opargs [1 ].ast_rvalue (astree )
136- (ll_rhs2 , _ , _ ) = self .opargs [2 ].ast_rvalue (astree )
137- ll_asr_expr = astree .mk_binary_op ("asr" , ll_rhs1 , ll_rhs2 )
150+ hl_lhs = XU .xvariable_to_ast_lval (lhs , xdata , iaddr , astree )
151+ hl_rhs = XU .xxpr_to_ast_def_expr (rhs3 , xdata , iaddr , astree )
138152
139- ll_assign = astree .mk_assign (
140- ll_lhs ,
141- ll_asr_expr ,
153+ hl_assign = astree .mk_assign (
154+ hl_lhs ,
155+ hl_rhs ,
142156 iaddr = iaddr ,
143157 bytestring = bytestring ,
144158 annotations = annotations )
145159
146- hl_lhss = XU .xvariable_to_ast_lvals (lhs , xdata , astree )
147- hl_rhss = XU .xxpr_to_ast_exprs (rhs3 , xdata , iaddr , astree )
148- if len (hl_lhss ) == 1 and len (hl_rhss ) == 1 :
149- hl_lhs = hl_lhss [0 ]
150- hl_rhs = hl_rhss [0 ]
151- hl_assign = astree .mk_assign (
152- hl_lhs ,
153- hl_rhs ,
154- iaddr = iaddr ,
155- bytestring = bytestring ,
156- annotations = annotations )
157-
158- astree .add_instr_mapping (hl_assign , ll_assign )
159- astree .add_instr_address (hl_assign , [iaddr ])
160- astree .add_expr_mapping (hl_rhs , ll_asr_expr )
161- astree .add_lval_mapping (hl_lhs , ll_lhs )
162- astree .add_expr_reachingdefs (ll_asr_expr , [rdefs [0 ], rdefs [1 ]])
163- astree .add_expr_reachingdefs (ll_rhs1 , [rdefs [0 ]])
164- astree .add_expr_reachingdefs (ll_rhs2 , [rdefs [1 ]])
165- astree .add_expr_reachingdefs (hl_rhs , rdefs [2 :])
166- astree .add_lval_defuses (hl_lhs , defuses [0 ])
167- astree .add_lval_defuses_high (hl_lhs , defuseshigh [0 ])
168-
169- return ([hl_assign ], [ll_assign ])
170-
171- else :
172- raise UF .CHBError (
173- "ARMArithmeticShiftRight: multiple lval/expressions in ast" )
160+ astree .add_instr_mapping (hl_assign , ll_assign )
161+ astree .add_instr_address (hl_assign , [iaddr ])
162+ astree .add_expr_mapping (hl_rhs , ll_asr )
163+ astree .add_lval_mapping (hl_lhs , ll_lhs )
164+ astree .add_expr_reachingdefs (ll_asr , [rdefs [0 ], rdefs [1 ]])
165+ astree .add_expr_reachingdefs (ll_rhs1 , [rdefs [0 ]])
166+ astree .add_expr_reachingdefs (ll_rhs2 , [rdefs [1 ]])
167+ astree .add_expr_reachingdefs (hl_rhs , rdefs [2 :])
168+ astree .add_lval_defuses (hl_lhs , defuses [0 ])
169+ astree .add_lval_defuses_high (hl_lhs , defuseshigh [0 ])
170+
171+ return ([hl_assign ], [ll_assign ])
0 commit comments