1 2 TEXT memcpy(SB), $-4 3 TEXT memmove(SB), $-4 4 MOVW R8, s1+0(FP) 5 6 MOVW n+8(FP), R9 /* count */ 7 BEQ R9, return 8 BGT R9, ok 9 MOVW $0, R9 10ok: 11 MOVW s1+0(FP), R11 /* dest pointer */ 12 MOVW s2+4(FP), R10 /* source pointer */ 13 14 BLTU R11, R10, back 15 16/* 17 * byte-at-a-time forward copy to 18 * get source (R10) aligned. 19 */ 20f1: 21 AND $3, R10, R8 22 BEQ R8, f2 23 SUB $1, R9 24 BLT R9, return 25 MOVB (R10), R8 26 MOVB R8, (R11) 27 ADD $1, R10 28 ADD $1, R11 29 JMP f1 30 31/* 32 * check that dest is aligned 33 * if not, just go byte-at-a-time 34 */ 35f2: 36 AND $3, R11, R8 37 BEQ R8, f3 38 SUB $1, R9 39 BLT R9, return 40 JMP f5 41/* 42 * quad-long-at-a-time forward copy 43 */ 44f3: 45 SUB $16, R9 46 BLT R9, f4 47 MOVW 0(R10), R12 48 MOVW 4(R10), R13 49 MOVW 8(R10), R14 50 MOVW 12(R10), R15 51 MOVW R12, 0(R11) 52 MOVW R13, 4(R11) 53 MOVW R14, 8(R11) 54 MOVW R15, 12(R11) 55 ADD $16, R10 56 ADD $16, R11 57 JMP f3 58 59/* 60 * cleanup byte-at-a-time 61 */ 62f4: 63 ADD $15, R9 64 BLT R9, return 65f5: 66 MOVB (R10), R8 67 MOVB R8, (R11) 68 ADD $1, R10 69 ADD $1, R11 70 SUB $1, R9 71 BGE R9, f5 72 JMP return 73 74return: 75 MOVW s1+0(FP),R8 76 RET 77 78/* 79 * everything the same, but 80 * copy backwards 81 */ 82back: 83 ADD R9, R10 84 ADD R9, R11 85 86/* 87 * byte-at-a-time backward copy to 88 * get source (R10) aligned. 89 */ 90b1: 91 AND $3, R10, R8 92 BEQ R8, b2 93 SUB $1, R9 94 BLT R9, return 95 SUB $1, R10 96 SUB $1, R11 97 MOVB (R10), R8 98 MOVB R8, (R11) 99 JMP b1 100 101/* 102 * check that dest is aligned 103 * if not, just go byte-at-a-time 104 */ 105b2: 106 AND $3, R11, R8 107 BEQ R8, b3 108 SUB $1, R9 109 BLT R9, return 110 JMP b5 111/* 112 * quad-long-at-a-time backward copy 113 */ 114b3: 115 SUB $16, R9 116 BLT R9, b4 117 SUB $16, R10 118 SUB $16, R11 119 MOVW 0(R10), R12 120 MOVW 4(R10), R13 121 MOVW 8(R10), R14 122 MOVW 12(R10), R15 123 MOVW R12, 0(R11) 124 MOVW R13, 4(R11) 125 MOVW R14, 8(R11) 126 MOVW R15, 12(R11) 127 JMP b3 128 129/* 130 * cleanup byte-at-a-time backward 131 */ 132b4: 133 ADD $15, R9 134 BLT R9, return 135b5: 136 SUB $1, R10 137 SUB $1, R11 138 MOVB (R10), R8 139 MOVB R8, (R11) 140 SUB $1, R9 141 BGE R9, b5 142 JMP return 143