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