Annotation of 43BSDTahoe/ucb/lisp/franz/tahoe/pushframe.s, revision 1.1.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.