[lkml]   [2005]   [Apr]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: [BUG mm] "fixed" i386 memcpy inlining buggy
    On Wednesday 06 April 2005 16:18, Richard B. Johnson wrote:
    > Attached is inline ix86 memcpy() plus test code that tests its
    > corner-cases. The in-line code makes no jumps, but uses longword
    > copies, word copies and any spare byte copy. It works at all
    > offsets, doesn't require alignment but would work fastest if
    > both source and destination were longword aligned.

    Yours is:

    "shr $1, %%ecx\n" \
    "pushf\n" \
    "shr $1, %%ecx\n" \
    "pushf\n" \ <=== not needed
    "rep\n" \
    "movsl\n" \
    "popf\n" \ <=== not needed
    "adcl %%ecx, %%ecx\n" \
    "rep\n" \
    "movsw\n" \
    "popf\n" \
    "adcl %%ecx, %%ecx\n" \
    "rep\n" \
    "movsb\n" \

    You struggle too much for that movsw.

    -mm one (which happen to be mine) is:

    "movl %ecx,%4"
    "shr $2,%ecx"
    "rep ; movsl"
    "movl %4,%%ecx"
    "andl $3,%%ecx"
    "jz 1ft" /* pay 2 byte penalty for a chance to skip microcoded rep */
    "rep ; movsb"

    and I can still drop that jz. It is there just to have
    a chance to skip rep movsb, it was measured to be slow
    enough to matter. rep movs are a bit slow to start, on small
    blocks it is measurable.

    However, maybe it is even better without jz,
    need to benchmark 'cold path' (i.e. where branch predictor
    have no data to predict it) somehow.

    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2005-04-06 16:19    [W:0.020 / U:26.400 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site