Annotation of 43BSD/contrib/icon/lib/pfail.s, revision 1.1.1.1

1.1       root        1: #include "../h/config.h"
                      2: /*
                      3:  * pfail - returns from an Icon procedure with failure.
                      4:  *  The current procedure frame is exited and efail causes
                      5:  *  the failure of the enclosing expression.  A tracing
                      6:  *  message is produced if &trace is non-zero.
                      7:  */
                      8: Global(_k_level)
                      9: Global(_k_trace)
                     10: Global(_efail)
                     11: Global(_ftrace)
                     12: Global(_pfail)
                     13: Global(_line)
                     14: Global(_file)
                     15: 
                     16: #ifdef VAX
                     17: _pfail:
                     18:        decl    _k_level        # A procedure is being exited, so
                     19:                                #  decrement &level.
                     20:        tstl    _k_trace        # If &trace is zero,
                     21:        beql    dofail          #  no tracing.
                     22:                                #
                     23:                                # Otherwise, a trace message is
                     24:                                #  produced by calling ftrace with
                     25:                                #  the address of the block of the
                     26:                                #  failing procedure.
                     27:                                # &arg0 = (nargs * 8) + 8 + ap
                     28:        ashl    $3,4(ap),r0     # r0 = nargs * 8
                     29:        addl2   $8,r0           #  + 8
                     30:        addl3   r0,ap,r0        #  + ap
                     31:                                # r0 points to descriptor for procedure
                     32:        pushl   4(r0)           #  and second word is address of block
                     33:        calls   $1,_ftrace      # ftrace(&arg0)
                     34: 
                     35: dofail:
                     36:        movl    -4(fp),_line    # Restore _line,
                     37:        movl    -8(fp),_file    #  _file,
                     38:        movl    -4(ap),efp      #  expression frame pointer,
                     39:        movl    -8(ap),gfp      #  generator frame pointer,
                     40:        movl    -12(ap),ipc     #  interpreter pc,
                     41:        movl    8(fp),ap        #  ap,
                     42:        movl    12(fp),fp       #  and fp from failing procedure frame
                     43:        jmp     _efail          # Cause failure in expression by
                     44:                                #  branching to efail
                     45: #endif VAX
                     46: 
                     47: #ifdef PORT
                     48: DummyFcn(_pfail)
                     49: #endif PORT
                     50: #ifdef PDP11
                     51: / pfail - return from an Icon procedure with failure.
                     52: / Exit the current procedure frame, and branch to _efail.
                     53: Global(_boundary)
                     54: 
                     55: _pfail:
                     56:        dec     _k_level        / decrement &level
                     57: 
                     58: / Print trace message if &trace is set.
                     59: 
                     60:        tst     _k_trace
                     61:        beq     1f
                     62:        mov     4(r5),r0        / calculate address of arg0
                     63:        asl     r0              /   r0 <- r5 + 4*nargs + 6
                     64:        asl     r0
                     65:        add     r5,r0
                     66:        add     $6,r0
                     67:        mov     2(r0),-(sp)     / push address of failing procedure block
                     68:        mov     $1,_boundary    / prevent csv from setting boundary
                     69:        jsr     pc,_ftrace
                     70:        clr     _boundary
                     71:        tst     (sp)+           / pop address of procedure block
                     72: 
                     73: / Exit the procedure frame, decrement &level, and jump to efail.
                     74: 
                     75: 1:
                     76:        mov     r5,r0
                     77:        mov     -(r0),r4
                     78:        mov     -(r0),r3
                     79:        mov     -(r0),r2
                     80:        mov     -(r0),_line
                     81:        mov     -(r0),_file
                     82:        mov     r5,sp
                     83:        mov     (sp)+,r5
                     84:        jmp     _efail          / pass failure to expression frame
                     85: #endif PDP11

unix.superglobalmegacorp.com

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