X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=ir%2Flower%2Flower_calls.h;h=ba290bc2e7c00bfb8fdfef198e1e503c46d9ae51;hb=0a8dac2b5fb9e59ea2add322baf61237b607bea5;hp=5da697a2ca28dbb0a7a5e42ec220f52fac93dc9c;hpb=d16b1e9e4d47b1f467067aadb36d58fc79b37788;p=libfirm diff --git a/ir/lower/lower_calls.h b/ir/lower/lower_calls.h index 5da697a2c..ba290bc2e 100644 --- a/ir/lower/lower_calls.h +++ b/ir/lower/lower_calls.h @@ -1,70 +1,42 @@ /* - * Project: libFIRM - * File name: ir/lower/lower_calls.h - * Purpose: lowering of Calls with compound parameters - * Author: Michael Beck - * Created: - * CVS-ID: $Id$ - * Copyright: (c) 1998-2005 Universität Karlsruhe - * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE. - */ - -/** - * @file lower_calls.h + * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved. * - * Lowering of Calls with compound return types. + * This file is part of libFirm. * - * @author Michael Beck - */ -#ifndef _LOWER_CALLS_H_ -#define _LOWER_CALLS_H_ - -/** - * A type telling where to add hidden parameters. + * 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. */ -typedef enum add_hidden_params { - ADD_HIDDEN_ALWAYS_IN_FRONT = 0, /**< always add hidden parameters in front (default). */ - ADD_HIDDEN_ALWAYS_LAST = 1, /**< always add hidden parameters last, did not work for variadic functions. */ - ADD_HIDDEN_SMART = 2 /**< add hidden parameters last for non-variadic and first for variadic functions. */ -} add_hidden; /** - * Additional flags for the lowering. + * @file + * @brief Lowering of calls with compound arguments + * @author Michael Beck */ -enum lowering_flags { - LF_NONE = 0, /**< no additional flags */ - LF_COMPOUND_PARAM = 1, /**< lower calls with compound parameters */ - LF_COMPOUND_RETURN = 2, /**< lower calls with compound returns */ - LF_RETURN_HIDDEN = 4, /**< return the hidden address instead of void */ - LF_SMALL_CMP_IN_REGS = 8 /**< return small compound values in registers */ -}; +#ifndef FIRM_LOWER_CALLS_H +#define FIRM_LOWER_CALLS_H -/** Maximum number of registers that can be used to return compound values. */ -#define MAX_REGISTER_RET_VAL 2 +#include "firm_types.h" /** - * A struct containing all control parameters for - * lower_compound_ret_calls(). + * Additional flags for the lowering. */ -typedef struct { - int def_ptr_alignment; /**< Default alignment for data pointer. */ - unsigned flags; /**< A bitmask of enum lowering_flags. */ - add_hidden hidden_params; /**< Where to add hidden parameters. */ - - /** - * A function returning a pointer type for a given type. - * If this pointer is NULL, a new pointer type is always created. - */ - ir_type *(*find_pointer_type)(ir_type *e_type, ir_mode *mode, int alignment); - - /** - * If the LF_SMALL_CMP_IN_REGS flag is set, this function will be called - * to decide, whether a compound value should be returned in registers. - * This function must return the number of used registers and fill in the modes - * of the registers to use. Up to MAX_REGISTER_RET_VAL registers can be used. - */ - int (*ret_compound_in_regs)(ir_type *compound_tp, ir_mode **modes); -} lower_params_t; +typedef enum compound_call_lowering_flags { + LF_NONE = 0, /**< no additional flags */ + LF_RETURN_HIDDEN = 1 << 0, /**< return the hidden address instead of void */ + LF_DONT_LOWER_ARGUMENTS = 1 << 1, /**< don't lower compound call arguments + (some backends can handle them themselves) */ +} compound_call_lowering_flags; +ENUM_BITSET(compound_call_lowering_flags) /** * Lower calls with compound parameter and return types. @@ -124,16 +96,7 @@ typedef struct { ret->a = a; } @endcode - * - * @param params A structure containing the control parameter for this - * transformation. - * - * During the transformation, pointer types must be created or reused. - * The caller can provide params->find_pointer_type for this task to - * reduce the number of created pointer types. - * If params->find_pointer_type is NULL, new pointer types - * are always created automatically. */ -void lower_calls_with_compounds(const lower_params_t *params); +void lower_calls_with_compounds(compound_call_lowering_flags flags); -#endif /* _LOWER_CALLS_H_ */ +#endif