mirror of
https://github.com/Stichting-MINIX-Research-Foundation/netbsd.git
synced 2025-09-11 08:07:30 -04:00
237 lines
6.6 KiB
C
237 lines
6.6 KiB
C
/* Copyright (C) 2007-2013 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
|
|
|
|
#endif /* _AVRGCC_STDFIX_H */
|