kernel: bzeront() - Switch out loop instruction in i386 bzero for sub/jnz.
authorVenkatesh Srinivas <me@endeavour.zapto.org>
Sat, 11 Sep 2010 11:16:39 +0000 (04:16 -0700)
committerVenkatesh Srinivas <me@endeavour.zapto.org>
Sat, 11 Sep 2010 11:16:39 +0000 (04:16 -0700)
Much as I like loop, it has a ~7-9 cycle latency on AMD CPUs. Lets spend
idlezero time actually zeroing...

sys/cpu/i386/misc/bzeront.s

index bae1ec7..5759338 100644 (file)
@@ -53,6 +53,7 @@ ENTRY(bzeront)
        shrl $2, %ecx
 1:
        movnti %edx, (%eax)
-       add $4, %eax
-       loop 1b
+       addl $4, %eax
+       subl $1, %ecx
+       jnz 1b
        ret