root/swtch.S

/* [<][>][^][v][top][bottom][index][help] */
   1 # Context switch
   2 #
   3 #   void swtch(struct context **old, struct context *new);
   4 # 
   5 # Save current register context in old
   6 # and then load register context from new.
   7 
   8 .globl swtch
   9 swtch:
  10   movl 4(%esp), %eax
  11   movl 8(%esp), %edx
  12 
  13   # Save old callee-save registers
  14   pushl %ebp
  15   pushl %ebx
  16   pushl %esi
  17   pushl %edi
  18 
  19   # Switch stacks
  20   movl %esp, (%eax)
  21   movl %edx, %esp
  22 
  23   # Load new callee-save registers
  24   popl %edi
  25   popl %esi
  26   popl %ebx
  27   popl %ebp
  28   ret

/* [<][>][^][v][top][bottom][index][help] */