Add is_Conv().
[libfirm] / ir / ir / irmode.c
index 6dfb284..8d4a1b8 100644 (file)
@@ -1,13 +1,27 @@
 /*
- * Project:     libFIRM
- * File name:   ir/ir/irmode.c
- * Purpose:     Data modes of operations.
- * Author:      Martin Trapp, Christian Schaefer
- * Modified by: Goetz Lindenmaier, Mathias Heil
- * Created:
- * CVS-ID:      $Id$
- * Copyright:   (c) 1998-2003 Universität Karlsruhe
- * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
+ * Copyright (C) 1995-2007 University of Karlsruhe.  All right reserved.
+ *
+ * This file is part of libFirm.
+ *
+ * This file may be distributed and/or modified under the terms of the
+ * GNU General Public License version 2 as published by the Free Software
+ * Foundation and appearing in the file LICENSE.GPL included in the
+ * packaging of this file.
+ *
+ * Licensees holding valid libFirm Professional Edition licenses may use
+ * this file in accordance with the libFirm Commercial License.
+ * Agreement provided with the Software.
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE.
+ */
+
+/**
+ * @file
+ * @brief    Data modes of operations.
+ * @author   Martin Trapp, Christian Schaefer, Goetz Lindenmaier, Mathias Heil
+ * @version  $Id$
  */
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -183,6 +197,8 @@ ir_mode *mode_Is;   /* 32 bit */
 ir_mode *mode_Iu;
 ir_mode *mode_Ls;   /* 64 bit */
 ir_mode *mode_Lu;
+ir_mode *mode_LLs;  /* 128 bit */
+ir_mode *mode_LLu;
 
 ir_mode *mode_C;
 ir_mode *mode_U;
@@ -210,6 +226,8 @@ ir_mode *get_modeIs(void) { return mode_Is; }
 ir_mode *get_modeIu(void) { return mode_Iu; }
 ir_mode *get_modeLs(void) { return mode_Ls; }
 ir_mode *get_modeLu(void) { return mode_Lu; }
+ir_mode *get_modeLLs(void){ return mode_LLs; }
+ir_mode *get_modeLLu(void){ return mode_LLu; }
 ir_mode *get_modeC(void) { return mode_C; }
 ir_mode *get_modeU(void) { return mode_U; }
 ir_mode *get_modeb(void) { return mode_b; }
@@ -834,6 +852,24 @@ init_mode (void) {
 
        mode_Lu = register_mode(&newmode);
 
+       /* signed long long integer */
+       newmode.name         = new_id_from_chars("LLs", 3);
+       newmode.code         = irm_LLs;
+       newmode.sign         = 1;
+       newmode.size         = 128;
+       newmode.modulo_shift = 128;
+
+       mode_LLs = register_mode(&newmode);
+
+       /* unsigned long long integer */
+       newmode.name         = new_id_from_chars("LLu", 3);
+       newmode.code         = irm_LLu;
+       newmode.sign         = 0;
+       newmode.size         = 128;
+       newmode.modulo_shift = 128;
+
+       mode_LLu = register_mode(&newmode);
+
        /* Character Modes */
        newmode.sort         = irms_character;
        newmode.arithmetic   = irma_twos_complement;
@@ -911,9 +947,9 @@ int mode_honor_signed_zeros(const ir_mode *mode) {
        /* for floating point, we know that IEEE 754 has +0 and -0,
         * but always handles it identical.
         */
-       if (mode->sort == irms_float_number)
-               return mode->arithmetic == irma_ieee754 ? 0 : 1;
-       return 0;
+       return
+               mode->sort == irms_float_number &&
+               mode->arithmetic != irma_ieee754;
 }
 
 /*