Changeset 636d115b
- Timestamp:
- Aug 21, 2020, 7:44:29 AM (4 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- c5cbc099
- Parents:
- d685cb0
- Location:
- libcfa/src/concurrency
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/CtxSwitch-i386.S
rd685cb0 r636d115b 10 10 // Created On : Tue Dec 6 12:27:26 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Jul 21 22:29:25 2017 13 // Update Count : 1 14 // 15 // This library is free software; you can redistribute it and/or modify it 16 // under the terms of the GNU Lesser General Public License as published by the 17 // Free Software Foundation; either version 2.1 of the License, or (at your 18 // option) any later version. 19 // 20 // This library is distributed in the hope that it will be useful, but WITHOUT 21 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 22 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 23 // for more details. 24 // 25 // You should have received a copy of the GNU Lesser General Public License 26 // along with this library. 12 // Last Modified On : Sun Aug 16 08:46:22 2020 13 // Update Count : 4 27 14 // 28 15 29 // This context switch routine depends on the fact that the stack of a new 30 // thread has been set up to look like the thread has saved its context in 31 // the normal manner. 32 // 33 // void CtxSwitch( machine_context *from, machine_context *to ); 16 // The context switch routine requires the initial the stack of a thread to 17 // look like the thread has saved its context in the normal manner. 34 18 35 // Offsets in the context structure. This needs to be synchronized with the 36 // high level code a little better. 19 // Offsets must synchronized with the __stack_context_t in invoke.h. 37 20 38 21 #define PTR_BYTE 4 39 22 #define SP_OFFSET ( 0 * PTR_BYTE ) 40 23 #define FP_OFFSET ( 1 * PTR_BYTE ) 41 #define PC_OFFSET ( 2 * PTR_BYTE )42 24 25 // Context switch between coroutines/tasks. 26 // void __cfactx_switch( struct __stack_context_t * from, struct __stack_context_t * to ) ; 27 // Arguments "from" in register 4(%esp), "to" in register 20(%esp) 28 29 .file "CtxSwitch-i386.S" 43 30 .text 44 31 .align 2 45 .glob l __cfactx_switch46 .type 32 .global __cfactx_switch 33 .type __cfactx_switch, @function 47 34 __cfactx_switch: 48 35 … … 83 70 84 71 ret 85 .size 72 .size __cfactx_switch, .-__cfactx_switch 86 73 87 74 // Local Variables: // -
libcfa/src/concurrency/CtxSwitch-x86_64.S
rd685cb0 r636d115b 7 7 // CtxSwitch-x86_64.S -- 8 8 // 9 // Author : Thierry Delisle10 // Created On : Mon Nov 28 12:27:26 20169 // Author : Peter A. Buhr 10 // Created On : Mon Aug 10 08:10:26 2020 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Jul 21 22:28:11 2017 13 // Update Count : 1 14 // 15 // This library is free software; you can redistribute it and/or modify it 16 // under the terms of the GNU Lesser General Public License as published by the 17 // Free Software Foundation; either version 2.1 of the License, or (at your 18 // option) any later version. 19 // 20 // This library is distributed in the hope that it will be useful, but WITHOUT 21 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 22 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 23 // for more details. 24 // 25 // You should have received a copy of the GNU Lesser General Public License 26 // along with this library. 12 // Last Modified On : Thu Aug 20 18:09:32 2020 13 // Update Count : 9 27 14 // 28 15 29 // This context switch routine depends on the fact that the stack of a new 30 // thread has been set up to look like the thread has saved its context in 31 // the normal manner. 32 // 33 // void CtxSwitch( machine_context *from, machine_context *to ); 16 // The context switch routine requires the initial the stack of a thread to 17 // look like the thread has saved its context in the normal manner. 34 18 35 // Offsets in the context structure. This needs to be synchronized with the 36 // high level code a little better. 19 // Offsets must synchronized with the __stack_context_t in invoke.h. 37 20 38 21 #define PTR_BYTE 8 … … 40 23 #define FP_OFFSET ( 1 * PTR_BYTE ) 41 24 42 //----------------------------------------------------------------------------- 43 // Regular context switch routine which enables switching from one context to anouther 25 // Context switch between coroutines/tasks. 26 // void __cfactx_switch( struct __stack_context_t * from, struct __stack_context_t * to ) ; 27 // Arguments "from" in register rdi, "to" in register rsi. 28 29 .file "CtxSwitch-x86_64.S" 44 30 .text 45 31 .align 2 46 .glob l __cfactx_switch47 .type 32 .global __cfactx_switch 33 .type __cfactx_switch, @function 48 34 __cfactx_switch: 49 35 … … 77 63 78 64 ret 79 .size 65 .size __cfactx_switch, .-__cfactx_switch 80 66 81 //----------------------------------------------------------------------------- 82 // Stub used to create new stacks which are ready to be context switched to 67 // Stub to create new stacks which can be context switched to 68 // void __cfactx_invoke_stub( void ); 69 83 70 .text 84 71 .align 2 85 .glob l __cfactx_invoke_stub86 .type 72 .global __cfactx_invoke_stub 73 .type __cfactx_invoke_stub, @function 87 74 __cfactx_invoke_stub: 88 movq %rbx, %rdi 75 movq %rbx, %rdi // move main and this to first two arguments 89 76 movq %r12, %rsi 90 jmp *%r13 91 .size 77 jmp *%r13 // jmp to invoke 78 .size __cfactx_invoke_stub, .-__cfactx_invoke_stub 92 79 93 80 // Local Variables: //
Note: See TracChangeset
for help on using the changeset viewer.