@@ -1384,6 +1384,55 @@ GC_API void GC_CALL GC_push_all(void *bottom, void *top)
1384
1384
GC_mark_stack_top -> mse_descr .w = length ;
1385
1385
}
1386
1386
1387
+ GC_API void GC_CALL GC_push_proc (GC_word proc , void * start )
1388
+ {
1389
+ GC_mark_stack_top ++ ;
1390
+ if ((word )GC_mark_stack_top >= (word )GC_mark_stack_limit ) {
1391
+ GC_mark_stack_top = GC_signal_mark_stack_overflow (GC_mark_stack_top );
1392
+ }
1393
+ GC_mark_stack_top -> mse_descr .w = proc ;
1394
+ GC_mark_stack_top -> mse_start = (ptr_t )start ;
1395
+ }
1396
+
1397
+ GC_API struct GC_ms_entry * GC_CALL GC_custom_push_range (void * bottom , void * top ,
1398
+ struct GC_ms_entry * mark_stack_ptr ,
1399
+ struct GC_ms_entry * mark_stack_limit )
1400
+ {
1401
+ word length ;
1402
+
1403
+ bottom = (void * )(((word )bottom + ALIGNMENT - 1 ) & ~(ALIGNMENT - 1 ));
1404
+ top = (void * )((word )top & ~(ALIGNMENT - 1 ));
1405
+ if ((word )bottom >= (word )top ) return mark_stack_ptr ;
1406
+
1407
+ mark_stack_ptr ++ ;
1408
+ if ((word )mark_stack_ptr >= (word )mark_stack_limit ) {
1409
+ mark_stack_ptr = GC_signal_mark_stack_overflow (mark_stack_ptr );
1410
+ }
1411
+ length = (word )top - (word )bottom ;
1412
+ # if GC_DS_TAGS > ALIGNMENT - 1
1413
+ length += GC_DS_TAGS ;
1414
+ length &= ~GC_DS_TAGS ;
1415
+ # endif
1416
+ mark_stack_ptr -> mse_start = (ptr_t )bottom ;
1417
+ mark_stack_ptr -> mse_descr .w = length ;
1418
+
1419
+ return mark_stack_ptr ;
1420
+ }
1421
+
1422
+ GC_API struct GC_ms_entry * GC_CALL GC_custom_push_proc (GC_word proc , void * start ,
1423
+ struct GC_ms_entry * mark_stack_ptr ,
1424
+ struct GC_ms_entry * mark_stack_limit )
1425
+ {
1426
+ mark_stack_ptr ++ ;
1427
+ if ((word )mark_stack_ptr >= (word )mark_stack_limit ) {
1428
+ mark_stack_ptr = GC_signal_mark_stack_overflow (mark_stack_ptr );
1429
+ }
1430
+ mark_stack_ptr -> mse_descr .w = proc ;
1431
+ mark_stack_ptr -> mse_start = (ptr_t )start ;
1432
+
1433
+ return mark_stack_ptr ;
1434
+ }
1435
+
1387
1436
#ifndef GC_DISABLE_INCREMENTAL
1388
1437
1389
1438
/* Analogous to the above, but push only those pages h with */
0 commit comments