|
|
1.1 ! root 1: .text ! 2: /* ! 3: * Compute a 16-bit checksum ! 4: * ! 5: * vecadd(w, len, sum) ! 6: * unsigned long *w; ! 7: * int len; ! 8: * unsigned sum; ! 9: */ ! 10: .globl _vecadd ! 11: _vecadd: ! 12: movl d2,sp@- ! 13: movl sp@(8),a0 ! 14: movl sp@(12),d0 ! 15: movl sp@(16),d1 ! 16: movl d0,d2 ! 17: lsrl #2,d0 ! 18: lsll #2,d0 ! 19: subl d0,d2 ! 20: lsrl #2,d0 ! 21: movw #0,cc ! 22: jra L_2 ! 23: L_1: ! 24: addl a0@+,d1 ! 25: L_2: ! 26: dbcs d0,L_1 ! 27: jcc L_3 ! 28: addql #1,d1 ! 29: jra L_2 ! 30: L_3: ! 31: btst #1,d2 | if there is another short add it in ! 32: jeq L_4 ! 33: moveq #0,d0 ! 34: movw a0@+,d0 ! 35: addl d0,d1 ! 36: jcc L_4 ! 37: addql #1,d1 ! 38: L_4: ! 39: btst #0,d2 | if there is another byte add it in ! 40: jeq L_5 ! 41: moveq #0,d0 ! 42: movb a0@+,d0 ! 43: lsll #8,d0 ! 44: addl d0,d1 ! 45: jcc L_5 ! 46: addql #1,d1 ! 47: L_5: ! 48: movl d1,d0 | fold the 32 bits into 16 ! 49: lsrl #16,d0 ! 50: andl #0xFFFF,d1 ! 51: addw d1,d0 ! 52: jcc L_6 ! 53: addql #1,d0 ! 54: L_6: ! 55: movl sp@+,d2 ! 56: rts
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.