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