aboutsummaryrefslogtreecommitdiff
path: root/mail/thunderbird-esr/files/patch-xptcall-powerpc
diff options
context:
space:
mode:
Diffstat (limited to 'mail/thunderbird-esr/files/patch-xptcall-powerpc')
-rw-r--r--mail/thunderbird-esr/files/patch-xptcall-powerpc584
1 files changed, 0 insertions, 584 deletions
diff --git a/mail/thunderbird-esr/files/patch-xptcall-powerpc b/mail/thunderbird-esr/files/patch-xptcall-powerpc
deleted file mode 100644
index ee6d3be4555a..000000000000
--- a/mail/thunderbird-esr/files/patch-xptcall-powerpc
+++ /dev/null
@@ -1,584 +0,0 @@
---- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc_freebsd.s.orig 2009-09-11 23:18:37.000000000 +0200
-+++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc_freebsd.s 2009-09-19 21:18:53.000000000 +0200
-@@ -0,0 +1,110 @@
-+# -*- 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
-+.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19
-+.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24
-+.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29
-+.set r30,30; .set r31,31
-+.set f0,0; .set f1,1; .set f2,2; .set f3,3; .set f4,4
-+.set f5,5; .set f6,6; .set f7,7; .set f8,8; .set f9,9
-+.set f10,10; .set f11,11; .set f12,12; .set f13,13; .set f14,14
-+.set f15,15; .set f16,16; .set f17,17; .set f18,18; .set f19,19
-+.set f20,20; .set f21,21; .set f22,22; .set f23,23; .set f24,24
-+.set f25,25; .set f26,26; .set f27,27; .set f28,28; .set f29,29
-+.set f30,30; .set f31,31
-+
-+ .section ".text"
-+ .align 2
-+ .globl XPTC_InvokeByIndex
-+ .type XPTC_InvokeByIndex,@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
-+ stw r30,16(sp)
-+ stw r31,20(sp)
-+
-+ 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
-+ 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 )
-+
-+ bl invoke_copy_to_stack@local # (args, paramCount, params, gpregs, fpregs)
-+
-+ lfd f1,32(r30) # load FP registers with method parameters
-+ lfd f2,40(r30)
-+ lfd f3,48(r30)
-+ lfd f4,56(r30)
-+ lfd f5,64(r30)
-+ lfd f6,72(r30)
-+ 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,2 # convert to offset ( *= 4 )
-+ lwzx r0,r5,r4 # r0 <= methodpointer ( == vtable + offset )
-+
-+ lwz r4,4(r30) # load GP regs with method parameters
-+ lwz r5,8(r30)
-+ lwz r6,12(r30)
-+ lwz r7,16(r30)
-+ lwz r8,20(r30)
-+ lwz r9,24(r30)
-+ lwz r10,28(r30)
-+
-+ mtlr r0 # copy methodpointer to LR
-+ blrl # call method
-+
-+ lwz r30,16(r31) # restore r30 & r31
-+ lwz r31,20(r31)
-+
-+ lwz r11,0(sp) # clean up the stack
-+ lwz r0,4(r11)
-+ mtlr r0
-+ mr sp,r11
-+ blr
---- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_ppc_freebsd.cpp.orig 2009-09-11 23:18:37.000000000 +0200
-+++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_ppc_freebsd.cpp 2009-09-19 21:22:23.000000000 +0200
-@@ -0,0 +1,141 @@
-+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-+/* ***** 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) 1998
-+ * 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 of 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 ***** */
-+
-+// Platform specific code to invoke XPCOM methods on native objects
-+
-+// The purpose of XPTC_InvokeByIndex() is to map a platform
-+// indepenpent call to the platform ABI. To do that,
-+// XPTC_InvokeByIndex() has to determine the method to call via vtable
-+// access. The parameters for the method are read from the
-+// nsXPTCVariant* and prepared for th native ABI. For the Linux/PPC
-+// ABI this means that the first 8 integral and floating point
-+// parameters are passed in registers.
-+
-+#include "xptcprivate.h"
-+
-+// 8 integral parameters are passed in registers
-+#define GPR_COUNT 8
-+
-+// 8 floating point parameters are passed in registers, floats are
-+// promoted to doubles when passed in registers
-+#define FPR_COUNT 8
-+
-+extern "C" PRUint32
-+invoke_count_words(PRUint32 paramCount, nsXPTCVariant* s)
-+{
-+ return PRUint32(((paramCount * 2) + 3) & ~3);
-+}
-+
-+extern "C" void
-+invoke_copy_to_stack(PRUint32* d,
-+ PRUint32 paramCount,
-+ nsXPTCVariant* s,
-+ PRUint32* gpregs,
-+ double* fpregs)
-+{
-+ PRUint32 gpr = 1; // skip one GP reg for 'that'
-+ PRUint32 fpr = 0;
-+ PRUint32 tempu32;
-+ PRUint64 tempu64;
-+
-+ for(uint32 i = 0; i < paramCount; i++, s++) {
-+ if(s->IsPtrData())
-+ tempu32 = (PRUint32) s->ptr;
-+ else {
-+ switch(s->type) {
-+ case nsXPTType::T_FLOAT: break;
-+ case nsXPTType::T_DOUBLE: break;
-+ case nsXPTType::T_I8: tempu32 = s->val.i8; break;
-+ case nsXPTType::T_I16: tempu32 = s->val.i16; break;
-+ case nsXPTType::T_I32: tempu32 = s->val.i32; break;
-+ case nsXPTType::T_I64: tempu64 = s->val.i64; break;
-+ case nsXPTType::T_U8: tempu32 = s->val.u8; break;
-+ case nsXPTType::T_U16: tempu32 = s->val.u16; break;
-+ case nsXPTType::T_U32: tempu32 = s->val.u32; break;
-+ case nsXPTType::T_U64: tempu64 = s->val.u64; break;
-+ case nsXPTType::T_BOOL: tempu32 = s->val.b; break;
-+ case nsXPTType::T_CHAR: tempu32 = s->val.c; break;
-+ case nsXPTType::T_WCHAR: tempu32 = s->val.wc; break;
-+ default: tempu32 = (PRUint32) s->val.p; break;
-+ }
-+ }
-+
-+ if (!s->IsPtrData() && s->type == nsXPTType::T_DOUBLE) {
-+ if (fpr < FPR_COUNT)
-+ fpregs[fpr++] = s->val.d;
-+ else {
-+ if ((PRUint32) d & 4) d++; // doubles are 8-byte aligned on stack
-+ *((double*) d) = s->val.d;
-+ d += 2;
-+ }
-+ }
-+ else if (!s->IsPtrData() && s->type == nsXPTType::T_FLOAT) {
-+ if (fpr < FPR_COUNT)
-+ fpregs[fpr++] = s->val.f; // if passed in registers, floats are promoted to doubles
-+ else
-+ *((float*) d++) = s->val.f;
-+ }
-+ else if (!s->IsPtrData() && (s->type == nsXPTType::T_I64
-+ || s->type == nsXPTType::T_U64)) {
-+ if ((gpr + 1) < GPR_COUNT) {
-+ if (gpr & 1) gpr++; // longlongs are aligned in odd/even register pairs, eg. r5/r6
-+ *((PRUint64*) &gpregs[gpr]) = tempu64;
-+ gpr += 2;
-+ }
-+ else {
-+ if ((PRUint32) d & 4) d++; // longlongs are 8-byte aligned on stack
-+ *((PRUint64*) d) = tempu64;
-+ d += 2;
-+ }
-+ }
-+ else {
-+ if (gpr < GPR_COUNT)
-+ gpregs[gpr++] = tempu32;
-+ else
-+ *d++ = tempu32;
-+ }
-+
-+ }
-+}
-+
-+extern "C"
-+XPTC_PUBLIC_API(nsresult)
-+XPTC_InvokeByIndex(nsISupports* that, PRUint32 methodIndex,
-+ PRUint32 paramCount, nsXPTCVariant* params);
---- xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ppc_freebsd.s.orig 2009-09-11 23:18:37.000000000 +0200
-+++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ppc_freebsd.s 2009-09-11 23:18:37.000000000 +0200
-@@ -0,0 +1,89 @@
-+# -*- 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
-+.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19
-+.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24
-+.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29
-+.set r30,30; .set r31,31
-+.set f0,0; .set f1,1; .set f2,2; .set f3,3; .set f4,4
-+.set f5,5; .set f6,6; .set f7,7; .set f8,8; .set f9,9
-+.set f10,10; .set f11,11; .set f12,12; .set f13,13; .set f14,14
-+.set f15,15; .set f16,16; .set f17,17; .set f18,18; .set f19,19
-+.set f20,20; .set f21,21; .set f22,22; .set f23,23; .set f24,24
-+.set f25,25; .set f26,26; .set f27,27; .set f28,28; .set f29,29
-+.set f30,30; .set f31,31
-+
-+ .section ".text"
-+ .align 2
-+ .globl SharedStub
-+ .type SharedStub,@function
-+
-+SharedStub:
-+ stwu sp,-112(sp) # room for
-+ # linkage (8),
-+ # gprData (32),
-+ # fprData (64),
-+ # stack alignment(8)
-+ mflr r0
-+ stw r0,116(sp) # save LR backchain
-+
-+ stw r4,12(sp) # save GP registers
-+ stw r5,16(sp) # (n.b. that we don't save r3
-+ stw r6,20(sp) # because PrepareAndDispatch() is savvy)
-+ stw r7,24(sp)
-+ stw r8,28(sp)
-+ stw r9,32(sp)
-+ stw r10,36(sp)
-+
-+ stfd f1,40(sp) # save FP registers
-+ stfd f2,48(sp)
-+ stfd f3,56(sp)
-+ stfd f4,64(sp)
-+ stfd f5,72(sp)
-+ stfd f6,80(sp)
-+ stfd f7,88(sp)
-+ stfd f8,96(sp)
-+
-+ # r3 has the 'self' pointer already
-+
-+ mr r4,r11 # r4 <= methodIndex selector, passed
-+ # via r11 in the nsXPTCStubBase::StubXX() call
-+
-+ addi r5,sp,120 # r5 <= pointer to callers args area,
-+ # beyond r3-r10/f1-f8 mapped range
-+
-+ addi r6,sp,8 # r6 <= gprData
-+ addi r7,sp,40 # r7 <= fprData
-+
-+ bl PrepareAndDispatch@local # Go!
-+
-+ lwz r0,116(sp) # restore LR
-+ mtlr r0
-+ la sp,112(sp) # clean up the stack
-+ blr
-+
---- xpcom/reflect/xptcall/src/md/unix/xptcstubs_ppc_freebsd.cpp.orig 2009-09-11 23:18:38.000000000 +0200
-+++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_ppc_freebsd.cpp 2009-09-19 21:48:12.000000000 +0200
-@@ -0,0 +1,232 @@
-+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-+/* ***** 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 of 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 ***** */
-+
-+// Implement shared vtbl methods.
-+
-+#include "xptcprivate.h"
-+
-+// The PPC/SYSV ABI passes the first 8 integral
-+// parameters and the first 8 floating point parameters in registers
-+// (r3-r10 and f1-f8), no stack space is allocated for these by the
-+// caller. The rest of the parameters are passed in the callers stack
-+// area. The stack pointer has to retain 16-byte alignment, longlongs
-+// and doubles are aligned on 8-byte boundaries.
-+
-+#define PARAM_BUFFER_COUNT 16
-+#define GPR_COUNT 8
-+#define FPR_COUNT 8
-+
-+// PrepareAndDispatch() is called by SharedStub() and calls the actual method.
-+//
-+// - 'args[]' contains the arguments passed on stack
-+// - 'gprData[]' contains the arguments passed in integer registers
-+// - 'fprData[]' contains the arguments passed in floating point registers
-+//
-+// The parameters are mapped into an array of type 'nsXPTCMiniVariant'
-+// and then the method gets called.
-+
-+extern "C" nsresult
-+PrepareAndDispatch(nsXPTCStubBase* self,
-+ PRUint32 methodIndex,
-+ PRUint32* args,
-+ PRUint32 *gprData,
-+ double *fprData)
-+{
-+ nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT];
-+ nsXPTCMiniVariant* dispatchParams = NULL;
-+ nsIInterfaceInfo* iface_info = NULL;
-+ const nsXPTMethodInfo* info;
-+ PRUint32 paramCount;
-+ PRUint32 i;
-+ nsresult result = NS_ERROR_FAILURE;
-+
-+ NS_ASSERTION(self,"no self");
-+
-+ self->GetInterfaceInfo(&iface_info);
-+ NS_ASSERTION(iface_info,"no interface info");
-+ if (! iface_info)
-+ return NS_ERROR_UNEXPECTED;
-+
-+ iface_info->GetMethodInfo(PRUint16(methodIndex), &info);
-+ NS_ASSERTION(info,"no method info");
-+ if (! info)
-+ return NS_ERROR_UNEXPECTED;
-+
-+ paramCount = info->GetParamCount();
-+
-+ // setup variant array pointer
-+ if(paramCount > PARAM_BUFFER_COUNT)
-+ dispatchParams = new nsXPTCMiniVariant[paramCount];
-+ else
-+ dispatchParams = paramBuffer;
-+
-+ NS_ASSERTION(dispatchParams,"no place for params");
-+ if (! dispatchParams)
-+ return NS_ERROR_OUT_OF_MEMORY;
-+
-+ PRUint32* ap = args;
-+ PRUint32 gpr = 1; // skip one GPR register
-+ PRUint32 fpr = 0;
-+ PRUint32 tempu32;
-+ PRUint64 tempu64;
-+
-+ for(i = 0; i < paramCount; i++) {
-+ const nsXPTParamInfo& param = info->GetParam(i);
-+ const nsXPTType& type = param.GetType();
-+ nsXPTCMiniVariant* dp = &dispatchParams[i];
-+
-+ if (!param.IsOut() && type == nsXPTType::T_DOUBLE) {
-+ if (fpr < FPR_COUNT)
-+ dp->val.d = fprData[fpr++];
-+ else {
-+ if ((PRUint32) ap & 4) ap++; // doubles are 8-byte aligned on stack
-+ dp->val.d = *(double*) ap;
-+ ap += 2;
-+ }
-+ continue;
-+ }
-+ else if (!param.IsOut() && type == nsXPTType::T_FLOAT) {
-+ if (fpr < FPR_COUNT)
-+ dp->val.f = (float) fprData[fpr++]; // in registers floats are passed as doubles
-+ else
-+ dp->val.f = *(float*) ap++;
-+ continue;
-+ }
-+ else if (!param.IsOut() && (type == nsXPTType::T_I64
-+ || type == nsXPTType::T_U64)) {
-+ if (gpr & 1) gpr++; // longlongs are aligned in odd/even register pairs, eg. r5/r6
-+ if ((gpr + 1) < GPR_COUNT) {
-+ tempu64 = *(PRUint64*) &gprData[gpr];
-+ gpr += 2;
-+ }
-+ else {
-+ if ((PRUint32) ap & 4) ap++; // longlongs are 8-byte aligned on stack
-+ tempu64 = *(PRUint64*) ap;
-+ ap += 2;
-+ }
-+ }
-+ else {
-+ if (gpr < GPR_COUNT)
-+ tempu32 = gprData[gpr++];
-+ else
-+ tempu32 = *ap++;
-+ }
-+
-+ if(param.IsOut() || !type.IsArithmetic()) {
-+ dp->val.p = (void*) tempu32;
-+ continue;
-+ }
-+
-+ switch(type) {
-+ case nsXPTType::T_I8: dp->val.i8 = (PRInt8) tempu32; break;
-+ case nsXPTType::T_I16: dp->val.i16 = (PRInt16) tempu32; break;
-+ case nsXPTType::T_I32: dp->val.i32 = (PRInt32) tempu32; break;
-+ case nsXPTType::T_I64: dp->val.i64 = (PRInt64) tempu64; break;
-+ case nsXPTType::T_U8: dp->val.u8 = (PRUint8) tempu32; break;
-+ case nsXPTType::T_U16: dp->val.u16 = (PRUint16) tempu32; break;
-+ case nsXPTType::T_U32: dp->val.u32 = (PRUint32) tempu32; break;
-+ case nsXPTType::T_U64: dp->val.u64 = (PRUint64) tempu64; break;
-+ case nsXPTType::T_BOOL: dp->val.b = (PRBool) tempu32; break;
-+ case nsXPTType::T_CHAR: dp->val.c = (char) tempu32; break;
-+ case nsXPTType::T_WCHAR: dp->val.wc = (wchar_t) tempu32; break;
-+
-+ default:
-+ NS_ASSERTION(0, "bad type");
-+ break;
-+ }
-+ }
-+
-+ result = self->CallMethod((PRUint16) methodIndex, info, dispatchParams);
-+
-+ NS_RELEASE(iface_info);
-+
-+ if (dispatchParams != paramBuffer)
-+ delete [] dispatchParams;
-+
-+ return result;
-+}
-+
-+// Load r11 with the constant 'n' and branch to SharedStub().
-+
-+// As G++3 ABI contains the length of the functionname in the mangled
-+// name, it is difficult to get a generic assembler mechanism like
-+// in the G++ 2.95 case.
-+// Create names would be like:
-+// _ZN14nsXPTCStubBase5Stub1Ev
-+// _ZN14nsXPTCStubBase6Stub12Ev
-+// _ZN14nsXPTCStubBase7Stub123Ev
-+// _ZN14nsXPTCStubBase8Stub1234Ev
-+// etc.
-+// Use assembler directives to get the names right...
-+
-+# define STUB_ENTRY(n) \
-+__asm__ ( \
-+ ".align 2 \n\t" \
-+ ".if "#n" < 10 \n\t" \
-+ ".globl _ZN14nsXPTCStubBase5Stub"#n"Ev \n\t" \
-+ ".type _ZN14nsXPTCStubBase5Stub"#n"Ev,@function \n\n" \
-+"_ZN14nsXPTCStubBase5Stub"#n"Ev: \n\t" \
-+ \
-+ ".elseif "#n" < 100 \n\t" \
-+ ".globl _ZN14nsXPTCStubBase6Stub"#n"Ev \n\t" \
-+ ".type _ZN14nsXPTCStubBase6Stub"#n"Ev,@function \n\n" \
-+"_ZN14nsXPTCStubBase6Stub"#n"Ev: \n\t" \
-+ \
-+ ".elseif "#n" < 1000 \n\t" \
-+ ".globl _ZN14nsXPTCStubBase7Stub"#n"Ev \n\t" \
-+ ".type _ZN14nsXPTCStubBase7Stub"#n"Ev,@function \n\n" \
-+"_ZN14nsXPTCStubBase7Stub"#n"Ev: \n\t" \
-+ \
-+ ".else \n\t" \
-+ ".err \"stub number "#n" >= 1000 not yet supported\"\n" \
-+ ".endif \n\t" \
-+ \
-+ "li 11,"#n" \n\t" \
-+ "b SharedStub@local \n" \
-+);
-+
-+#define SENTINEL_ENTRY(n) \
-+nsresult nsXPTCStubBase::Sentinel##n() \
-+{ \
-+ NS_ASSERTION(0,"nsXPTCStubBase::Sentinel called"); \
-+ return NS_ERROR_NOT_IMPLEMENTED; \
-+}
-+
-+#include "xptcstubsdef.inc"