Annotation of 43BSD/etc/timed/m68000/ocsum.s, revision 1.1.1.1

1.1       root        1:        .data
                      2:        .asciz  "@(#)ocsum.s 4.4 83/08/16 Copyr 1983 Sun Micro"
                      3:        .even
                      4:        .text
                      5: 
                      6: |      Copyright (c) 1983 by Sun Microsystems, Inc.
                      7: 
                      8: | Do a 16 bit one's complement sum of a given number of words
                      9: | The word pointer may not be odd
                     10:        .globl  _ocsum
                     11: _ocsum:
                     12:        movl    sp@(4),a0       | get ptr
                     13:        movl    sp@(8),d0       | get word count
                     14:        movl    d2,sp@-         | save a reg
                     15:        movl    d0,d2           | save the count
                     16:        lsrl    #1,d0           | make d0 longs
                     17:        movl    #0,d1           | zero accumulator
                     18:        jra     1$              | into loop
                     19: | Here we run in 68010 loop mode until we get a carry
                     20: 2$:    addl    a0@+,d1         | add in long
                     21: 1$:    dbcs    d0,2$           | continue until carry or done
                     22:        jcc     3$              | if no carry, we're done
                     23:        addql   #1,d1           | add in carry
                     24:        jra     1$              | and go back to test for carry again
                     25: 3$:    btst    #0,d2           | another short?
                     26:        jeq     ret             | no, go away
                     27:        movl    #0,d0           | must do unsigned add
                     28:        movw    a0@,d0          | get the short
                     29:        addl    d0,d1           | add it in
                     30:        jcc     ret
                     31:        addql   #1,d1
                     32: | Now add in high word to low word as above
                     33: ret:
                     34:        movl    d1,d0
                     35:        lsrl    #8,d0           | get high word in d0
                     36:        lsrl    #8,d0           | and clear high do as well
                     37:        andl    #0xFFFF,d1      | clear high d1
                     38:        addw    d1,d0           | add in just the low word
                     39:        movl    #0,d1           | doesn't clear x bit
                     40:        addxw   d1,d0           | add in final carry
                     41:        movl    sp@+,d2         | restore reg
                     42:        rts                     | all done

unix.superglobalmegacorp.com

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