mozilla-ppc64le-xpcom.patch
author Wolfgang Rosenauer <wr@rosenauer.org>
Tue, 18 Mar 2014 22:53:41 +0100
branchesr24
changeset 713 3c7719dfcafa
permissions -rw-r--r--
update to 24.4.0esr
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
713
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     1
# HG changeset patch
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     2
# Parent 1507f021ac93c1d27cfd00e389fba1c9421b3201
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     3
# User Ulrich Weigand <uweigand@de.ibm.com>
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     4
Bug 976648 - powerpc64le-linux support - xptcall port
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     5
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     6
diff --git a/xpcom/reflect/xptcall/src/md/unix/Makefile.in b/xpcom/reflect/xptcall/src/md/unix/Makefile.in
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     7
--- a/xpcom/reflect/xptcall/src/md/unix/Makefile.in
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     8
+++ b/xpcom/reflect/xptcall/src/md/unix/Makefile.in
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     9
@@ -161,17 +161,17 @@ endif
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    10
 ifneq (,$(filter Linuxpowerpc FreeBSDpowerpc,$(OS_ARCH)$(OS_TEST)))
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    11
 ASFILES		:= xptcinvoke_asm_ppc_linux.s xptcstubs_asm_ppc_linux.s
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    12
 AS		:= $(CC) -c -x assembler-with-cpp
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    13
 endif
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    14
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    15
 #
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    16
 # Linux/PPC64
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    17
 #
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    18
-ifneq (,$(filter Linuxpowerpc64 FreeBSDpowerpc64,$(OS_ARCH)$(OS_TEST)))
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    19
+ifneq (,$(filter Linuxpowerpc64 Linuxpowerpc64le FreeBSDpowerpc64,$(OS_ARCH)$(OS_TEST)))
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    20
 ASFILES                := xptcinvoke_asm_ppc64_linux.s xptcstubs_asm_ppc64_linux.s
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    21
 AS             := $(CC) -c -x assembler-with-cpp
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    22
 endif
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    23
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    24
 #
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    25
 # NetBSD/PPC
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    26
 #
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    27
 ifneq (,$(filter NetBSDmacppc NetBSDbebox NetBSDofppc NetBSDprep NetBSDamigappc,$(OS_ARCH)$(OS_TEST)))                           
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    28
diff --git a/xpcom/reflect/xptcall/src/md/unix/moz.build b/xpcom/reflect/xptcall/src/md/unix/moz.build
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    29
--- a/xpcom/reflect/xptcall/src/md/unix/moz.build
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    30
+++ b/xpcom/reflect/xptcall/src/md/unix/moz.build
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    31
@@ -186,16 +186,23 @@ if CONFIG['OS_TEST'] == 'powerpc':
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    32
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    33
 if CONFIG['OS_TEST'] == 'powerpc64':
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    34
     if CONFIG['OS_ARCH'] in ('Linux', 'FreeBSD'):
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    35
           CPP_SOURCES += [
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    36
               'xptcinvoke_ppc64_linux.cpp',
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    37
               'xptcstubs_ppc64_linux.cpp',
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    38
           ]
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    39
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    40
+if CONFIG['OS_TEST'] == 'powerpc64le':
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    41
+    if CONFIG['OS_ARCH'] == 'Linux':
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    42
+          CPP_SOURCES += [
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    43
+              'xptcinvoke_ppc64_linux.cpp',
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    44
+              'xptcstubs_ppc64_linux.cpp',
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    45
+          ]
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    46
+
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    47
 if CONFIG['OS_TEST'] in ('macppc', 'bebox', 'ofppc', 'prep', 'amigappc'):
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    48
     if CONFIG['OS_ARCH'] == 'NetBSD':
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    49
         CPP_SOURCES += [
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    50
             'xptcinvoke_ppc_netbsd.cpp',
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    51
             'xptcstubs_ppc_netbsd.cpp',
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    52
         ]
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    53
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    54
 if CONFIG['OS_ARCH'] == 'OpenBSD' and CONFIG['OS_TEST'] == 'powerpc':
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    55
diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc64_linux.s b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc64_linux.s
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    56
--- a/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc64_linux.s
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    57
+++ b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc64_linux.s
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    58
@@ -12,90 +12,121 @@
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    59
 .set f0,0; .set f1,1; .set f2,2; .set f3,3; .set f4,4
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    60
 .set f5,5; .set f6,6; .set f7,7; .set f8,8; .set f9,9
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    61
 .set f10,10; .set f11,11; .set f12,12; .set f13,13; .set f14,14
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    62
 .set f15,15; .set f16,16; .set f17,17; .set f18,18; .set f19,19
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    63
 .set f20,20; .set f21,21; .set f22,22; .set f23,23; .set f24,24
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    64
 .set f25,25; .set f26,26; .set f27,27; .set f28,28; .set f29,29
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    65
 .set f30,30; .set f31,31
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    66
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    67
+# The ABI defines a fixed stack frame area of 4 doublewords (ELFv2)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    68
+# or 6 doublewords (ELFv1); the last of these doublewords is used
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    69
+# as TOC pointer save area.  The fixed area is followed by a parameter
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    70
+# save area of 8 doublewords (used for vararg routines), followed
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    71
+# by space for parameters passed on the stack.
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    72
+#
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    73
+# We set STACK_TOC to the offset of the TOC pointer save area, and
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    74
+# STACK_PARAMS to the offset of the first on-stack parameter.
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    75
+
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    76
+#if _CALL_ELF == 2
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    77
+#define STACK_TOC      24
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    78
+#define STACK_PARAMS   96
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    79
+#else
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    80
+#define STACK_TOC      40
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    81
+#define STACK_PARAMS   112
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    82
+#endif
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    83
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    84
 #
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    85
 # NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex,
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    86
 #                    uint32_t paramCount, nsXPTCVariant* params)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    87
 #
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    88
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    89
+#if _CALL_ELF == 2
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    90
+        .section ".text"
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    91
+        .type   NS_InvokeByIndex,@function
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    92
+        .globl  NS_InvokeByIndex
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    93
+        .align 2
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    94
+NS_InvokeByIndex:
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    95
+0:      addis 2,12,(.TOC.-0b)@ha
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    96
+        addi 2,2,(.TOC.-0b)@l
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    97
+        .localentry NS_InvokeByIndex,.-NS_InvokeByIndex
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    98
+#else
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    99
         .section ".toc","aw"
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   100
         .section ".text"
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   101
         .align 2
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   102
         .globl  NS_InvokeByIndex
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   103
         .section ".opd","aw"
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   104
         .align 3
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   105
 NS_InvokeByIndex:
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   106
         .quad   .NS_InvokeByIndex,.TOC.@tocbase
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   107
         .previous
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   108
         .type   NS_InvokeByIndex,@function
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   109
 .NS_InvokeByIndex:
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   110
+#endif
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   111
         mflr    0
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   112
         std     0,16(r1)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   113
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   114
         std     r29,-24(r1)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   115
         std     r30,-16(r1)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   116
         std     r31,-8(r1)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   117
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   118
         mr      r29,r3                  # Save 'that' in r29
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   119
         mr      r30,r4                  # Save 'methodIndex' in r30
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   120
         mr      r31,r1                  # Save old frame
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   121
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   122
         # Allocate stack frame with space for params. Since at least the
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   123
         # first 7 parameters (not including 'that') will be in registers,
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   124
         # we don't actually need stack space for those. We must ensure
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   125
         # that the stack remains 16-byte aligned.
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   126
         #
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   127
-        #  | ..128-byte stack frame.. |     | 7 GP | 13 FP | 3 NV |
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   128
-        #  |               |(params)........| regs | regs  | regs |
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   129
-        # (r1)...........(+112)....(+128)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   130
-        #                               (-23*8).(-16*8).(-3*8)..(r31)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   131
+        #  | (fixed area + |                | 7 GP | 13 FP | 3 NV |
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   132
+        #  |  param. save) |(params)........| regs | regs  | regs |
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   133
+        # (r1)......(+STACK_PARAMS)...  (-23*8).(-16*8).(-3*8)..(r31)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   134
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   135
         # +stack frame, -unused stack params, +regs storage, +1 for alignment
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   136
-        addi    r7,r5,((112/8)-7+7+13+3+1)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   137
+        addi    r7,r5,((STACK_PARAMS/8)-7+7+13+3+1)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   138
         rldicr  r7,r7,3,59              # multiply by 8 and mask with ~15
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   139
         neg     r7,r7
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   140
         stdux   r1,r1,r7
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   141
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   142
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   143
         # Call invoke_copy_to_stack(uint64_t* gpregs, double* fpregs,
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   144
         #                           uint32_t paramCount, nsXPTCVariant* s, 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   145
         #                           uint64_t* d))
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   146
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   147
         # r5, r6 are passed through intact (paramCount, params)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   148
-        # r7 (d) has to be r1+112 -- where parameters are passed on the stack.
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   149
+        # r7 (d) has to be r1+STACK_PARAMS
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   150
+        #        -- where parameters are passed on the stack.
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   151
         # r3, r4 are above that, easier to address from r31 than from r1
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   152
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   153
         subi    r3,r31,(23*8)           # r3 --> GPRS
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   154
         subi    r4,r31,(16*8)           # r4 --> FPRS
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   155
-        addi    r7,r1,112               # r7 --> params
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   156
+        addi    r7,r1,STACK_PARAMS      # r7 --> params
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   157
         bl      invoke_copy_to_stack
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   158
         nop
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   159
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   160
         # Set up to invoke function
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   161
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   162
         ld      r9,0(r29)               # vtable (r29 is 'that')
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   163
         mr      r3,r29                  # self is first arg, obviously
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   164
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   165
         sldi    r30,r30,3               # Find function descriptor 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   166
         add     r9,r9,r30
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   167
-        ld      r9,0(r9)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   168
+        ld      r12,0(r9)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   169
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   170
-        ld      r0,0(r9)                # Actual address from fd.
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   171
-        std     r2,40(r1)               # Save r2 (TOC pointer)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   172
+        std     r2,STACK_TOC(r1)        # Save r2 (TOC pointer)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   173
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   174
+#if _CALL_ELF == 2
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   175
+        mtctr   r12
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   176
+#else
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   177
+        ld      r0,0(r12)               # Actual address from fd.
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   178
         mtctr   0
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   179
-        ld      r11,16(r9)              # Environment pointer from fd.
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   180
-        ld      r2,8(r9)                # TOC pointer from fd.
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   181
+        ld      r11,16(r12)             # Environment pointer from fd.
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   182
+        ld      r2,8(r12)               # TOC pointer from fd.
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   183
+#endif
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   184
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   185
         # Load FP and GP registers as required
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   186
         ld      r4, -(23*8)(r31) 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   187
         ld      r5, -(22*8)(r31) 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   188
         ld      r6, -(21*8)(r31) 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   189
         ld      r7, -(20*8)(r31) 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   190
         ld      r8, -(19*8)(r31) 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   191
         ld      r9, -(18*8)(r31) 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   192
@@ -112,21 +143,25 @@ NS_InvokeByIndex:
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   193
         lfd     f9, -(8*8)(r31)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   194
         lfd     f10, -(7*8)(r31)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   195
         lfd     f11, -(6*8)(r31)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   196
         lfd     f12, -(5*8)(r31)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   197
         lfd     f13, -(4*8)(r31)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   198
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   199
         bctrl                           # Do it
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   200
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   201
-        ld      r2,40(r1)               # Load our own TOC pointer
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   202
+        ld      r2,STACK_TOC(r1)        # Load our own TOC pointer
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   203
         ld      r1,0(r1)                # Revert stack frame
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   204
         ld      0,16(r1)                # Reload lr
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   205
         ld      29,-24(r1)              # Restore NVGPRS
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   206
         ld      30,-16(r1)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   207
         ld      31,-8(r1)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   208
         mtlr    0
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   209
         blr
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   210
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   211
+#if _CALL_ELF == 2
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   212
+        .size   NS_InvokeByIndex,.-NS_InvokeByIndex
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   213
+#else
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   214
         .size   NS_InvokeByIndex,.-.NS_InvokeByIndex
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   215
+#endif
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   216
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   217
         # Magic indicating no need for an executable stack
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   218
         .section .note.GNU-stack, "", @progbits ; .previous
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   219
diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_ppc64_linux.cpp b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_ppc64_linux.cpp
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   220
--- a/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_ppc64_linux.cpp
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   221
+++ b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_ppc64_linux.cpp
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   222
@@ -69,17 +69,19 @@ invoke_copy_to_stack(uint64_t* gpregs,
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   223
             else
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   224
                 *(double *)d = s->val.d;
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   225
         }
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   226
         else if (!s->IsPtrData() && s->type == nsXPTType::T_FLOAT) {
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   227
             if (i < FPR_COUNT) {
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   228
                 fpregs[i]   = s->val.f; // if passed in registers, floats are promoted to doubles
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   229
             } else {
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   230
                 float *p = (float *)d;
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   231
+#ifndef __LITTLE_ENDIAN__
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   232
                 p++;
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   233
+#endif
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   234
                 *p = s->val.f;
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   235
             }
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   236
         }
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   237
         else {
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   238
             if (i < GPR_COUNT)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   239
                 gpregs[i] = tempu64;
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   240
             else
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   241
                 *d = tempu64;
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   242
diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ppc64_linux.s b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ppc64_linux.s
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   243
--- a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ppc64_linux.s
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   244
+++ b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ppc64_linux.s
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   245
@@ -12,28 +12,50 @@
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   246
 .set f0,0; .set f1,1; .set f2,2; .set f3,3; .set f4,4
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   247
 .set f5,5; .set f6,6; .set f7,7; .set f8,8; .set f9,9
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   248
 .set f10,10; .set f11,11; .set f12,12; .set f13,13; .set f14,14
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   249
 .set f15,15; .set f16,16; .set f17,17; .set f18,18; .set f19,19
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   250
 .set f20,20; .set f21,21; .set f22,22; .set f23,23; .set f24,24
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   251
 .set f25,25; .set f26,26; .set f27,27; .set f28,28; .set f29,29
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   252
 .set f30,30; .set f31,31
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   253
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   254
+#if _CALL_ELF == 2
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   255
+#define STACK_PARAMS   96
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   256
+#else
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   257
+#define STACK_PARAMS   112
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   258
+#endif
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   259
+
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   260
+#if _CALL_ELF == 2
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   261
+        .section ".text"
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   262
+        .type   SharedStub,@function
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   263
+        .globl  SharedStub
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   264
+        # Make the symbol hidden so that the branch from the stub does
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   265
+        # not go via a PLT.  This is not only better for performance,
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   266
+        # but may be necessary to avoid linker errors since there is
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   267
+        # no place to restore the TOC register in a sibling call.
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   268
+        .hidden SharedStub
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   269
+        .align 2
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   270
+SharedStub:
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   271
+0:      addis 2,12,(.TOC.-0b)@ha
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   272
+        addi 2,2,(.TOC.-0b)@l
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   273
+        .localentry SharedStub,.-SharedStub
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   274
+#else
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   275
         .section ".text"
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   276
         .align 2
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   277
         .globl SharedStub
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   278
         .section ".opd","aw"
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   279
         .align 3
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   280
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   281
 SharedStub:
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   282
         .quad   .SharedStub,.TOC.@tocbase
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   283
         .previous
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   284
         .type   SharedStub,@function
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   285
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   286
 .SharedStub:
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   287
+#endif
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   288
         mflr    r0
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   289
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   290
         std     r4, -56(r1)                     # Save all GPRS
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   291
         std     r5, -48(r1)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   292
         std     r6, -40(r1)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   293
         std     r7, -32(r1)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   294
         std     r8, -24(r1)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   295
         std     r9, -16(r1)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   296
@@ -50,17 +72,17 @@ SharedStub:
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   297
         stfd    f5, -128(r1)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   298
         stfd    f4, -136(r1)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   299
         stfd    f3, -144(r1)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   300
         stfd    f2, -152(r1)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   301
         stfd    f1, -160(r1)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   302
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   303
         subi    r6,r1,56                        # r6 --> gprData
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   304
         subi    r7,r1,160                       # r7 --> fprData
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   305
-        addi    r5,r1,112                       # r5 --> extra stack args
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   306
+        addi    r5,r1,STACK_PARAMS              # r5 --> extra stack args
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   307
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   308
         std     r0, 16(r1)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   309
 	
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   310
         stdu    r1,-288(r1)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   311
                                                 # r3 has the 'self' pointer
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   312
                                                 # already
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   313
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   314
         mr      r4,r11                          # r4 is methodIndex selector,
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   315
@@ -70,12 +92,16 @@ SharedStub:
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   316
         bl      PrepareAndDispatch
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   317
         nop
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   318
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   319
         ld      1,0(r1)                         # restore stack
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   320
         ld      r0,16(r1)                       # restore LR
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   321
         mtlr    r0
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   322
         blr
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   323
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   324
+#if _CALL_ELF == 2
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   325
+        .size   SharedStub,.-SharedStub
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   326
+#else
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   327
         .size   SharedStub,.-.SharedStub
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   328
+#endif
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   329
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   330
         # Magic indicating no need for an executable stack
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   331
         .section .note.GNU-stack, "", @progbits ; .previous
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   332
diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_ppc64_linux.cpp b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_ppc64_linux.cpp
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   333
--- a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_ppc64_linux.cpp
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   334
+++ b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_ppc64_linux.cpp
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   335
@@ -78,17 +78,19 @@ PrepareAndDispatch(nsXPTCStubBase* self,
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   336
                 dp->val.d = fprData[i];
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   337
             else
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   338
                 dp->val.d = *(double*) ap;
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   339
         } else if (!param.IsOut() && type == nsXPTType::T_FLOAT) {
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   340
             if (i < FPR_COUNT)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   341
                 dp->val.f = (float) fprData[i]; // in registers floats are passed as doubles
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   342
             else {
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   343
                 float *p = (float *)ap;
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   344
+#ifndef __LITTLE_ENDIAN__
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   345
                 p++;
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   346
+#endif
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   347
                 dp->val.f = *p;
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   348
             }
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   349
         } else { /* integer type or pointer */
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   350
             if (i < GPR_COUNT)
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   351
                 tempu64 = gprData[i];
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   352
             else
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   353
                 tempu64 = *ap;
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   354
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   355
@@ -148,16 +150,53 @@ PrepareAndDispatch(nsXPTCStubBase* self,
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   356
 // Create names would be like:
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   357
 // _ZN14nsXPTCStubBase5Stub1Ev
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   358
 // _ZN14nsXPTCStubBase6Stub12Ev
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   359
 // _ZN14nsXPTCStubBase7Stub123Ev
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   360
 // _ZN14nsXPTCStubBase8Stub1234Ev
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   361
 // etc.
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   362
 // Use assembler directives to get the names right...
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   363
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   364
+#if _CALL_ELF == 2
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   365
+# define STUB_ENTRY(n)                                                  \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   366
+__asm__ (                                                               \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   367
+        ".section \".text\" \n\t"                                       \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   368
+        ".align 2 \n\t"                                                 \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   369
+        ".if "#n" < 10 \n\t"                                            \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   370
+        ".globl _ZN14nsXPTCStubBase5Stub"#n"Ev \n\t"                    \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   371
+        ".type  _ZN14nsXPTCStubBase5Stub"#n"Ev,@function \n\n"          \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   372
+"_ZN14nsXPTCStubBase5Stub"#n"Ev: \n\t"                                  \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   373
+        "0: addis 2,12,.TOC.-0b@ha \n\t"                                \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   374
+        "addi     2,2,.TOC.-0b@l \n\t"                                  \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   375
+        ".localentry _ZN14nsXPTCStubBase5Stub"#n"Ev,.-_ZN14nsXPTCStubBase5Stub"#n"Ev \n\t" \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   376
+                                                                        \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   377
+        ".elseif "#n" < 100 \n\t"                                       \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   378
+        ".globl _ZN14nsXPTCStubBase6Stub"#n"Ev \n\t"                    \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   379
+        ".type  _ZN14nsXPTCStubBase6Stub"#n"Ev,@function \n\n"          \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   380
+"_ZN14nsXPTCStubBase6Stub"#n"Ev: \n\t"                                  \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   381
+        "0: addis 2,12,.TOC.-0b@ha \n\t"                                \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   382
+        "addi     2,2,.TOC.-0b@l \n\t"                                  \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   383
+        ".localentry _ZN14nsXPTCStubBase6Stub"#n"Ev,.-_ZN14nsXPTCStubBase6Stub"#n"Ev \n\t" \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   384
+                                                                        \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   385
+        ".elseif "#n" < 1000 \n\t"                                      \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   386
+        ".globl _ZN14nsXPTCStubBase7Stub"#n"Ev \n\t"                    \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   387
+        ".type  _ZN14nsXPTCStubBase7Stub"#n"Ev,@function \n\n"          \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   388
+"_ZN14nsXPTCStubBase7Stub"#n"Ev: \n\t"                                  \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   389
+        "0: addis 2,12,.TOC.-0b@ha \n\t"                                \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   390
+        "addi     2,2,.TOC.-0b@l \n\t"                                  \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   391
+        ".localentry _ZN14nsXPTCStubBase7Stub"#n"Ev,.-_ZN14nsXPTCStubBase7Stub"#n"Ev \n\t" \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   392
+                                                                        \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   393
+        ".else  \n\t"                                                   \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   394
+        ".err   \"stub number "#n" >= 1000 not yet supported\"\n"       \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   395
+        ".endif \n\t"                                                   \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   396
+                                                                        \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   397
+        "li     11,"#n" \n\t"                                           \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   398
+        "b      SharedStub \n"                                          \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   399
+);
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   400
+#else
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   401
 # define STUB_ENTRY(n)                                                  \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   402
 __asm__ (                                                               \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   403
         ".section \".toc\",\"aw\" \n\t"                                 \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   404
         ".section \".text\" \n\t"                                       \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   405
         ".align 2 \n\t"                                                 \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   406
         ".if "#n" < 10 \n\t"                                            \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   407
         ".globl _ZN14nsXPTCStubBase5Stub"#n"Ev \n\t"                    \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   408
         ".section \".opd\",\"aw\" \n\t"                                 \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   409
@@ -190,16 +229,17 @@ PrepareAndDispatch(nsXPTCStubBase* self,
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   410
                                                                         \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   411
         ".else  \n\t"                                                   \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   412
         ".err   \"stub number "#n" >= 1000 not yet supported\"\n"       \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   413
         ".endif \n\t"                                                   \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   414
                                                                         \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   415
         "li     11,"#n" \n\t"                                           \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   416
         "b      SharedStub \n"                                          \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   417
 );
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   418
+#endif
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   419
 
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   420
 #define SENTINEL_ENTRY(n)                                               \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   421
 nsresult nsXPTCStubBase::Sentinel##n()                                  \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   422
 {                                                                       \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   423
     NS_ERROR("nsXPTCStubBase::Sentinel called");                  \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   424
     return NS_ERROR_NOT_IMPLEMENTED;                                    \
3c7719dfcafa update to 24.4.0esr
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   425
 }