|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.