Annotation of 43BSD/contrib/icon/rt/csv.s, revision 1.1

1.1     ! root        1: #include "../h/config.h"
        !             2: #ifdef VAX
        !             3: /* No csv type stuff on the VAX; the procedure call mechanism
        !             4:  *  handles it all.
        !             5:  */
        !             6: Global(_csv)   # prevent null object module
        !             7: #endif VAX
        !             8: 
        !             9: #ifdef PORT
        !            10: Global(_csv)   # prevent null object module
        !            11: #endif PORT
        !            12: 
        !            13: #ifdef PDP11
        !            14: / csv,cret - modified C calling sequence to save registers,
        !            15: / restore on return, and clear Icon/C boundary on return
        !            16: / to Icon code.  This sequence performs the same function as the
        !            17: / sequence in the C library, except for setting and clearing the
        !            18: / boundary.  When returning from C to Icon, arguments are popped.
        !            19: Global(_boundary)
        !            20:  .globl        csv, cret
        !            21: csv:
        !            22:        tst     _boundary       / is call being made from Icon to C?
        !            23:        bne     1f              /   no, branch
        !            24:        mov     sp,_boundary    / yes, set boundary
        !            25: 1:
        !            26:        mov     r5,r0           / make new procedure frame
        !            27:        mov     sp,r5
        !            28:        mov     r4,-(sp)
        !            29:        mov     r3,-(sp)
        !            30:        mov     r2,-(sp)
        !            31:        jsr     pc,(r0)         / enter procedure
        !            32: 
        !            33: cret:
        !            34:        cmp     r5,_boundary    / is return being made from C to Icon?
        !            35:        bne     1f              /   no, branch
        !            36:        clr     _boundary       / yes, clear boundary address
        !            37:        mov     r5,sp           / restore old procedure frame
        !            38:        mov     -(r5),r4
        !            39:        mov     -(r5),r3
        !            40:        mov     -(r5),r2
        !            41:        mov     (sp)+,r5
        !            42:        mov     (sp)+,r1        / pop return pc
        !            43:        mov     (sp)+,r0        / pop nargs
        !            44:        asl     r0
        !            45:        asl     r0
        !            46:        add     r0,sp           / pop all arguments
        !            47:        jmp     (r1)            / return to Icon procedure
        !            48: 1:
        !            49:        mov     r5,sp           / restore old procedure frame
        !            50:        mov     -(r5),r4
        !            51:        mov     -(r5),r3
        !            52:        mov     -(r5),r2
        !            53:        mov     (sp)+,r5
        !            54:        rts     pc              / return to C procedure
        !            55: #endif PDP11

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.