1*c100d9eeSkolya# void swtch(struct context **old, struct context **new); 2818fc012Srsc# 3818fc012Srsc# Save current register context in old 4818fc012Srsc# and then load register context from new. 5818fc012Srsc 6818fc012Srsc.globl swtch 7818fc012Srscswtch: 8818fc012Srsc movl 4(%esp), %eax 9*c100d9eeSkolya movl 8(%esp), %edx 10818fc012Srsc 11*c100d9eeSkolya # Save old callee-save registers 12*c100d9eeSkolya pushl %ebp 13*c100d9eeSkolya pushl %ebx 14*c100d9eeSkolya pushl %esi 15*c100d9eeSkolya pushl %edi 16818fc012Srsc 17*c100d9eeSkolya # Switch stacks 18*c100d9eeSkolya movl %esp, (%eax) 19*c100d9eeSkolya movl (%edx), %esp 20818fc012Srsc 21*c100d9eeSkolya # Load new callee-save registers 22*c100d9eeSkolya popl %edi 23*c100d9eeSkolya popl %esi 24*c100d9eeSkolya popl %ebx 25*c100d9eeSkolya popl %ebp 26818fc012Srsc ret 27