xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc_aix64.s

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 # This Source Code Form is subject to the terms of the Mozilla Public
     2 # License, v. 2.0. If a copy of the MPL was not distributed with this
     3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
     5 .set r0,0; .set sp,1; .set RTOC,2; .set r3,3; .set r4,4
     6 .set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9
     7 .set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14
     8 .set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19
     9 .set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24
    10 .set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29
    11 .set r30,30; .set r31,31
    12 .set f0,0; .set f1,1; .set f2,2; .set f3,3; .set f4,4
    13 .set f5,5; .set f6,6; .set f7,7; .set f8,8; .set f9,9
    14 .set f10,10; .set f11,11; .set f12,12; .set f13,13; .set f14,14
    15 .set f15,15; .set f16,16; .set f17,17; .set f18,18; .set f19,19
    16 .set f20,20; .set f21,21; .set f22,22; .set f23,23; .set f24,24
    17 .set f25,25; .set f26,26; .set f27,27; .set f28,28; .set f29,29
    18 .set f30,30; .set f31,31
    19 .set BO_IF,12
    20 .set CR0_EQ,2
    22         .rename H.10.NO_SYMBOL{PR},""
    23         .rename H.18.NS_InvokeByIndex{TC},"NS_InvokeByIndex"
    26 # .text section
    28         .csect  H.10.NO_SYMBOL{PR}
    29         .globl  .NS_InvokeByIndex
    30         .globl  NS_InvokeByIndex{DS}
    31         .extern .invoke_copy_to_stack
    32         .extern ._ptrgl{PR}
    34 #
    35 #   NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex,
    36 #                      uint32_t paramCount, nsXPTCVariant* params)
    37 #
    39 .NS_InvokeByIndex:
    40         mflr    r0
    41         std     r31,-8(sp)
    42 #
    43 # save off the incoming values in the caller's parameter area
    44 #		
    45         std     r3,48(sp)       # that
    46         std     r4,56(sp)       # methodIndex
    47         std     r5,64(sp)       # paramCount
    48         std     r6,72(sp)       # params
    49 	std     r0,16(sp)
    50 	stdu    sp,-168(sp)     # 2*24=48 for linkage area, 
    51                                 # 8*13=104 for fprData area
    52                                 #      16 for saved registers
    54 # prepare args for 'invoke_copy_to_stack' call
    55 #		
    56         ld      r4,232(sp)      # paramCount (168+8+56)
    57         ld      r5,240(sp)      # params
    58         mr      r6,sp           # fprData
    59         sldi    r3,r4,3         # number of bytes of stack required
    60                                 # is at most numParams*8
    61         addi    r3,r3,56        # linkage area (48) + this (8)
    62         mr      r31,sp          # save original stack top
    63         subfc   sp,r3,sp        # bump the stack
    64         addi    r3,sp,56        # parameter pointer excludes linkage area
    65                                 # size + 'this'
    67         bl      .invoke_copy_to_stack
    68         nop
    70         lfd     f1,0(r31)       # Restore floating point registers	
    71 	lfd     f2,8(r31)
    72         lfd     f3,16(r31)
    73         lfd     f4,24(r31)
    74         lfd     f5,32(r31)
    75         lfd     f6,40(r31)
    76         lfd     f7,48(r31)
    77         lfd     f8,56(r31)
    78         lfd     f9,64(r31)
    79         lfd     f10,72(r31)
    80         lfd     f11,80(r31)
    81         lfd     f12,88(r31)
    82         lfd     f13,96(r31)
    84         ld      r3,216(r31)     # that (168+48)
    85         ld      r4,0(r3)        # get vTable from 'that'
    86         ld      r5,224(r31)     # methodIndex (168+56)
    87         sldi    r5,r5,3         # methodIndex * 8
    88                                 # No junk at the start of 64bit vtable !!!
    89         ldx     r11,r5,r4       # get function pointer (this jumps
    90                                 # either to the function if no adjustment
    91                                 # is needed (displacement = 0), or it 
    92                                 # jumps to the thunk code, which will jump
    93                                 # to the function at the end)
    95         # No adjustment of the that pointer in 64bit mode, this is done
    96         # by the thunk code
    98         ld      r4,56(sp)
    99         ld      r5,64(sp)
   100         ld      r6,72(sp)
   101         ld      r7,80(sp)
   102         ld      r8,88(sp)
   103         ld      r9,96(sp)
   104         ld      r10,104(sp)
   106         bl      ._ptrgl{PR}
   107         nop
   109         mr      sp,r31
   110         ld      r0,184(sp)      # 168+16
   111         addi    sp,sp,168
   112         mtlr    r0
   113         ld      r31,-8(sp)
   114         blr
   116 # .data section
   118         .toc                            # 0x00000038
   119 T.18.NS_InvokeByIndex:
   120         .tc     H.18.NS_InvokeByIndex{TC},NS_InvokeByIndex{DS}
   122         .csect  NS_InvokeByIndex{DS}
   123         .llong  .NS_InvokeByIndex     # "\0\0\0\0"
   124         .llong  TOC{TC0}                # "\0\0\0008"
   125         .llong  0x00000000              # "\0\0\0\0"
   126 # End   csect   NS_InvokeByIndex{DS}
   128 # .bss section

mercurial