在 2023/11/23 下午8:24, Xi Ruoyao 写道:
On Thu, 2023-11-23 at 17:14 +0800, chenglulu wrote:
When I look at this code and compare it to our scalar implementation, it
seems

that our scalar implementation still lacks an "lround".
Should be "lroundeven".  We don't have an instruction for lround :(.

I tried this but it does not work:

-(define_int_iterator LRINT [UNSPEC_FTINT UNSPEC_FTINTRM UNSPEC_FTINTRP])
+(define_int_iterator LRINT
+  [UNSPEC_FTINT UNSPEC_FTINTRM UNSPEC_FTINTRP UNSPEC_FTINTRNE])
  (define_int_attr lrint_pattern [(UNSPEC_FTINT "lrint")
                                (UNSPEC_FTINTRM "lfloor")
-                               (UNSPEC_FTINTRP "lceil")])
+                               (UNSPEC_FTINTRP "lceil")
+                               (UNSPEC_FTINTRNE "lroundeven")])
  (define_int_attr lrint_submenmonic [(UNSPEC_FTINT "")
                                    (UNSPEC_FTINTRM "rm")
-                                   (UNSPEC_FTINTRP "rp")])
+                                   (UNSPEC_FTINTRP "rp")
+                                   (UNSPEC_FTINTRNE "rne")])

The problem is "lroundevenMN2" is not a standard pattern name.  The SIMD
version of ftintrne in patch 1 only works because we are expanding
"roundevenM2" (it's a standard pattern name) to UNSPEC_SIMD_FRINTRNE,
and then a define_insn can match (fix (UNSPEC_SIMD_FRINTRNE op)).  But
for non-SIMD we don't have roundevenM2.

Okay, I understand. I think this is a bit regretful.


Reply via email to