On 20/11/2021 19:36, Gedare Bloom wrote:
+void _RBTree_Append( RBTree_Control *the_rbtree, RBTree_Node *the_node )
+{
+  RBTree_Node **link;
+  RBTree_Node  *parent;
+
+  link = _RBTree_Root_reference( the_rbtree );
+  parent = NULL;
+
+  while ( *link != NULL ) {
+    parent = *link;
+    link = _RBTree_Right_reference( parent );
+  }
+
+  _RBTree_Add_child( the_node, parent, link );
+  _RBTree_Insert_color( the_rbtree, the_node );
+}
Can this be simplified?
RBTree_Node *p = _RBTree_Maximum( the_rbtree );
RBTree_Insert_with_parent( the_rbtree, the_node, p,
_RBTree_Right_reference( p ) );

From a high level point of view, yes. However, the _RBTree_Maximum() needs a function call and the proposed approach allows a tail call optimization. For example on ARM we have:

        .type   _RBTree_Append, %function
_RBTree_Append:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        ldr     r3, [r0]
        cbz     r3, .L2
.L3:
        mov     r2, r3
        ldr     r3, [r3, #4]
        cmp     r3, #0
        bne     .L3
        add     ip, r2, #4
.L4:
        movs    r3, #0
        strd    r3, r2, [r1, #4]
        str     r3, [r1]
        movs    r3, #1
        str     r3, [r1, #12]
        str     r1, [ip]
        b       _RBTree_Insert_color
.L2:
        mov     ip, r0
        mov     r2, r3
        b       .L4
        .size   _RBTree_Append, .-_RBTree_Append
.ident "GCC: (GNU) 10.3.1 20210409 (RTEMS 6, RSB a1f7b3b60e5c532a46e728c8606d2fe5bcb3a562, Newlib 4f81149)"


--
embedded brains GmbH
Herr Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.hu...@embedded-brains.de
phone: +49-89-18 94 741 - 16
fax:   +49-89-18 94 741 - 08

Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to