[Clfs-support] i586 target with cmov

William Harrington kb0iic at berzerkula.org
Tue May 17 11:11:47 PDT 2016


On Tue, May 17, 2016 15:32, Chris Fowler wrote:
> I've just finished chapter 6 of Sysvinit 3.0.0.  My goal is to target an
> i586 processor that lacks features of i686. such as cmov.
>
> I think I may have made a mistake during the initial builds.
>
> Maybe I have not, I just want to validate before I move on.  Host is
>  Ubuntu 15.10 x86_64.
> Target is a RDC3308 RISC, but it prefers to be x86.
>
>  have no name!:/# objdump /tools/bin/ls -D | grep cmov
>     180d: 0f 44 1e             cmove  (%esi),%ebx
>     31af: da cc                 fcmove %st(4),%st
>     4e18: 0f 4e 00             cmovle (%eax),%eax
>     59e6: 0f 4f 00             cmovg  (%eax),%eax
>     5ddc: 0f 4f 00             cmovg  (%eax),%eax
>     a836: db c5                 fcmovnb %st(5),%st
>     e50a: 0f 4c 2a             cmovl  (%edx),%ebp
>    1120f: 0f 4e 32             cmovle (%edx),%esi
>    12e19: 0f 48 00             cmovs  (%eax),%eax
>    1376b: 0f 4e 32             cmovle (%edx),%esi
>    14068: db cc                 fcmovne %st(4),%st
>    1cd7d: 0f 43 26             cmovae (%esi),%esp
>    1fadd: da db                 fcmovu %st(3),%st
>     25ef: 0f 4a 03             cmovp  (%ebx),%eax
>       c7: da cc                 fcmove %st(4),%st
>       d0: da cc                 fcmove %st(4),%st
>      305: db cf                 fcmovne %st(7),%st
>      30d: db cf                 fcmovne %st(7),%st
>     6fb7: da c5                 fcmovb %st(5),%st
>     799a: db c4                 fcmovnb %st(4),%st
>     7a27: db c4                 fcmovnb %st(4),%st
>     7a68: db c2                 fcmovnb %st(2),%st
>      244: db da                 fcmovnu %st(2),%st
>      450: db dc                 fcmovnu %st(4),%st
>      478: db dc                 fcmovnu %st(4),%st
>      4a0: db dc                 fcmovnu %st(4),%st
>      4c0: db dc                 fcmovnu %st(4),%st
>     22c4: db c4                 fcmovnb %st(4),%st
>     2434: db c4                 fcmovnb %st(4),%st
> I have no name!:/#
>
> Chris

Hello Chris,

i586 historically did not have cmov. The major change between i586 and
i686 (pentium pro and later) was cmov.
https://en.wikipedia.org/wiki/X86_instruction_listings#Added_with_Pentium_Pro

If you use a target of i586-unknown-linux-gnu and a build cross-tools
targeting i586 then you'll end up with i586. The notable change will be to
make sure GMP builds for the target rather than detecting the host's cpu
and building for it. There are some GEODE cpu's, like the GX1 that use the
i586 machine type and include cmov. Check your cpu flags if unsure if your
target CPU has cmov or not. I do not know if the current toolchain
versions add cmov into the i586 architecture.

Some more info about cmov, as well: http://yarchive.net/comp/linux/cmov.html

Sincerely,

William Harrington




More information about the Clfs-support mailing list