OSDN Git Service

* Makefile.in (local-distclean): Remove leftover built files.
[pf3gnuchains/gcc-fork.git] / boehm-gc / alpha_mach_dep.s
1
2 # This is BROKEN on a 21264 running gcc, and probably in other cases.
3 # The compiler may spill pointers to fp registers, and this code doesn't
4 # scan those.
5
6 # define call_push(x)                                                   \
7         lda   $16, 0(x);        /* copy x to first argument register */ \
8         jsr   $26, GC_push_one; /* call GC_push_one, ret addr in $26 */ \
9         ldgp  $gp, 0($26)       /* restore $gp register from $ra */
10         
11         .text
12         .align  4
13         .globl  GC_push_regs
14         .ent    GC_push_regs 2
15 GC_push_regs:
16         ldgp    $gp, 0($27)             # set gp from the procedure value reg
17         lda     $sp, -32($sp)           # make stack frame
18         stq     $26, 8($sp)             # save return address
19         .mask   0x04000000, -8
20         .frame  $sp, 16, $26, 0
21
22  #      call_push($0)    # expression eval and int func result
23
24  #      call_push($1)    # temp regs - not preserved cross calls
25  #      call_push($2)
26  #      call_push($3)
27  #      call_push($4)
28  #      call_push($5)
29  #      call_push($6)
30  #      call_push($7)
31  #      call_push($8)
32
33         call_push($9)    # Saved regs
34         call_push($10)
35         call_push($11)
36         call_push($12)
37         call_push($13)
38         call_push($14)
39
40         call_push($15)   # frame ptr or saved reg
41
42  #      call_push($16)   # argument regs - not preserved cross calls
43  #      call_push($17)
44  #      call_push($18)
45  #      call_push($19)
46  #      call_push($20)
47  #      call_push($21)
48
49  #      call_push($22)   # temp regs - not preserved cross calls
50  #      call_push($23)
51  #      call_push($24)
52  #      call_push($25)
53
54  #      call_push($26)   # return address - expression eval
55  #      call_push($27)   # procedure value or temporary reg
56  #      call_push($28)   # assembler temp - not presrved
57         call_push($29)   # Global Pointer
58  #      call_push($30)   # Stack Pointer
59
60         ldq     $26, 8($sp)             # restore return address
61         lda     $sp, 32($sp)            # pop stack frame
62         ret     $31, ($26), 1           # return ($31 == hardwired zero)
63         .end    GC_push_regs