I can't seem to get cmove
to work the way I want it to. I have this bit of code:
cmove $1, %eax
And I get this error on compilation:
Error: operand type mismatch for `cmove'
However, replacing cmove
with, say, mov
works perfectly, and
mov $1, %ecx
cmove %ecx, %eax
works too. I've tried to use cmovel
as well, but it just doesn't work. Am I missing something?
Am I missing something?
For cmove $1,%eax
to work there'd have to be a form of cmove
that accepts r32,imm
(or r/m32,imm
) as an argument combination. But the only valid forms of cmove
listed in Intel's manual are:
CMOVE r16, r/m16
CMOVE r32, r/m32
CMOVE r64, r/m64
In the description for CMOVcc
they spell this out:
These instructions can move 16-bit, 32-bit or 64-bit values from memory to a general-purpose register or from one general-purpose register to another.