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