OSDN Git Service

* rtl-c.scm (s-float-predop): New function.
authordevans <devans>
Tue, 31 Aug 2010 01:51:27 +0000 (01:51 +0000)
committerdevans <devans>
Tue, 31 Aug 2010 01:51:27 +0000 (01:51 +0000)
(nan, qnan, snan): Call it.

cgen/ChangeLog
cgen/rtl-c.scm

index 981bdfa..c125687 100644 (file)
@@ -1,3 +1,8 @@
+2010-08-30  Doug Evans  <dje@sebabeach.org>
+
+       * rtl-c.scm (s-float-predop): New function.
+       (nan, qnan, snan): Call it.
+
 2010-06-28  Alan Modra  <amodra@gmail.com>
 
        * cpu/mep.opc (mep_examine_ivc2_insns): Delete set but unused var.
index b196587..8d7d5ee 100644 (file)
                                "))"))))
 )
 
+;; Process fp predicates, e.g. nan, qnan, snan.
+;; SRC-MODE is the mode name of SRC.
+;; The result has mode BI.
+
+(define (s-float-predop estate name src-mode src)
+  (let* ((val (rtl-c-get estate src-mode src))
+        (mode (cx:mode val))
+        (sem-mode (rtx-sem-mode mode)))
+    ;; FIXME: Argument checking.
+
+    (if (not (mode-float? mode))
+       (estate-error estate "non floating-point mode" src-mode))
+
+    (cx:make (mode:lookup 'BI)
+            (string-append "CGEN_CPU_FPU (current_cpu)->ops->"
+                           (string-downcase name)
+                           (string-downcase (obj:str-name sem-mode))
+                           " (CGEN_CPU_FPU (current_cpu), "
+                           (cx:c val) ")")))
+)
+
 ;; Integer mode conversions.
 ;; MODE is the mode name.
 
 )
 
 (define-fn nan (*estate* options mode s1)
-  (s-unop *estate* "NAN" #f mode s1)
+  (s-float-predop *estate* "NAN" mode s1)
 )
 (define-fn qnan (*estate* options mode s1)
-  (s-unop *estate* "QNAN" #f mode s1)
+  (s-float-predop *estate* "QNAN" mode s1)
 )
 (define-fn snan (*estate* options mode s1)
-  (s-unop *estate* "SNAN" #f mode s1)
+  (s-float-predop *estate* "SNAN" mode s1)
 )
 
 (define-fn min (*estate* options mode s1 s2)