X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Ftv%2Ftv_t.h;h=54f7db60f7df939b0ff0ed9e83ffd99acd109a82;hb=6911c8a5253d79be26f5fcb668b7fb69f1998819;hp=269eaa94abe7260876ca8d37a5154eb5f70b352b;hpb=55a613a794cc2fadd5508dcf721c342d70f342cc;p=libfirm diff --git a/ir/tv/tv_t.h b/ir/tv/tv_t.h index 269eaa94a..54f7db60f 100644 --- a/ir/tv/tv_t.h +++ b/ir/tv/tv_t.h @@ -1,31 +1,120 @@ -/* Declarations for Target Values. - Copyright (C) 1995, 1996 Christian von Roques */ +/* + * This file is part of libFirm. + * Copyright (C) 2012 University of Karlsruhe. + */ -/* $Id$ */ +/** + * @file + * @brief Representation of and static computations on target machine + * values -- private header. + * @date 2003 + * @author Mathias Heil + */ +#ifndef FIRM_TV_TV_T_H +#define FIRM_TV_TV_T_H -#ifndef _TV_T_H_ -#define _TV_T_H_ +#include "firm_common.h" -# include "tv.h" -# include "misc.h" +#include +#include "irmode.h" +#include "tv.h" -int tarval_print (XP_PAR1, const xprintf_info *, XP_PARN); +/** + * Initialization of the tarval module. + * + * Call before init_mode(). + * + * @param null_value + * The reference mode NULL value, typical 0l + * @param support_quad_precision + * If non-zero, activate support for quad precision + */ +void init_tarval_1(long null_value, int support_quad_precision); -/* Hash function on tarvals */ -unsigned tarval_hash (tarval *); +/** + * Initialization of the tarval module. + * + * Call after init_mode(). + */ +void init_tarval_2(void); +/** + * Free all memory occupied by the tarval module. + */ +void finish_tarval(void); -#ifdef NDEBUG -#define TARVAL_VRFY(val) ((void)0) -#else -#define TARVAL_VRFY(val) _tarval_vrfy ((val)) -extern void _tarval_vrfy (const tarval *); -#endif +/** + * This struct represents the afore mentioned tarvals. + * + * A tarval struct consists of an internal representation of the + * value and some additional fields further describing the value. + * + * ATTRIBUTES: + * - ir_mode *mode The mode of the stored value + * - void *value The internal representation + * + * @sa + * irmode.h for predefined modes + */ +struct ir_tarval { + firm_kind kind; /**< must be k_tarval */ + ir_mode *mode; /**< the mode of the stored value */ + const void *value; /**< the value stored in an internal way... */ + size_t length; /**< the length of the stored value */ +}; -#ifdef STATS -void tarval_stats (void); -#else -#define tarval_stats() ((void)0) -#endif +/* inline functions */ +/* + * Access routines for tarval fields ======================================== + */ +static inline ir_mode *_get_tarval_mode(const ir_tarval *tv) +{ + assert(tv); + return tv->mode; +} -#endif /* _TV_T_H_ */ +static inline ir_tarval *_get_tarval_bad(void) +{ + return tarval_bad; +} + +static inline ir_tarval *_get_tarval_undefined(void) +{ + return tarval_undefined; +} + +static inline ir_tarval *_get_tarval_b_false(void) +{ + return tarval_b_false; +} + +static inline ir_tarval *_get_tarval_b_true(void) +{ + return tarval_b_true; +} + +static inline ir_tarval *_get_tarval_reachable(void) +{ + return tarval_reachable; +} + +static inline ir_tarval *_get_tarval_unreachable(void) +{ + return tarval_unreachable; +} + +static inline int _is_tarval(const void *thing) +{ + return get_kind(thing) == k_tarval; +} + +#define get_tarval_mode(tv) _get_tarval_mode(tv) +#define get_tarval_bad() _get_tarval_bad() +#define get_tarval_undefined() _get_tarval_undefined() +#define get_tarval_b_false() _get_tarval_b_false() +#define get_tarval_b_true() _get_tarval_b_true() +#define get_tarval_unreachable() _get_tarval_unreachable() +#define get_tarval_reachable() _get_tarval_reachable() +#define is_tarval(thing) _is_tarval(thing) + +#endif /* FIRM_TV_TV_T_H */