diff options
Diffstat (limited to 'llvm/lib/Target/Mips/MipsCallingConv.td')
| -rw-r--r-- | llvm/lib/Target/Mips/MipsCallingConv.td | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Target/Mips/MipsCallingConv.td b/llvm/lib/Target/Mips/MipsCallingConv.td index 8fda1be8469..bb45d4195ec 100644 --- a/llvm/lib/Target/Mips/MipsCallingConv.td +++ b/llvm/lib/Target/Mips/MipsCallingConv.td @@ -29,6 +29,12 @@ def RetCC_F128SoftFloat : CallingConv<[ // pair of i64's. def RetCC_F128HardFloat : CallingConv<[ CCBitConvertToType<f64>, + + // Contrary to the ABI documentation, a struct containing a long double is + // returned in $f0, and $f1 instead of the usual $f0, and $f2. This is to + // match the de facto ABI as implemented by GCC. + CCIfInReg<CCAssignToReg<[D0_64, D1_64]>>, + CCAssignToReg<[D0_64, D2_64]> ]>; |

