|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 4622 (0x120e) Types: TextFile Notes: R1k Text-file segment
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─⟦cfc2e13cd⟧ »Space Info Vol 2« └─⟦e40a7b805⟧ └─⟦this⟧
.case_sensitive .module "Xlib_Asm_Hooks" .gbl.a __Xlbmt_In_Invoke_Procedure .gbl.a __Xlbmt_InOut_Invoke_Procedure .gbl.a __Xlbmt_InOut_Invoke_Function .gbl.a __Xlbmt_Get_A7 .gbl.a __Xlbmt_Get_A1 .sect ADA_CODE,CODE,READONLY,CONCATENATE,ALIGNMENT:=2 __Xlbmt_In_Invoke_Procedure: __Xlbmt_InOut_Invoke_Procedure: $static_link equ 16 $routine_addr equ 12 pea.l (0:16) ; establish no exception handler link A6, #-4 ; establish stack frame and ; create one word on stack movea.l (A6), A0 ; get frame pointer of generic lea.l (16, A0), A0 ; compute first param address movea.l A0, A1 ; A1 points to first param addr subi.l #16, (20, A6) ; adjust offset adda.l (20, A6), A1 ; adjust A1 to top of frame $copy_loop_one: move.l -(A1), -(A7) ; make copy of parameters cmpa.l A0, A1 ; done ? bhi.s $copy_loop_one ; -> no move.l A7, (-4, A6) ; save the stack pointer movea.l ($static_link, A6), A1 ; establish static link jsr.l ([$routine_addr, A6]) ; -> call subroutine cmpa.l (-4, A6), A7 ; Has the stack pointer changed ? bne.s $done ; -> yes movea.l (A6), A0 ; get frame pointer of generic lea.l (16, A0), A0 ; compute first param address movea.l A0, A1 ; A1 points to first param addr adda.l (20, A6), A1 ; adjust A1 to top of frame $copy_back_loop: move.l (A7)+, (A0)+ ; copy back the parameters cmpa.l A1, A0 ; done ? blo.s $copy_back_loop ; -> no $done: unlk A6 ; remove Subprogram's frame unlk A6 ; remove Call's (my) frame addq.l #4, A7 ; remove exception handler rts ; return __Xlbmt_InOut_Invoke_Function: pea.l (0:16) ; establish no exception handler link A6, #-4 ; establish stack frame move.l A7, (-4, A6) ; save top of stack; movea.l (A6), A0 ; get frame pointer of generic lea.l (16, A0), A0 ; compute first param address lea.l (4, A0), A1 ; adjust for dope vector reference subi.l #16, (20, A6) ; adjust offset adda.l (20, A6), A1 ; adjust A1 to top of frame $copy_loop_two: move.l -(A1), -(A7) ; make copy of parameters cmpa.l A0, A1 ; done ? bhi.s $copy_loop_two ; -> no movea.l ($static_link, A6), A1 ; establish static link jsr.l ([$routine_addr, A6]) ; -> call subroutine cmpa.l (-4, A6), A7 ; Has top of stack changed ? bne.s $unconstrained_result ; -> yes movea.l (20, A6), A0 ; get offset movea.l (A6), A6 ; adjust frame pointer adda.l A6, A0 ; adjust A0 adda.l #16, A0 movea.l (8, A6), A1 movea.l (A6), A6 movea.l A0, A7 move.l A1, -(A7) rts $unconstrained_result: movea.l (A6), A6 ; adjust frame pointer movea.l (8, A6), A1 ; put return addr of caller of ; Call in A1 movea.l (A6), A6 ; adjust frame pointer move.l A1, -(A7) ; push return addr of caller ; of Call on top of stack rts ; return __Xlbmt_Get_A7: move.l A7, D0 ; return top of stack rts __Xlbmt_Get_A1: move.l A1, D0 ; return static link rts