1*12b1df16SDavid du ColombierTEXT strcpy(SB), $0 2*12b1df16SDavid du Colombier 3*12b1df16SDavid du Colombier MOVW s2+4(FP),R2 /* R2 is from pointer */ 4*12b1df16SDavid du Colombier MOVW R1, R3 /* R3 is to pointer */ 5*12b1df16SDavid du Colombier 6*12b1df16SDavid du Colombier/* 7*12b1df16SDavid du Colombier * align 'from' pointer 8*12b1df16SDavid du Colombier */ 9*12b1df16SDavid du Colombierl1: 10*12b1df16SDavid du Colombier AND $3, R2, R5 11*12b1df16SDavid du Colombier ADDU $1, R2 12*12b1df16SDavid du Colombier BEQ R5, l2 13*12b1df16SDavid du Colombier MOVB -1(R2), R5 14*12b1df16SDavid du Colombier ADDU $1, R3 15*12b1df16SDavid du Colombier MOVB R5, -1(R3) 16*12b1df16SDavid du Colombier BNE R5, l1 17*12b1df16SDavid du Colombier RET 18*12b1df16SDavid du Colombier 19*12b1df16SDavid du Colombier/* 20*12b1df16SDavid du Colombier * test if 'to' is also alligned 21*12b1df16SDavid du Colombier */ 22*12b1df16SDavid du Colombierl2: 23*12b1df16SDavid du Colombier AND $3,R3, R5 24*12b1df16SDavid du Colombier BEQ R5, l4 25*12b1df16SDavid du Colombier 26*12b1df16SDavid du Colombier/* 27*12b1df16SDavid du Colombier * copy 4 at a time, 'to' not aligned 28*12b1df16SDavid du Colombier */ 29*12b1df16SDavid du Colombierl3: 30*12b1df16SDavid du Colombier MOVW -1(R2), R4 31*12b1df16SDavid du Colombier ADD $4, R2 32*12b1df16SDavid du Colombier ADD $4, R3 33*12b1df16SDavid du Colombier AND $0xff,R4, R5 34*12b1df16SDavid du Colombier MOVB R5, -4(R3) 35*12b1df16SDavid du Colombier BEQ R5, out 36*12b1df16SDavid du Colombier 37*12b1df16SDavid du Colombier SRL $8,R4, R5 38*12b1df16SDavid du Colombier AND $0xff, R5 39*12b1df16SDavid du Colombier MOVB R5, -3(R3) 40*12b1df16SDavid du Colombier BEQ R5, out 41*12b1df16SDavid du Colombier 42*12b1df16SDavid du Colombier SRL $16,R4, R5 43*12b1df16SDavid du Colombier AND $0xff, R5 44*12b1df16SDavid du Colombier MOVB R5, -2(R3) 45*12b1df16SDavid du Colombier BEQ R5, out 46*12b1df16SDavid du Colombier 47*12b1df16SDavid du Colombier SRL $24,R4, R5 48*12b1df16SDavid du Colombier MOVB R5, -1(R3) 49*12b1df16SDavid du Colombier BNE R5, l3 50*12b1df16SDavid du Colombier 51*12b1df16SDavid du Colombierout: 52*12b1df16SDavid du Colombier RET 53*12b1df16SDavid du Colombier 54*12b1df16SDavid du Colombier/* 55*12b1df16SDavid du Colombier * word at a time both aligned 56*12b1df16SDavid du Colombier */ 57*12b1df16SDavid du Colombierl4: 58*12b1df16SDavid du Colombier MOVW $0xff000000, R7 59*12b1df16SDavid du Colombier MOVW $0x00ff0000, R8 60*12b1df16SDavid du Colombier 61*12b1df16SDavid du Colombierl5: 62*12b1df16SDavid du Colombier ADDU $4, R3 63*12b1df16SDavid du Colombier MOVW -1(R2), R4 /* fetch */ 64*12b1df16SDavid du Colombier 65*12b1df16SDavid du Colombier ADDU $4, R2 66*12b1df16SDavid du Colombier AND $0xff,R4, R5 /* is it byte 0 */ 67*12b1df16SDavid du Colombier AND $0xff00,R4, R6 /* is it byte 1 */ 68*12b1df16SDavid du Colombier BEQ R5, b0 69*12b1df16SDavid du Colombier 70*12b1df16SDavid du Colombier AND R8,R4, R5 /* is it byte 2 */ 71*12b1df16SDavid du Colombier BEQ R6, b1 72*12b1df16SDavid du Colombier 73*12b1df16SDavid du Colombier AND R7,R4, R6 /* is it byte 3 */ 74*12b1df16SDavid du Colombier BEQ R5, b2 75*12b1df16SDavid du Colombier 76*12b1df16SDavid du Colombier MOVW R4, -4(R3) /* store */ 77*12b1df16SDavid du Colombier BNE R6, l5 78*12b1df16SDavid du Colombier JMP out 79*12b1df16SDavid du Colombier 80*12b1df16SDavid du Colombierb0: 81*12b1df16SDavid du Colombier MOVB $0, -4(R3) 82*12b1df16SDavid du Colombier JMP out 83*12b1df16SDavid du Colombier 84*12b1df16SDavid du Colombierb1: 85*12b1df16SDavid du Colombier MOVB R4, -4(R3) 86*12b1df16SDavid du Colombier MOVB $0, -3(R3) 87*12b1df16SDavid du Colombier JMP out 88*12b1df16SDavid du Colombier 89*12b1df16SDavid du Colombierb2: 90*12b1df16SDavid du Colombier MOVH R4, -4(R3) 91*12b1df16SDavid du Colombier MOVB $0, -2(R3) 92*12b1df16SDavid du Colombier JMP out 93