Make Linux/alpha port work on gcc 3.x. b=86446 Patch from Glen Nakamura <glen@imodulo.com>. r=dbaron sr=shaver

This commit is contained in:
dbaron%dbaron.org 2004-09-06 16:14:30 +00:00
Родитель 9184d4fcf8
Коммит eaaee58283
2 изменённых файлов: 41 добавлений и 19 удалений

Просмотреть файл

@ -20,6 +20,7 @@
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Glen Nakamura <glen@imodulo.com>
*
* 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"),
@ -37,8 +38,6 @@
/* Platform specific code to invoke XPCOM methods on native objects */
/* contributed by Glen Nakamura <glen.nakamura@usa.net> */
#include "xptcprivate.h"
/* Prototype specifies unmangled function name and disables unused warning */
@ -163,7 +162,11 @@ __asm__(
"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 @@ __asm__(
"ret $31,($26),1\n\t"
".end XPTC_InvokeByIndex"
);

Просмотреть файл

@ -20,6 +20,7 @@
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Glen Nakamura <glen@imodulo.com>
*
* 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"),
@ -37,8 +38,6 @@
/* Implement shared vtbl methods. */
/* contributed by Glen Nakamura <glen.nakamura@usa.net> */
#include "xptcprivate.h"
/* Prototype specifies unmangled function name and disables unused warning */
@ -188,23 +187,45 @@ __asm__(
* 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__( \
"#### 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" \
".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_MANGLED_ENTRY(n, "Stub"#n"__14nsXPTCStubBase") \
);
#endif /* G++ V3 ABI */
#define SENTINEL_ENTRY(n) \
nsresult nsXPTCStubBase::Sentinel##n() \
{ \
@ -213,4 +234,3 @@ nsresult nsXPTCStubBase::Sentinel##n() \
}
#include "xptcstubsdef.inc"