1*219b2ee8SDavid du Colombier TEXT strcpy(SB), $0 2*219b2ee8SDavid du Colombier 3*219b2ee8SDavid du ColombierMOVW R7, 0(FP) 4*219b2ee8SDavid du Colombier MOVW s1+0(FP), R9 /* R9 is to pointer */ 5*219b2ee8SDavid du Colombier MOVW s2+4(FP), R10 /* R10 is from pointer */ 6*219b2ee8SDavid du Colombier 7*219b2ee8SDavid du Colombier/* 8*219b2ee8SDavid du Colombier * test if both pointers 9*219b2ee8SDavid du Colombier * are similarly word aligned 10*219b2ee8SDavid du Colombier */ 11*219b2ee8SDavid du Colombier XOR R9,R10, R7 12*219b2ee8SDavid du Colombier ANDCC $3,R7, R0 13*219b2ee8SDavid du Colombier BNE una 14*219b2ee8SDavid du Colombier 15*219b2ee8SDavid du Colombier/* 16*219b2ee8SDavid du Colombier * make byte masks 17*219b2ee8SDavid du Colombier */ 18*219b2ee8SDavid du Colombier MOVW $0xff, R17 19*219b2ee8SDavid du Colombier SLL $8,R17, R16 20*219b2ee8SDavid du Colombier SLL $16,R17, R13 21*219b2ee8SDavid du Colombier SLL $24,R17, R12 22*219b2ee8SDavid du Colombier 23*219b2ee8SDavid du Colombier/* 24*219b2ee8SDavid du Colombier * byte at a time to word align 25*219b2ee8SDavid du Colombier */ 26*219b2ee8SDavid du Colombieral1: 27*219b2ee8SDavid du Colombier ANDCC $3,R10, R0 28*219b2ee8SDavid du Colombier BE al2 29*219b2ee8SDavid du Colombier MOVB (R10), R11 30*219b2ee8SDavid du Colombier ADD $1, R10 31*219b2ee8SDavid du Colombier MOVB R11, (R9) 32*219b2ee8SDavid du Colombier ADD $1, R9 33*219b2ee8SDavid du Colombier SUBCC R0,R11, R0 34*219b2ee8SDavid du Colombier BNE al1 35*219b2ee8SDavid du Colombier JMP out 36*219b2ee8SDavid du Colombier 37*219b2ee8SDavid du Colombier/* 38*219b2ee8SDavid du Colombier * word at a time 39*219b2ee8SDavid du Colombier */ 40*219b2ee8SDavid du Colombieral2: 41*219b2ee8SDavid du Colombier ADD $4, R9 42*219b2ee8SDavid du Colombier MOVW (R10), R11 /* fetch */ 43*219b2ee8SDavid du Colombier ADD $4, R10 44*219b2ee8SDavid du Colombier ANDCC R12,R11, R0 /* is it byte 0 */ 45*219b2ee8SDavid du Colombier BE b0 46*219b2ee8SDavid du Colombier ANDCC R13,R11, R0 /* is it byte 1 */ 47*219b2ee8SDavid du Colombier BE b1 48*219b2ee8SDavid du Colombier ANDCC R16,R11, R0 /* is it byte 2 */ 49*219b2ee8SDavid du Colombier BE b2 50*219b2ee8SDavid du Colombier MOVW R11, -4(R9) /* store */ 51*219b2ee8SDavid du Colombier ANDCC R17,R11, R0 /* is it byte 3 */ 52*219b2ee8SDavid du Colombier BNE al2 53*219b2ee8SDavid du Colombier 54*219b2ee8SDavid du Colombier JMP out 55*219b2ee8SDavid du Colombier 56*219b2ee8SDavid du Colombierb0: 57*219b2ee8SDavid du Colombier MOVB R0, -4(R9) 58*219b2ee8SDavid du Colombier JMP out 59*219b2ee8SDavid du Colombier 60*219b2ee8SDavid du Colombierb1: 61*219b2ee8SDavid du Colombier SRL $24, R11 62*219b2ee8SDavid du Colombier MOVB R11, -4(R9) 63*219b2ee8SDavid du Colombier MOVB R0, -3(R9) 64*219b2ee8SDavid du Colombier JMP out 65*219b2ee8SDavid du Colombier 66*219b2ee8SDavid du Colombierb2: 67*219b2ee8SDavid du Colombier SRL $24,R11, R7 68*219b2ee8SDavid du Colombier MOVB R7, -4(R9) 69*219b2ee8SDavid du Colombier SRL $16, R11 70*219b2ee8SDavid du Colombier MOVB R11, -3(R9) 71*219b2ee8SDavid du Colombier MOVB R0, -2(R9) 72*219b2ee8SDavid du Colombier JMP out 73*219b2ee8SDavid du Colombier 74*219b2ee8SDavid du Colombieruna: 75*219b2ee8SDavid du Colombier MOVB (R10), R11 76*219b2ee8SDavid du Colombier ADD $1, R10 77*219b2ee8SDavid du Colombier MOVB R11, (R9) 78*219b2ee8SDavid du Colombier ADD $1, R9 79*219b2ee8SDavid du Colombier SUBCC R0,R11, R0 80*219b2ee8SDavid du Colombier BNE una 81*219b2ee8SDavid du Colombier 82*219b2ee8SDavid du Colombierout: 83*219b2ee8SDavid du Colombier MOVW s1+0(FP),R7 84*219b2ee8SDavid du Colombier RETURN 85