| 724 | } |
| 725 | |
| 726 | fn generate_threading_helpers(&mut self) { |
| 727 | let snake = self.world.to_snake_case(); |
| 728 | uwriteln!( |
| 729 | self.src.h_async, |
| 730 | " |
| 731 | void* {snake}_context_get_1(void); |
| 732 | void {snake}_context_set_1(void* value); |
| 733 | uint32_t {snake}_thread_yield_cancellable(void); |
| 734 | uint32_t {snake}_thread_index(void); |
| 735 | uint32_t {snake}_thread_new_indirect(void (*start_function)(void*), void* arg); |
| 736 | void {snake}_thread_suspend_to(uint32_t thread); |
| 737 | uint32_t {snake}_thread_suspend_to_cancellable(uint32_t thread); |
| 738 | void {snake}_thread_suspend_to_suspended(uint32_t thread); |
| 739 | uint32_t {snake}_thread_suspend_to_suspended_cancellable(uint32_t thread); |
| 740 | void {snake}_thread_unsuspend(uint32_t thread); |
| 741 | void {snake}_thread_yield_to_suspended(uint32_t thread); |
| 742 | uint32_t {snake}_thread_yield_to_suspended_cancellable(uint32_t thread); |
| 743 | void {snake}_thread_suspend(void); |
| 744 | uint32_t {snake}_thread_suspend_cancellable(void); |
| 745 | " |
| 746 | ); |
| 747 | uwriteln!( |
| 748 | self.src.c_async, |
| 749 | r#" |
| 750 | __attribute__((__import_module__("$root"), __import_name__("[context-get-1]"))) |
| 751 | extern void* __context_get_1(void); |
| 752 | |
| 753 | void* {snake}_context_get_1(void) {{ |
| 754 | return __context_get_1(); |
| 755 | }} |
| 756 | |
| 757 | __attribute__((__import_module__("$root"), __import_name__("[context-set-1]"))) |
| 758 | extern void __context_set_1(void*); |
| 759 | |
| 760 | void {snake}_context_set_1(void* value) {{ |
| 761 | __context_set_1(value); |
| 762 | }} |
| 763 | |
| 764 | __attribute__((__import_module__("$root"), __import_name__("[cancellable][thread-yield]"))) |
| 765 | extern uint32_t __thread_yield_cancellable(void); |
| 766 | |
| 767 | uint32_t {snake}_thread_yield_cancellable(void) {{ |
| 768 | return __thread_yield_cancellable(); |
| 769 | }} |
| 770 | |
| 771 | __attribute__((__import_module__("$root"), __import_name__("[thread-index]"))) |
| 772 | extern uint32_t __thread_index(void); |
| 773 | |
| 774 | uint32_t {snake}_thread_index(void) {{ |
| 775 | return __thread_index(); |
| 776 | }} |
| 777 | |
| 778 | __attribute__((__import_module__("$root"), __import_name__("[thread-new-indirect-v0]"))) |
| 779 | extern uint32_t __thread_new_indirect(uint32_t, void*); |
| 780 | |
| 781 | uint32_t {snake}_thread_new_indirect(void (*start_function)(void*), void* arg) {{ |
| 782 | return __thread_new_indirect((uint32_t)(uintptr_t)start_function, arg |
| 783 | ); |