1*219b2ee8SDavid du Colombier TEXT memset(SB),$0 2*219b2ee8SDavid du Colombier 3*219b2ee8SDavid du Colombier/* 4*219b2ee8SDavid du Colombier * performance: 5*219b2ee8SDavid du Colombier * (tba) 6*219b2ee8SDavid du Colombier */ 7*219b2ee8SDavid du Colombier 8*219b2ee8SDavid du ColombierMOVW R7, 0(FP) 9*219b2ee8SDavid du Colombier MOVW n+8(FP), R9 /* R9 is count */ 10*219b2ee8SDavid du Colombier MOVW p+0(FP), R10 /* R10 is pointer */ 11*219b2ee8SDavid du Colombier MOVW c+4(FP), R11 /* R11 is char */ 12*219b2ee8SDavid du Colombier ADD R9,R10, R12 /* R12 is end pointer */ 13*219b2ee8SDavid du Colombier 14*219b2ee8SDavid du Colombier/* 15*219b2ee8SDavid du Colombier * if not at least 4 chars, 16*219b2ee8SDavid du Colombier * dont even mess around. 17*219b2ee8SDavid du Colombier * 3 chars to guarantee any 18*219b2ee8SDavid du Colombier * rounding up to a word 19*219b2ee8SDavid du Colombier * boundary and 4 characters 20*219b2ee8SDavid du Colombier * to get at least maybe one 21*219b2ee8SDavid du Colombier * full word store. 22*219b2ee8SDavid du Colombier */ 23*219b2ee8SDavid du Colombier SUBCC $4,R9, R0 24*219b2ee8SDavid du Colombier BL out 25*219b2ee8SDavid du Colombier 26*219b2ee8SDavid du Colombier/* 27*219b2ee8SDavid du Colombier * turn R11 into a word of characters 28*219b2ee8SDavid du Colombier */ 29*219b2ee8SDavid du Colombier AND $0xff, R11 30*219b2ee8SDavid du Colombier SLL $8,R11, R7 31*219b2ee8SDavid du Colombier OR R7, R11 32*219b2ee8SDavid du Colombier SLL $16,R11, R7 33*219b2ee8SDavid du Colombier OR R7, R11 34*219b2ee8SDavid du Colombier 35*219b2ee8SDavid du Colombier/* 36*219b2ee8SDavid du Colombier * store one byte at a time until pointer 37*219b2ee8SDavid du Colombier * is alligned on a word boundary 38*219b2ee8SDavid du Colombier */ 39*219b2ee8SDavid du Colombierl1: 40*219b2ee8SDavid du Colombier ANDCC $3,R10, R0 41*219b2ee8SDavid du Colombier BE l2 42*219b2ee8SDavid du Colombier MOVB R11, 0(R10) 43*219b2ee8SDavid du Colombier ADD $1, R10 44*219b2ee8SDavid du Colombier JMP l1 45*219b2ee8SDavid du Colombier 46*219b2ee8SDavid du Colombier/* 47*219b2ee8SDavid du Colombier * turn R9 into end pointer-15 48*219b2ee8SDavid du Colombier * store 16 at a time while theres room 49*219b2ee8SDavid du Colombier */ 50*219b2ee8SDavid du Colombierl2: 51*219b2ee8SDavid du Colombier ADD $-15,R12, R9 52*219b2ee8SDavid du Colombier SUBCC R10,R9, R0 53*219b2ee8SDavid du Colombier BLEU l4 54*219b2ee8SDavid du Colombierl3: 55*219b2ee8SDavid du Colombier MOVW R11, 0(R10) 56*219b2ee8SDavid du Colombier MOVW R11, 4(R10) 57*219b2ee8SDavid du Colombier ADD $16, R10 58*219b2ee8SDavid du Colombier SUBCC R10,R9, R0 59*219b2ee8SDavid du Colombier MOVW R11, -8(R10) 60*219b2ee8SDavid du Colombier MOVW R11, -4(R10) 61*219b2ee8SDavid du Colombier BGU l3 62*219b2ee8SDavid du Colombier 63*219b2ee8SDavid du Colombier/* 64*219b2ee8SDavid du Colombier * turn R9 into end pointer-3 65*219b2ee8SDavid du Colombier * store 4 at a time while theres room 66*219b2ee8SDavid du Colombier */ 67*219b2ee8SDavid du Colombierl4: 68*219b2ee8SDavid du Colombier ADD $-3,R12, R9 69*219b2ee8SDavid du Colombierl5: 70*219b2ee8SDavid du Colombier SUBCC R10,R9, R0 71*219b2ee8SDavid du Colombier BLEU out 72*219b2ee8SDavid du Colombier MOVW R11, 0(R10) 73*219b2ee8SDavid du Colombier ADD $4, R10 74*219b2ee8SDavid du Colombier JMP l5 75*219b2ee8SDavid du Colombier 76*219b2ee8SDavid du Colombier/* 77*219b2ee8SDavid du Colombier * last loop, store byte at a time 78*219b2ee8SDavid du Colombier */ 79*219b2ee8SDavid du Colombierout: 80*219b2ee8SDavid du Colombier SUBCC R10,R12, R0 81*219b2ee8SDavid du Colombier BLEU ret 82*219b2ee8SDavid du Colombier MOVB R11, 0(R10) 83*219b2ee8SDavid du Colombier ADD $1, R10 84*219b2ee8SDavid du Colombier JMP out 85*219b2ee8SDavid du Colombier 86*219b2ee8SDavid du Colombierret: 87*219b2ee8SDavid du Colombier MOVW s1+0(FP), R7 88*219b2ee8SDavid du Colombier RETURN 89