pkgsrc/www/mozilla/patches/patch-ca
aymeric b726a6a9dc . on PowerPC, update files so that Mozilla works properly when compiled with
gcc version 3+.
. generally reduce diffs to Linux version
. retain compatibility with older ABI (AIX-like) thanks to useful comments
  from Charles Hannum

Thanks to Matthew Green for the fruitful discussion. This should address
PR#23240 as far as mozilla is concerned.
2004-07-07 09:08:31 +00:00

166 lines
6.1 KiB
Text

$NetBSD: patch-ca,v 1.1 2004/07/07 09:08:31 aymeric Exp $
--- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc_netbsd.s.orig 2001-03-11 18:22:17.000000000 +0100
+++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc_netbsd.s
@@ -1,27 +1,28 @@
-# -*- Mode: Asm -*-
-#
-# 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):
-# Franz.Sirl-kernel@lauterbach.com (Franz Sirl)
-# beard@netscape.com (Patrick Beard)
-# waterson@netscape.com (Chris Waterson)
-#
+// -*- Mode: Asm -*-
+//
+// 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):
+// Franz.Sirl-kernel@lauterbach.com (Franz Sirl)
+// beard@netscape.com (Patrick Beard)
+// waterson@netscape.com (Chris Waterson)
+//
+
.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
@@ -42,38 +43,38 @@
.globl XPTC_InvokeByIndex
.type XPTC_InvokeByIndex,@function
-#
-# XPTC_InvokeByIndex(nsISupports* that, PRUint32 methodIndex,
-# PRUint32 paramCount, nsXPTCVariant* params)
-#
+//
+// 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
+ 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
-
- 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 )
+ stwux r9,sp,r0 // reserve stack space 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 )
- 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)
@@ -82,18 +83,18 @@ 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 )
+#if !((__GNUC__ == 3 && __GNUC_MINOR__ < 2) || __GXX_ABI_VERSION >= 100) // G++ pre-V3 ABI is like that of AIX under NetBSD
+ slwi r4,r4,3 // convert to offset ( *= 8 )
+ addi r4,r4,8 // skip garbage before vtable
+#else
+ slwi r4,r4,2 // convert to offset ( *= 4 )
+#endif
+ lwzx r0,r5,r4 // 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)
@@ -101,13 +102,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