Annotation of 43BSD/contrib/apl/src/ax.pdp.s, revision 1.1

1.1     ! root        1: /
        !             2: /      APL assembly-language assist for floating-point
        !             3: /
        !             4: 
        !             5: .globl _fppinit, _error
        !             6: 
        !             7: SIGFPE = 8.                    / signal # for flt-point exception
        !             8: rtt = 6                                / opcode for RTT instruction
        !             9: stst = 170300^tst              / "stst" opcode
        !            10: bhs = bcc
        !            11: 
        !            12: /
        !            13: / Enable FPP traps and route floating-point execeptions
        !            14: / to special handler.
        !            15: /
        !            16: 
        !            17: _fppinit:
        !            18:        mov     r5,-(sp)
        !            19:        mov     sp,r5
        !            20:        sys     signal; SIGFPE; fpetrap
        !            21:        stfps   r0
        !            22:        bis     $7400,r0
        !            23:        ldfps   r0
        !            24:        mov     (sp)+,r5
        !            25:        rts     pc
        !            26: 
        !            27: 
        !            28: /
        !            29: /      Exception trap handler
        !            30: /
        !            31: / Attempt to figure out the reason for the floating-point
        !            32: / exception by immediately dumping the error register.
        !            33: / If another process generates a floating-point exception
        !            34: / before this service routine is called, the error register
        !            35: / will be meaningless.  We just take our lumps in that case.
        !            36: /
        !            37: 
        !            38: fpetrap:
        !            39:        stst    fpstatus        / note: static allocation
        !            40:        mov     r5,-(sp)
        !            41:        mov     sp,r5
        !            42:        mov     r1,-(sp)
        !            43:        mov     r0,-(sp)
        !            44:        sys     signal; SIGFPE; fpetrap
        !            45:        mov     mesg,-(sp)      / default message
        !            46:        mov     fpstatus,r0
        !            47:        cmp     r0,$nmesg
        !            48:        bhs     1f
        !            49:        add     $mesg,r0        / pointer to specific message
        !            50:        mov     (r0),(sp)
        !            51: 1:
        !            52:        jsr     pc, _error      / print error and APL traceback
        !            53:        tst     (sp)+           / "can't" ever execute this code
        !            54:        mov     (sp)+,r0
        !            55:        mov     (sp)+,r1
        !            56:        mov     (sp)+,r5
        !            57:        rtt
        !            58: 
        !            59: .data
        !            60: 
        !            61: mesg:  mesg0
        !            62:        mesg2
        !            63:        mesg4
        !            64:        mesg6
        !            65:        mesg8
        !            66:        mesg10
        !            67:        mesg12
        !            68:        mesg14
        !            69: nmesg = . - mesg
        !            70: 
        !            71: mesg0: <floating exception\0>
        !            72: mesg2: <floating opcode error\0>
        !            73: mesg4: <floating divide by zero\0>
        !            74: mesg6: <floating-to-integer conversion error\0>
        !            75: mesg8: <floating overflow\0>
        !            76: mesg10:        <floating underflow\0>
        !            77: mesg12:        <undefined floating-point variable\0>
        !            78: mesg14:        <floating-point maintenance trap\0>
        !            79: .even
        !            80: 
        !            81: .bss
        !            82: 
        !            83: fpstatus: .=.+4

unix.superglobalmegacorp.com

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