xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_pa32.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         .LEVEL  1.1
     3 curframesz  .EQU 128
     4 ; SharedStub has stack size of 128 bytes
     6 lastframesz .EQU 64
     7 ; the StubN C++ function has a small stack size of 64 bytes
     9         .SPACE  $TEXT$,SORT=8
    10         .SUBSPA $CODE$,QUAD=0,ALIGN=4,ACCESS=0x2c,CODE_ONLY,SORT=24
    11 SharedStub
    12         .PROC
    13         .CALLINFO CALLER,FRAME=80,SAVE_RP,ARGS_SAVED
    15   .ENTRY
    16         STW     %rp,-20(%sp)
    17         LDO     128(%sp),%sp
    19         STW     %r19,-32(%r30)
    20         STW     %r26,-36-curframesz(%r30) ; save arg0 in previous frame
    22         LDO     -80(%r30),%r28
    23         FSTD,MA %fr5,8(%r28)   ; save darg0
    24         FSTD,MA %fr7,8(%r28)   ; save darg1
    25         FSTW,MA %fr4L,4(%r28)  ; save farg0
    26         FSTW,MA %fr5L,4(%r28)  ; save farg1
    27         FSTW,MA %fr6L,4(%r28)  ; save farg2
    28         FSTW,MA %fr7L,4(%r28)  ; save farg3
    30         ; Former value of register 26 is already properly saved by StubN,
    31         ; but register 25-23 are not because of the arguments mismatch
    32         STW     %r25,-40-curframesz-lastframesz(%r30) ; save r25
    33         STW     %r24,-44-curframesz-lastframesz(%r30) ; save r24
    34         STW     %r23,-48-curframesz-lastframesz(%r30) ; save r23
    35         COPY    %r26,%r25                             ; method index is arg1
    36         LDW     -36-curframesz-lastframesz(%r30),%r26 ; self is arg0
    37         LDO     -40-curframesz-lastframesz(%r30),%r24 ; normal args is arg2
    38         LDO     -80(%r30),%r23                        ; floating args is arg3
    40         BL      .+8,%r2
    41         ADDIL   L'PrepareAndDispatch-$PIC_pcrel$0+4,%r2
    42         LDO     R'PrepareAndDispatch-$PIC_pcrel$1+8(%r1),%r1
    43 $PIC_pcrel$0
    44         LDSID   (%r1),%r31
    45 $PIC_pcrel$1
    46         MTSP    %r31,%sr0
    47         .CALL   ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR,RTNVAL=GR
    48 ;in=23-26;out=28;
    49         BLE     0(%sr0,%r1)
    50         COPY    %r31,%r2
    52         LDW     -32(%r30),%r19
    54         LDW     -148(%sp),%rp
    55         BVE     (%rp)
    56   .EXIT
    57         LDO     -128(%sp),%sp
    60         .PROCEND        ;in=26;out=28;
    62   .ALIGN  8
    63         .SPACE  $TEXT$
    64         .SUBSPA $CODE$
    65         .IMPORT PrepareAndDispatch,CODE
    66         .EXPORT SharedStub,ENTRY,PRIV_LEV=3,ARGW0=GR,RTNVAL=GR,LONG_RETURN
    67         .END

mercurial