X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firmode.c;h=8d4a1b85f1f55cd8882c7d4de7d0eca02aa8cf7f;hb=eda9d668d0e8c8246015b4c5e743316a6a835a23;hp=6dfb28400fe45aa5c531c5477f11337d03f61625;hpb=60d444376e2653f52d36775d6f552eed7e621291;p=libfirm diff --git a/ir/ir/irmode.c b/ir/ir/irmode.c index 6dfb28400..8d4a1b85f 100644 --- a/ir/ir/irmode.c +++ b/ir/ir/irmode.c @@ -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; } /*