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]

Reply via email to