avr: switch to iterative code for Widget_TreeMatchFlagsAndSendSignalToActive
This commit is contained in:
@@ -1099,6 +1099,8 @@ Widget_TreeMatchOptsAndSendSignalToActive_done:
|
||||
; @param xh param2
|
||||
; @clobbers any, !R16, !R17, !X, !Z
|
||||
|
||||
#if 0
|
||||
; non-iterative routine
|
||||
Widget_TreeMatchFlagsAndSendSignalToActive:
|
||||
push zl
|
||||
push zh
|
||||
@@ -1141,6 +1143,53 @@ Widget_TreeMatchFlagsAndSendSignalToActive_done:
|
||||
ret
|
||||
; @end
|
||||
|
||||
#else
|
||||
; iterative routine
|
||||
|
||||
Widget_TreeMatchFlagsAndSendSignalToActive:
|
||||
rcall OBJ_IsObject
|
||||
brcc Widget_TreeMatchFlagsAndSendSignalToActive_ret
|
||||
rcall widgetTreeMatchFlagsAndSendSignalToActive
|
||||
Widget_TreeMatchFlagsAndSendSignalToActive_ret:
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
widgetTreeMatchFlagsAndSendSignalToActive:
|
||||
push zl
|
||||
push zh
|
||||
; check flags
|
||||
rcall Widget_GetSdramPtr ; (none)
|
||||
ldd r18, Y+WIDGET_SD_OFFS_FLAGS
|
||||
sbrs r18, WIDGET_FLAGS_ACTIVE_BIT
|
||||
rjmp widgetTreeMatchFlagsAndSendSignalToActive_done ; skip inactive branches
|
||||
eor r18, r21 ; XOR with value (1 if different)
|
||||
and r18, r20 ; AND with mask
|
||||
brne widgetTreeMatchFlagsAndSendSignalToActive_l1
|
||||
push r20
|
||||
push r21
|
||||
rcall OBJ_HandleSignalSaveInRegs
|
||||
pop r21
|
||||
pop r20
|
||||
widgetTreeMatchFlagsAndSendSignalToActive_l1:
|
||||
bigcall OBJ_GetFirstChild
|
||||
widgetTreeMatchFlagsAndSendSignalToActive_loop:
|
||||
brcc widgetTreeMatchFlagsAndSendSignalToActive_done
|
||||
mov zl, r18
|
||||
mov zh, r19
|
||||
rcall widgetTreeMatchFlagsAndSendSignalToActive
|
||||
bigcall OBJ_GetNext
|
||||
rjmp widgetTreeMatchFlagsAndSendSignalToActive_loop
|
||||
|
||||
widgetTreeMatchFlagsAndSendSignalToActive_done:
|
||||
pop zh
|
||||
pop zl
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user