Annotation of xinu/sys/ctxsw.s, revision 1.1

1.1     ! root        1: /* ctxsw.s - ctxsw */
        !             2: 
        !             3: #include <procreg.h>
        !             4: 
        !             5: /*------------------------------------------------------------------------
        !             6:  * ctxsw  --  actually perform context switch, saving/loading registers
        !             7:  *------------------------------------------------------------------------
        !             8:  *  Upon entry to this routine, the current stack is assumed to be the kernel
        !             9:  *  stack.  The stack contains:
        !            10:  * 
        !            11:  *     AP+4 => address of save area with new registers, etc.
        !            12:  *             Size of save area is PNREGS * sizeof (longword).
        !            13:  *
        !            14:  *  Assumes interrupts are disabled.
        !            15:  *  See proc.h for a description of the saved state (process control block).
        !            16: */
        !            17:        .text
        !            18:        .align  1               /* location counter lowest bit is 0     */
        !            19:        .globl  _ctxsw          /* declare the routine name global      */
        !            20: _ctxsw:                                /* entry point to context switch        */
        !            21:        .word   0x0             /* entry mask -- save no registers      */
        !            22:        movpsl  -(sp)           /* push psl                             */
        !            23:        pushal  ctxswend        /* push address at which old process    */
        !            24:                                /* should resume when re-started        */
        !            25:        svpctx                  /* save old process' context in proctab */ 
        !            26:                                /* The values to save for PC & PSL are  */
        !            27:                                /* popped off the kernel stack.         */
        !            28:        mtpr    4(ap), $PCBB    /* move address of new process' save    */
        !            29:                                /* area to Process Control Block Base   */
        !            30:        ldpctx                  /* load new process' context, push PSL  */
        !            31:                                /* & PC on kernel stack.                */
        !            32:        rei                     /* start executing new process          */
        !            33: ctxswend:
        !            34:        /* the OLD process returns here when resumed. */
        !            35:        ret

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.