From 95ee572b4d0853a2651b53a61de7412de28888fc Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Fri, 4 Apr 2025 08:18:42 +0200 Subject: [PATCH] internal/task: rename tinygo_pause to tinygo_task_exit This is more descriptive: the call is to exit a task, not to pause it. This also makes it more obvious that there's an optimization opportunity: to free the stack explicitly after the goroutine returns (or to keep it as a cache for the next stack allocation). --- src/internal/task/task_stack.go | 5 +++-- src/internal/task/task_stack_386.S | 2 +- src/internal/task/task_stack_amd64.S | 4 ++-- src/internal/task/task_stack_amd64_windows.S | 2 +- src/internal/task/task_stack_arm.S | 2 +- src/internal/task/task_stack_arm64.S | 4 ++-- src/internal/task/task_stack_avr.S | 4 ++-- src/internal/task/task_stack_cortexm.S | 2 +- src/internal/task/task_stack_esp32.S | 2 +- src/internal/task/task_stack_esp8266.S | 2 +- src/internal/task/task_stack_mipsx.S | 2 +- src/internal/task/task_stack_tinygoriscv.S | 2 +- 12 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/internal/task/task_stack.go b/src/internal/task/task_stack.go index 88a097068..74a0a8c7c 100644 --- a/src/internal/task/task_stack.go +++ b/src/internal/task/task_stack.go @@ -54,8 +54,9 @@ func Pause() { currentTask.state.pause() } -//export tinygo_pause -func pause() { +//export tinygo_task_exit +func taskExit() { + // TODO: explicitly free the stack after switching back to the scheduler. Pause() } diff --git a/src/internal/task/task_stack_386.S b/src/internal/task/task_stack_386.S index c82213e98..402e9e50f 100644 --- a/src/internal/task/task_stack_386.S +++ b/src/internal/task/task_stack_386.S @@ -24,7 +24,7 @@ tinygo_startTask: addl $4, %esp // After return, exit this goroutine. This is a tail call. - jmp tinygo_pause + jmp tinygo_task_exit .cfi_endproc .global tinygo_swapTask diff --git a/src/internal/task/task_stack_amd64.S b/src/internal/task/task_stack_amd64.S index f9182d49f..8a2c23f5b 100644 --- a/src/internal/task/task_stack_amd64.S +++ b/src/internal/task/task_stack_amd64.S @@ -30,9 +30,9 @@ tinygo_startTask: // After return, exit this goroutine. This is a tail call. #ifdef __MACH__ - jmp _tinygo_pause + jmp _tinygo_task_exit #else - jmp tinygo_pause + jmp tinygo_task_exit #endif .cfi_endproc diff --git a/src/internal/task/task_stack_amd64_windows.S b/src/internal/task/task_stack_amd64_windows.S index 30654e504..50c684121 100644 --- a/src/internal/task/task_stack_amd64_windows.S +++ b/src/internal/task/task_stack_amd64_windows.S @@ -22,7 +22,7 @@ tinygo_startTask: // After return, exit this goroutine. // This has to be a call, not a jump, to keep the stack correctly aligned. - callq tinygo_pause + callq tinygo_task_exit .global tinygo_swapTask .section .text.tinygo_swapTask,"ax" diff --git a/src/internal/task/task_stack_arm.S b/src/internal/task/task_stack_arm.S index 81a5aa8a0..5ba9961dc 100644 --- a/src/internal/task/task_stack_arm.S +++ b/src/internal/task/task_stack_arm.S @@ -28,7 +28,7 @@ tinygo_startTask: blx r4 // After return, exit this goroutine. This is a tail call. - bl tinygo_pause + bl tinygo_task_exit .cfi_endproc .size tinygo_startTask, .-tinygo_startTask diff --git a/src/internal/task/task_stack_arm64.S b/src/internal/task/task_stack_arm64.S index 597d342c7..924b74a66 100644 --- a/src/internal/task/task_stack_arm64.S +++ b/src/internal/task/task_stack_arm64.S @@ -27,9 +27,9 @@ tinygo_startTask: // After return, exit this goroutine. This is a tail call. #ifdef __MACH__ - b _tinygo_pause + b _tinygo_task_exit #else - b tinygo_pause + b tinygo_task_exit #endif .cfi_endproc #ifndef __MACH__ diff --git a/src/internal/task/task_stack_avr.S b/src/internal/task/task_stack_avr.S index d8aed8b96..6b3812770 100644 --- a/src/internal/task/task_stack_avr.S +++ b/src/internal/task/task_stack_avr.S @@ -32,10 +32,10 @@ tinygo_startTask: // Note that they will probably not be able to run more than the main // goroutine anyway, but this file is compiled for all AVRs so it needs to // compile at least. - rcall tinygo_pause + rcall tinygo_task_exit #else // Other devices can (and must) use the regular call instruction. - call tinygo_pause + call tinygo_task_exit #endif .global tinygo_swapTask diff --git a/src/internal/task/task_stack_cortexm.S b/src/internal/task/task_stack_cortexm.S index dfe713552..8e6520106 100644 --- a/src/internal/task/task_stack_cortexm.S +++ b/src/internal/task/task_stack_cortexm.S @@ -28,7 +28,7 @@ tinygo_startTask: blx r4 // After return, exit this goroutine. This is a tail call. - bl tinygo_pause + bl tinygo_task_exit .cfi_endproc .size tinygo_startTask, .-tinygo_startTask diff --git a/src/internal/task/task_stack_esp32.S b/src/internal/task/task_stack_esp32.S index fe0afe98d..f07f7e3ae 100644 --- a/src/internal/task/task_stack_esp32.S +++ b/src/internal/task/task_stack_esp32.S @@ -27,7 +27,7 @@ tinygo_startTask: callx4 a3 // After return, exit this goroutine. This call never returns. - call4 tinygo_pause + call4 tinygo_task_exit .section .text.tinygo_swapTask,"ax",@progbits .global tinygo_swapTask diff --git a/src/internal/task/task_stack_esp8266.S b/src/internal/task/task_stack_esp8266.S index 07f4e2659..9dd64b1ff 100644 --- a/src/internal/task/task_stack_esp8266.S +++ b/src/internal/task/task_stack_esp8266.S @@ -18,7 +18,7 @@ tinygo_startTask: callx0 a12 // After return, exit this goroutine. This is a tail call. - call0 tinygo_pause + call0 tinygo_task_exit .size tinygo_startTask, .-tinygo_startTask .global tinygo_swapTask diff --git a/src/internal/task/task_stack_mipsx.S b/src/internal/task/task_stack_mipsx.S index 018c63d93..afd1d7ea9 100644 --- a/src/internal/task/task_stack_mipsx.S +++ b/src/internal/task/task_stack_mipsx.S @@ -22,7 +22,7 @@ tinygo_startTask: nop // After return, exit this goroutine. This is a tail call. - j tinygo_pause + j tinygo_task_exit nop .section .text.tinygo_swapTask diff --git a/src/internal/task/task_stack_tinygoriscv.S b/src/internal/task/task_stack_tinygoriscv.S index 5f6127427..ae8b32b9d 100644 --- a/src/internal/task/task_stack_tinygoriscv.S +++ b/src/internal/task/task_stack_tinygoriscv.S @@ -19,7 +19,7 @@ tinygo_startTask: jalr s0 // After return, exit this goroutine. This is a tail call. - tail tinygo_pause + tail tinygo_task_exit .section .text.tinygo_swapTask .global tinygo_swapTask