From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27247 invoked by alias); 30 Aug 2010 16:52:57 -0000 Received: (qmail 27149 invoked by uid 22791); 30 Aug 2010 16:52:54 -0000 X-SWARE-Spam-Status: No, hits=0.8 required=5.0 tests=AWL,BAYES_40,DNS_FROM_RFC_BOGUSMX,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from sebabeach.org (HELO sebabeach.org) (64.165.110.50) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 30 Aug 2010 16:52:50 +0000 Received: by sebabeach.org (Postfix, from userid 500) id AACF56E3E1; Mon, 30 Aug 2010 09:52:48 -0700 (PDT) From: Doug Evans To: cgen@sourceware.org Subject: [commit] fix nan handling Message-Id: <20100830165248.AACF56E3E1@sebabeach.org> Date: Wed, 01 Sep 2010 14:14:00 -0000 X-IsSubscribed: yes Mailing-List: contact cgen-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cgen-owner@sourceware.org X-SW-Source: 2010-q3/txt/msg00007.txt.bz2 Hi. I've committed this. nan,qnan,snan return a BI mode value, thus using s-unop to generate them is wrong. 2010-08-30 Doug Evans * rtl-c.scm (s-float-predop): New function. (nan, qnan, snan): Call it. Index: rtl-c.scm =================================================================== RCS file: /cvs/src/src/cgen/rtl-c.scm,v retrieving revision 1.31 diff -u -p -r1.31 rtl-c.scm --- rtl-c.scm 25 Jan 2010 03:50:43 -0000 1.31 +++ rtl-c.scm 30 Aug 2010 16:47:24 -0000 @@ -828,6 +828,27 @@ "))")))) ) +;; 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. @@ -1749,13 +1770,13 @@ ) (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)