ff57234978
work for some users (sparc64 support, for example, is busted and won't appear again until firefox-5.0).
200 lines
7.9 KiB
Text
200 lines
7.9 KiB
Text
$NetBSD: patch-xl,v 1.1.1.1 2011/04/19 11:16:12 tnn Exp $
|
|
|
|
NetBSD ppc xptcall support code. Originally from pkgsrc/www/mozilla.
|
|
|
|
--- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc_netbsd.s.orig 2009-06-29 18:15:33.000000000 +0200
|
|
+++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc_netbsd.s
|
|
@@ -1,43 +1,43 @@
|
|
-# -*- Mode: Asm -*-
|
|
-#
|
|
-# ***** BEGIN LICENSE BLOCK *****
|
|
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
-#
|
|
-# The contents of this file are subject to the Mozilla 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/MPL/
|
|
-#
|
|
-# 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 the Initial Developer are Copyright (C) 1999
|
|
-# the Initial Developer. All Rights Reserved.
|
|
-#
|
|
-# Contributor(s):
|
|
-# Franz.Sirl-kernel@lauterbach.com (Franz Sirl)
|
|
-# beard@netscape.com (Patrick Beard)
|
|
-# waterson@netscape.com (Chris Waterson)
|
|
-#
|
|
-# Alternatively, the contents of this file may be used under the terms of
|
|
-# either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
-# in which case the provisions of the GPL or the LGPL are applicable instead
|
|
-# of those above. If you wish to allow use of your version of this file only
|
|
-# under the terms of either the GPL or the LGPL, and not to allow others to
|
|
-# use your version of this file under the terms of the MPL, indicate your
|
|
-# decision by deleting the provisions above and replace them with the notice
|
|
-# and other provisions required by the GPL or the LGPL. If you do not delete
|
|
-# the provisions above, a recipient may use your version of this file under
|
|
-# the terms of any one of the MPL, the GPL or the LGPL.
|
|
-#
|
|
-# ***** END LICENSE BLOCK *****
|
|
+// -*- Mode: Asm -*-
|
|
+//
|
|
+// ***** BEGIN LICENSE BLOCK *****
|
|
+// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
+//
|
|
+// The contents of this file are subject to the Mozilla 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/MPL/
|
|
+//
|
|
+// 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 the Initial Developer are Copyright (C) 1999
|
|
+// the Initial Developer. All Rights Reserved.
|
|
+//
|
|
+// Contributor(s):
|
|
+// Franz.Sirl-kernel@lauterbach.com (Franz Sirl)
|
|
+// beard@netscape.com (Patrick Beard)
|
|
+// waterson@netscape.com (Chris Waterson)
|
|
+//
|
|
+// Alternatively, the contents of this file may be used under the terms of
|
|
+// either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
+// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
+// in which case the provisions of the GPL or the LGPL are applicable instead
|
|
+// of those above. If you wish to allow use of your version of this file only
|
|
+// under the terms of either the GPL or the LGPL, and not to allow others to
|
|
+// use your version of this file under the terms of the MPL, indicate your
|
|
+// decision by deleting the provisions above and replace them with the notice
|
|
+// and other provisions required by the GPL or the LGPL. If you do not delete
|
|
+// the provisions above, a recipient may use your version of this file under
|
|
+// the terms of any one of the MPL, the GPL or the LGPL.
|
|
+//
|
|
+// ***** END LICENSE BLOCK *****
|
|
.set r0,0; .set sp,1; .set RTOC,2; .set r3,3; .set r4,4
|
|
.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9
|
|
.set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14
|
|
@@ -55,41 +55,41 @@
|
|
|
|
.section ".text"
|
|
.align 2
|
|
- .globl XPTC_InvokeByIndex
|
|
- .type XPTC_InvokeByIndex,@function
|
|
+ .globl NS_InvokeByIndex_P
|
|
+ .type NS_InvokeByIndex_P,@function
|
|
|
|
-#
|
|
-# XPTC_InvokeByIndex(nsISupports* that, PRUint32 methodIndex,
|
|
-# PRUint32 paramCount, nsXPTCVariant* params)
|
|
-#
|
|
-
|
|
-XPTC_InvokeByIndex:
|
|
- stwu sp,-32(sp) # setup standard stack frame
|
|
- mflr r0 # save LR
|
|
- stw r3,8(sp) # r3 <= that
|
|
- stw r4,12(sp) # r4 <= methodIndex
|
|
+//
|
|
+// NS_InvokeByIndex_P(nsISupports* that, PRUint32 methodIndex,
|
|
+// PRUint32 paramCount, nsXPTCVariant* params)
|
|
+//
|
|
+
|
|
+NS_InvokeByIndex_P:
|
|
+ stwu sp,-32(sp) // setup standard stack frame
|
|
+ mflr r0 // save LR
|
|
+ stw r3,8(sp) // r3 <= that
|
|
+ stw r4,12(sp) // r4 <= methodIndex
|
|
stw r30,16(sp)
|
|
stw r31,20(sp)
|
|
|
|
- stw r0,36(sp) # store LR backchain
|
|
+ stw r0,36(sp) // store LR backchain
|
|
mr r31,sp
|
|
|
|
- rlwinm r10,r5,3,0,27 # r10 = (ParamCount * 2 * 4) & ~0x0f
|
|
- addi r0,r10,96 # reserve stack for GPR and FPR register save area r0 = r10 + 96
|
|
- lwz r9,0(sp) # r9 = backchain
|
|
+ rlwinm r10,r5,3,0,27 // r10 = (ParamCount * 2 * 4) & ~0x0f
|
|
+ addi r0,r10,96 // reserve stack for GPR and FPR register save area r0 = r10 + 96
|
|
+ lwz r9,0(sp) // r9 = backchain
|
|
neg r0,r0
|
|
- stwux r9,sp,r0 # reserve stack sapce and save SP backchain
|
|
+ stwux r9,sp,r0 // reserve stack sapce and save SP backchain
|
|
|
|
- addi r3,sp,8 # r3 <= args
|
|
- mr r4,r5 # r4 <= paramCount
|
|
- mr r5,r6 # r5 <= params
|
|
- add r6,r3,r10 # r6 <= gpregs ( == args + r10 )
|
|
- mr r30,r6 # store in r30 for use later...
|
|
- addi r7,r6,32 # r7 <= fpregs ( == gpregs + 32 )
|
|
+ addi r3,sp,8 // r3 <= args
|
|
+ mr r4,r5 // r4 <= paramCount
|
|
+ mr r5,r6 // r5 <= params
|
|
+ add r6,r3,r10 // r6 <= gpregs ( == args + r10 )
|
|
+ mr r30,r6 // store in r30 for use later...
|
|
+ addi r7,r6,32 // r7 <= fpregs ( == gpregs + 32 )
|
|
|
|
- bl invoke_copy_to_stack@local # (args, paramCount, params, gpregs, fpregs)
|
|
+ bl invoke_copy_to_stack@local // (args, paramCount, params, gpregs, fpregs)
|
|
|
|
- lfd f1,32(r30) # load FP registers with method parameters
|
|
+ lfd f1,32(r30) // load FP registers with method parameters
|
|
lfd f2,40(r30)
|
|
lfd f3,48(r30)
|
|
lfd f4,56(r30)
|
|
@@ -98,18 +98,13 @@ XPTC_InvokeByIndex:
|
|
lfd f7,80(r30)
|
|
lfd f8,88(r30)
|
|
|
|
- lwz r3,8(r31) # r3 <= that
|
|
- lwz r4,12(r31) # r4 <= methodIndex
|
|
- lwz r5,0(r3) # r5 <= vtable ( == *that )
|
|
- slwi r4,r4,3 # convert to offset ( *= 8 )
|
|
- addi r4,r4,8 # skip first two vtable entries
|
|
- add r4,r4,r5
|
|
- lhz r0,0(r4) # virtual base offset
|
|
- extsh r0,r0
|
|
- add r3,r3,r0
|
|
- lwz r0,4(r4) # r0 <= methodpointer ( == vtable + offset )
|
|
+ lwz r3,8(r31) // r3 <= that
|
|
+ lwz r4,12(r31) // r4 <= methodIndex
|
|
+ lwz r5,0(r3) // r5 <= vtable ( == *that )
|
|
+ slwi r4,r4,2 // convert to offset ( *= 4 )
|
|
+ lwzx r0,r4,r5 // r0 <= methodpointer ( == vtable + offset )
|
|
|
|
- lwz r4,4(r30) # load GP regs with method parameters
|
|
+ lwz r4,4(r30) // load GP regs with method parameters
|
|
lwz r5,8(r30)
|
|
lwz r6,12(r30)
|
|
lwz r7,16(r30)
|
|
@@ -117,13 +112,13 @@ XPTC_InvokeByIndex:
|
|
lwz r9,24(r30)
|
|
lwz r10,28(r30)
|
|
|
|
- mtlr r0 # copy methodpointer to LR
|
|
- blrl # call method
|
|
+ mtlr r0 // copy methodpointer to LR
|
|
+ blrl // call method
|
|
|
|
- lwz r30,16(r31) # restore r30 & r31
|
|
+ lwz r30,16(r31) // restore r30 & r31
|
|
lwz r31,20(r31)
|
|
|
|
- lwz r11,0(sp) # clean up the stack
|
|
+ lwz r11,0(sp) // clean up the stack
|
|
lwz r0,4(r11)
|
|
mtlr r0
|
|
mr sp,r11
|