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