Obvious bug in /sys/i386/include/bus.h (was: bus_at386.h)

Uwe Doering gemini at geminix.org
Tue Jun 14 21:32:06 GMT 2005

Norbert Koch wrote:
>>>how can I fix this in assembly. I am not an expert with inlined assembly,
>>>maybe someone can correct me if I am wrong, but something like this needs
>>>be added:
>>>or %ecx, %ecx
>>>jz 2
>>This is wrong beacause the result is stored in ecx. Better using
>>JECXZ instruction
>>before the loop.
> No, it's a correct method to set/reset the zero flag:
>     (X | X) == X just as (X & X) == X
> So, he could also write: "and %ecx, %ecx".
> [...]

Also, on pipelined processors like Intel Pentium and better you would 
use "test %ecx, %ecx" for this purpose which internally is an "and", but 
since it drops the result and just sets the condition register it is 
faster than "and" or "or".  At least potentially.  Depends on the 
surrounding code.

Uwe Doering         |  EscapeBox - Managed On-Demand UNIX Servers
gemini at geminix.org  |  http://www.escapebox.net

More information about the freebsd-hackers mailing list