Changeset 58fe85a for libcfa/src/concurrency/CtxSwitch-i386.S
- Timestamp:
- Jan 7, 2021, 3:27:00 PM (5 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 2b4daf2, 64aeca0
- Parents:
- 3c64c668 (diff), eef8dfb (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/CtxSwitch-i386.S
r3c64c668 r58fe85a 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 Sep 6 18:23:37 2020 13 // Update Count : 5 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 49 36 // Copy the "from" context argument from the stack to register eax 50 // Return address is at 0(%esp), with parameters following 37 // Return address is at 0(%esp), with parameters following. 51 38 52 39 movl 4(%esp),%eax … … 63 50 movl %ebp,FP_OFFSET(%eax) 64 51 65 // Copy the "to" context argument from the stack to register eax 66 // Having pushed three words (= 12 bytes) on the stack, the67 // argument is now at 8 + 12 = 20(%esp)52 // Copy the "to" context argument from the stack to register eax. Having 53 // pushed 3 words (= 12 bytes) on the stack, the argument is now at 54 // 8 + 12 = 20(%esp). 68 55 69 56 movl 20(%esp),%eax … … 83 70 84 71 ret 85 .size 72 .size __cfactx_switch, .-__cfactx_switch 86 73 87 74 // Local Variables: //
Note:
See TracChangeset
for help on using the changeset viewer.