]>
Commit | Line | Data |
---|---|---|
56609046 TT |
1 | |
2 | # define call_push(x) \ | |
3 | lda $16, 0(x); /* copy x to first argument register */ \ | |
4 | jsr $26, GC_push_one; /* call GC_push_one, ret addr in $26 */ \ | |
5 | ldgp $gp, 0($26) /* restore $gp register from $ra */ | |
6 | ||
7 | .text | |
8 | .align 4 | |
9 | .globl GC_push_regs | |
10 | .ent GC_push_regs 2 | |
11 | GC_push_regs: | |
12 | ldgp $gp, 0($27) # set gp from the procedure value reg | |
13 | lda $sp, -32($sp) # make stack frame | |
14 | stq $26, 8($sp) # save return address | |
15 | .mask 0x04000000, -8 | |
16 | .frame $sp, 16, $26, 0 | |
17 | ||
18 | # call_push($0) # expression eval and int func result | |
19 | ||
20 | # call_push($1) # temp regs - not preserved cross calls | |
21 | # call_push($2) | |
22 | # call_push($3) | |
23 | # call_push($4) | |
24 | # call_push($5) | |
25 | # call_push($6) | |
26 | # call_push($7) | |
27 | # call_push($8) | |
28 | ||
29 | call_push($9) # Saved regs | |
30 | call_push($10) | |
31 | call_push($11) | |
32 | call_push($12) | |
33 | call_push($13) | |
34 | call_push($14) | |
35 | ||
36 | call_push($15) # frame ptr or saved reg | |
37 | ||
38 | # call_push($16) # argument regs - not preserved cross calls | |
39 | # call_push($17) | |
40 | # call_push($18) | |
41 | # call_push($19) | |
42 | # call_push($20) | |
43 | # call_push($21) | |
44 | ||
45 | # call_push($22) # temp regs - not preserved cross calls | |
46 | # call_push($23) | |
47 | # call_push($24) | |
48 | # call_push($25) | |
49 | ||
50 | # call_push($26) # return address - expression eval | |
51 | # call_push($27) # procedure value or temporary reg | |
52 | # call_push($28) # assembler temp - not presrved | |
53 | call_push($29) # Global Pointer | |
54 | # call_push($30) # Stack Pointer | |
55 | ||
56 | ldq $26, 8($sp) # restore return address | |
57 | lda $sp, 32($sp) # pop stack frame | |
58 | ret $31, ($26), 1 # return ($31 == hardwired zero) | |
59 | .end GC_push_regs |