1*2c5f7abaSRuss Cox# Context switch 2*2c5f7abaSRuss Cox# 3*2c5f7abaSRuss Cox# void swtch(struct context **old, struct context *new); 4818fc012Srsc# 5818fc012Srsc# Save current register context in old 6818fc012Srsc# and then load register context from new. 7818fc012Srsc 8818fc012Srsc.globl swtch 9818fc012Srscswtch: 10818fc012Srsc movl 4(%esp), %eax 11c100d9eeSkolya movl 8(%esp), %edx 12818fc012Srsc 13c100d9eeSkolya # Save old callee-save registers 14c100d9eeSkolya pushl %ebp 15c100d9eeSkolya pushl %ebx 16c100d9eeSkolya pushl %esi 17c100d9eeSkolya pushl %edi 18818fc012Srsc 19c100d9eeSkolya # Switch stacks 20c100d9eeSkolya movl %esp, (%eax) 21*2c5f7abaSRuss Cox movl %edx, %esp 22818fc012Srsc 23c100d9eeSkolya # Load new callee-save registers 24c100d9eeSkolya popl %edi 25c100d9eeSkolya popl %esi 26c100d9eeSkolya popl %ebx 27c100d9eeSkolya popl %ebp 28818fc012Srsc ret 29