Annotation of xinu/sys/sizmem.s, revision 1.1.1.1

1.1       root        1: /* sizmem.s - sizmem */
                      2: 
                      3: #include <procreg.h>
                      4: #include <conf.h>
                      5: #include <mach.h>
                      6: 
                      7: /*----------------------------------------------------------------------------
                      8:  *  sizmem  -- size memory, place highest valid address of an int in _maxaddr
                      9:  *             assumption: executing on kernel stack, interrupts disabled
                     10:  *----------------------------------------------------------------------------
                     11: */
                     12: 
                     13: #define        HIGHADDR 0x20000000             /* highest address of int on VAX*/
                     14:                                        /* (below device csr addresses) */
                     15: #define        CONSDB  0x2000                  /* sizeof UVAXII console database */
                     16:        .text
                     17:        .align  1
                     18:        .globl  sizmem
                     19: sizmem:
                     20:        .word   0x4                     /* save register 2              */
                     21:        tstl    -(sp)                   /* allocate local for disable   */
                     22:        pushal  -4(fp)                  /* address of local             */
                     23:        calls   $1, _disable            /* disable interrupts           */
                     24:        movl    lowcore+4, -(sp)        /* push old exception vector    */
                     25:        bisl3   $1, $siztrap, lowcore+4 /* set exception vector to      */
                     26:                                        /* catch memory exceptions      */
                     27:                                        /* (with memory mapping         */
                     28:                                        /* disabled, the VAX takes a    */
                     29:                                        /* machine check exception)     */
                     30:                                        /* NOTE: must handle mach. chk. */
                     31:                                        /* on interrupt stack           */
                     32:                                        /* (hence bits<1,0> == 01)      */
                     33:        calls   $0, _ovfloff            /* disable int oflow exceptions */
                     34:        clrl    r0                      /* r0 holds low address         */
                     35:        movl    $HIGHADDR, r1           /* r1 = highest addr of an int  */
                     36: sizloop:
                     37:        cmpl    r0, r1                  /* see if low > high            */
                     38:        jgtru   setsize                 /* yes: restore & return        */
                     39:        addl3   r0, r1, r2              /* calculate midpoint           */
                     40:        jcc     rotate                  /* if carry set, set low bit,   */
                     41:        bisl2   $1, r2                  /* soon to be high bit          */
                     42: rotate:
                     43:        rotl    $-1, r2, r2             /* div by 2 by shifting right 1 */
                     44:        bicl2   $3, r2                  /* address is multiple of 4     */
                     45:        tstl    (r2)+                   /* reference what r2 points to  */
                     46:                                        /* note: if exception taken, r2 */
                     47:                                        /* is not incremented           */ 
                     48:        movl    r2, r0                  /* mid caused no exception --   */
                     49:                                        /* set low to mid address + 4   */
                     50:        jbr     sizloop
                     51: setsize:
                     52:        mfpr    $SID, r3                /* get system id register value */
                     53:        bicl2   $SYSTYPE, r3            /* mask off system id           */
                     54:        cmpl    r3, $UVAXIISID          /* compare with UVAXII sid value*/
                     55:        jneq    uimax                   /* if MicroVAX II, reserve 8K   */
                     56:        subl3   $CONSDB, r1, _maxaddr   /* high mem for console database*/
                     57:        jmp     rest
                     58: uimax: movl    r1, _maxaddr            /* store result                 */
                     59: rest:  movl    (sp)+, lowcore+4        /* restore exception vector     */
                     60:        pushal  -4(fp)                  /* argument to restore          */
                     61:        calls   $1, _restore            /* restore interrupts           */
                     62:        ret                             /* return to caller             */
                     63:        .align  2                       /* align on longword boundary   */
                     64: siztrap:
                     65:                                        /* machine chk--on intrrpt stk  */
                     66:        subl3   $4, r2, r1              /* midpt caused exception, set  */
                     67:                                        /* high address to mid - 4      */
                     68:        addl2   (sp)+, sp               /* pop error data from exception*/
                     69:                                        /* erase machine check history: */
                     70: #if defined(VAX780) || defined(VAX785)
                     71:        mtpr    $SBIFSCLR, $SBIFS       /* clear SBI history of machchk */
                     72: #endif VAX78X
                     73: #if    defined(UVAX) || defined(VAX750) || \
                     74:        defined(VAX730) || defined(VAX725)
                     75:        mtpr    $MCESRCLR, $MCESR       /* clear machine check history  */
                     76: #endif UVAXX || VAX750 || VAX730 || VAX725
                     77: #if    defined(VAX8600)
                     78:        mtpr    $0, $EHSR
                     79: #endif VAX8600
                     80:        moval   sizloop, (sp)           /* go back to sizloop on rei    */
                     81:        rei                             /* back on kernel stack again   */

unix.superglobalmegacorp.com

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