1TEXT strcpy(SB), $0 2 MOVW R0, to+0(FP) /* need to save for return value */ 3 MOVW from+4(FP), R1 4 MOVW $0xFF, R2 /* mask */ 5 6salign: /* align source on 4 */ 7 AND.S $3, R1, R3 8 BEQ dalign 9 MOVBU.P 1(R1), R3 /* implicit write back */ 10 TST R3, R2 11 MOVBU.P R3, 1(R0) /* implicit write back */ 12 BNE salign 13 B return 14 15dalign: /* is destination now aligned? */ 16 AND.S $3, R0, R3 17 BNE uloop 18 19aloop: 20 MOVW.P 4(R1), R4 /* read 4, write 4 */ 21 TST R4, R2 /* AND.S R3, R2, Rx */ 22 TST.NE R4>>8, R2 23 TST.NE R4>>16, R2 24 TST.NE R4>>24, R2 25 BEQ tail 26 MOVW.P R4, 4(R0) 27 B aloop 28 29uloop: 30 MOVW.P 4(R1), R4 /* read 4, write 1,1,1,1 */ 31 32tail: 33 AND.S R4, R2, R3 34 MOVBU.NE.P R3, 1(R0) 35 AND.NE.S R4>>8, R2, R3 36 MOVBU.NE.P R3, 1(R0) 37 AND.NE.S R4>>16, R2, R3 38 MOVBU.NE.P R3, 1(R0) 39 AND.NE.S R4>>24, R2, R3 40 MOVBU.P R3, 1(R0) 41 BNE uloop 42 B return 43 44return: 45 MOVW to+0(FP), R0 46 RET 47