Viewing file: stdfix.h (6.77 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* Copyright (C) 2007-2022 Free Software Foundation, Inc.
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.
GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation.
You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see <http://www.gnu.org/licenses/>. */
/* ISO/IEC JTC1 SC22 WG14 N1169 * Date: 2006-04-04 * ISO/IEC TR 18037 * Programming languages - C - Extensions to support embedded processors */
#ifndef _AVRGCC_STDFIX_H #define _AVRGCC_STDFIX_H
/* 7.18a.1 Introduction. */ /* 7.18a.3 Precision macros. */
#include <stdfix-gcc.h>
#if __SIZEOF_INT__ == 2
typedef signed char int_hr_t; typedef unsigned char uint_uhr_t;
typedef short int int_r_t; typedef short unsigned int uint_ur_t;
typedef short int int_hk_t; typedef short unsigned int uint_uhk_t;
typedef long int int_lr_t; typedef long unsigned int uint_ulr_t;
typedef long int int_k_t; typedef long unsigned int uint_uk_t;
typedef long long int int_llr_t; typedef long long unsigned int uint_ullr_t;
typedef long long int int_lk_t; typedef long long unsigned int uint_ulk_t;
typedef long long int int_llk_t; typedef long long unsigned int uint_ullk_t;
#elif __SIZEOF_INT__ == 1 /* -mint8 */
typedef signed char int_hr_t; typedef unsigned char uint_uhr_t;
typedef long int int_r_t; typedef long unsigned int uint_ur_t;
typedef long int int_hk_t; typedef long unsigned int uint_uhk_t;
typedef long long int int_lr_t; typedef long long unsigned int uint_ulr_t;
typedef long long int int_k_t; typedef long long unsigned int uint_uk_t;
#endif /* __SIZEOF_INT__ == 1, 2 */
/* 7.18a.6 The fixed-point intrinsic functions. */
/* 7.18a.6.2 The fixed-point absolute value functions. */
#define abshr __builtin_avr_abshr #define absr __builtin_avr_absr #define abslr __builtin_avr_abslr
#define abshk __builtin_avr_abshk #define absk __builtin_avr_absk
#if __SIZEOF_INT__ == 2
#define abslk __builtin_avr_abslk #define absllr __builtin_avr_absllr /* GCC Extension */ #define absllk __builtin_avr_absllk /* GCC Extension */
#endif /* sizeof (int) == 2 */
/* 7.18a.6.3 The fixed-point round functions. */
/* The Embedded-C paper specifies results only for rounding points
0 < RP < FBIT As an extension, the following functions work as expected with rounding points
-IBIT < RP < FBIT For example, rounding an accum with a rounding point of -1 will result in an even integer value. */
#define roundhr __builtin_avr_roundhr #define roundr __builtin_avr_roundr #define roundlr __builtin_avr_roundlr
#define rounduhr __builtin_avr_rounduhr #define roundur __builtin_avr_roundur #define roundulr __builtin_avr_roundulr
#define roundhk __builtin_avr_roundhk #define roundk __builtin_avr_roundk
#define rounduhk __builtin_avr_rounduhk #define rounduk __builtin_avr_rounduk
#if __SIZEOF_INT__ == 2
#define roundlk __builtin_avr_roundlk #define roundulk __builtin_avr_roundulk #define roundllr __builtin_avr_roundllr /* GCC Extension */ #define roundullr __builtin_avr_roundullr /* GCC Extension */ #define roundllk __builtin_avr_roundllk /* GCC Extension */ #define roundullk __builtin_avr_roundullk /* GCC Extension */
#endif /* sizeof (int) == 2 */
/* 7.18a.6.4 The fixed-point bit countls functions. */
#define countlshr __builtin_avr_countlshr #define countlsr __builtin_avr_countlsr #define countlslr __builtin_avr_countlslr
#define countlsuhr __builtin_avr_countlsuhr #define countlsur __builtin_avr_countlsur #define countlsulr __builtin_avr_countlsulr
#define countlshk __builtin_avr_countlshk #define countlsk __builtin_avr_countlsk
#define countlsuhk __builtin_avr_countlsuhk #define countlsuk __builtin_avr_countlsuk
#if __SIZEOF_INT__ == 2
#define countlslk __builtin_avr_countlslk #define countlsulk __builtin_avr_countlsulk #define countlsllr __builtin_avr_countlsllr /* GCC Extension */ #define countlsullr __builtin_avr_countlsullr /* GCC Extension */ #define countlsllk __builtin_avr_countlsllk /* GCC Extension */ #define countlsullk __builtin_avr_countlsullk /* GCC Extension */
#endif /* sizeof (int) == 2 */
/* 7.18a.6.5 The bitwise fixed-point to integer conversion functions. */
#define bitshr __builtin_avr_bitshr #define bitsr __builtin_avr_bitsr #define bitslr __builtin_avr_bitslr
#define bitsuhr __builtin_avr_bitsuhr #define bitsur __builtin_avr_bitsur #define bitsulr __builtin_avr_bitsulr
#define bitshk __builtin_avr_bitshk #define bitsk __builtin_avr_bitsk
#define bitsuhk __builtin_avr_bitsuhk #define bitsuk __builtin_avr_bitsuk
#if __SIZEOF_INT__ == 2
#define bitslk __builtin_avr_bitslk #define bitsulk __builtin_avr_bitsulk #define bitsllr __builtin_avr_bitsllr /* GCC Extension */ #define bitsullr __builtin_avr_bitsullr /* GCC Extension */ #define bitsllk __builtin_avr_bitsllk /* GCC Extension */ #define bitsullk __builtin_avr_bitsullk /* GCC Extension */
#endif /* sizeof (int) == 2 */
/* 7.18a.6.6 The bitwise integer to fixed-point conversion functions. */
#define hrbits __builtin_avr_hrbits #define rbits __builtin_avr_rbits #define lrbits __builtin_avr_lrbits
#define uhrbits __builtin_avr_uhrbits #define urbits __builtin_avr_urbits #define ulrbits __builtin_avr_ulrbits
#define hkbits __builtin_avr_hkbits #define kbits __builtin_avr_kbits
#define uhkbits __builtin_avr_uhkbits #define ukbits __builtin_avr_ukbits
#if __SIZEOF_INT__ == 2
#define lkbits __builtin_avr_lkbits #define ulkbits __builtin_avr_ulkbits #define llrbits __builtin_avr_llrbits /* GCC Extension */ #define ullrbits __builtin_avr_ullrbits /* GCC Extension */ #define llkbits __builtin_avr_llkbits /* GCC Extension */ #define ullkbits __builtin_avr_ullkbits /* GCC Extension */
#endif /* sizeof (int) == 2 */
/* 7.18a.6.7 Type-generic fixed-point functions. */
#define absfx __builtin_avr_absfx #define roundfx __builtin_avr_roundfx #define countlsfx __builtin_avr_countlsfx
/* Hook in stuff from AVR-Libc. */
#if (defined (__WITH_AVRLIBC__) \ && defined (__has_include) \ && __has_include (<stdfix-avrlibc.h>)) #include <stdfix-avrlibc.h> #endif
#endif /* _AVRGCC_STDFIX_H */
|