[pypy-dev] Re: OT: abs(x) with 4 assembly insns
Michael Hudson
mwh at python.net
Mon Sep 29 13:15:23 CEST 2003
Christian Tismer <tismer at tismer.com> writes:
> Hi friends,
>
> today, Armin presented me a simple brain-teaser:
>
> You have X86 assembly, you have only 4 insns,
> and you don't want to use a jump.
> You have a register, loaded with a value, and
> you should produce its abs, in another register,
> while preserving the argument register.
>
> Hmm. 4 insns.
Or you can cheat, and remember that you saw something like this in
some psyco header file somewhere...
/* as you can check the following takes the absolute value of (say) EAX: \
ADD EAX, EAX \
SBB EAX, sourcecopy \
SBB EDX, EDX \
XOR EAX, EDX \
(note: although the idea is not original, the above code might be \
original as it has been found by an exhaustive search on *all* \
short codes :-) \
*/ \
I don't know x86 assembler, so I have no idea which of the two code
sequences are actually likely to run quicker on a modern processor.
I've been reading the PPC architecture manual, though, so I can tell
you that Bob's 3 instructions are all single cycle instructions on a
G3...
Cheers,
mwh
--
There are two kinds of large software systems: those that evolved
from small systems and those that don't work.
-- Seen on slashdot.org, then quoted by amk
More information about the Pypy-dev
mailing list