Date: Tue, 14 Jun 2005 23:31:58 +0200 From: Uwe Doering <gemini@geminix.org> To: Norbert Koch <NKoch@demig.de> Cc: freebsd-hackers@freebsd.org Subject: Re: Obvious bug in /sys/i386/include/bus.h (was: bus_at386.h) Message-ID: <42AF4CCE.9040308@geminix.org> In-Reply-To: <000001c57016$8e4b0600$4801a8c0@ws-ew-3.W2KDEMIG> References: <000001c57016$8e4b0600$4801a8c0@ws-ew-3.W2KDEMIG>
next in thread | previous in thread | raw e-mail | index | archive | help
Norbert Koch wrote: >>>So >>>how can I fix this in assembly. I am not an expert with inlined assembly, >>>so >>>maybe someone can correct me if I am wrong, but something like this needs >>>to >>>be added: >>> >>>or %ecx, %ecx >>>jz 2 >>> >>>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 -- Uwe Doering | EscapeBox - Managed On-Demand UNIX Servers gemini@geminix.org | http://www.escapebox.net
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?42AF4CCE.9040308>