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