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