X86 instruction encoding

Hi all,

Just a quick question about the X86 instruction naming convention in LLVM. Most instruction names in LLVM are self-explanatory. Some are a little confusing. What is the difference between instruction MULSSrr and MULSSrr_Int? What does the suffix '_Int' stand for? Are these instructions exchangeable: "ST_F64m", "ST_FP64m", "ST_Fp64m" "ST_FpP64m32"? Any direction will be appreciated. Thanks a lot in advance.

Bin

Hi all,

Just a quick question about the X86 instruction naming convention in
LLVM. Most instruction names in LLVM are self-explanatory. Some are a
little confusing. What is the difference between instruction MULSSrr and
MULSSrr_Int? What does the suffix '_Int' stand for?

"_Int" stands for "intrinsic", because the pattern matches an intrinsic instead of normal nodes.

That said, this is old and bad. These instructions should be replaced with Pat<> patterns, to avoid duplicating the encoding an other information about the pattern.

Are these
instructions exchangeable: "ST_F64m", "ST_FP64m",

No, these generate different mnemonics (fst vs fstp) the difference is that the "p" version pops the floating point stack.

"ST_Fp64m" "ST_FpP64m32"? Any direction will be appreciated. Thanks a lot in advance.

These ones are related to register classes. The later one does a 32-bit store of a "64-bit floating point register". This is a modeling artifact of how we represent the floating point stack registers.

-Chris