summaryrefslogtreecommitdiff
path: root/www/firefox3/files/xptcstubs_asm_sparc64_netbsd.s
diff options
context:
space:
mode:
authormartin <martin@pkgsrc.org>2008-12-13 00:42:26 +0000
committermartin <martin@pkgsrc.org>2008-12-13 00:42:26 +0000
commit95faccc8d07cdfdbc3720ef803e4c759f512b393 (patch)
treecf12f40b214ae6ce79329dfb3adb0a177dfac804 /www/firefox3/files/xptcstubs_asm_sparc64_netbsd.s
parentba74a7c001e49e71b7d0f3995a1d25e67afc24d1 (diff)
downloadpkgsrc-95faccc8d07cdfdbc3720ef803e4c759f512b393.tar.gz
Make firefox3 work on sparc64.
ok: tnn
Diffstat (limited to 'www/firefox3/files/xptcstubs_asm_sparc64_netbsd.s')
-rw-r--r--www/firefox3/files/xptcstubs_asm_sparc64_netbsd.s66
1 files changed, 66 insertions, 0 deletions
diff --git a/www/firefox3/files/xptcstubs_asm_sparc64_netbsd.s b/www/firefox3/files/xptcstubs_asm_sparc64_netbsd.s
new file mode 100644
index 00000000000..6557db78b18
--- /dev/null
+++ b/www/firefox3/files/xptcstubs_asm_sparc64_netbsd.s
@@ -0,0 +1,66 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+ *
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation. Portions created by Netscape are
+ * Copyright (C) 1999 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s):
+ */
+
+ .global SharedStub
+
+/*
+ in the frame for the function that called SharedStub are the
+ rest of the parameters we need
+
+*/
+
+SharedStub:
+! we don't create a new frame yet, but work within the frame of the calling
+! function to give ourselves the other parameters we want
+
+ mov %o0, %o1 ! shuffle the index up to 2nd place
+ mov %i0, %o0 ! the original 'this'
+ add %fp, 0x7ff + 136, %o2 ! previous stack top adjusted to the first argument slot (beyond 'this')
+
+! save off the original incoming parameters that arrived in
+! registers, the ABI guarantees the space for us to do this
+ stx %i1, [%fp + 0x7ff + 136]
+ stx %i2, [%fp + 0x7ff + 144]
+ stx %i3, [%fp + 0x7ff + 152]
+ stx %i4, [%fp + 0x7ff + 160]
+ stx %i5, [%fp + 0x7ff + 168]
+! now we can build our own stack frame
+ save %sp,-(128 + 64),%sp ! room for the register window and
+ ! struct pointer, rounded up to 0 % 64
+! our function now appears to have been called
+! as SharedStub(nsISupports* that, PRUint32 index, PRUint32* args)
+! so we can just copy these through
+
+ mov %i0, %o0
+ mov %i1, %o1
+ mov %i2, %o2
+ call PrepareAndDispatch
+ nop
+ mov %o0,%i0 ! propagate return value
+ b .LL1
+ nop
+.LL1:
+ ret
+ restore
+
+ .size SharedStub, .-SharedStub
+ .type SharedStub, #function