michael@0: .LEVEL 1.1 michael@0: michael@0: curframesz .EQU 128 michael@0: ; SharedStub has stack size of 128 bytes michael@0: michael@0: lastframesz .EQU 64 michael@0: ; the StubN C++ function has a small stack size of 64 bytes michael@0: michael@0: .SPACE $TEXT$,SORT=8 michael@0: .SUBSPA $CODE$,QUAD=0,ALIGN=4,ACCESS=0x2c,CODE_ONLY,SORT=24 michael@0: SharedStub michael@0: .PROC michael@0: .CALLINFO CALLER,FRAME=80,SAVE_RP,ARGS_SAVED michael@0: michael@0: .ENTRY michael@0: STW %rp,-20(%sp) michael@0: LDO 128(%sp),%sp michael@0: michael@0: STW %r19,-32(%r30) michael@0: STW %r26,-36-curframesz(%r30) ; save arg0 in previous frame michael@0: michael@0: LDO -80(%r30),%r28 michael@0: FSTD,MA %fr5,8(%r28) ; save darg0 michael@0: FSTD,MA %fr7,8(%r28) ; save darg1 michael@0: FSTW,MA %fr4L,4(%r28) ; save farg0 michael@0: FSTW,MA %fr5L,4(%r28) ; save farg1 michael@0: FSTW,MA %fr6L,4(%r28) ; save farg2 michael@0: FSTW,MA %fr7L,4(%r28) ; save farg3 michael@0: michael@0: ; Former value of register 26 is already properly saved by StubN, michael@0: ; but register 25-23 are not because of the arguments mismatch michael@0: STW %r25,-40-curframesz-lastframesz(%r30) ; save r25 michael@0: STW %r24,-44-curframesz-lastframesz(%r30) ; save r24 michael@0: STW %r23,-48-curframesz-lastframesz(%r30) ; save r23 michael@0: COPY %r26,%r25 ; method index is arg1 michael@0: LDW -36-curframesz-lastframesz(%r30),%r26 ; self is arg0 michael@0: LDO -40-curframesz-lastframesz(%r30),%r24 ; normal args is arg2 michael@0: LDO -80(%r30),%r23 ; floating args is arg3 michael@0: michael@0: BL .+8,%r2 michael@0: ADDIL L'PrepareAndDispatch-$PIC_pcrel$0+4,%r2 michael@0: LDO R'PrepareAndDispatch-$PIC_pcrel$1+8(%r1),%r1 michael@0: $PIC_pcrel$0 michael@0: LDSID (%r1),%r31 michael@0: $PIC_pcrel$1 michael@0: MTSP %r31,%sr0 michael@0: .CALL ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR,RTNVAL=GR michael@0: ;in=23-26;out=28; michael@0: BLE 0(%sr0,%r1) michael@0: COPY %r31,%r2 michael@0: michael@0: LDW -32(%r30),%r19 michael@0: michael@0: LDW -148(%sp),%rp michael@0: BVE (%rp) michael@0: .EXIT michael@0: LDO -128(%sp),%sp michael@0: michael@0: michael@0: .PROCEND ;in=26;out=28; michael@0: michael@0: .ALIGN 8 michael@0: .SPACE $TEXT$ michael@0: .SUBSPA $CODE$ michael@0: .IMPORT PrepareAndDispatch,CODE michael@0: .EXPORT SharedStub,ENTRY,PRIV_LEV=3,ARGW0=GR,RTNVAL=GR,LONG_RETURN michael@0: .END michael@0: