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