Can't Handle LibCall Result for 128 bit Multiplication on X86_32


I’m investigate long integer(128 bit or 256 bit) support on LLVM. When doing multiplication of two 128 bit integer, during the legalize type phase, LLVM will use a LibCall to implement this. When lowering the Libcall result on X86 target, it use RetCC_X86 to assign location.

As defined in llvm/lib/Target/X86/

CCIfType<[i32], CCAssignToReg<[EAX, EDX, ECX]>>

So, if the result 128 bit long, it can’t allocate more register for this result, cause RetCC_X86 to return true at line 173 of /home/chouqin/workspace/llvm/lib/CodeGen/CallingConvLower.cpp:

if (Fn(0, VT, VT, CCValAssign::Full, ISD::ArgFlagsTy(), *this)) {

Could please tell me how to handle this?