Annotation of 43BSDTahoe/ucb/lisp/franz/tahoe/pushframe.s, revision 1.1

1.1     ! root        1: /*
        !             2:  * pushframe : stack a frame 
        !             3:  * mess with the standard calls/callf call frame to put things in
        !             4:  * the proper order. On entry to _Pushframe we have:
        !             5:  * On entry to Pushframe:              On exit:
        !             6:  * ______________                      ______________  
        !             7:  * | second arg |                      | second arg |
        !             8:  * +------------+                      +------------+
        !             9:  * | first arg  |                      | first arg  |
        !            10:  * +------------+                      +------------+
        !            11:  * | 'class' arg|                      | 'class' arg|
        !            12:  * +------------+                      +------------+
        !            13:  * | saved fp   |  <<= fp              | return addr|
        !            14:  * +------------+                      +------------+
        !            15:  * |mask|removed|                      | old _errp  |
        !            16:  * +------------+                      +------------+
        !            17:  * |return addr.|  <<= sp              | saved _bnp |
        !            18:  * +------------+                      +------------+
        !            19:  *                                     | saved _np  |
        !            20:  *                                     +------------+
        !            21:  *                                     | saved lbot |  <<= d0
        !            22:  *                                     +------------+
        !            23:  *                                     | saved r13  |
        !            24:  *                                     |       ...  |
        !            25:  *                                     | saved r8   |  <<= sp
        !            26:  *                                     +------------+
        !            27:  */
        !            28:        .text
        !            29:        .globl  _Pushframe
        !            30:        .globl  _qpushframe
        !            31: 
        !            32: _qpushframe:
        !            33: _Pushframe:
        !            34:        .word 0x0
        !            35:        movl    (fp),fp         # give user his fp back
        !            36:        movl    (sp),r0         # put program counter in temporary
        !            37:        moval   12(sp),sp       # remove pc, 'mask', 'removed', and fp
        !            38:        pushl   r0              # stack the return address
        !            39:        pushl   _errp
        !            40:        pushl   _bnp
        !            41:        pushl   r6              # save _np
        !            42:        pushl   r7              # save _lbot
        !            43:        moval   (sp),r0         # return addr of lbot on stack to caller
        !            44:        moval   -24(sp),sp
        !            45:        storer  $0x3f00,(sp)    # save r13(fp), r12,r11,r10,r9,r8
        !            46:        clrl    _retval         # set retval to C_INITIAL
        !            47:        jmp     *40(sp)         # return to caller

unix.superglobalmegacorp.com

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