|
|
1.1 ! root 1: | ! 2: ! 3: | quickmove(char *dst, char *src, long nbytes): ! 4: ! 5: | quickly copy "nbytes" bytes from src to dst. Assumes that both ! 6: ! 7: | src and dst are word aligned. ! 8: ! 9: | ! 10: ! 11: .text ! 12: ! 13: .globl _quickmove ! 14: ! 15: _quickmove: ! 16: ! 17: movel sp@(4), a0 | get dst ! 18: ! 19: movel sp@(8), a1 | get src ! 20: ! 21: movel sp@(12), d0 | get nbytes ! 22: ! 23: lsrl #8, d0 | ! 24: ! 25: lsrl #1, d0 | d0 = nbytes / 512 ! 26: ! 27: subql #1, d0 | prepare for dbra loop ! 28: ! 29: bmi Leftover | if < 0, skip ! 30: ! 31: moveml d1-d7/a2-a6, sp@- | save regs ! 32: ! 33: L1: ! 34: ! 35: moveml a1@+, d1-d7/a2-a6 | read 12*4 = 48 bytes ! 36: ! 37: moveml d1-d7/a2-a6, a0@ | ! 38: ! 39: moveml a1@+, d1-d7/a2-a6 | 2nd read ! 40: ! 41: moveml d1-d7/a2-a6, a0@(48) | ! 42: ! 43: moveml a1@+, d1-d7/a2-a6 | 3rd read ! 44: ! 45: moveml d1-d7/a2-a6, a0@(96) | ! 46: ! 47: moveml a1@+, d1-d7/a2-a6 | 4th read ! 48: ! 49: moveml d1-d7/a2-a6, a0@(144) | ! 50: ! 51: moveml a1@+, d1-d7/a2-a6 | 5th ! 52: ! 53: moveml d1-d7/a2-a6, a0@(192) | ! 54: ! 55: moveml a1@+, d1-d7/a2-a6 | 6th ! 56: ! 57: moveml d1-d7/a2-a6, a0@(240) | ! 58: ! 59: moveml a1@+, d1-d7/a2-a6 | 7th ! 60: ! 61: moveml d1-d7/a2-a6, a0@(288) | ! 62: ! 63: moveml a1@+, d1-d7/a2-a6 | 8th ! 64: ! 65: moveml d1-d7/a2-a6, a0@(336) | ! 66: ! 67: moveml a1@+, d1-d7/a2-a6 | 9th ! 68: ! 69: moveml d1-d7/a2-a6, a0@(384) | ! 70: ! 71: moveml a1@+, d1-d7/a2-a6 | 10th ! 72: ! 73: moveml d1-d7/a2-a6, a0@(432) | At this point, 480 bytes done ! 74: ! 75: moveml a1@+, d1-d7/a2 | Only do 32 more bytes ! 76: ! 77: moveml d1-d7/a2, a0@(480) | for a total of 512 ! 78: ! 79: ! 80: ! 81: lea a0@(512), a0 ! 82: ! 83: subql #1, d0 ! 84: ! 85: bge L1 ! 86: ! 87: ! 88: ! 89: moveml sp@+, d1-d7/a2-a6 | pop registers ! 90: ! 91: ! 92: ! 93: Leftover: | do the remaining bytes ! 94: ! 95: movel sp@(12), d1 ! 96: ! 97: andl #0x01ff, d1 | d1 = nbytes % 512 ! 98: ! 99: subql #1, d1 | prepare for dbra loop ! 100: ! 101: bmi Ldone ! 102: ! 103: L2: ! 104: ! 105: moveb a1@+, a0@+ ! 106: ! 107: dbra d1, L2 ! 108: ! 109: Ldone: ! 110: ! 111: rts | return ! 112:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.