425 lines
14 KiB
Diff
425 lines
14 KiB
Diff
|
Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
|
||
|
|
||
|
From 5e756d4d8df2949cb3b6e51532d3016cbb276fd7 Mon Sep 17 00:00:00 2001
|
||
|
From: Ivan Maidanski <ivmai@mail.ru>
|
||
|
Date: Fri, 27 Feb 2015 21:32:22 +0300
|
||
|
Subject: [PATCH 004/135] Revert "Move asm machine-dependent files to 'src'
|
||
|
folder" (partly)
|
||
|
|
||
|
Asm files moved back to base folder to avoid build issues (reported
|
||
|
for NetBSD and Solaris on Sparc). Alternative way is to adjust
|
||
|
configure.ac and Makefile.am properly but it requires more efforts
|
||
|
(including testing).
|
||
|
|
||
|
* Makefile.am (EXTRA_libgc_la_SOURCES): Remove "src/" prefix.
|
||
|
* Makefile.direct (SRCS, mach_dep.o): Likewise.
|
||
|
* src/ia64_save_regs_in_stack.s: Move to base folder.
|
||
|
* src/sparc_mach_dep.S: Likewise.
|
||
|
* src/sparc_netbsd_mach_dep.s: Likewise.
|
||
|
* src/sparc_sunos4_mach_dep.s: Likewise.
|
||
|
|
||
|
---
|
||
|
Makefile.am | 4 +--
|
||
|
Makefile.direct | 20 +++++++-------
|
||
|
ia64_save_regs_in_stack.s | 11 ++++++++
|
||
|
sparc_mach_dep.S | 61 +++++++++++++++++++++++++++++++++++++++++
|
||
|
sparc_netbsd_mach_dep.s | 34 +++++++++++++++++++++++
|
||
|
sparc_sunos4_mach_dep.s | 32 +++++++++++++++++++++
|
||
|
src/ia64_save_regs_in_stack.s | 11 --------
|
||
|
src/sparc_mach_dep.S | 61 -----------------------------------------
|
||
|
src/sparc_netbsd_mach_dep.s | 34 -----------------------
|
||
|
src/sparc_sunos4_mach_dep.s | 32 ---------------------
|
||
|
11 files changed, 151 insertions(+), 151 deletions(-)
|
||
|
create mode 100644 ia64_save_regs_in_stack.s
|
||
|
create mode 100644 sparc_mach_dep.S
|
||
|
create mode 100644 sparc_netbsd_mach_dep.s
|
||
|
create mode 100644 sparc_sunos4_mach_dep.s
|
||
|
delete mode 100644 src/ia64_save_regs_in_stack.s
|
||
|
delete mode 100644 src/sparc_mach_dep.S
|
||
|
delete mode 100644 src/sparc_netbsd_mach_dep.s
|
||
|
delete mode 100644 src/sparc_sunos4_mach_dep.s
|
||
|
|
||
|
diff --git a/Makefile.am b/Makefile.am
|
||
|
index f8057db..1688be2 100644
|
||
|
--- a/Makefile.am
|
||
|
+++ b/Makefile.am
|
||
|
@@ -100,8 +100,8 @@ libgc_la_LIBADD = @addobjs@ $(THREADDLLIBS) $(UNWINDLIBS) $(ATOMIC_OPS_LIBS)
|
||
|
libgc_la_DEPENDENCIES = @addobjs@
|
||
|
libgc_la_LDFLAGS = $(extra_ldflags_libgc) -version-info 1:3:0 -no-undefined
|
||
|
|
||
|
-EXTRA_libgc_la_SOURCES = src/ia64_save_regs_in_stack.s src/sparc_mach_dep.S \
|
||
|
- src/sparc_netbsd_mach_dep.s src/sparc_sunos4_mach_dep.s
|
||
|
+EXTRA_libgc_la_SOURCES = ia64_save_regs_in_stack.s sparc_mach_dep.S \
|
||
|
+ sparc_netbsd_mach_dep.s sparc_sunos4_mach_dep.s
|
||
|
|
||
|
|
||
|
# C++ Interface
|
||
|
diff --git a/Makefile.direct b/Makefile.direct
|
||
|
index d64598b..8ab80e8 100644
|
||
|
--- a/Makefile.direct
|
||
|
+++ b/Makefile.direct
|
||
|
@@ -108,8 +108,8 @@ SRCS= $(CSRCS) \
|
||
|
include/gc_config_macros.h include/private/pthread_support.h \
|
||
|
include/private/pthread_stop_world.h include/private/darwin_semaphore.h \
|
||
|
include/private/darwin_stop_world.h include/private/thread_local_alloc.h \
|
||
|
- src/ia64_save_regs_in_stack.s src/sparc_mach_dep.S \
|
||
|
- src/sparc_netbsd_mach_dep.s src/sparc_sunos4_mach_dep.s $(CORD_SRCS)
|
||
|
+ ia64_save_regs_in_stack.s sparc_mach_dep.S \
|
||
|
+ sparc_netbsd_mach_dep.s sparc_sunos4_mach_dep.s $(CORD_SRCS)
|
||
|
|
||
|
DOC_FILES= README.QUICK TODO doc/README.Mac doc/README.OS2 \
|
||
|
doc/README.amiga doc/README.cords doc/debugging.html \
|
||
|
@@ -309,17 +309,17 @@ dyn_test:
|
||
|
# gcc -shared -Wl,-soname=libgc.so.0 -o libgc.so.0 $(LIBOBJS) dyn_load.lo
|
||
|
# touch liblinuxgc.so
|
||
|
|
||
|
-mach_dep.o: $(srcdir)/mach_dep.c $(srcdir)/src/sparc_mach_dep.S \
|
||
|
- $(srcdir)/src/sparc_sunos4_mach_dep.s \
|
||
|
- $(srcdir)/src/ia64_save_regs_in_stack.s \
|
||
|
- $(srcdir)/src/sparc_netbsd_mach_dep.s $(UTILS)
|
||
|
+mach_dep.o: $(srcdir)/mach_dep.c $(srcdir)/sparc_mach_dep.S \
|
||
|
+ $(srcdir)/sparc_sunos4_mach_dep.s \
|
||
|
+ $(srcdir)/ia64_save_regs_in_stack.s \
|
||
|
+ $(srcdir)/sparc_netbsd_mach_dep.s $(UTILS)
|
||
|
rm -f mach_dep.o
|
||
|
- ./if_mach SPARC SOLARIS $(CC) -c -o mach_dep2.o $(srcdir)/src/sparc_mach_dep.S
|
||
|
- ./if_mach SPARC OPENBSD $(AS) -o mach_dep2.o $(srcdir)/src/sparc_sunos4_mach_dep.s
|
||
|
- ./if_mach SPARC NETBSD $(AS) -o mach_dep2.o $(srcdir)/src/sparc_netbsd_mach_dep.s
|
||
|
+ ./if_mach SPARC SOLARIS $(CC) -c -o mach_dep2.o $(srcdir)/sparc_mach_dep.S
|
||
|
+ ./if_mach SPARC OPENBSD $(AS) -o mach_dep2.o $(srcdir)/sparc_sunos4_mach_dep.s
|
||
|
+ ./if_mach SPARC NETBSD $(AS) -o mach_dep2.o $(srcdir)/sparc_netbsd_mach_dep.s
|
||
|
./if_mach SPARC "" $(CC) -c -o mach_dep1.o $(SPECIALCFLAGS) $(srcdir)/mach_dep.c
|
||
|
./if_mach SPARC "" ld -r -o mach_dep.o mach_dep1.o mach_dep2.o
|
||
|
- ./if_mach IA64 "" as $(AS_ABI_FLAG) -o ia64_save_regs_in_stack.o $(srcdir)/src/ia64_save_regs_in_stack.s
|
||
|
+ ./if_mach IA64 "" as $(AS_ABI_FLAG) -o ia64_save_regs_in_stack.o $(srcdir)/ia64_save_regs_in_stack.s
|
||
|
./if_mach IA64 "" $(CC) -c -o mach_dep1.o $(SPECIALCFLAGS) $(srcdir)/mach_dep.c
|
||
|
./if_mach IA64 "" ld -r -o mach_dep.o mach_dep1.o ia64_save_regs_in_stack.o
|
||
|
./if_not_there mach_dep.o $(CC) -c $(SPECIALCFLAGS) $(srcdir)/mach_dep.c
|
||
|
diff --git a/ia64_save_regs_in_stack.s b/ia64_save_regs_in_stack.s
|
||
|
new file mode 100644
|
||
|
index 0000000..2b81edf
|
||
|
--- /dev/null
|
||
|
+++ b/ia64_save_regs_in_stack.s
|
||
|
@@ -0,0 +1,11 @@
|
||
|
+ .text
|
||
|
+ .align 16
|
||
|
+ .global GC_save_regs_in_stack
|
||
|
+ .proc GC_save_regs_in_stack
|
||
|
+GC_save_regs_in_stack:
|
||
|
+ .body
|
||
|
+ flushrs
|
||
|
+ ;;
|
||
|
+ mov r8=ar.bsp
|
||
|
+ br.ret.sptk.few rp
|
||
|
+ .endp GC_save_regs_in_stack
|
||
|
diff --git a/sparc_mach_dep.S b/sparc_mach_dep.S
|
||
|
new file mode 100644
|
||
|
index 0000000..d204dc4
|
||
|
--- /dev/null
|
||
|
+++ b/sparc_mach_dep.S
|
||
|
@@ -0,0 +1,61 @@
|
||
|
+! SPARCompiler 3.0 and later apparently no longer handles
|
||
|
+! asm outside functions. So we need a separate .s file
|
||
|
+! This is only set up for SunOS 5, not SunOS 4.
|
||
|
+! Assumes this is called before the stack contents are
|
||
|
+! examined.
|
||
|
+
|
||
|
+ .seg "text"
|
||
|
+ .globl GC_save_regs_in_stack
|
||
|
+GC_save_regs_in_stack:
|
||
|
+#if defined(__arch64__) || defined(__sparcv9)
|
||
|
+ save %sp,-128,%sp
|
||
|
+ flushw
|
||
|
+ ret
|
||
|
+ restore %sp,2047+128,%o0
|
||
|
+#else /* 32 bit SPARC */
|
||
|
+ ta 0x3 ! ST_FLUSH_WINDOWS
|
||
|
+ mov %sp,%o0
|
||
|
+ retl
|
||
|
+ nop
|
||
|
+#endif /* 32 bit SPARC */
|
||
|
+.GC_save_regs_in_stack_end:
|
||
|
+ .size GC_save_regs_in_stack,.GC_save_regs_in_stack_end-GC_save_regs_in_stack
|
||
|
+
|
||
|
+! GC_clear_stack_inner(arg, limit) clears stack area up to limit and
|
||
|
+! returns arg. Stack clearing is crucial on SPARC, so we supply
|
||
|
+! an assembly version that s more careful. Assumes limit is hotter
|
||
|
+! than sp, and limit is 8 byte aligned.
|
||
|
+ .globl GC_clear_stack_inner
|
||
|
+GC_clear_stack_inner:
|
||
|
+#if defined(__arch64__) || defined(__sparcv9)
|
||
|
+ mov %sp,%o2 ! Save sp
|
||
|
+ add %sp,2047-8,%o3 ! p = sp+bias-8
|
||
|
+ add %o1,-2047-192,%sp ! Move sp out of the way,
|
||
|
+ ! so that traps still work.
|
||
|
+ ! Includes some extra words
|
||
|
+ ! so we can be sloppy below.
|
||
|
+loop:
|
||
|
+ stx %g0,[%o3] ! *(long *)p = 0
|
||
|
+ cmp %o3,%o1
|
||
|
+ bgu,pt %xcc, loop ! if (p > limit) goto loop
|
||
|
+ add %o3,-8,%o3 ! p -= 8 (delay slot)
|
||
|
+ retl
|
||
|
+ mov %o2,%sp ! Restore sp., delay slot
|
||
|
+#else /* 32 bit SPARC */
|
||
|
+ mov %sp,%o2 ! Save sp
|
||
|
+ add %sp,-8,%o3 ! p = sp-8
|
||
|
+ clr %g1 ! [g0,g1] = 0
|
||
|
+ add %o1,-0x60,%sp ! Move sp out of the way,
|
||
|
+ ! so that traps still work.
|
||
|
+ ! Includes some extra words
|
||
|
+ ! so we can be sloppy below.
|
||
|
+loop:
|
||
|
+ std %g0,[%o3] ! *(long long *)p = 0
|
||
|
+ cmp %o3,%o1
|
||
|
+ bgu loop ! if (p > limit) goto loop
|
||
|
+ add %o3,-8,%o3 ! p -= 8 (delay slot)
|
||
|
+ retl
|
||
|
+ mov %o2,%sp ! Restore sp., delay slot
|
||
|
+#endif /* 32 bit SPARC */
|
||
|
+.GC_clear_stack_inner_end:
|
||
|
+ .size GC_clear_stack_inner,.GC_clear_stack_inner_end-GC_clear_stack_inner
|
||
|
diff --git a/sparc_netbsd_mach_dep.s b/sparc_netbsd_mach_dep.s
|
||
|
new file mode 100644
|
||
|
index 0000000..14feb15
|
||
|
--- /dev/null
|
||
|
+++ b/sparc_netbsd_mach_dep.s
|
||
|
@@ -0,0 +1,34 @@
|
||
|
+! SPARCompiler 3.0 and later apparently no longer handles
|
||
|
+! asm outside functions. So we need a separate .s file
|
||
|
+! This is only set up for SunOS 4.
|
||
|
+! Assumes this is called before the stack contents are
|
||
|
+! examined.
|
||
|
+
|
||
|
+#include "machine/asm.h"
|
||
|
+
|
||
|
+ .seg "text"
|
||
|
+ .globl _C_LABEL(GC_save_regs_in_stack)
|
||
|
+ .globl _C_LABEL(GC_push_regs)
|
||
|
+_C_LABEL(GC_save_regs_in_stack):
|
||
|
+_C_LABEL(GC_push_regs):
|
||
|
+ ta 0x3 ! ST_FLUSH_WINDOWS
|
||
|
+ mov %sp,%o0
|
||
|
+ retl
|
||
|
+ nop
|
||
|
+
|
||
|
+ .globl _C_LABEL(GC_clear_stack_inner)
|
||
|
+_C_LABEL(GC_clear_stack_inner):
|
||
|
+ mov %sp,%o2 ! Save sp
|
||
|
+ add %sp,-8,%o3 ! p = sp-8
|
||
|
+ clr %g1 ! [g0,g1] = 0
|
||
|
+ add %o1,-0x60,%sp ! Move sp out of the way,
|
||
|
+ ! so that traps still work.
|
||
|
+ ! Includes some extra words
|
||
|
+ ! so we can be sloppy below.
|
||
|
+loop:
|
||
|
+ std %g0,[%o3] ! *(long long *)p = 0
|
||
|
+ cmp %o3,%o1
|
||
|
+ bgu loop ! if (p > limit) goto loop
|
||
|
+ add %o3,-8,%o3 ! p -= 8 (delay slot)
|
||
|
+ retl
|
||
|
+ mov %o2,%sp ! Restore sp., delay slot
|
||
|
diff --git a/sparc_sunos4_mach_dep.s b/sparc_sunos4_mach_dep.s
|
||
|
new file mode 100644
|
||
|
index 0000000..923f5ea
|
||
|
--- /dev/null
|
||
|
+++ b/sparc_sunos4_mach_dep.s
|
||
|
@@ -0,0 +1,32 @@
|
||
|
+! SPARCompiler 3.0 and later apparently no longer handles
|
||
|
+! asm outside functions. So we need a separate .s file
|
||
|
+! This is only set up for SunOS 4.
|
||
|
+! Assumes this is called before the stack contents are
|
||
|
+! examined.
|
||
|
+
|
||
|
+ .seg "text"
|
||
|
+ .globl _GC_save_regs_in_stack
|
||
|
+ .globl _GC_push_regs
|
||
|
+_GC_save_regs_in_stack:
|
||
|
+_GC_push_regs:
|
||
|
+ ta 0x3 ! ST_FLUSH_WINDOWS
|
||
|
+ mov %sp,%o0
|
||
|
+ retl
|
||
|
+ nop
|
||
|
+
|
||
|
+ .globl _GC_clear_stack_inner
|
||
|
+_GC_clear_stack_inner:
|
||
|
+ mov %sp,%o2 ! Save sp
|
||
|
+ add %sp,-8,%o3 ! p = sp-8
|
||
|
+ clr %g1 ! [g0,g1] = 0
|
||
|
+ add %o1,-0x60,%sp ! Move sp out of the way,
|
||
|
+ ! so that traps still work.
|
||
|
+ ! Includes some extra words
|
||
|
+ ! so we can be sloppy below.
|
||
|
+loop:
|
||
|
+ std %g0,[%o3] ! *(long long *)p = 0
|
||
|
+ cmp %o3,%o1
|
||
|
+ bgu loop ! if (p > limit) goto loop
|
||
|
+ add %o3,-8,%o3 ! p -= 8 (delay slot)
|
||
|
+ retl
|
||
|
+ mov %o2,%sp ! Restore sp., delay slot
|
||
|
diff --git a/src/ia64_save_regs_in_stack.s b/src/ia64_save_regs_in_stack.s
|
||
|
deleted file mode 100644
|
||
|
index 2b81edf..0000000
|
||
|
--- a/src/ia64_save_regs_in_stack.s
|
||
|
+++ /dev/null
|
||
|
@@ -1,11 +0,0 @@
|
||
|
- .text
|
||
|
- .align 16
|
||
|
- .global GC_save_regs_in_stack
|
||
|
- .proc GC_save_regs_in_stack
|
||
|
-GC_save_regs_in_stack:
|
||
|
- .body
|
||
|
- flushrs
|
||
|
- ;;
|
||
|
- mov r8=ar.bsp
|
||
|
- br.ret.sptk.few rp
|
||
|
- .endp GC_save_regs_in_stack
|
||
|
diff --git a/src/sparc_mach_dep.S b/src/sparc_mach_dep.S
|
||
|
deleted file mode 100644
|
||
|
index d204dc4..0000000
|
||
|
--- a/src/sparc_mach_dep.S
|
||
|
+++ /dev/null
|
||
|
@@ -1,61 +0,0 @@
|
||
|
-! SPARCompiler 3.0 and later apparently no longer handles
|
||
|
-! asm outside functions. So we need a separate .s file
|
||
|
-! This is only set up for SunOS 5, not SunOS 4.
|
||
|
-! Assumes this is called before the stack contents are
|
||
|
-! examined.
|
||
|
-
|
||
|
- .seg "text"
|
||
|
- .globl GC_save_regs_in_stack
|
||
|
-GC_save_regs_in_stack:
|
||
|
-#if defined(__arch64__) || defined(__sparcv9)
|
||
|
- save %sp,-128,%sp
|
||
|
- flushw
|
||
|
- ret
|
||
|
- restore %sp,2047+128,%o0
|
||
|
-#else /* 32 bit SPARC */
|
||
|
- ta 0x3 ! ST_FLUSH_WINDOWS
|
||
|
- mov %sp,%o0
|
||
|
- retl
|
||
|
- nop
|
||
|
-#endif /* 32 bit SPARC */
|
||
|
-.GC_save_regs_in_stack_end:
|
||
|
- .size GC_save_regs_in_stack,.GC_save_regs_in_stack_end-GC_save_regs_in_stack
|
||
|
-
|
||
|
-! GC_clear_stack_inner(arg, limit) clears stack area up to limit and
|
||
|
-! returns arg. Stack clearing is crucial on SPARC, so we supply
|
||
|
-! an assembly version that s more careful. Assumes limit is hotter
|
||
|
-! than sp, and limit is 8 byte aligned.
|
||
|
- .globl GC_clear_stack_inner
|
||
|
-GC_clear_stack_inner:
|
||
|
-#if defined(__arch64__) || defined(__sparcv9)
|
||
|
- mov %sp,%o2 ! Save sp
|
||
|
- add %sp,2047-8,%o3 ! p = sp+bias-8
|
||
|
- add %o1,-2047-192,%sp ! Move sp out of the way,
|
||
|
- ! so that traps still work.
|
||
|
- ! Includes some extra words
|
||
|
- ! so we can be sloppy below.
|
||
|
-loop:
|
||
|
- stx %g0,[%o3] ! *(long *)p = 0
|
||
|
- cmp %o3,%o1
|
||
|
- bgu,pt %xcc, loop ! if (p > limit) goto loop
|
||
|
- add %o3,-8,%o3 ! p -= 8 (delay slot)
|
||
|
- retl
|
||
|
- mov %o2,%sp ! Restore sp., delay slot
|
||
|
-#else /* 32 bit SPARC */
|
||
|
- mov %sp,%o2 ! Save sp
|
||
|
- add %sp,-8,%o3 ! p = sp-8
|
||
|
- clr %g1 ! [g0,g1] = 0
|
||
|
- add %o1,-0x60,%sp ! Move sp out of the way,
|
||
|
- ! so that traps still work.
|
||
|
- ! Includes some extra words
|
||
|
- ! so we can be sloppy below.
|
||
|
-loop:
|
||
|
- std %g0,[%o3] ! *(long long *)p = 0
|
||
|
- cmp %o3,%o1
|
||
|
- bgu loop ! if (p > limit) goto loop
|
||
|
- add %o3,-8,%o3 ! p -= 8 (delay slot)
|
||
|
- retl
|
||
|
- mov %o2,%sp ! Restore sp., delay slot
|
||
|
-#endif /* 32 bit SPARC */
|
||
|
-.GC_clear_stack_inner_end:
|
||
|
- .size GC_clear_stack_inner,.GC_clear_stack_inner_end-GC_clear_stack_inner
|
||
|
diff --git a/src/sparc_netbsd_mach_dep.s b/src/sparc_netbsd_mach_dep.s
|
||
|
deleted file mode 100644
|
||
|
index 14feb15..0000000
|
||
|
--- a/src/sparc_netbsd_mach_dep.s
|
||
|
+++ /dev/null
|
||
|
@@ -1,34 +0,0 @@
|
||
|
-! SPARCompiler 3.0 and later apparently no longer handles
|
||
|
-! asm outside functions. So we need a separate .s file
|
||
|
-! This is only set up for SunOS 4.
|
||
|
-! Assumes this is called before the stack contents are
|
||
|
-! examined.
|
||
|
-
|
||
|
-#include "machine/asm.h"
|
||
|
-
|
||
|
- .seg "text"
|
||
|
- .globl _C_LABEL(GC_save_regs_in_stack)
|
||
|
- .globl _C_LABEL(GC_push_regs)
|
||
|
-_C_LABEL(GC_save_regs_in_stack):
|
||
|
-_C_LABEL(GC_push_regs):
|
||
|
- ta 0x3 ! ST_FLUSH_WINDOWS
|
||
|
- mov %sp,%o0
|
||
|
- retl
|
||
|
- nop
|
||
|
-
|
||
|
- .globl _C_LABEL(GC_clear_stack_inner)
|
||
|
-_C_LABEL(GC_clear_stack_inner):
|
||
|
- mov %sp,%o2 ! Save sp
|
||
|
- add %sp,-8,%o3 ! p = sp-8
|
||
|
- clr %g1 ! [g0,g1] = 0
|
||
|
- add %o1,-0x60,%sp ! Move sp out of the way,
|
||
|
- ! so that traps still work.
|
||
|
- ! Includes some extra words
|
||
|
- ! so we can be sloppy below.
|
||
|
-loop:
|
||
|
- std %g0,[%o3] ! *(long long *)p = 0
|
||
|
- cmp %o3,%o1
|
||
|
- bgu loop ! if (p > limit) goto loop
|
||
|
- add %o3,-8,%o3 ! p -= 8 (delay slot)
|
||
|
- retl
|
||
|
- mov %o2,%sp ! Restore sp., delay slot
|
||
|
diff --git a/src/sparc_sunos4_mach_dep.s b/src/sparc_sunos4_mach_dep.s
|
||
|
deleted file mode 100644
|
||
|
index 923f5ea..0000000
|
||
|
--- a/src/sparc_sunos4_mach_dep.s
|
||
|
+++ /dev/null
|
||
|
@@ -1,32 +0,0 @@
|
||
|
-! SPARCompiler 3.0 and later apparently no longer handles
|
||
|
-! asm outside functions. So we need a separate .s file
|
||
|
-! This is only set up for SunOS 4.
|
||
|
-! Assumes this is called before the stack contents are
|
||
|
-! examined.
|
||
|
-
|
||
|
- .seg "text"
|
||
|
- .globl _GC_save_regs_in_stack
|
||
|
- .globl _GC_push_regs
|
||
|
-_GC_save_regs_in_stack:
|
||
|
-_GC_push_regs:
|
||
|
- ta 0x3 ! ST_FLUSH_WINDOWS
|
||
|
- mov %sp,%o0
|
||
|
- retl
|
||
|
- nop
|
||
|
-
|
||
|
- .globl _GC_clear_stack_inner
|
||
|
-_GC_clear_stack_inner:
|
||
|
- mov %sp,%o2 ! Save sp
|
||
|
- add %sp,-8,%o3 ! p = sp-8
|
||
|
- clr %g1 ! [g0,g1] = 0
|
||
|
- add %o1,-0x60,%sp ! Move sp out of the way,
|
||
|
- ! so that traps still work.
|
||
|
- ! Includes some extra words
|
||
|
- ! so we can be sloppy below.
|
||
|
-loop:
|
||
|
- std %g0,[%o3] ! *(long long *)p = 0
|
||
|
- cmp %o3,%o1
|
||
|
- bgu loop ! if (p > limit) goto loop
|
||
|
- add %o3,-8,%o3 ! p -= 8 (delay slot)
|
||
|
- retl
|
||
|
- mov %o2,%sp ! Restore sp., delay slot
|
||
|
--
|
||
|
1.7.10.4
|
||
|
|