--- /dev/null
+;* Copyright 2004 Develer S.r.l. (http://www.develer.com/)
+;* Copyright 1999,2000,2001 Bernardo Innocenti <bernie@develer.com>
+;* This file is part of DevLib - See devlib/README for information.
+;*
+;* \version $Id$
+;*
+;* \author Bernardo Innocenti <bernie@develer.com>
+;*
+
+;* $Log$
+;* Revision 1.2 2004/06/06 16:14:12 bernie
+;* Add DevLib license information.
+;*
+;* Revision 1.1 2004/05/23 17:27:00 bernie
+;* Import kern/ subdirectory.
+;*
+;*
+
+!!!!!! THIS FILE HAS NOT BEEN REVISED FOR THE NEW SCHEDULER API !!!!!!
+
+
+
+ NAME AsmSwitch
+ RSEG CODE
+
+ EXTERN ?LR
+ EXTERN ?GR
+ PUBLIC AsmSwitchContext
+ PUBLIC AsmReplaceContext
+
+
+;* Perform low-level process context switching
+;*
+;* void AsmSwitchContext(cpustack_t *new_sp, cpustack_t **save_sp)
+;* GR+0 SP+2
+;*
+;* Replace current context with new process
+;*
+;* void AsmReplaceContext(cpustack_t *new_sp, cpustack_t **dummy)
+;* GR+0 SP+2
+;*
+
+AsmSwitchContext:
+
+; pop 2nd parameter from the stack
+ ld ?GR+2,2[SP]
+
+; save all registers
+ push ?LR+0
+ push ?LR+2
+ push ?LR+4
+ push ?LR+6
+ push ?LR+8
+ push ?LR+10
+ push ?LR+12
+ push ?LR+14
+ push ?LR+16
+ push ?LR+18
+ push ?LR+20
+ push ?LR+22
+ push ?LR+24
+ push ?LR+26
+ push ?LR+28
+ push ?LR+30
+ st SP,[?GR+2] ; save old stack pointer
+ ; fall-thru
+
+AsmReplaceContext:
+ ld SP,?GR+0 ; load new stack pointer
+
+; restore all registers
+ pop ?LR+30
+ pop ?LR+28
+ pop ?LR+26
+ pop ?LR+24
+ pop ?LR+22
+ pop ?LR+20
+ pop ?LR+18
+ pop ?LR+16
+ pop ?LR+14
+ pop ?LR+12
+ pop ?LR+10
+ pop ?LR+8
+ pop ?LR+6
+ pop ?LR+4
+ pop ?LR+2
+ pop ?LR+0
+
+; restore execution in new context
+ ret
+
+ END