|
Last change
on this file was 132, checked in by cinc, 19 years ago |
|
Boehm-Demers-Weiser garbage collector. Single-threaded for OS/2.
|
|
File size:
1.8 KB
|
| Line | |
|---|
| 1 | #if defined(__ppc64__)
|
|---|
| 2 | #define MODE_CHOICE(x, y) y
|
|---|
| 3 | #else
|
|---|
| 4 | #define MODE_CHOICE(x, y) x
|
|---|
| 5 | #endif
|
|---|
| 6 |
|
|---|
| 7 | #define lgu MODE_CHOICE(lwzu, ldu)
|
|---|
| 8 |
|
|---|
| 9 | #define g_long MODE_CHOICE(long, quad) /* usage is ".g_long" */
|
|---|
| 10 |
|
|---|
| 11 | #define LOG2_GPR_BYTES MODE_CHOICE(2,3) /* log2(GPR_BYTES) */
|
|---|
| 12 |
|
|---|
| 13 | ; GC_push_regs function. Under some optimization levels GCC will clobber
|
|---|
| 14 | ; some of the non-volatile registers before we get a chance to save them
|
|---|
| 15 | ; therefore, this cannot be inline asm.
|
|---|
| 16 |
|
|---|
| 17 | .text
|
|---|
| 18 | .align LOG2_GPR_BYTES
|
|---|
| 19 | .globl _GC_push_regs
|
|---|
| 20 | _GC_push_regs:
|
|---|
| 21 |
|
|---|
| 22 | ; Prolog
|
|---|
| 23 | mflr r0
|
|---|
| 24 | stw r0,8(r1)
|
|---|
| 25 | stwu r1,-80(r1)
|
|---|
| 26 |
|
|---|
| 27 | ; Push r13-r31
|
|---|
| 28 | mr r3,r13
|
|---|
| 29 | bl L_GC_push_one$stub
|
|---|
| 30 | mr r3,r14
|
|---|
| 31 | bl L_GC_push_one$stub
|
|---|
| 32 | mr r3,r15
|
|---|
| 33 | bl L_GC_push_one$stub
|
|---|
| 34 | mr r3,r16
|
|---|
| 35 | bl L_GC_push_one$stub
|
|---|
| 36 | mr r3,r17
|
|---|
| 37 | bl L_GC_push_one$stub
|
|---|
| 38 | mr r3,r18
|
|---|
| 39 | bl L_GC_push_one$stub
|
|---|
| 40 | mr r3,r19
|
|---|
| 41 | bl L_GC_push_one$stub
|
|---|
| 42 | mr r3,r20
|
|---|
| 43 | bl L_GC_push_one$stub
|
|---|
| 44 | mr r3,r21
|
|---|
| 45 | bl L_GC_push_one$stub
|
|---|
| 46 | mr r3,r22
|
|---|
| 47 | bl L_GC_push_one$stub
|
|---|
| 48 | mr r3,r23
|
|---|
| 49 | bl L_GC_push_one$stub
|
|---|
| 50 | mr r3,r24
|
|---|
| 51 | bl L_GC_push_one$stub
|
|---|
| 52 | mr r3,r25
|
|---|
| 53 | bl L_GC_push_one$stub
|
|---|
| 54 | mr r3,r26
|
|---|
| 55 | bl L_GC_push_one$stub
|
|---|
| 56 | mr r3,r27
|
|---|
| 57 | bl L_GC_push_one$stub
|
|---|
| 58 | mr r3,r28
|
|---|
| 59 | bl L_GC_push_one$stub
|
|---|
| 60 | mr r3,r29
|
|---|
| 61 | bl L_GC_push_one$stub
|
|---|
| 62 | mr r3,r30
|
|---|
| 63 | bl L_GC_push_one$stub
|
|---|
| 64 | mr r3,r31
|
|---|
| 65 | bl L_GC_push_one$stub
|
|---|
| 66 |
|
|---|
| 67 | ;
|
|---|
| 68 | lwz r0,88(r1)
|
|---|
| 69 | addi r1,r1,80
|
|---|
| 70 | mtlr r0
|
|---|
| 71 |
|
|---|
| 72 | ; Return
|
|---|
| 73 | blr
|
|---|
| 74 |
|
|---|
| 75 | ; PIC stuff, generated by GCC
|
|---|
| 76 |
|
|---|
| 77 | .data
|
|---|
| 78 | .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
|
|---|
| 79 | .align LOG2_GPR_BYTES
|
|---|
| 80 | L_GC_push_one$stub:
|
|---|
| 81 | .indirect_symbol _GC_push_one
|
|---|
| 82 | mflr r0
|
|---|
| 83 | bcl 20,31,L0$_GC_push_one
|
|---|
| 84 | L0$_GC_push_one:
|
|---|
| 85 | mflr r11
|
|---|
| 86 | addis r11,r11,ha16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)
|
|---|
| 87 | mtlr r0
|
|---|
| 88 | lgu r12,lo16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)(r11)
|
|---|
| 89 | mtctr r12
|
|---|
| 90 | bctr
|
|---|
| 91 | .data
|
|---|
| 92 | .lazy_symbol_pointer
|
|---|
| 93 | L_GC_push_one$lazy_ptr:
|
|---|
| 94 | .indirect_symbol _GC_push_one
|
|---|
| 95 | .g_long dyld_stub_binding_helper
|
|---|
Note:
See
TracBrowser
for help on using the repository browser.