Annotation of 43BSD/contrib/icon/rt/arith.s, revision 1.1.1.1

1.1       root        1: #include "../h/config.h"
                      2: /*
                      3:  * Long integer arithmetic routines with overflow checking.
                      4:  */
                      5: Global(_runerr)                /* Run-time error routine */
                      6: Global(_ckadd)
                      7: Global(_cksub)
                      8: Global(_ckmul)
                      9: #ifdef VAX
                     10:  .text
                     11:  .align        1
                     12: /*
                     13:  * Addition.
                     14:  */
                     15: _ckadd:        Mask    0
                     16:        addl3   4(ap),8(ap),r0  # Perform addition
                     17:        jvs     oflow           # Branch if overflow
                     18:        ret                     # Return result in r0
                     19: 
                     20:  .align        1
                     21: /*
                     22:  * Subtraction.
                     23:  */
                     24: _cksub:Mask    0
                     25:        subl3   8(ap),4(ap),r0  # Perform subtraction
                     26:        jvs     oflow           # Branch if overflow
                     27:        ret                     # Return result in r0
                     28: 
                     29:  .align        1
                     30: /*
                     31:  * Multiplication.
                     32:  */
                     33: _ckmul:        Mask    0
                     34:        mull3   4(ap),8(ap),r0  # Perform multiplication
                     35:        jvs     oflow           # Branch if overflow
                     36:        ret                     # Return result in r0
                     37: 
                     38: oflow:                         # Got overflow on an operation
                     39:        pushl   $0
                     40:        pushl   $203
                     41:        calls   $1,_runerr      # runerr(203,0)
                     42: 
                     43: #endif VAX
                     44: 
                     45: #ifdef PORT
                     46: DummyFcn(_ckadd)
                     47: DummyFcn(_cksub)
                     48: DummyFcn(_ckmul)
                     49: #endif PORT
                     50: 
                     51: #ifdef PDP11
                     52: / Long integer arithmetic routines with overflow checking
                     53: Global(csv)
                     54: Global(cret)
                     55: 
                     56:  .text
                     57: _ckadd:
                     58:        mov     r5,-(sp)
                     59:        mov     sp,r5
                     60:        mov     6(r5),r1
                     61:         mov    4(r5),r0
                     62:         add    12(r5),r1
                     63:         adc    r0
                     64:        bvs     oflow
                     65:         add    10(r5),r0
                     66:        bvs     oflow
                     67:         br      return
                     68: 
                     69: _cksub:
                     70:        mov     r5,-(sp)
                     71:        mov     sp,r5
                     72:         mov    6(r5),r1
                     73:         mov    4(r5),r0
                     74:         sub    12(r5),r1
                     75:         sbc    r0
                     76:        bvs     oflow
                     77:         sub    10(r5),r0
                     78:        bvs     oflow
                     79: return:
                     80:        mov     r5,sp
                     81:        mov     (sp)+,r5
                     82:        rts     pc
                     83: 
                     84: _ckmul:
                     85:        jsr     r5,csv
                     86:        mov     6(r5),r2
                     87:        sxt     r1
                     88:        sub     4(r5),r1
                     89:        mov     10.(r5),r0
                     90:        sxt     r3
                     91:        sub     8.(r5),r3
                     92:        mul     r0,r1
                     93:        mul     r2,r3
                     94:        add     r1,r3
                     95:        mul     r2,r0
                     96:        sub     r3,r0
                     97:        jmp     cret
                     98: 
                     99: oflow:
                    100:        clr     -(sp)
                    101:        mov     $203.,-(sp)
                    102:        jsr     pc,_runerr
                    103: #endif PDP11

unix.superglobalmegacorp.com

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