<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/98126>98126</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
PowerPC `fp128` -> `half` uses `__trunctfhf2` but should be `__trunckfhf2`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
tgross35
</td>
</tr>
</table>
<pre>
```llvm
define half @trunckfhf(fp128 %a) unnamed_addr {
start:
%_0 = fptrunc fp128 %a to half
ret half %_0
}
```
Output on `powerpc64-unknown-linux-gnu`:
```asm
trunckfhf: # @trunckfhf
.quad .Lfunc_begin0
.quad .TOC.@tocbase
.quad 0
.Lfunc_begin0:
mflr 0
stdu 1, -112(1)
std 0, 128(1)
bl __trunctfhf2
nop
clrldi 3, 3, 48
bl __gnu_h2f_ieee
nop
addi 1, 1, 112
ld 0, 16(1)
mtlr 0
blr
.long 0
.quad 0
```
Note that this emits `__trunctfhf2`. According to https://gcc.gnu.org/wiki/Ieee128PowerPC (second table in section 2.2), `tf` is for whatever `long double` is in C, which on PPC is usually IBM double double, but `kf` is always for IEEE `binary128`. So it seems like this should instead emit a symbol named `__trunckfhf2`.
This would be consistent with other fptrunc operations for `fp128`, which lower to `kf` symbols (`__trunckfsf2`, `__trunckfdf2`).
There is more discussion at this thread https://github.com/llvm/llvm-project/issues/92866. Neither GCC nor LLVM provide this symbol yet in libgcc/compiler-rt, but I don't think that should block correcting the symbol name.
Tested at compiler explorer using `19.0.0git`. Link: https://llvm.godbolt.org/z/7MosczYcr
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVV1v4jgU_TXm5YrIMRCSBx46dFhVamcq7WilfUKOfZN4MTbrjzKdX7-yQ9pSMU8boYTY916fc-6xw71XvUHckNUXsrqf8RgG6zahd9b7xWrWWvm6IRUdf1q_HAm9J_ROYqcMwsB1B2RJg4tGHLqhI6zuTiWrgbAVJ6yBaAw_otxzKR2Q9Zcx3QfuAlncjW-QovcUyOIeulOuBe9VINi8zhTrMFzWTUnjKFnfX_5MUC-v-f49hlMMYA2Qip7sGd1JVMt5NAdjz2aulYk_572JKW3C9Kkc9xfi70wXd0DY4pr9BeJ4Ff9GLtPzsYtG7FvslaG3Qoof37dFqmNFyz3ernLJvC72ruB4HTvtpkjwQUYoCdvCvCwZYXVJWHMd74MEmiJKVt8MaDXs95lf6IaOXSaNPV2HCe20VACLVCvflvWNQr2J-4F1e4WIvyvFpVQj6vFWsut5PSGubgI-hg8KtNp9ElNb07-L-RuNb5romw0IYeABwqA84FEFn_x0JU9FC7gTwjqpTJ-NG8LJpzaxHWG7XoiiN7Gwridsd1YHRdjuARFLVj8nXz5vgbDao7BGQuCtRlAGPIqgrAFWsMSXbdO6oSMVBeWhsw7OAw_4gi5NZIrSxlbjJUIZ2Kas86DEkLbB8_M2jUcfudav8PDl6ZIw5bEttDGkaodpGa7P_HVc7eHr169prlWGu9dkncT7TwsqgEc8etDqgKNOfrBRS1DGB-QyywYc_OuxtRry0fBBxMMk4kfhf6Qy51ylRRDWeOUDmgBnFQawYUD3dmrYEzqetBqBkormcyS18o2_TkKn3ryxG9H4JP1HLD5jucj9Niovo80nkOgwyXS0DkEqL6L3qWeTX8LgEv9PflBhiG0h7JGwXT5cx8f85Ow_KAJhO-V9RE_YrmF1VRXwDVVm_Md2C8Y6eHz86wlOzr4oOSk-avuKITVeq7YXgrCdsMeT0ujmLkztfQBpDWHrDNEcRndfGtZqKw4grHPJfMnMA35s2zV79AFl4jqtAvjzpK1DB9GnbFLRsiloQXsVslselTmkI_RakES-6K1srQ6XXfKLsN36yXrx62_hZnKzkM2i4TPclGtGVyVbVXQ2bGhXNes1a6q641UjaCtZU9d8uVgvymop-UxtGGVLuqYNrWnDaEG7el1R0ZWrRdXxbkmWFI9c6SJjsK6fZek3TV2yaqZ5i9rnryRjBs-QJwlj6aPpNrlpbew9WVKtfPDvVYIKGjdvu_vdkTAni7yN8setohA93jpRcqumruCN3TKLTm_-h7EywZcN-y8AAP__u7plOw">