1*7dd7cddfSDavid du Colombier TEXT memcmp(SB), $0 2*7dd7cddfSDavid du Colombier#define BDNZ BC 16,0, 3*7dd7cddfSDavid du Colombier MOVW R3, s1+0(FP) /* R3 is pointer1 */ 4*7dd7cddfSDavid du Colombier 5*7dd7cddfSDavid du Colombier/* 6*7dd7cddfSDavid du Colombier * performance: 7*7dd7cddfSDavid du Colombier * 67mb/sec aligned; 16mb/sec unaligned 8*7dd7cddfSDavid du Colombier */ 9*7dd7cddfSDavid du Colombier 10*7dd7cddfSDavid du Colombier MOVW n+8(FP), R4 /* R4 is count */ 11*7dd7cddfSDavid du Colombier MOVW s2+4(FP), R5 /* R5 is pointer2 */ 12*7dd7cddfSDavid du Colombier 13*7dd7cddfSDavid du Colombier/* 14*7dd7cddfSDavid du Colombier * let LSW do the work for 4 characters or less; aligned and unaligned 15*7dd7cddfSDavid du Colombier */ 16*7dd7cddfSDavid du Colombier CMP R4, $0 17*7dd7cddfSDavid du Colombier BLE eq 18*7dd7cddfSDavid du Colombier CMP R4, $4 19*7dd7cddfSDavid du Colombier BLE out 20*7dd7cddfSDavid du Colombier 21*7dd7cddfSDavid du Colombier XOR R3, R5, R9 22*7dd7cddfSDavid du Colombier ANDCC $3, R9 23*7dd7cddfSDavid du Colombier BNE l4 /* pointers misaligned; use LSW loop */ 24*7dd7cddfSDavid du Colombier 25*7dd7cddfSDavid du Colombier/* 26*7dd7cddfSDavid du Colombier * do enough bytes to align pointers 27*7dd7cddfSDavid du Colombier */ 28*7dd7cddfSDavid du Colombier ANDCC $3,R3, R9 29*7dd7cddfSDavid du Colombier BEQ l2 30*7dd7cddfSDavid du Colombier SUBC R9, $4, R9 31*7dd7cddfSDavid du Colombier MOVW R9, XER 32*7dd7cddfSDavid du Colombier LSW (R3), R10 33*7dd7cddfSDavid du Colombier ADD R9, R3 34*7dd7cddfSDavid du Colombier LSW (R5), R14 35*7dd7cddfSDavid du Colombier ADD R9, R5 36*7dd7cddfSDavid du Colombier SUB R9, R4 37*7dd7cddfSDavid du Colombier CMPU R10, R14 38*7dd7cddfSDavid du Colombier BNE ne 39*7dd7cddfSDavid du Colombier 40*7dd7cddfSDavid du Colombier/* 41*7dd7cddfSDavid du Colombier * compare 16 at a time 42*7dd7cddfSDavid du Colombier */ 43*7dd7cddfSDavid du Colombierl2: 44*7dd7cddfSDavid du Colombier SRAWCC $4, R4, R9 45*7dd7cddfSDavid du Colombier BLE l4 46*7dd7cddfSDavid du Colombier MOVW R9, CTR 47*7dd7cddfSDavid du Colombier SUB $4, R3 48*7dd7cddfSDavid du Colombier SUB $4, R5 49*7dd7cddfSDavid du Colombierl3: 50*7dd7cddfSDavid du Colombier MOVWU 4(R3), R10 51*7dd7cddfSDavid du Colombier MOVWU 4(R5), R12 52*7dd7cddfSDavid du Colombier MOVWU 4(R3), R11 53*7dd7cddfSDavid du Colombier MOVWU 4(R5), R13 54*7dd7cddfSDavid du Colombier CMPU R10, R12 55*7dd7cddfSDavid du Colombier BNE ne 56*7dd7cddfSDavid du Colombier MOVWU 4(R3), R10 57*7dd7cddfSDavid du Colombier MOVWU 4(R5), R12 58*7dd7cddfSDavid du Colombier CMPU R11, R13 59*7dd7cddfSDavid du Colombier BNE ne 60*7dd7cddfSDavid du Colombier MOVWU 4(R3), R11 61*7dd7cddfSDavid du Colombier MOVWU 4(R5), R13 62*7dd7cddfSDavid du Colombier CMPU R10, R12 63*7dd7cddfSDavid du Colombier BNE ne 64*7dd7cddfSDavid du Colombier CMPU R11, R13 65*7dd7cddfSDavid du Colombier BNE ne 66*7dd7cddfSDavid du Colombier BDNZ l3 67*7dd7cddfSDavid du Colombier ADD $4, R3 68*7dd7cddfSDavid du Colombier ADD $4, R5 69*7dd7cddfSDavid du Colombier RLWNMCC $0, R4, $15, R4 /* residue */ 70*7dd7cddfSDavid du Colombier BEQ eq 71*7dd7cddfSDavid du Colombier 72*7dd7cddfSDavid du Colombier/* 73*7dd7cddfSDavid du Colombier * do remaining words with LSW; also does unaligned case 74*7dd7cddfSDavid du Colombier */ 75*7dd7cddfSDavid du Colombierl4: 76*7dd7cddfSDavid du Colombier SRAWCC $2, R4, R9 77*7dd7cddfSDavid du Colombier BLE out 78*7dd7cddfSDavid du Colombier MOVW R9, CTR 79*7dd7cddfSDavid du Colombierl5: 80*7dd7cddfSDavid du Colombier LSW (R3), $4, R10 81*7dd7cddfSDavid du Colombier ADD $4, R3 82*7dd7cddfSDavid du Colombier LSW (R5), $4, R11 83*7dd7cddfSDavid du Colombier ADD $4, R5 84*7dd7cddfSDavid du Colombier CMPU R10, R11 85*7dd7cddfSDavid du Colombier BNE ne 86*7dd7cddfSDavid du Colombier BDNZ l5 87*7dd7cddfSDavid du Colombier RLWNMCC $0, R4, $3, R4 /* residue */ 88*7dd7cddfSDavid du Colombier BEQ eq 89*7dd7cddfSDavid du Colombier 90*7dd7cddfSDavid du Colombier/* 91*7dd7cddfSDavid du Colombier * do remaining bytes with final LSW 92*7dd7cddfSDavid du Colombier */ 93*7dd7cddfSDavid du Colombierout: 94*7dd7cddfSDavid du Colombier MOVW R4, XER 95*7dd7cddfSDavid du Colombier LSW (R3), R10 96*7dd7cddfSDavid du Colombier LSW (R5), R11 97*7dd7cddfSDavid du Colombier CMPU R10, R11 98*7dd7cddfSDavid du Colombier BNE ne 99*7dd7cddfSDavid du Colombier 100*7dd7cddfSDavid du Colombiereq: 101*7dd7cddfSDavid du Colombier MOVW $0, R3 102*7dd7cddfSDavid du Colombier RETURN 103*7dd7cddfSDavid du Colombier 104*7dd7cddfSDavid du Colombierne: 105*7dd7cddfSDavid du Colombier MOVW $1, R3 106*7dd7cddfSDavid du Colombier BGE ret 107*7dd7cddfSDavid du Colombier MOVW $-1,R3 108*7dd7cddfSDavid du Colombierret: 109*7dd7cddfSDavid du Colombier RETURN 110*7dd7cddfSDavid du Colombier END 111