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

李奇平 liqiping1991 at gmail.com
Fri Apr 25 20:35:09 PDT 2014


hi,

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/X86CallingConv.td`:

```
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?


-- 
Qiping Li, Programmer
Email: liqiping1991 at gmail.com
Mobile: 15700080842
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140426/d8fbc71d/attachment.html>


More information about the llvm-dev mailing list