--- mozilla/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_linux_alpha.cpp 2002-04-10 05:37:38.000000000 +0200 +++ mozilla-alpha/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_linux_alpha.cpp 2002-10-06 10:44:59.000000000 +0200 @@ -20,6 +20,7 @@ * the Initial Developer. All Rights Reserved. * * Contributor(s): + * Glen Nakamura * * 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 @@ -37,16 +38,14 @@ /* Platform specific code to invoke XPCOM methods on native objects */ -/* contributed by Glen Nakamura */ - #include "xptcprivate.h" /* Prototype specifies unmangled function name and disables unused warning */ -static void +void invoke_copy_to_stack(PRUint64* d, PRUint32 paramCount, nsXPTCVariant* s) __asm__("invoke_copy_to_stack") __attribute__((unused)); -static void +void invoke_copy_to_stack(PRUint64* d, PRUint32 paramCount, nsXPTCVariant* s) { const PRUint8 NUM_ARG_REGS = 6-1; // -1 for "this" pointer @@ -163,7 +162,11 @@ "bis $16,$16,$1\n\t" /* load "this" */ "ldq $2,16($15)\n\t" /* load "methodIndex" */ "ldq $1,0($1)\n\t" /* load vtable */ +#if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100 /* G++ V3 ABI */ + "s8addq $2,$31,$2\n\t" /* vtable index = "methodIndex" * 8 */ +#else /* not G++ V3 ABI */ "s8addq $2,16,$2\n\t" /* vtable index = "methodIndex" * 8 + 16 */ +#endif /* G++ V3 ABI */ "addq $1,$2,$1\n\t" "ldq $27,0($1)\n\t" /* load address of function */ "jsr $26,($27),0\n\t" /* call virtual function */ @@ -176,4 +179,3 @@ "ret $31,($26),1\n\t" ".end XPTC_InvokeByIndex" ); - --- mozilla/xpcom/reflect/xptcall/src/md/unix/xptcstubs_linux_alpha.cpp 2002-04-10 05:37:42.000000000 +0200 +++ mozilla-alpha/xpcom/reflect/xptcall/src/md/unix/xptcstubs_linux_alpha.cpp 2002-10-06 10:45:10.000000000 +0200 @@ -20,6 +20,7 @@ * the Initial Developer. All Rights Reserved. * * Contributor(s): + * Glen Nakamura * * 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 @@ -37,16 +38,14 @@ /* Implement shared vtbl methods. */ -/* contributed by Glen Nakamura */ - #include "xptcprivate.h" /* Prototype specifies unmangled function name and disables unused warning */ -static nsresult +nsresult PrepareAndDispatch(nsXPTCStubBase* self, uint32 methodIndex, PRUint64* args) __asm__("PrepareAndDispatch") __attribute__((unused)); -static nsresult +nsresult PrepareAndDispatch(nsXPTCStubBase* self, uint32 methodIndex, PRUint64* args) { const PRUint8 PARAM_BUFFER_COUNT = 16; @@ -188,23 +187,45 @@ * nsresult nsXPTCStubBase::Stub##n() * Sets register $1 to "methodIndex" and jumps to SharedStub. */ +#define STUB_MANGLED_ENTRY(n, symbol) \ + "#### Stub"#n" ####" "\n\t" \ + ".text" "\n\t" \ + ".align 5" "\n\t" \ + ".globl " symbol "\n\t" \ + ".ent " symbol "\n" \ +symbol ":" "\n\t" \ + ".frame $30,0,$26,0" "\n\t" \ + "ldgp $29,0($27)" "\n" \ +"$" symbol "..ng:" "\n\t" \ + ".prologue 1" "\n\t" \ + "lda $1,"#n "\n\t" \ + "br $31,$SharedStub..ng" "\n\t" \ + ".end " symbol + +#if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100 /* G++ V3 ABI */ + +#define STUB_ENTRY(n) \ +__asm__( \ + ".if "#n" < 10" "\n\t" \ + STUB_MANGLED_ENTRY(n, "_ZN14nsXPTCStubBase5Stub"#n"Ev") "\n\t" \ + ".elseif "#n" < 100" "\n\t" \ + STUB_MANGLED_ENTRY(n, "_ZN14nsXPTCStubBase6Stub"#n"Ev") "\n\t" \ + ".elseif "#n" < 1000" "\n\t" \ + STUB_MANGLED_ENTRY(n, "_ZN14nsXPTCStubBase7Stub"#n"Ev") "\n\t" \ + ".else" "\n\t" \ + ".err \"Stub"#n" >= 1000 not yet supported.\"" "\n\t" \ + ".endif" \ + ); + +#else /* not G++ V3 ABI */ + #define STUB_ENTRY(n) \ __asm__( \ - "#### Stub"#n" ####\n" \ -".text\n\t" \ - ".align 5\n\t" \ - ".globl Stub"#n"__14nsXPTCStubBase\n\t" \ - ".ent Stub"#n"__14nsXPTCStubBase\n" \ -"Stub"#n"__14nsXPTCStubBase:\n\t" \ - ".frame $30,0,$26,0\n\t" \ - "ldgp $29,0($27)\n" \ -"$Stub"#n"__14nsXPTCStubBase..ng:\n\t" \ - ".prologue 1\n\t" \ - "lda $1,"#n"\n\t" \ - "br $31,$SharedStub..ng\n\t" \ - ".end Stub"#n"__14nsXPTCStubBase" \ + STUB_MANGLED_ENTRY(n, "Stub"#n"__14nsXPTCStubBase") \ ); +#endif /* G++ V3 ABI */ + #define SENTINEL_ENTRY(n) \ nsresult nsXPTCStubBase::Sentinel##n() \ { \ @@ -213,4 +234,3 @@ } #include "xptcstubsdef.inc" -