Hi Max,
While considering ways to improve the efficiency of DFmode constant assignment,
I identified yet another concern.
On 2026/10/12 22:44, Max Filippov wrote:
(snip)
@@ -1577,17 +1607,25 @@
"register_operand (operands[0], DFmode)
|| register_operand (operands[1], DFmode)"
{@ [cons: =0, 1; attrs: type, length]
- [a, r; move, 6] #
- [a, Y; load, 6] ^
- [W, iF; move, 12] ^
- [a, T; load, 6] ^
- [a, U; load, 6] ^
- [U, r; store, 6] ^
+ [f, Gc; farith, 3] const.d\t%0, %G1
+ [f, r; farith, 3] wfrd\t%0, %T1, %B1
+ [a, f; farith, 6] rfrd\t%T0, %1\;rfr\t%B0, %1
+ [f, f; farith, 3] mov.d\t%0, %1
+ [f, U; fload , 3] %v1ldi\t%0, %1
+ [U, f; fstore, 3] %v0sdi\t%1, %0
+ [a, r; move , 6] df-move-a-from-r\t%0, %1
+ [a, Y; load , 6] df-load-a-from-Y\t%0, %1
+ [a, T; load , 6] df-load-a-from-T\t%0, %1
+ [a, U; load , 6] df-load-a-from-U\t%0, %1
+ [U, r; store , 6] df-store-r-to-U\t%0, %1
}(snip)
I understand that the LDI and SDI instructions belong to the fload and fstore
insn types, respectively; however, wouldn't their execution cycles differ from
those of their SFmode counterparts — LSI and SSI?
It seems that these instructions need another insn type (eg., fload2 or
fstore2) that shares properties with fload or fstore but has a larger execution
cycle.
=====
mailto:[email protected]