|
|
framesz: | framesz: |
.equ 128 | .equ 128 |
| |
|
; XPTC_InvokeByIndex(nsISuppots* that, PRUint32 methodIndex, |
|
; PRUint32 paramCount, nsXPTCVariant* params); |
|
|
.globl XPTC_InvokeByIndex | .globl XPTC_InvokeByIndex |
.type XPTC_InvokeByIndex, @function | .type XPTC_InvokeByIndex, @function |
| |
|
|
STW %r24,-44-framesz(%r30) ; | STW %r24,-44-framesz(%r30) ; |
STW %r23,-48-framesz(%r30) ; | STW %r23,-48-framesz(%r30) ; |
| |
|
; B,L .+8,%r2 |
|
; ADDIL L'invoke_count_bytes-$PIC_pcrel$1+4,%r2,%r1 |
|
; ; LDO R'invoke_count_bytes-$PIC_pcrel$2+8(%r1),%r1 |
|
;$PIC_pcrel$1 |
|
; LDSID (%r1),%r31 |
|
;$PIC_pcrel$2 |
|
; MTSP %r31,%sr0 |
|
|
.CALL ARGW0=GR,ARGW1=GR,ARGW2=GR ;in=24,25,26;out=28 | .CALL ARGW0=GR,ARGW1=GR,ARGW2=GR ;in=24,25,26;out=28 |
BL invoke_count_bytes,%r31 | BL invoke_count_bytes,%r31 |
COPY %r31,%r2 | COPY %r31,%r2 |
|
|
LDW -48-framesz(%r3),%r24 ; | LDW -48-framesz(%r3),%r24 ; |
| |
LDW -32(%r30),%r19 ; shared lib call destroys r19; reload | LDW -32(%r30),%r19 ; shared lib call destroys r19; reload |
|
; B,L .+8,%r2 |
|
; ADDIL L'invoke_copy_to_stack-$PIC_pcrel$3+4,%r2,%r1 |
|
; LDO R'invoke_copy_to_stack-$PIC_pcrel$4+8(%r1),%r1 |
|
;$PIC_pcrel$3 |
|
; LDSID (%r1),%r31 |
|
;$PIC_pcrel$4 |
|
; MTSP %r31,%sr0 |
.CALL ARGW0=GR,ARGW1=GR,ARGW2=GR ;in=24,25,26 | .CALL ARGW0=GR,ARGW1=GR,ARGW2=GR ;in=24,25,26 |
BL invoke_copy_to_stack,%r31 | BL invoke_copy_to_stack,%r31 |
COPY %r31,%r2 | COPY %r31,%r2 |
|
|
LDW -36-framesz(%r3),%r20 ; load vtable addr | LDW -36-framesz(%r3),%r20 ; load vtable addr |
LDW -40-framesz(%r3),%r28 ; load index | LDW -40-framesz(%r3),%r28 ; load index |
LDW 0(%r20),%r20 ; follow vtable | LDW 0(%r20),%r20 ; follow vtable |
|
; LDO 0(%r20),%r20 ; offset vtable by 16 bytes (g++: 8, aCC: 16) |
SH2ADDL %r28,%r20,%r28 ; add 4*index to vtable entry | SH2ADDL %r28,%r20,%r28 ; add 4*index to vtable entry |
LDW 0(%r28),%r22 ; load vtable entry | LDW 0(%r28),%r22 ; load vtable entry |
| |
|
; B,L .+8,%r2 |
|
; ADDIL L'$$dyncall_external-$PIC_pcrel$5+4,%r2,%r1 |
|
; LDO R'$$dyncall_external-$PIC_pcrel$6+8(%r1),%r1 |
|
;$PIC_pcrel$5 |
|
; LDSID (%r1),%r31 |
|
;$PIC_pcrel$6 |
|
; MTSP %r31,%sr0 |
.CALL ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR,RTNVAL=GR ;in=22-26;out=28; | .CALL ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR,RTNVAL=GR ;in=22-26;out=28; |
BL $$dyncall,%r31 | BL $$dyncall,%r31 |
COPY %r31,%r2 | COPY %r31,%r2 |