diff options
Diffstat (limited to 'lang/icon/patches/patch-ac')
-rw-r--r-- | lang/icon/patches/patch-ac | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/lang/icon/patches/patch-ac b/lang/icon/patches/patch-ac new file mode 100644 index 00000000000..a160a3e8d75 --- /dev/null +++ b/lang/icon/patches/patch-ac @@ -0,0 +1,52 @@ +$NetBSD: patch-ac,v 1.5 2003/03/24 12:12:10 jtb Exp $ + +--- /dev/null Mon Mar 24 11:07:29 2003 ++++ config/unix/netbsd/powerpc.s Mon Mar 24 11:40:22 2003 +@@ -0,0 +1,47 @@ ++# Adapted from ppc_macos/rswitch.s ++# ++ ++ .file "rswitch.s" ++ ++ .set RSIZE, 80 # room for regs 13-31, rounded up mod16 ++ ++ .text ++ .align 2 ++ .globl coswitch ++ .type coswitch,@function ++ ++coswitch: ++ stwu %r1, -RSIZE(%r1) # allocate stack frame ++ ++ # Save Old Context: ++ stw %r1, 0(%r3) # SP ++ stw %r2, 4(%r3) # TOC ++ mflr %r0 ++ stw %r0, 8(%r3) # LR (return address) ++ mfcr %r0 ++ stw %r0, 12(%r3) # CR ++ stmw %r13, -RSIZE(%r1) # GPRs 13-31 (save on stack) ++ ++ cmpi 0, %r5, 0 ++ beq first # if first time ++ ++ # Restore new context ++ lwz %r1, 0(%r4) # SP ++ lwz %r2, 4(%r4) # TOC ++ lwz %r0, 8(%r4) # LR ++ mtlr %r0 ++ lwz %r0, 12(%r4) # CR ++ mtcr %r0 ++ lmw %r13, -RSIZE(%r1) # GPRs 13-31 (from stack) ++ ++ addic %r1, %r1, RSIZE # deallocate stack frame ++ blr # return into new context ++ ++first: # First-time call ++ lwz %r1, 0(%r4) # SP as figured by Icon ++ addic %r1, %r1, -64 # save area for callee ++ addi %r3, 0, 0 # arg1 ++ addi %r4, 0, 0 # arg2 ++ bl new_context # new_context(0,0) ++ addi %r3, 0, 0 ++ bl syserr |