180ee5cbfSDavid du ColombierTEXT strcpy(SB), $-4 280ee5cbfSDavid du Colombier MOVW R0, to+0(FP) /* need to save for return value */ 380ee5cbfSDavid du Colombier MOVW from+4(FP), R1 480ee5cbfSDavid du Colombier MOVW $0xFF, R2 /* mask */ 580ee5cbfSDavid du Colombier 6*2ddf2468SDavid du Colombiersalign: /* align source on 4 */ 780ee5cbfSDavid du Colombier AND.S $3, R1, R3 8*2ddf2468SDavid du Colombier BEQ dalign 980ee5cbfSDavid du Colombier MOVBU.P 1(R1), R3 /* implicit write back */ 1080ee5cbfSDavid du Colombier TST R3, R2 1180ee5cbfSDavid du Colombier MOVBU.P R3, 1(R0) /* implicit write back */ 12*2ddf2468SDavid du Colombier BNE salign 13*2ddf2468SDavid du Colombier B return 1480ee5cbfSDavid du Colombier 15*2ddf2468SDavid du Colombierdalign: /* is destination now aligned? */ 1680ee5cbfSDavid du Colombier AND.S $3, R0, R3 17*2ddf2468SDavid du Colombier BNE uloop 1880ee5cbfSDavid du Colombier 19*2ddf2468SDavid du Colombieraloop: 20*2ddf2468SDavid du Colombier MOVW.P 4(R1), R4 /* read 4, write 4 */ 2180ee5cbfSDavid du Colombier TST R4, R2 /* AND.S R3, R2, Rx */ 2280ee5cbfSDavid du Colombier TST.NE R4>>8, R2 2380ee5cbfSDavid du Colombier TST.NE R4>>16, R2 2480ee5cbfSDavid du Colombier TST.NE R4>>24, R2 25*2ddf2468SDavid du Colombier BEQ tail 2680ee5cbfSDavid du Colombier MOVW.P R4, 4(R0) 27*2ddf2468SDavid du Colombier B aloop 2880ee5cbfSDavid du Colombier 29*2ddf2468SDavid du Colombieruloop: 30*2ddf2468SDavid du Colombier MOVW.P 4(R1), R4 /* read 4, write 1,1,1,1 */ 31*2ddf2468SDavid du Colombier 32*2ddf2468SDavid du Colombiertail: 3380ee5cbfSDavid du Colombier AND.S R4, R2, R3 34*2ddf2468SDavid du Colombier MOVBU.NE.P R3, 1(R0) 3580ee5cbfSDavid du Colombier AND.NE.S R4>>8, R2, R3 3680ee5cbfSDavid du Colombier MOVBU.NE.P R3, 1(R0) 3780ee5cbfSDavid du Colombier AND.NE.S R4>>16, R2, R3 3880ee5cbfSDavid du Colombier MOVBU.NE.P R3, 1(R0) 3980ee5cbfSDavid du Colombier AND.NE.S R4>>24, R2, R3 40*2ddf2468SDavid du Colombier MOVBU.P R3, 1(R0) 41*2ddf2468SDavid du Colombier BNE uloop 42*2ddf2468SDavid du Colombier B return 4380ee5cbfSDavid du Colombier 44*2ddf2468SDavid du Colombierreturn: 45*2ddf2468SDavid du Colombier MOVW to+0(FP), R0 46*2ddf2468SDavid du Colombier RET 47