Annotation of 43BSD/contrib/icon/rt/gcollect.s, revision 1.1

1.1     ! root        1: #include "../h/config.h"
        !             2: /*
        !             3:  * gcollect(n) - switch to expression stack for &main and call collect(n),
        !             4:  *  switch back to current expression stack when done.
        !             5:  */
        !             6: Global(_collect)               /* Garbage collection */
        !             7: Global(_boundary)              /* Icon/C boundary */
        !             8: Global(_current)               /* Current co-expression */
        !             9: Global(_k_main)                        /* Main co-expression */
        !            10: 
        !            11: Global(_gcollect)
        !            12: #ifdef VAX
        !            13: _gcollect:
        !            14:        Mask    0x0                     # Don't need to save any registers
        !            15: 
        !            16:        movl    _current+4,r0           # Get pointer to heap block for
        !            17:                                        #  current co-expression.
        !            18:        movl    sp,16(r0)               # Save sp,
        !            19:        movl    ap,20(r0)               #  ap,
        !            20:        movl    _boundary,24(r0)        #  and current boundary in block.
        !            21:        movl    _k_main+4,r0            # Get pointer to heap block for
        !            22:                                        #  &main.
        !            23:        movl    16(r0),sp               # Restore sp,
        !            24:        movl    20(r0),ap               #  ap,
        !            25:        movl    24(r0),_boundary        #  and boundary for &main
        !            26:        pushl   4(ap)                   # Push n on stack
        !            27:        calls   $1,_collect             # collect(n)
        !            28:        movl    _current+4,r0           # Get pointer to heap block for
        !            29:                                        #  current co-expression
        !            30:        movl    16(r0),sp               # Restore sp,
        !            31:        movl    20(r0),ap               #  ap,
        !            32:        movl    24(r0),_boundary        #  and boundary
        !            33:        ret                             # Return from garbage collection
        !            34: #endif VAX
        !            35: 
        !            36: #ifdef PORT
        !            37: DummyFcn(_gcollect)
        !            38: #endif PORT
        !            39: 
        !            40: #ifdef PDP11
        !            41: / gcollect(n) - switch to expression stack for &main and call collect(n),
        !            42: /              switch to current expression stack when done.
        !            43: 
        !            44: / Register Usage:
        !            45: /      r0-r1           general utility
        !            46: _gcollect:
        !            47:        mov     _current+2,r0           / r0 <- pointer to current stack header
        !            48:        mov     sp,8.(r0)                / save current stack pointer
        !            49:        mov     _boundary,12.(r0)        / save current boundary
        !            50:        mov     sp,r1                   / r1 <- saved stack pointer
        !            51:        mov     _k_main+2,r0            / r0 <- pointer to main stack header
        !            52:        mov     8.(r0),sp                / get stack pointer for &main
        !            53:        mov     12.(r0),_boundary        / get boundary for &main
        !            54:        mov     2(r1),-(sp)             / move n to this stack
        !            55:        jsr     pc,_collect             / call collect(n)
        !            56:        tst     (sp)+                   / pop n off of this stack
        !            57:        mov     _current+2,r0           / r0 <- pointer to current stack header
        !            58:        mov     8.(r0),sp                / restore current stack pointer
        !            59:        mov     12.(r0),_boundary        / restore current boundary
        !            60:        rts     pc                      / return
        !            61: #endif PDP11

unix.superglobalmegacorp.com

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