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