target-supports.exp (check_effective_target_fixed_point): New to check if targets have fixed-point supports.
* lib/target-supports.exp (check_effective_target_fixed_point): New to check if targets have fixed-point supports. * gcc.dg/fixed-point/fixed-point.exp: New file. * gcc.dg/fixed-point/addsub.c, gcc.dg/fixed-point/allconv.c, * gcc.dg/fixed-point/allop.c, gcc.dg/fixed-point/call-by-value.c, * gcc.dg/fixed-point/cast-bad.c, gcc.dg/fixed-point/composite-type.c, * gcc.dg/fixed-point/const-1.c, gcc.dg/fixed-point/constant.c, * gcc.dg/fixed-point/constants-pedantic.c, * gcc.dg/fixed-point/convert.c, gcc.dg/fixed-point/define.c, * gcc.dg/fixed-point/keywords-c89.c, gcc.dg/fixed-point/keywords-c99.c, * gcc.dg/fixed-point/keywords-ignored-c99.c, * gcc.dg/fixed-point/keywords-pedantic.c, * gcc.dg/fixed-point/keywords-reserved.c, gcc.dg/fixed-point/binary.c, * gcc.dg/fixed-point/modes.c, gcc.dg/fixed-point/noassoc.c, * gcc.dg/fixed-point/types.c, gcc.dg/fixed-point/typespec.c, * gcc.dg/fixed-point/unary.c, gcc.dg/fixed-point/func-array.c, * gcc.dg/fixed-point/func-scalar.c, gcc.dg/fixed-point/func-struct.c, * gcc.dg/fixed-point/func-vararg-mixed.c, * gcc.dg/fixed-point/operator-logical.c, * gcc.dg/fixed-point/struct-union.c, * gcc.dg/fixed-point/bit-complement.c, * gcc.dg/fixed-point/operator-bitwise.c, * gcc.dg/fixed-point/operator-comma.c, * gcc.dg/fixed-point/struct-layout-1.c, * gcc.dg/fixed-point/union-init.c, * gcc.dg/fixed-point/Wbad-function-cast-1.c, * gcc.dg/fixed-point/func-mixed.c, * gcc.dg/fixed-point/func-vararg-size0.c, * gcc.dg/fixed-point/func-vararg.c, gcc.dg/fixed-point/int-warning.c, * gcc.dg/fixed-point/loop-index.c, gcc.dg/fixed-point/operator-cond.c, * gcc.dg/fixed-point/operator-unary.c, * gcc.dg/fixed-point/allop-const.c, * gcc.dg/fixed-point/muldiv-warning.c, * gcc.dg/nofixed-point-1.c, * gcc.target/mips/dpaq_sa_l_w.c, gcc.target/mips/dpsq_sa_l_w.c, * gcc.target/mips/fixed-vector-type.c, * gcc.target/mips/fixed-scalar-type.c: New tests. From-SVN: r128661
This commit is contained in:
parent
fca1a50fd9
commit
fca8ed94a2
@ -1,3 +1,43 @@
|
||||
2007-09-21 Chao-ying Fu <fu@mips.com>
|
||||
|
||||
* lib/target-supports.exp (check_effective_target_fixed_point): New to
|
||||
check if targets have fixed-point supports.
|
||||
* gcc.dg/fixed-point/fixed-point.exp: New file.
|
||||
* gcc.dg/fixed-point/addsub.c, gcc.dg/fixed-point/allconv.c,
|
||||
* gcc.dg/fixed-point/allop.c, gcc.dg/fixed-point/call-by-value.c,
|
||||
* gcc.dg/fixed-point/cast-bad.c, gcc.dg/fixed-point/composite-type.c,
|
||||
* gcc.dg/fixed-point/const-1.c, gcc.dg/fixed-point/constant.c,
|
||||
* gcc.dg/fixed-point/constants-pedantic.c,
|
||||
* gcc.dg/fixed-point/convert.c, gcc.dg/fixed-point/define.c,
|
||||
* gcc.dg/fixed-point/keywords-c89.c, gcc.dg/fixed-point/keywords-c99.c,
|
||||
* gcc.dg/fixed-point/keywords-ignored-c99.c,
|
||||
* gcc.dg/fixed-point/keywords-pedantic.c,
|
||||
* gcc.dg/fixed-point/keywords-reserved.c, gcc.dg/fixed-point/binary.c,
|
||||
* gcc.dg/fixed-point/modes.c, gcc.dg/fixed-point/noassoc.c,
|
||||
* gcc.dg/fixed-point/types.c, gcc.dg/fixed-point/typespec.c,
|
||||
* gcc.dg/fixed-point/unary.c, gcc.dg/fixed-point/func-array.c,
|
||||
* gcc.dg/fixed-point/func-scalar.c, gcc.dg/fixed-point/func-struct.c,
|
||||
* gcc.dg/fixed-point/func-vararg-mixed.c,
|
||||
* gcc.dg/fixed-point/operator-logical.c,
|
||||
* gcc.dg/fixed-point/struct-union.c,
|
||||
* gcc.dg/fixed-point/bit-complement.c,
|
||||
* gcc.dg/fixed-point/operator-bitwise.c,
|
||||
* gcc.dg/fixed-point/operator-comma.c,
|
||||
* gcc.dg/fixed-point/struct-layout-1.c,
|
||||
* gcc.dg/fixed-point/union-init.c,
|
||||
* gcc.dg/fixed-point/Wbad-function-cast-1.c,
|
||||
* gcc.dg/fixed-point/func-mixed.c,
|
||||
* gcc.dg/fixed-point/func-vararg-size0.c,
|
||||
* gcc.dg/fixed-point/func-vararg.c, gcc.dg/fixed-point/int-warning.c,
|
||||
* gcc.dg/fixed-point/loop-index.c, gcc.dg/fixed-point/operator-cond.c,
|
||||
* gcc.dg/fixed-point/operator-unary.c,
|
||||
* gcc.dg/fixed-point/allop-const.c,
|
||||
* gcc.dg/fixed-point/muldiv-warning.c,
|
||||
* gcc.dg/nofixed-point-1.c,
|
||||
* gcc.target/mips/dpaq_sa_l_w.c, gcc.target/mips/dpsq_sa_l_w.c,
|
||||
* gcc.target/mips/fixed-vector-type.c,
|
||||
* gcc.target/mips/fixed-scalar-type.c: New tests.
|
||||
|
||||
2007-09-21 Olivier Hainque <hainque@adacore.com>
|
||||
|
||||
* gnat.dg/nested_subtype_byref.ad[bs]: Part of new test.
|
||||
|
357
gcc/testsuite/gcc.dg/fixed-point/Wbad-function-cast-1.c
Normal file
357
gcc/testsuite/gcc.dg/fixed-point/Wbad-function-cast-1.c
Normal file
@ -0,0 +1,357 @@
|
||||
/* Test operation of -Wbad-function-cast. */
|
||||
/* Based on gcc.dg/Wbad-function-cast-1.c. */
|
||||
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu99 -Wbad-function-cast" } */
|
||||
|
||||
int if1(void);
|
||||
char if2(void);
|
||||
long if3(void);
|
||||
_Complex double cf(void);
|
||||
|
||||
|
||||
#define FUNC(TYPE,NAME) \
|
||||
TYPE f ## NAME (void);
|
||||
|
||||
FUNC (short _Fract, sf)
|
||||
FUNC (_Fract, f)
|
||||
FUNC (long _Fract, lf)
|
||||
FUNC (long long _Fract, llf)
|
||||
FUNC (unsigned short _Fract, usf)
|
||||
FUNC (unsigned _Fract, uf)
|
||||
FUNC (unsigned long _Fract, ulf)
|
||||
FUNC (unsigned long long _Fract, ullf)
|
||||
FUNC (_Sat short _Fract, Ssf)
|
||||
FUNC (_Sat _Fract, Sf)
|
||||
FUNC (_Sat long _Fract, Slf)
|
||||
FUNC (_Sat long long _Fract, Sllf)
|
||||
FUNC (_Sat unsigned short _Fract, Susf)
|
||||
FUNC (_Sat unsigned _Fract, Suf)
|
||||
FUNC (_Sat unsigned long _Fract, Sulf)
|
||||
FUNC (_Sat unsigned long long _Fract, Sullf)
|
||||
FUNC (short _Accum, sa)
|
||||
FUNC (_Accum, a)
|
||||
FUNC (long _Accum, la)
|
||||
FUNC (long long _Accum, lla)
|
||||
FUNC (unsigned short _Accum, usa)
|
||||
FUNC (unsigned _Accum, ua)
|
||||
FUNC (unsigned long _Accum, ula)
|
||||
FUNC (unsigned long long _Accum, ulla)
|
||||
FUNC (_Sat short _Accum, Ssa)
|
||||
FUNC (_Sat _Accum, Sa)
|
||||
FUNC (_Sat long _Accum, Sla)
|
||||
FUNC (_Sat long long _Accum, Slla)
|
||||
FUNC (_Sat unsigned short _Accum, Susa)
|
||||
FUNC (_Sat unsigned _Accum, Sua)
|
||||
FUNC (_Sat unsigned long _Accum, Sula)
|
||||
FUNC (_Sat unsigned long long _Accum, Sulla)
|
||||
|
||||
void
|
||||
foo(void)
|
||||
{
|
||||
#define TEST(NAME) \
|
||||
/* Casts to void types are always OK. */ \
|
||||
(void) f ## NAME (); \
|
||||
(const void) f ## NAME (); \
|
||||
/* Casts to the same type or similar types are OK. */ \
|
||||
(short _Fract) f ## NAME (); \
|
||||
(_Fract) f ## NAME (); \
|
||||
(long _Fract) f ## NAME (); \
|
||||
(long long _Fract) f ## NAME (); \
|
||||
(unsigned short _Fract) f ## NAME (); \
|
||||
(unsigned _Fract) f ## NAME (); \
|
||||
(unsigned long _Fract) f ## NAME (); \
|
||||
(unsigned long long _Fract) f ## NAME (); \
|
||||
(_Sat short _Fract) f ## NAME (); \
|
||||
(_Sat _Fract) f ## NAME (); \
|
||||
(_Sat long _Fract) f ## NAME (); \
|
||||
(_Sat long long _Fract) f ## NAME (); \
|
||||
(_Sat unsigned short _Fract) f ## NAME (); \
|
||||
(_Sat unsigned _Fract) f ## NAME (); \
|
||||
(_Sat unsigned long _Fract) f ## NAME (); \
|
||||
(_Sat unsigned long long _Fract) f ## NAME (); \
|
||||
(short _Accum) f ## NAME (); \
|
||||
(_Accum) f ## NAME (); \
|
||||
(long _Accum) f ## NAME (); \
|
||||
(long long _Accum) f ## NAME (); \
|
||||
(unsigned short _Accum) f ## NAME (); \
|
||||
(unsigned _Accum) f ## NAME (); \
|
||||
(unsigned long _Accum) f ## NAME (); \
|
||||
(unsigned long long _Accum) f ## NAME (); \
|
||||
(_Sat short _Accum) f ## NAME (); \
|
||||
(_Sat _Accum) f ## NAME (); \
|
||||
(_Sat long _Accum) f ## NAME (); \
|
||||
(_Sat long long _Accum) f ## NAME (); \
|
||||
(_Sat unsigned short _Accum) f ## NAME (); \
|
||||
(_Sat unsigned _Accum) f ## NAME (); \
|
||||
(_Sat unsigned long _Accum) f ## NAME (); \
|
||||
(_Sat unsigned long long _Accum) f ## NAME (); \
|
||||
|
||||
TEST (sf);
|
||||
TEST (f);
|
||||
TEST (lf);
|
||||
TEST (llf);
|
||||
TEST (usf);
|
||||
TEST (uf);
|
||||
TEST (ulf);
|
||||
TEST (ullf);
|
||||
TEST (Ssf);
|
||||
TEST (Sf);
|
||||
TEST (Slf);
|
||||
TEST (Sllf);
|
||||
TEST (Susf);
|
||||
TEST (Suf);
|
||||
TEST (Sulf);
|
||||
TEST (Sullf);
|
||||
TEST (sa);
|
||||
TEST (a);
|
||||
TEST (la);
|
||||
TEST (lla);
|
||||
TEST (usa);
|
||||
TEST (ua);
|
||||
TEST (ula);
|
||||
TEST (ulla);
|
||||
TEST (Ssa);
|
||||
TEST (Sa);
|
||||
TEST (Sla);
|
||||
TEST (Slla);
|
||||
TEST (Susa);
|
||||
TEST (Sua);
|
||||
TEST (Sula);
|
||||
TEST (Sulla);
|
||||
|
||||
/* Casts to types with different TREE_CODE (which is how this
|
||||
warning has been defined) are not OK, except for casts to void
|
||||
types. */
|
||||
(short _Fract)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type 'short _Fract'" } */
|
||||
(_Fract)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type '_Fract'" } */
|
||||
(long _Fract)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type 'long _Fract'" } */
|
||||
(long long _Fract)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type 'long long _Fract'" } */
|
||||
(unsigned short _Fract)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type 'unsigned short _Fract'" } */
|
||||
(unsigned _Fract)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type 'unsigned _Fract'" } */
|
||||
(unsigned long _Fract)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type 'unsigned long _Fract'" } */
|
||||
(unsigned long long _Fract)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type 'unsigned long long _Fract'" } */
|
||||
(_Sat short _Fract)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type '_Sat short _Fract'" } */
|
||||
(_Sat _Fract)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type '_Sat _Fract'" } */
|
||||
(_Sat long _Fract)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type '_Sat long _Fract'" } */
|
||||
(_Sat long long _Fract)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type '_Sat long long _Fract'" } */
|
||||
(_Sat unsigned short _Fract)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type '_Sat unsigned short _Fract'" } */
|
||||
(_Sat unsigned _Fract)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type '_Sat unsigned _Fract'" } */
|
||||
(_Sat unsigned long _Fract)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type '_Sat unsigned long _Fract'" } */
|
||||
(_Sat unsigned long long _Fract)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type '_Sat unsigned long long _Fract'" } */
|
||||
(short _Accum)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type 'short _Accum'" } */
|
||||
(_Accum)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type '_Accum'" } */
|
||||
(long _Accum)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type 'long _Accum'" } */
|
||||
(long long _Accum)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type 'long long _Accum'" } */
|
||||
(unsigned short _Accum)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type 'unsigned short _Accum'" } */
|
||||
(unsigned _Accum)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type 'unsigned _Accum'" } */
|
||||
(unsigned long _Accum)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type 'unsigned long _Accum'" } */
|
||||
(unsigned long long _Accum)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type 'unsigned long long _Accum'" } */
|
||||
(_Sat short _Accum)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type '_Sat short _Accum'" } */
|
||||
(_Sat _Accum)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type '_Sat _Accum'" } */
|
||||
(_Sat long _Accum)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type '_Sat long _Accum'" } */
|
||||
(_Sat long long _Accum)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type '_Sat long long _Accum'" } */
|
||||
(_Sat unsigned short _Accum)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type '_Sat unsigned short _Accum'" } */
|
||||
(_Sat unsigned _Accum)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type '_Sat unsigned _Accum'" } */
|
||||
(_Sat unsigned long _Accum)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type '_Sat unsigned long _Accum'" } */
|
||||
(_Sat unsigned long long _Accum)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type '_Sat unsigned long long _Accum'" } */
|
||||
|
||||
(short _Fract)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type 'short _Fract'" } */
|
||||
(_Fract)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type '_Fract'" } */
|
||||
(long _Fract)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type 'long _Fract'" } */
|
||||
(long long _Fract)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type 'long long _Fract'" } */
|
||||
(unsigned short _Fract)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type 'unsigned short _Fract'" } */
|
||||
(unsigned _Fract)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type 'unsigned _Fract'" } */
|
||||
(unsigned long _Fract)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type 'unsigned long _Fract'" } */
|
||||
(unsigned long long _Fract)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type 'unsigned long long _Fract'" } */
|
||||
(_Sat short _Fract)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type '_Sat short _Fract'" } */
|
||||
(_Sat _Fract)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type '_Sat _Fract'" } */
|
||||
(_Sat long _Fract)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type '_Sat long _Fract'" } */
|
||||
(_Sat long long _Fract)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type '_Sat long long _Fract'" } */
|
||||
(_Sat unsigned short _Fract)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type '_Sat unsigned short _Fract'" } */
|
||||
(_Sat unsigned _Fract)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type '_Sat unsigned _Fract'" } */
|
||||
(_Sat unsigned long _Fract)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type '_Sat unsigned long _Fract'" } */
|
||||
(_Sat unsigned long long _Fract)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type '_Sat unsigned long long _Fract'" } */
|
||||
(short _Accum)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type 'short _Accum'" } */
|
||||
(_Accum)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type '_Accum'" } */
|
||||
(long _Accum)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type 'long _Accum'" } */
|
||||
(long long _Accum)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type 'long long _Accum'" } */
|
||||
(unsigned short _Accum)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type 'unsigned short _Accum'" } */
|
||||
(unsigned _Accum)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type 'unsigned _Accum'" } */
|
||||
(unsigned long _Accum)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type 'unsigned long _Accum'" } */
|
||||
(unsigned long long _Accum)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type 'unsigned long long _Accum'" } */
|
||||
(_Sat short _Accum)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type '_Sat short _Accum'" } */
|
||||
(_Sat _Accum)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type '_Sat _Accum'" } */
|
||||
(_Sat long _Accum)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type '_Sat long _Accum'" } */
|
||||
(_Sat long long _Accum)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type '_Sat long long _Accum'" } */
|
||||
(_Sat unsigned short _Accum)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type '_Sat unsigned short _Accum'" } */
|
||||
(_Sat unsigned _Accum)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type '_Sat unsigned _Accum'" } */
|
||||
(_Sat unsigned long _Accum)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type '_Sat unsigned long _Accum'" } */
|
||||
(_Sat unsigned long long _Accum)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type '_Sat unsigned long long _Accum'" } */
|
||||
|
||||
(short _Fract)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type 'short _Fract'" } */
|
||||
(_Fract)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Fract'" } */
|
||||
(long _Fract)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type 'long _Fract'" } */
|
||||
(long long _Fract)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type 'long long _Fract'" } */
|
||||
(unsigned short _Fract)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type 'unsigned short _Fract'" } */
|
||||
(unsigned _Fract)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type 'unsigned _Fract'" } */
|
||||
(unsigned long _Fract)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type 'unsigned long _Fract'" } */
|
||||
(unsigned long long _Fract)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type 'unsigned long long _Fract'" } */
|
||||
(_Sat short _Fract)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Sat short _Fract'" } */
|
||||
(_Sat _Fract)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Sat _Fract'" } */
|
||||
(_Sat long _Fract)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Sat long _Fract'" } */
|
||||
(_Sat long long _Fract)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Sat long long _Fract'" } */
|
||||
(_Sat unsigned short _Fract)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Sat unsigned short _Fract'" } */
|
||||
(_Sat unsigned _Fract)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Sat unsigned _Fract'" } */
|
||||
(_Sat unsigned long _Fract)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Sat unsigned long _Fract'" } */
|
||||
(_Sat unsigned long long _Fract)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Sat unsigned long long _Fract'" } */
|
||||
(short _Accum)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type 'short _Accum'" } */
|
||||
(_Accum)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Accum'" } */
|
||||
(long _Accum)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type 'long _Accum'" } */
|
||||
(long long _Accum)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type 'long long _Accum'" } */
|
||||
(unsigned short _Accum)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type 'unsigned short _Accum'" } */
|
||||
(unsigned _Accum)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type 'unsigned _Accum'" } */
|
||||
(unsigned long _Accum)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type 'unsigned long _Accum'" } */
|
||||
(unsigned long long _Accum)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type 'unsigned long long _Accum'" } */
|
||||
(_Sat short _Accum)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Sat short _Accum'" } */
|
||||
(_Sat _Accum)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Sat _Accum'" } */
|
||||
(_Sat long _Accum)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Sat long _Accum'" } */
|
||||
(_Sat long long _Accum)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Sat long long _Accum'" } */
|
||||
(_Sat unsigned short _Accum)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Sat unsigned short _Accum'" } */
|
||||
(_Sat unsigned _Accum)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Sat unsigned _Accum'" } */
|
||||
(_Sat unsigned long _Accum)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Sat unsigned long _Accum'" } */
|
||||
(_Sat unsigned long long _Accum)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Sat unsigned long long _Accum'" } */
|
||||
|
||||
(short _Fract)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type 'short _Fract'" } */
|
||||
(_Fract)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type '_Fract'" } */
|
||||
(long _Fract)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type 'long _Fract'" } */
|
||||
(long long _Fract)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type 'long long _Fract'" } */
|
||||
(unsigned short _Fract)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type 'unsigned short _Fract'" } */
|
||||
(unsigned _Fract)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type 'unsigned _Fract'" } */
|
||||
(unsigned long _Fract)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type 'unsigned long _Fract'" } */
|
||||
(unsigned long long _Fract)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type 'unsigned long long _Fract'" } */
|
||||
(_Sat short _Fract)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type '_Sat short _Fract'" } */
|
||||
(_Sat _Fract)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type '_Sat _Fract'" } */
|
||||
(_Sat long _Fract)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type '_Sat long _Fract'" } */
|
||||
(_Sat long long _Fract)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type '_Sat long long _Fract'" } */
|
||||
(_Sat unsigned short _Fract)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type '_Sat unsigned short _Fract'" } */
|
||||
(_Sat unsigned _Fract)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type '_Sat unsigned _Fract'" } */
|
||||
(_Sat unsigned long _Fract)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type '_Sat unsigned long _Fract'" } */
|
||||
(_Sat unsigned long long _Fract)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type '_Sat unsigned long long _Fract'" } */
|
||||
(short _Accum)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type 'short _Accum'" } */
|
||||
(_Accum)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type '_Accum'" } */
|
||||
(long _Accum)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type 'long _Accum'" } */
|
||||
(long long _Accum)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type 'long long _Accum'" } */
|
||||
(unsigned short _Accum)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type 'unsigned short _Accum'" } */
|
||||
(unsigned _Accum)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type 'unsigned _Accum'" } */
|
||||
(unsigned long _Accum)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type 'unsigned long _Accum'" } */
|
||||
(unsigned long long _Accum)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type 'unsigned long long _Accum'" } */
|
||||
(_Sat short _Accum)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type '_Sat short _Accum'" } */
|
||||
(_Sat _Accum)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type '_Sat _Accum'" } */
|
||||
(_Sat long _Accum)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type '_Sat long _Accum'" } */
|
||||
(_Sat long long _Accum)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type '_Sat long long _Accum'" } */
|
||||
(_Sat unsigned short _Accum)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type '_Sat unsigned short _Accum'" } */
|
||||
(_Sat unsigned _Accum)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type '_Sat unsigned _Accum'" } */
|
||||
(_Sat unsigned long _Accum)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type '_Sat unsigned long _Accum'" } */
|
||||
(_Sat unsigned long long _Accum)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type '_Sat unsigned long long _Accum'" } */
|
||||
|
||||
(int)fsf(); /* { dg-warning "cast from function call of type 'short _Fract' to non-matching type 'int'" } */
|
||||
(int)ff(); /* { dg-warning "cast from function call of type '_Fract' to non-matching type 'int'" } */
|
||||
(int)flf(); /* { dg-warning "cast from function call of type 'long _Fract' to non-matching type 'int'" } */
|
||||
(int)fllf(); /* { dg-warning "cast from function call of type 'long long _Fract' to non-matching type 'int'" } */
|
||||
(int)fusf(); /* { dg-warning "cast from function call of type 'unsigned short _Fract' to non-matching type 'int'" } */
|
||||
(int)fuf(); /* { dg-warning "cast from function call of type 'unsigned _Fract' to non-matching type 'int'" } */
|
||||
(int)fulf(); /* { dg-warning "cast from function call of type 'unsigned long _Fract' to non-matching type 'int'" } */
|
||||
(int)fullf(); /* { dg-warning "cast from function call of type 'unsigned long long _Fract' to non-matching type 'int'" } */
|
||||
(int)fSsf(); /* { dg-warning "cast from function call of type '_Sat short _Fract' to non-matching type 'int'" } */
|
||||
(int)fSf(); /* { dg-warning "cast from function call of type '_Sat _Fract' to non-matching type 'int'" } */
|
||||
(int)fSlf(); /* { dg-warning "cast from function call of type '_Sat long _Fract' to non-matching type 'int'" } */
|
||||
(int)fSllf(); /* { dg-warning "cast from function call of type '_Sat long long _Fract' to non-matching type 'int'" } */
|
||||
(int)fSusf(); /* { dg-warning "cast from function call of type '_Sat unsigned short _Fract' to non-matching type 'int'" } */
|
||||
(int)fSuf(); /* { dg-warning "cast from function call of type '_Sat unsigned _Fract' to non-matching type 'int'" } */
|
||||
(int)fSulf(); /* { dg-warning "cast from function call of type '_Sat unsigned long _Fract' to non-matching type 'int'" } */
|
||||
(int)fSullf(); /* { dg-warning "cast from function call of type '_Sat unsigned long long _Fract' to non-matching type 'int'" } */
|
||||
(int)fsa(); /* { dg-warning "cast from function call of type 'short _Accum' to non-matching type 'int'" } */
|
||||
(int)fa(); /* { dg-warning "cast from function call of type '_Accum' to non-matching type 'int'" } */
|
||||
(int)fla(); /* { dg-warning "cast from function call of type 'long _Accum' to non-matching type 'int'" } */
|
||||
(int)flla(); /* { dg-warning "cast from function call of type 'long long _Accum' to non-matching type 'int'" } */
|
||||
(int)fusa(); /* { dg-warning "cast from function call of type 'unsigned short _Accum' to non-matching type 'int'" } */
|
||||
(int)fua(); /* { dg-warning "cast from function call of type 'unsigned _Accum' to non-matching type 'int'" } */
|
||||
(int)fula(); /* { dg-warning "cast from function call of type 'unsigned long _Accum' to non-matching type 'int'" } */
|
||||
(int)fulla(); /* { dg-warning "cast from function call of type 'unsigned long long _Accum' to non-matching type 'int'" } */
|
||||
(int)fSsa(); /* { dg-warning "cast from function call of type '_Sat short _Accum' to non-matching type 'int'" } */
|
||||
(int)fSa(); /* { dg-warning "cast from function call of type '_Sat _Accum' to non-matching type 'int'" } */
|
||||
(int)fSla(); /* { dg-warning "cast from function call of type '_Sat long _Accum' to non-matching type 'int'" } */
|
||||
(int)fSlla(); /* { dg-warning "cast from function call of type '_Sat long long _Accum' to non-matching type 'int'" } */
|
||||
(int)fSusa(); /* { dg-warning "cast from function call of type '_Sat unsigned short _Accum' to non-matching type 'int'" } */
|
||||
(int)fSua(); /* { dg-warning "cast from function call of type '_Sat unsigned _Accum' to non-matching type 'int'" } */
|
||||
(int)fSula(); /* { dg-warning "cast from function call of type '_Sat unsigned long _Accum' to non-matching type 'int'" } */
|
||||
(int)fSulla(); /* { dg-warning "cast from function call of type '_Sat unsigned long long _Accum' to non-matching type 'int'" } */
|
||||
|
||||
(long)fsf(); /* { dg-warning "cast from function call of type 'short _Fract' to non-matching type 'long int'" } */
|
||||
(long)ff(); /* { dg-warning "cast from function call of type '_Fract' to non-matching type 'long int'" } */
|
||||
(long)flf(); /* { dg-warning "cast from function call of type 'long _Fract' to non-matching type 'long int'" } */
|
||||
(long)fllf(); /* { dg-warning "cast from function call of type 'long long _Fract' to non-matching type 'long int'" } */
|
||||
(long)fusf(); /* { dg-warning "cast from function call of type 'unsigned short _Fract' to non-matching type 'long int'" } */
|
||||
(long)fuf(); /* { dg-warning "cast from function call of type 'unsigned _Fract' to non-matching type 'long int'" } */
|
||||
(long)fulf(); /* { dg-warning "cast from function call of type 'unsigned long _Fract' to non-matching type 'long int'" } */
|
||||
(long)fullf(); /* { dg-warning "cast from function call of type 'unsigned long long _Fract' to non-matching type 'long int'" } */
|
||||
(long)fSsf(); /* { dg-warning "cast from function call of type '_Sat short _Fract' to non-matching type 'long int'" } */
|
||||
(long)fSf(); /* { dg-warning "cast from function call of type '_Sat _Fract' to non-matching type 'long int'" } */
|
||||
(long)fSlf(); /* { dg-warning "cast from function call of type '_Sat long _Fract' to non-matching type 'long int'" } */
|
||||
(long)fSllf(); /* { dg-warning "cast from function call of type '_Sat long long _Fract' to non-matching type 'long int'" } */
|
||||
(long)fSusf(); /* { dg-warning "cast from function call of type '_Sat unsigned short _Fract' to non-matching type 'long int'" } */
|
||||
(long)fSuf(); /* { dg-warning "cast from function call of type '_Sat unsigned _Fract' to non-matching type 'long int'" } */
|
||||
(long)fSulf(); /* { dg-warning "cast from function call of type '_Sat unsigned long _Fract' to non-matching type 'long int'" } */
|
||||
(long)fSullf(); /* { dg-warning "cast from function call of type '_Sat unsigned long long _Fract' to non-matching type 'long int'" } */
|
||||
(long)fsa(); /* { dg-warning "cast from function call of type 'short _Accum' to non-matching type 'long int'" } */
|
||||
(long)fa(); /* { dg-warning "cast from function call of type '_Accum' to non-matching type 'long int'" } */
|
||||
(long)fla(); /* { dg-warning "cast from function call of type 'long _Accum' to non-matching type 'long int'" } */
|
||||
(long)flla(); /* { dg-warning "cast from function call of type 'long long _Accum' to non-matching type 'long int'" } */
|
||||
(long)fusa(); /* { dg-warning "cast from function call of type 'unsigned short _Accum' to non-matching type 'long int'" } */
|
||||
(long)fua(); /* { dg-warning "cast from function call of type 'unsigned _Accum' to non-matching type 'long int'" } */
|
||||
(long)fula(); /* { dg-warning "cast from function call of type 'unsigned long _Accum' to non-matching type 'long int'" } */
|
||||
(long)fulla(); /* { dg-warning "cast from function call of type 'unsigned long long _Accum' to non-matching type 'long int'" } */
|
||||
(long)fSsa(); /* { dg-warning "cast from function call of type '_Sat short _Accum' to non-matching type 'long int'" } */
|
||||
(long)fSa(); /* { dg-warning "cast from function call of type '_Sat _Accum' to non-matching type 'long int'" } */
|
||||
(long)fSla(); /* { dg-warning "cast from function call of type '_Sat long _Accum' to non-matching type 'long int'" } */
|
||||
(long)fSlla(); /* { dg-warning "cast from function call of type '_Sat long long _Accum' to non-matching type 'long int'" } */
|
||||
(long)fSusa(); /* { dg-warning "cast from function call of type '_Sat unsigned short _Accum' to non-matching type 'long int'" } */
|
||||
(long)fSua(); /* { dg-warning "cast from function call of type '_Sat unsigned _Accum' to non-matching type 'long int'" } */
|
||||
(long)fSula(); /* { dg-warning "cast from function call of type '_Sat unsigned long _Accum' to non-matching type 'long int'" } */
|
||||
(long)fSulla(); /* { dg-warning "cast from function call of type '_Sat unsigned long long _Accum' to non-matching type 'long int'" } */
|
||||
|
||||
(long int)fsf(); /* { dg-warning "cast from function call of type 'short _Fract' to non-matching type 'long int'" } */
|
||||
(long int)ff(); /* { dg-warning "cast from function call of type '_Fract' to non-matching type 'long int'" } */
|
||||
(long int)flf(); /* { dg-warning "cast from function call of type 'long _Fract' to non-matching type 'long int'" } */
|
||||
(long int)fllf(); /* { dg-warning "cast from function call of type 'long long _Fract' to non-matching type 'long int'" } */
|
||||
(long int)fusf(); /* { dg-warning "cast from function call of type 'unsigned short _Fract' to non-matching type 'long int'" } */
|
||||
(long int)fuf(); /* { dg-warning "cast from function call of type 'unsigned _Fract' to non-matching type 'long int'" } */
|
||||
(long int)fulf(); /* { dg-warning "cast from function call of type 'unsigned long _Fract' to non-matching type 'long int'" } */
|
||||
(long int)fullf(); /* { dg-warning "cast from function call of type 'unsigned long long _Fract' to non-matching type 'long int'" } */
|
||||
(long int)fSsf(); /* { dg-warning "cast from function call of type '_Sat short _Fract' to non-matching type 'long int'" } */
|
||||
(long int)fSf(); /* { dg-warning "cast from function call of type '_Sat _Fract' to non-matching type 'long int'" } */
|
||||
(long int)fSlf(); /* { dg-warning "cast from function call of type '_Sat long _Fract' to non-matching type 'long int'" } */
|
||||
(long int)fSllf(); /* { dg-warning "cast from function call of type '_Sat long long _Fract' to non-matching type 'long int'" } */
|
||||
(long int)fSusf(); /* { dg-warning "cast from function call of type '_Sat unsigned short _Fract' to non-matching type 'long int'" } */
|
||||
(long int)fSuf(); /* { dg-warning "cast from function call of type '_Sat unsigned _Fract' to non-matching type 'long int'" } */
|
||||
(long int)fSulf(); /* { dg-warning "cast from function call of type '_Sat unsigned long _Fract' to non-matching type 'long int'" } */
|
||||
(long int)fSullf(); /* { dg-warning "cast from function call of type '_Sat unsigned long long _Fract' to non-matching type 'long int'" } */
|
||||
(long int)fsa(); /* { dg-warning "cast from function call of type 'short _Accum' to non-matching type 'long int'" } */
|
||||
(long int)fa(); /* { dg-warning "cast from function call of type '_Accum' to non-matching type 'long int'" } */
|
||||
(long int)fla(); /* { dg-warning "cast from function call of type 'long _Accum' to non-matching type 'long int'" } */
|
||||
(long int)flla(); /* { dg-warning "cast from function call of type 'long long _Accum' to non-matching type 'long int'" } */
|
||||
(long int)fusa(); /* { dg-warning "cast from function call of type 'unsigned short _Accum' to non-matching type 'long int'" } */
|
||||
(long int)fua(); /* { dg-warning "cast from function call of type 'unsigned _Accum' to non-matching type 'long int'" } */
|
||||
(long int)fula(); /* { dg-warning "cast from function call of type 'unsigned long _Accum' to non-matching type 'long int'" } */
|
||||
(long int)fulla(); /* { dg-warning "cast from function call of type 'unsigned long long _Accum' to non-matching type 'long int'" } */
|
||||
(long int)fSsa(); /* { dg-warning "cast from function call of type '_Sat short _Accum' to non-matching type 'long int'" } */
|
||||
(long int)fSa(); /* { dg-warning "cast from function call of type '_Sat _Accum' to non-matching type 'long int'" } */
|
||||
(long int)fSla(); /* { dg-warning "cast from function call of type '_Sat long _Accum' to non-matching type 'long int'" } */
|
||||
(long int)fSlla(); /* { dg-warning "cast from function call of type '_Sat long long _Accum' to non-matching type 'long int'" } */
|
||||
(long int)fSusa(); /* { dg-warning "cast from function call of type '_Sat unsigned short _Accum' to non-matching type 'long int'" } */
|
||||
(long int)fSua(); /* { dg-warning "cast from function call of type '_Sat unsigned _Accum' to non-matching type 'long int'" } */
|
||||
(long int)fSula(); /* { dg-warning "cast from function call of type '_Sat unsigned long _Accum' to non-matching type 'long int'" } */
|
||||
(long int)fSulla(); /* { dg-warning "cast from function call of type '_Sat unsigned long long _Accum' to non-matching type 'long int'" } */
|
||||
|
||||
}
|
30
gcc/testsuite/gcc.dg/fixed-point/addsub.c
Normal file
30
gcc/testsuite/gcc.dg/fixed-point/addsub.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* Check if GCC generates warnings when overflows. */
|
||||
|
||||
_Fract a0 = 0.5r + 0.5r; /* { dg-warning "overflow" } */
|
||||
_Fract a1 = 0.5r + 0.6r; /* { dg-warning "overflow" } */
|
||||
_Fract a2 = 0.5r + -0.6r;
|
||||
_Fract a3 = -0.5r + 0.6r;
|
||||
_Fract a4 = -0.5r + -0.5r;
|
||||
_Fract a5 = -0.5r + -0.6r; /* { dg-warning "overflow" } */
|
||||
_Fract a6 = 0.0r + __FRACT_MIN__;
|
||||
_Fract a7 = 0.1r + __FRACT_MIN__;
|
||||
_Fract a8 = -0.1r + __FRACT_MIN__; /* { dg-warning "overflow" } */
|
||||
_Fract a9 = 0.0r + __FRACT_MAX__;
|
||||
_Fract a10 = 0.1r + __FRACT_MAX__; /* { dg-warning "overflow" } */
|
||||
_Fract a11 = -0.1r + __FRACT_MAX__;
|
||||
|
||||
_Fract b0 = 0.5r - 0.5r;
|
||||
_Fract b1 = 0.5r - 0.6r;
|
||||
_Fract b2 = 0.5r - -0.6r; /* { dg-warning "overflow" } */
|
||||
_Fract b3 = -0.5r - 0.6r; /* { dg-warning "overflow" } */
|
||||
_Fract b4 = -0.5r - -0.5r;
|
||||
_Fract b5 = -0.5r - -0.6r;
|
||||
_Fract b6 = 0.0r - __FRACT_MIN__; /* { dg-warning "overflow" } */
|
||||
_Fract b7 = 0.1r - __FRACT_MIN__; /* { dg-warning "overflow" } */
|
||||
_Fract b8 = -0.1r - __FRACT_MIN__;
|
||||
_Fract b9 = 0.0r - __FRACT_MAX__;
|
||||
_Fract b10 = 0.1r - __FRACT_MAX__;
|
||||
_Fract b11 = -0.1r - __FRACT_MAX__; /* { dg-warning "overflow" } */
|
150
gcc/testsuite/gcc.dg/fixed-point/allconv.c
Normal file
150
gcc/testsuite/gcc.dg/fixed-point/allconv.c
Normal file
@ -0,0 +1,150 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* C99 6.3 Conversions.
|
||||
|
||||
Check if all conversions are ok. */
|
||||
|
||||
#define CONV(TYPE, NAME) \
|
||||
float NAME ## _to_SF (TYPE a) { return a; } \
|
||||
float Sat ## NAME ## _to_SF (_Sat TYPE a) { return a; } \
|
||||
double NAME ## _to_DF (TYPE a) { return a; } \
|
||||
double Sat ## NAME ## _to_DF (_Sat TYPE a) { return a; } \
|
||||
TYPE SF_to_ ## NAME (float a) { return a; } \
|
||||
_Sat TYPE SF_to_Sat ## NAME (float a) { return a; } \
|
||||
TYPE DF_to_ ## NAME (double a) { return a; } \
|
||||
_Sat TYPE DF_to_Sat ## NAME (double a) { return a; } \
|
||||
signed char NAME ## _to_schar (TYPE a) { return a; } \
|
||||
signed char Sat ## NAME ## _to_schar (_Sat TYPE a) { return a; } \
|
||||
unsigned char NAME ## _to_uchar (TYPE a) { return a; } \
|
||||
unsigned char Sat ## NAME ## _to_uchar (_Sat TYPE a) { return a; } \
|
||||
short NAME ## _to_short (TYPE a) { return a; } \
|
||||
short _Sat ## NAME ## _to_short (_Sat TYPE a) { return a; } \
|
||||
unsigned short NAME ## _to_ushort (TYPE a) { return a; } \
|
||||
unsigned short _Sat ## NAME ## _to_ushort (_Sat TYPE a) { return a; } \
|
||||
int NAME ## _to_int (TYPE a) { return a; } \
|
||||
int _Sat ## NAME ## _to_int (_Sat TYPE a) { return a; } \
|
||||
unsigned int NAME ## _to_uint (TYPE a) { return a; } \
|
||||
unsigned int _Sat ## NAME ## _to_uint (_Sat TYPE a) { return a; } \
|
||||
long NAME ## _to_long (TYPE a) { return a; } \
|
||||
unsigned long NAME ## _to_ulong (TYPE a) { return a; } \
|
||||
long _Sat ## NAME ## _to_long (TYPE a) { return a; } \
|
||||
unsigned long _Sat ## NAME ## _to_ulong (TYPE a) { return a; } \
|
||||
long long NAME ## _to_longlong (TYPE a) { return a; } \
|
||||
long long _Sat ## NAME ## _to_longlong (TYPE a) { return a; } \
|
||||
unsigned long long NAME ## _to_ulonglong (TYPE a) { return a; } \
|
||||
unsigned long long _Sat ## NAME ## _to_ulonglong (TYPE a) { return a; } \
|
||||
TYPE schar_to_ ## NAME (signed char a) { return a; } \
|
||||
_Sat TYPE schar_to_Sat ## NAME (signed char a) { return a; } \
|
||||
TYPE uchar_to_ ## NAME (unsigned char a) { return a; } \
|
||||
_Sat TYPE uchar_to_Sat ## NAME (unsigned char a) { return a; } \
|
||||
TYPE short_to_ ## NAME (short a) { return a; } \
|
||||
TYPE ushort_to_ ## NAME (unsigned short a) { return a; } \
|
||||
TYPE int_to_ ## NAME (int a) { return a; } \
|
||||
TYPE uint_to_ ## NAME (unsigned int a) { return a; } \
|
||||
TYPE long_to_ ## NAME (long a) { return a; } \
|
||||
TYPE ulong_to_ ## NAME (unsigned long a) { return a; } \
|
||||
TYPE longlong_to_ ## NAME (long long a) { return a; } \
|
||||
TYPE ulonglong_to_ ## NAME (unsigned long long a) { return a; } \
|
||||
_Sat TYPE short_to_Sat ## NAME (short a) { return a; } \
|
||||
_Sat TYPE ushort_to_Sat ## NAME (unsigned short a) { return a; } \
|
||||
_Sat TYPE int_to_Sat ## NAME (int a) { return a; } \
|
||||
_Sat TYPE uint_to_Sat ## NAME (unsigned int a) { return a; } \
|
||||
_Sat TYPE long_to_Sat ## NAME (long a) { return a; } \
|
||||
_Sat TYPE ulong_to_Sat ## NAME (unsigned long a) { return a; } \
|
||||
_Sat TYPE longlong_to_Sat ## NAME (long long a) { return a; } \
|
||||
_Sat TYPE ulonglong_to_Sat ## NAME (unsigned long long a) { return a; } \
|
||||
TYPE SFR_to ## NAME (short _Fract a) { return a; } \
|
||||
TYPE FR_to ## NAME (_Fract a) { return a; } \
|
||||
TYPE LFR_to ## NAME (long _Fract a) { return a; } \
|
||||
TYPE LLFR_to ## NAME (long long _Fract a) { return a; } \
|
||||
TYPE USFR_to ## NAME (unsigned short _Fract a) { return a; } \
|
||||
TYPE UFR_to ## NAME (unsigned _Fract a) { return a; } \
|
||||
TYPE ULFR_to ## NAME (unsigned long _Fract a) { return a; } \
|
||||
TYPE ULLFR_to ## NAME (unsigned long long _Fract a) { return a; } \
|
||||
TYPE SAC_to ## NAME (short _Accum a) { return a; } \
|
||||
TYPE AC_to ## NAME (_Accum a) { return a; } \
|
||||
TYPE LAC_to ## NAME (long _Accum a) { return a; } \
|
||||
TYPE LLAC_to ## NAME (long long _Accum a) { return a; } \
|
||||
TYPE USAC_to ## NAME (unsigned short _Accum a) { return a; } \
|
||||
TYPE UAC_to ## NAME (unsigned _Accum a) { return a; } \
|
||||
TYPE ULAC_to ## NAME (unsigned long _Accum a) { return a; } \
|
||||
TYPE ULLAC_to ## NAME (unsigned long long _Accum a) { return a; } \
|
||||
TYPE SATSFR_to ## NAME (_Sat short _Fract a) { return a; } \
|
||||
TYPE SATFR_to ## NAME (_Sat _Fract a) { return a; } \
|
||||
TYPE SATLFR_to ## NAME (_Sat long _Fract a) { return a; } \
|
||||
TYPE SATLLFR_to ## NAME (_Sat long long _Fract a) { return a; } \
|
||||
TYPE SATUSFR_to ## NAME (_Sat unsigned short _Fract a) { return a; } \
|
||||
TYPE SATUFR_to ## NAME (_Sat unsigned _Fract a) { return a; } \
|
||||
TYPE SATULFR_to ## NAME (_Sat unsigned long _Fract a) { return a; } \
|
||||
TYPE SATULLFR_to ## NAME (_Sat unsigned long long _Fract a) { return a; } \
|
||||
TYPE SATSAC_to ## NAME (_Sat short _Accum a) { return a; } \
|
||||
TYPE SATAC_to ## NAME (_Sat _Accum a) { return a; } \
|
||||
TYPE SATLAC_to ## NAME (_Sat long _Accum a) { return a; } \
|
||||
TYPE SATLLAC_to ## NAME (_Sat long long _Accum a) { return a; } \
|
||||
TYPE SATUSAC_to ## NAME (_Sat unsigned short _Accum a) { return a; } \
|
||||
TYPE SATUAC_to ## NAME (_Sat unsigned _Accum a) { return a; } \
|
||||
TYPE SATULAC_to ## NAME (_Sat unsigned long _Accum a) { return a; } \
|
||||
TYPE SATULLAC_to ## NAME (_Sat unsigned long long _Accum a) { return a; } \
|
||||
_Sat TYPE SFR_to_SAT ## NAME (short _Fract a) { return a; } \
|
||||
_Sat TYPE FR_to_SAT ## NAME (_Fract a) { return a; } \
|
||||
_Sat TYPE LFR_to_SAT ## NAME (long _Fract a) { return a; } \
|
||||
_Sat TYPE LLFR_to_SAT ## NAME (long long _Fract a) { return a; } \
|
||||
_Sat TYPE USFR_to_SAT ## NAME (unsigned short _Fract a) { return a; } \
|
||||
_Sat TYPE UFR_to_SAT ## NAME (unsigned _Fract a) { return a; } \
|
||||
_Sat TYPE ULFR_to_SAT ## NAME (unsigned long _Fract a) { return a; } \
|
||||
_Sat TYPE ULLFR_to_SAT ## NAME (unsigned long long _Fract a) { return a; } \
|
||||
_Sat TYPE SAC_to_SAT ## NAME (short _Accum a) { return a; } \
|
||||
_Sat TYPE AC_to_SAT ## NAME (_Accum a) { return a; } \
|
||||
_Sat TYPE LAC_to_SAT ## NAME (long _Accum a) { return a; } \
|
||||
_Sat TYPE LLAC_to_SAT ## NAME (long long _Accum a) { return a; } \
|
||||
_Sat TYPE USAC_to_SAT ## NAME (unsigned short _Accum a) { return a; } \
|
||||
_Sat TYPE UAC_to_SAT ## NAME (unsigned _Accum a) { return a; } \
|
||||
_Sat TYPE ULAC_to_SAT ## NAME (unsigned long _Accum a) { return a; } \
|
||||
_Sat TYPE ULLAC_to_SAT ## NAME (unsigned long long _Accum a) { return a; } \
|
||||
_Sat TYPE SATSFR_to_SAT ## NAME (_Sat short _Fract a) { return a; } \
|
||||
_Sat TYPE SATFR_to_SAT ## NAME (_Sat _Fract a) { return a; } \
|
||||
_Sat TYPE SATLFR_to_SAT ## NAME (_Sat long _Fract a) { return a; } \
|
||||
_Sat TYPE SATLLFR_to_SAT ## NAME (_Sat long long _Fract a) { return a; } \
|
||||
_Sat TYPE SATUSFR_to_SAT ## NAME (_Sat unsigned short _Fract a) { return a; } \
|
||||
_Sat TYPE SATUFR_to_SAT ## NAME (_Sat unsigned _Fract a) { return a; } \
|
||||
_Sat TYPE SATULFR_to_SAT ## NAME (_Sat unsigned long _Fract a) { return a; } \
|
||||
_Sat TYPE SATULLFR_to_SAT ## NAME (_Sat unsigned long long _Fract a) { return a; } \
|
||||
_Sat TYPE SATSAC_to_SAT ## NAME (_Sat short _Accum a) { return a; } \
|
||||
_Sat TYPE SATAC_to_SAT ## NAME (_Sat _Accum a) { return a; } \
|
||||
_Sat TYPE SATLAC_to_SAT ## NAME (_Sat long _Accum a) { return a; } \
|
||||
_Sat TYPE SATLLAC_to_SAT ## NAME (_Sat long long _Accum a) { return a; } \
|
||||
_Sat TYPE SATUSAC_to_SAT ## NAME (_Sat unsigned short _Accum a) { return a; } \
|
||||
_Sat TYPE SATUAC_to_SAT ## NAME (_Sat unsigned _Accum a) { return a; } \
|
||||
_Sat TYPE SATULAC_to_SAT ## NAME (_Sat unsigned long _Accum a) { return a; } \
|
||||
_Sat TYPE SATULLAC_to_SAT ## NAME (_Sat unsigned long long _Accum a) { return a; } \
|
||||
_Complex int NAME ## _to_CI (TYPE a) { return a; } \
|
||||
_Complex unsigned int NAME ## _to_CUI (TYPE a) { return a; } \
|
||||
_Complex float NAME ## _to_CF (TYPE a) { return a; } \
|
||||
_Complex double NAME ## _to_CD (TYPE a) { return a; } \
|
||||
TYPE CI_to_ ## NAME (_Complex int a) { return a; } \
|
||||
TYPE CUI_to_ ## NAME (_Complex unsigned int a) { return a; } \
|
||||
TYPE CF_to_ ## NAME (_Complex float a) { return a; } \
|
||||
TYPE CD_to_ ## NAME (_Complex double a) { return a; } \
|
||||
_Sat TYPE CI_to_SAT ## NAME (_Complex int a) { return a; } \
|
||||
_Sat TYPE CUI_to_SAT ## NAME (_Complex unsigned int a) { return a; } \
|
||||
_Sat TYPE CF_to_SAT ## NAME (_Complex float a) { return a; } \
|
||||
_Sat TYPE CD_to_SAT ## NAME (_Complex double a) { return a; }
|
||||
|
||||
CONV(short _Fract, sf);
|
||||
CONV(_Fract, f);
|
||||
CONV(long _Fract, lf);
|
||||
CONV(long long _Fract, llf);
|
||||
CONV(unsigned short _Fract, usf);
|
||||
CONV(unsigned _Fract, uf);
|
||||
CONV(unsigned long _Fract, ulf);
|
||||
CONV(unsigned long long _Fract, ullf);
|
||||
|
||||
CONV(short _Accum, sk);
|
||||
CONV(_Accum, k);
|
||||
CONV(long _Accum, lk);
|
||||
CONV(long long _Accum, llk);
|
||||
CONV(unsigned short _Accum, usk);
|
||||
CONV(unsigned _Accum, uk);
|
||||
CONV(unsigned long _Accum, ulk);
|
||||
CONV(unsigned long long _Accum, ullk);
|
147
gcc/testsuite/gcc.dg/fixed-point/allop-const.c
Normal file
147
gcc/testsuite/gcc.dg/fixed-point/allop-const.c
Normal file
@ -0,0 +1,147 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* N1169 6.5.7 - Bitwise shift operands.
|
||||
C99 6.5.3 Unary operators.
|
||||
C99 6.5.5 Multiplicative operators.
|
||||
C99 6.5.6 Additive operators.
|
||||
C99 6.5.7 Bitwise shift operators.
|
||||
C99 6.5.8 Relational operators.
|
||||
C99 6.5.9 Equality operators.
|
||||
C99 6.5.16 Assignment operators.
|
||||
|
||||
Check if all operations on constants are ok. */
|
||||
|
||||
#define ALLOPCONST(TYPE,NAME,POSTFIX) \
|
||||
TYPE NAME ## plus = +0.1 ## POSTFIX; \
|
||||
unsigned TYPE NAME ## u_plus = +0.1u ## POSTFIX; \
|
||||
_Sat TYPE NAME ## sat_plus = +(_Sat TYPE)0.1 ## POSTFIX; \
|
||||
_Sat unsigned TYPE NAME ## sat_u_plus = +(_Sat unsigned TYPE)0.1u ## POSTFIX; \
|
||||
TYPE NAME ## neg = -0.1 ## POSTFIX; \
|
||||
_Sat TYPE NAME ## sat_neg = -(_Sat TYPE)0.1 ## POSTFIX; \
|
||||
_Sat unsigned TYPE NAME ## sat_u_neg = -(_Sat unsigned TYPE)0.1u ## POSTFIX; \
|
||||
int NAME ## logneg1 = !0.1 ## POSTFIX; \
|
||||
int NAME ## logneg1u = !0.1u ## POSTFIX; \
|
||||
int NAME ## logneg2 = !0.0 ## POSTFIX; \
|
||||
int NAME ## logneg2u = !0.0u ## POSTFIX; \
|
||||
TYPE NAME ## add = 0.1 ## POSTFIX + 0.2 ## POSTFIX; \
|
||||
unsigned TYPE NAME ## u_add = 0.1u ## POSTFIX + 0.2u ## POSTFIX; \
|
||||
_Sat TYPE NAME ## sat_add = (_Sat TYPE)0.8 ## POSTFIX + 0.3 ## POSTFIX; \
|
||||
_Sat unsigned TYPE NAME ## sat_u_add = (_Sat unsigned TYPE)0.8u ## POSTFIX + 0.3u ## POSTFIX; \
|
||||
TYPE NAME ## sub = 0.1 ## POSTFIX - 0.2 ## POSTFIX; \
|
||||
unsigned TYPE NAME ## u_sub = 0.2u ## POSTFIX - 0.1u ## POSTFIX; \
|
||||
_Sat TYPE NAME ## sat_sub = (_Sat TYPE)0.1 ## POSTFIX - 0.2 ## POSTFIX; \
|
||||
_Sat unsigned TYPE NAME ## sat_u_sub = (_Sat unsigned TYPE)0.1u ## POSTFIX - 0.2u ## POSTFIX; \
|
||||
TYPE NAME ## mul = 0.1 ## POSTFIX * 0.2 ## POSTFIX; \
|
||||
unsigned TYPE NAME ## u_mul = 0.1u ## POSTFIX * 0.2u ## POSTFIX; \
|
||||
_Sat TYPE NAME ## sat_mul = (_Sat TYPE)0.1 ## POSTFIX * 0.2 ## POSTFIX; \
|
||||
_Sat unsigned TYPE NAME ## sat_u_mul = (_Sat unsigned TYPE)0.1u ## POSTFIX * 0.2u ## POSTFIX; \
|
||||
TYPE NAME ## div = 0.1 ## POSTFIX / 0.3 ## POSTFIX; \
|
||||
unsigned TYPE NAME ## u_div = 0.1u ## POSTFIX / 0.3u ## POSTFIX; \
|
||||
_Sat TYPE NAME ## sat_div = (_Sat TYPE)0.3 ## POSTFIX / 0.1 ## POSTFIX; \
|
||||
_Sat unsigned TYPE NAME ## sat_u_div = (_Sat unsigned TYPE)0.3u ## POSTFIX / 0.1u ## POSTFIX; \
|
||||
TYPE NAME ## shl = 0.1 ## POSTFIX << 3; \
|
||||
unsigned TYPE NAME ## u_shl = 0.1u ## POSTFIX << 3; \
|
||||
_Sat TYPE NAME ## sat_shl = (_Sat TYPE)0.8 ## POSTFIX << 3; \
|
||||
_Sat unsigned TYPE NAME ## sat_u_shl = (_Sat unsigned TYPE)0.8u ## POSTFIX << 3; \
|
||||
TYPE NAME ## shr = 0.1 ## POSTFIX >> 5; \
|
||||
unsigned TYPE NAME ## u_shr = 0.1u ## POSTFIX >> 5; \
|
||||
_Sat TYPE NAME ## sat_shr = (_Sat TYPE)0.1 ## POSTFIX >> 5; \
|
||||
_Sat unsigned TYPE NAME ## sat_u_shr = (_Sat unsigned TYPE)0.1 ## POSTFIX >> 5; \
|
||||
int NAME ## ne = 0.1 ## POSTFIX != 0.2 ## POSTFIX; \
|
||||
int NAME ## u_ne = 0.1u ## POSTFIX != 0.2u ## POSTFIX; \
|
||||
int NAME ## eq = 0.1 ## POSTFIX == 0.2 ## POSTFIX; \
|
||||
int NAME ## u_eq = 0.1u ## POSTFIX == 0.2u ## POSTFIX; \
|
||||
int NAME ## gt = 0.1 ## POSTFIX > 0.2 ## POSTFIX; \
|
||||
int NAME ## u_gt = 0.1u ## POSTFIX > 0.2u ## POSTFIX; \
|
||||
int NAME ## ge = 0.1 ## POSTFIX >= 0.2 ## POSTFIX; \
|
||||
int NAME ## u_ge = 0.1u ## POSTFIX >= 0.2 ## POSTFIX; \
|
||||
int NAME ## lt = 0.1 ## POSTFIX < 0.2 ## POSTFIX; \
|
||||
int NAME ## u_lt = 0.1u ## POSTFIX < 0.2 ## POSTFIX; \
|
||||
int NAME ## le = 0.1 ## POSTFIX <= 0.2 ## POSTFIX; \
|
||||
int NAME ## u_le = 0.1u ## POSTFIX <= 0.2 ## POSTFIX; \
|
||||
int NAME ## ne2 = 0.2 ## POSTFIX != 0.2 ## POSTFIX; \
|
||||
int NAME ## u_ne2 = 0.2u ## POSTFIX != 0.2u ## POSTFIX; \
|
||||
int NAME ## eq2 = 0.2 ## POSTFIX == 0.2 ## POSTFIX; \
|
||||
int NAME ## u_eq2 = 0.2u ## POSTFIX == 0.2u ## POSTFIX; \
|
||||
int NAME ## gt2 = 0.2 ## POSTFIX > 0.2 ## POSTFIX; \
|
||||
int NAME ## u_gt2 = 0.2u ## POSTFIX > 0.2u ## POSTFIX; \
|
||||
int NAME ## ge2 = 0.2 ## POSTFIX >= 0.2 ## POSTFIX; \
|
||||
int NAME ## u_ge2 = 0.2u ## POSTFIX >= 0.2 ## POSTFIX; \
|
||||
int NAME ## lt2 = 0.2 ## POSTFIX < 0.2 ## POSTFIX; \
|
||||
int NAME ## u_lt2 = 0.2u ## POSTFIX < 0.2 ## POSTFIX; \
|
||||
int NAME ## le2 = 0.2 ## POSTFIX <= 0.2 ## POSTFIX; \
|
||||
int NAME ## u_le2 = 0.2u ## POSTFIX <= 0.2 ## POSTFIX; \
|
||||
TYPE NAME ## hr_signed = 0.1hr; \
|
||||
unsigned TYPE NAME ## hr_unsigned = 0.1hr; \
|
||||
_Sat TYPE NAME ## hr_sat_signed = 0.1hr; \
|
||||
_Sat unsigned TYPE NAME ## hr_sat_unsigned = 0.1hr; \
|
||||
TYPE NAME ## r_signed = 0.1r; \
|
||||
unsigned TYPE NAME ## r_unsigned = 0.1r; \
|
||||
_Sat TYPE NAME ## r_sat_signed = 0.1r; \
|
||||
_Sat unsigned TYPE NAME ## r_sat_unsigned = 0.1r; \
|
||||
TYPE NAME ## lr_signed = 0.1lr; \
|
||||
unsigned TYPE NAME ## lr_unsigned = 0.1lr; \
|
||||
_Sat TYPE NAME ## lr_sat_signed = 0.1lr; \
|
||||
_Sat unsigned TYPE NAME ## lr_sat_unsigned = 0.1lr; \
|
||||
TYPE NAME ## llr_signed = 0.1llr; \
|
||||
unsigned TYPE NAME ## llr_unsigned = 0.1llr; \
|
||||
_Sat TYPE NAME ## llr_sat_signed = 0.1llr; \
|
||||
_Sat unsigned TYPE NAME ## llr_sat_unsigned = 0.1llr; \
|
||||
TYPE NAME ## uhr_signed = 0.1uhr; \
|
||||
unsigned TYPE NAME ## uhr_unsigned = 0.1uhr; \
|
||||
_Sat TYPE NAME ## uhr_sat_signed = 0.1uhr; \
|
||||
_Sat unsigned TYPE NAME ## uhr_sat_unsigned = 0.1uhr; \
|
||||
TYPE NAME ## ur_signed = 0.1ur; \
|
||||
unsigned TYPE NAME ## ur_unsigned = 0.1ur; \
|
||||
_Sat TYPE NAME ## ur_sat_signed = 0.1ur; \
|
||||
_Sat unsigned TYPE NAME ## ur_sat_unsigned = 0.1ur; \
|
||||
TYPE NAME ## ulr_signed = 0.1ulr; \
|
||||
unsigned TYPE NAME ## ulr_unsigned = 0.1ulr; \
|
||||
_Sat TYPE NAME ## ulr_sat_signed = 0.1ulr; \
|
||||
_Sat unsigned TYPE NAME ## ulr_sat_unsigned = 0.1ulr; \
|
||||
TYPE NAME ## ullr_signed = 0.1ullr; \
|
||||
unsigned TYPE NAME ## ullr_unsigned = 0.1ullr; \
|
||||
_Sat TYPE NAME ## ullr_sat_signed = 0.1ullr; \
|
||||
_Sat unsigned TYPE NAME ## ullr_sat_unsigned = 0.1ullr; \
|
||||
TYPE NAME ## hk_signed = 0.1hk; \
|
||||
unsigned TYPE NAME ## hk_unsigned = 0.1hk; \
|
||||
_Sat TYPE NAME ## hk_sat_signed = 5.1hk; \
|
||||
_Sat unsigned TYPE NAME ## hk_sat_unsigned = 5.1hk; \
|
||||
TYPE NAME ## k_signed = 0.1k; \
|
||||
unsigned TYPE NAME ## k_unsigned = 0.1k; \
|
||||
_Sat TYPE NAME ## k_sat_signed = 5.1k; \
|
||||
_Sat unsigned TYPE NAME ## k_sat_unsigned = 5.1k; \
|
||||
TYPE NAME ## lk_signed = 0.1lk; \
|
||||
unsigned TYPE NAME ## lk_unsigned = 0.1lk; \
|
||||
_Sat TYPE NAME ## lk_sat_signed = 5.1lk; \
|
||||
_Sat unsigned TYPE NAME ## lk_sat_unsigned = 5.1lk; \
|
||||
TYPE NAME ## llk_signed = 0.1llk; \
|
||||
unsigned TYPE NAME ## llk_unsigned = 0.1llk; \
|
||||
_Sat TYPE NAME ## llk_sat_signed = 5.1llk; \
|
||||
_Sat unsigned TYPE NAME ## llk_sat_unsigned = 5.1llk; \
|
||||
TYPE NAME ## uhk_signed = 0.1uhk; \
|
||||
unsigned TYPE NAME ## uhk_unsigned = 0.1uhk; \
|
||||
_Sat TYPE NAME ## uhk_sat_signed = 5.1uhk; \
|
||||
_Sat unsigned TYPE NAME ## uhk_sat_unsigned = 5.1uhk; \
|
||||
TYPE NAME ## uk_signed = 0.1uk; \
|
||||
unsigned TYPE NAME ## uk_unsigned = 0.1uk; \
|
||||
_Sat TYPE NAME ## uk_sat_signed = 5.1uk; \
|
||||
_Sat unsigned TYPE NAME ## uk_sat_unsigned = 5.1uk; \
|
||||
TYPE NAME ## ulk_signed = 0.1ulk; \
|
||||
unsigned TYPE NAME ## ulk_unsigned = 0.1ulk; \
|
||||
_Sat TYPE NAME ## ulk_sat_signed = 5.1ulk; \
|
||||
_Sat unsigned TYPE NAME ## ulk_sat_unsigned = 5.1ulk; \
|
||||
TYPE NAME ## ullk_signed = 0.1ullk; \
|
||||
unsigned TYPE NAME ## ullk_unsigned = 0.1ullk; \
|
||||
_Sat TYPE NAME ## ullk_sat_signed = 5.1ullk; \
|
||||
_Sat unsigned TYPE NAME ## ullk_sat_unsigned = 5.1ullk; \
|
||||
|
||||
ALLOPCONST(short _Fract, sf, hr);
|
||||
ALLOPCONST(_Fract, f, r);
|
||||
ALLOPCONST(long _Fract, lf, lr);
|
||||
ALLOPCONST(long long _Fract, llf, llr);
|
||||
ALLOPCONST(short _Accum, sa, hk);
|
||||
ALLOPCONST(_Accum, a, k);
|
||||
ALLOPCONST(long _Accum, la, lk);
|
||||
ALLOPCONST(long long _Accum, lla, llk);
|
87
gcc/testsuite/gcc.dg/fixed-point/allop.c
Normal file
87
gcc/testsuite/gcc.dg/fixed-point/allop.c
Normal file
@ -0,0 +1,87 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* N1169 6.5.7 - Bitwise shift operands.
|
||||
C99 6.5.3 Unary operators.
|
||||
C99 6.5.5 Multiplicative operators.
|
||||
C99 6.5.6 Additive operators.
|
||||
C99 6.5.7 Bitwise shift operators.
|
||||
C99 6.5.8 Relational operators.
|
||||
C99 6.5.9 Equality operators.
|
||||
C99 6.5.16 Assignment operators.
|
||||
|
||||
Check if all operations are ok. */
|
||||
|
||||
void true();
|
||||
void false();
|
||||
|
||||
#define ALLOP(TYPE,NAME) \
|
||||
TYPE test1 ## NAME (TYPE a) { return +a; } \
|
||||
TYPE test2 ## NAME (TYPE a) { return -a; } \
|
||||
int test3 ## NAME (TYPE a) { return !a; } \
|
||||
TYPE test4 ## NAME (TYPE a, TYPE b) { return a + b; } \
|
||||
TYPE test5 ## NAME (TYPE a, TYPE b) { return a - b; } \
|
||||
TYPE test6 ## NAME (TYPE a, TYPE b) { return a * b; } \
|
||||
TYPE test7 ## NAME (TYPE a, TYPE b) { return a / b; } \
|
||||
TYPE test8 ## NAME (TYPE a, TYPE b) { a += b; return a; } \
|
||||
TYPE test9 ## NAME (TYPE a, TYPE b) { a -= b; return a; } \
|
||||
TYPE test10 ## NAME (TYPE a, TYPE b) { a *= b; return a; } \
|
||||
TYPE test11 ## NAME (TYPE a, TYPE b) { a /= b; return a; } \
|
||||
TYPE test12 ## NAME (TYPE a, int b) { return a << b; } \
|
||||
TYPE test13 ## NAME (TYPE a, int b) { return a >> b; } \
|
||||
TYPE test14 ## NAME (TYPE a, int b) { a <<= b; return a; } \
|
||||
TYPE test15 ## NAME (TYPE a, int b) { a >>= b; return a; } \
|
||||
int test16 ## NAME (TYPE a, TYPE b) { return a == b; } \
|
||||
int test17 ## NAME (TYPE a, TYPE b) { return a != b; } \
|
||||
int test18 ## NAME (TYPE a, TYPE b) { return a < b; } \
|
||||
int test19 ## NAME (TYPE a, TYPE b) { return a <= b; } \
|
||||
int test20 ## NAME (TYPE a, TYPE b) { return a >= b; } \
|
||||
int test21 ## NAME (TYPE a, TYPE b) { return a > b; } \
|
||||
void test22 ## NAME (TYPE a, TYPE b) { if(a == b)true(); else false(); } \
|
||||
void test23 ## NAME (TYPE a, TYPE b) { if(a != b)true(); else false(); } \
|
||||
void test24 ## NAME (TYPE a, TYPE b) { if(a < b)true(); else false(); } \
|
||||
void test25 ## NAME (TYPE a, TYPE b) { if(a <= b)true(); else false(); } \
|
||||
void test26 ## NAME (TYPE a, TYPE b) { if(a >= b)true(); else false(); } \
|
||||
void test27 ## NAME (TYPE a, TYPE b) { if(a > b)true(); else false(); } \
|
||||
TYPE test28 ## NAME (TYPE a) { return ++a; } \
|
||||
TYPE test29 ## NAME (TYPE a) { return --a; } \
|
||||
TYPE test30 ## NAME (TYPE *a) { return ++(*a); } \
|
||||
TYPE test31 ## NAME (TYPE *a) { return (*a)++; } \
|
||||
TYPE test32 ## NAME (TYPE *a) { return --(*a); } \
|
||||
TYPE test33 ## NAME (TYPE *a) { return (*a)--; }
|
||||
|
||||
ALLOP(short _Fract, sf);
|
||||
ALLOP(_Fract, f);
|
||||
ALLOP(long _Fract, lf);
|
||||
ALLOP(long long _Fract, llf);
|
||||
ALLOP(short _Accum, sa);
|
||||
ALLOP(_Accum, a);
|
||||
ALLOP(long _Accum, la);
|
||||
ALLOP(long long _Accum, lla);
|
||||
|
||||
ALLOP(unsigned short _Fract, usf);
|
||||
ALLOP(unsigned _Fract, uf);
|
||||
ALLOP(unsigned long _Fract, ulf);
|
||||
ALLOP(unsigned long long _Fract, ullf);
|
||||
ALLOP(unsigned short _Accum, usa);
|
||||
ALLOP(unsigned _Accum, ua);
|
||||
ALLOP(unsigned long _Accum, ula);
|
||||
ALLOP(unsigned long long _Accum, ulla);
|
||||
|
||||
ALLOP(_Sat short _Fract, Ssf);
|
||||
ALLOP(_Sat _Fract, Sf);
|
||||
ALLOP(_Sat long _Fract, Slf);
|
||||
ALLOP(_Sat long long _Fract, Sllf);
|
||||
ALLOP(_Sat short _Accum, Ssa);
|
||||
ALLOP(_Sat _Accum, Sa);
|
||||
ALLOP(_Sat long _Accum, Sla);
|
||||
ALLOP(_Sat long long _Accum, Slla);
|
||||
|
||||
ALLOP(_Sat unsigned short _Fract, Susf);
|
||||
ALLOP(_Sat unsigned _Fract, Suf);
|
||||
ALLOP(_Sat unsigned long _Fract, Sulf);
|
||||
ALLOP(_Sat unsigned long long _Fract, Sullf);
|
||||
ALLOP(_Sat unsigned short _Accum, Susa);
|
||||
ALLOP(_Sat unsigned _Accum, Sua);
|
||||
ALLOP(_Sat unsigned long _Accum, Sula);
|
||||
ALLOP(_Sat unsigned long long _Accum, Sulla);
|
158
gcc/testsuite/gcc.dg/fixed-point/binary.c
Normal file
158
gcc/testsuite/gcc.dg/fixed-point/binary.c
Normal file
@ -0,0 +1,158 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* N1169 6.5.7 - Bitwise shift operands.
|
||||
C99 6.5.5 Multiplicative operators.
|
||||
C99 6.5.6 Additive operators.
|
||||
C99 6.5.7 Bitwise shift operators.
|
||||
C99 6.5.8 Relational operators.
|
||||
C99 6.5.9 Equality operators.
|
||||
C99 6.5.16 Assignment operators.
|
||||
|
||||
Check binary operators + - * / << >> < <= >= > == != += -= *= /= <<= >>=. */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
#define BINARY(TYPE,POSTFIX) \
|
||||
{ TYPE a = 0.5 ## POSTFIX; \
|
||||
TYPE b = 0.25 ## POSTFIX; \
|
||||
if (a + b != 0.75 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (a - b != 0.25 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (a * b != 0.125 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (b / a != 0.5 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (b << 1 != a) \
|
||||
abort(); \
|
||||
if (a >> 1 != b) \
|
||||
abort(); \
|
||||
if (a < b != 0) \
|
||||
abort(); \
|
||||
if (a <= b != 0) \
|
||||
abort(); \
|
||||
if (a > b != 1) \
|
||||
abort(); \
|
||||
if (a >= b != 1) \
|
||||
abort(); \
|
||||
if (a == b != 0) \
|
||||
abort(); \
|
||||
if (a != b != 1) \
|
||||
abort(); \
|
||||
a += b; \
|
||||
if (a != 0.75 ## POSTFIX) \
|
||||
abort(); \
|
||||
a -= b; \
|
||||
if (a != 0.5 ## POSTFIX) \
|
||||
abort(); \
|
||||
a *= b; \
|
||||
if (a != 0.125 ## POSTFIX) \
|
||||
abort(); \
|
||||
a /= b; \
|
||||
if (a != 0.5 ## POSTFIX) \
|
||||
abort(); \
|
||||
a >>= 2; \
|
||||
if (a != 0.125 ## POSTFIX) \
|
||||
abort(); \
|
||||
a <<= 1; \
|
||||
if (a != 0.25 ## POSTFIX) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
#define FRACT_SAT_BINARY(TYPE,POSTFIX) \
|
||||
{ TYPE a = 0.7 ## POSTFIX; \
|
||||
TYPE b = 0.9 ## POSTFIX; \
|
||||
if (a + b != 1.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
a = -0.7 ## POSTFIX; \
|
||||
b = -0.9 ## POSTFIX; \
|
||||
if (a + b != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
|
||||
abort(); \
|
||||
a = 0.7 ## POSTFIX; \
|
||||
b = -0.9 ## POSTFIX; \
|
||||
if (a - b != 1.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
a = -0.7 ## POSTFIX; \
|
||||
b = 0.9 ## POSTFIX; \
|
||||
if (a - b != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
|
||||
abort(); \
|
||||
a = -0.5 ## POSTFIX - 0.5 ## POSTFIX; \
|
||||
if (a * a != 1.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
a = 0.8 ## POSTFIX; \
|
||||
b = 0.5 ## POSTFIX; \
|
||||
if (a / b != 1.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
a = -0.8 ## POSTFIX; \
|
||||
b = 0.5 ## POSTFIX; \
|
||||
if (a / b != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
|
||||
abort(); \
|
||||
a = 0.1 ## POSTFIX; \
|
||||
if (a << 4 != 1.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
a = -0.8 ## POSTFIX; \
|
||||
if (a << 4 != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
#define FRACT_SAT_UNS_BINARY(TYPE,POSTFIX) \
|
||||
{ TYPE a = 0.7 ## POSTFIX; \
|
||||
TYPE b = 0.9 ## POSTFIX; \
|
||||
if (a + b != 1.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (a - b != 0.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (b / a != 1.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (a << 1 != 1.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
BINARY(short _Fract, hr);
|
||||
BINARY(_Fract, r);
|
||||
BINARY(long _Fract, lr);
|
||||
BINARY(long long _Fract, llr);
|
||||
BINARY(unsigned short _Fract, uhr);
|
||||
BINARY(unsigned _Fract, ur);
|
||||
BINARY(unsigned long _Fract, ulr);
|
||||
BINARY(unsigned long long _Fract, ullr);
|
||||
BINARY(_Sat short _Fract, hr);
|
||||
BINARY(_Sat _Fract, r);
|
||||
BINARY(_Sat long _Fract, lr);
|
||||
BINARY(_Sat long long _Fract, llr);
|
||||
BINARY(_Sat unsigned short _Fract, uhr);
|
||||
BINARY(_Sat unsigned _Fract, ur);
|
||||
BINARY(_Sat unsigned long _Fract, ulr);
|
||||
BINARY(_Sat unsigned long long _Fract, ullr);
|
||||
BINARY(short _Accum, hk);
|
||||
BINARY(_Accum, k);
|
||||
BINARY(long _Accum, lk);
|
||||
BINARY(long long _Accum, llk);
|
||||
BINARY(unsigned short _Accum, uhk);
|
||||
BINARY(unsigned _Accum, uk);
|
||||
BINARY(unsigned long _Accum, ulk);
|
||||
BINARY(unsigned long long _Accum, ullk);
|
||||
BINARY(_Sat short _Accum, hk);
|
||||
BINARY(_Sat _Accum, k);
|
||||
BINARY(_Sat long _Accum, lk);
|
||||
BINARY(_Sat long long _Accum, llk);
|
||||
BINARY(_Sat unsigned short _Accum, uhk);
|
||||
BINARY(_Sat unsigned _Accum, uk);
|
||||
BINARY(_Sat unsigned long _Accum, ulk);
|
||||
BINARY(_Sat unsigned long long _Accum, ullk);
|
||||
|
||||
FRACT_SAT_BINARY(_Sat short _Fract, hr);
|
||||
FRACT_SAT_BINARY(_Sat _Fract, r);
|
||||
FRACT_SAT_BINARY(_Sat long _Fract, lr);
|
||||
FRACT_SAT_BINARY(_Sat long long _Fract, llr);
|
||||
|
||||
FRACT_SAT_UNS_BINARY(_Sat unsigned short _Fract, uhr);
|
||||
FRACT_SAT_UNS_BINARY(_Sat unsigned _Fract, ur);
|
||||
FRACT_SAT_UNS_BINARY(_Sat unsigned long _Fract, ulr);
|
||||
FRACT_SAT_UNS_BINARY(_Sat unsigned long long _Fract, ullr);
|
||||
|
||||
return 0;
|
||||
}
|
76
gcc/testsuite/gcc.dg/fixed-point/bit-complement.c
Normal file
76
gcc/testsuite/gcc.dg/fixed-point/bit-complement.c
Normal file
@ -0,0 +1,76 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* C99 6.5.3 Unary ~. */
|
||||
|
||||
void test ()
|
||||
{
|
||||
short _Fract sf;
|
||||
_Fract f;
|
||||
long _Fract lf;
|
||||
long long _Fract llf;
|
||||
unsigned short _Fract usf;
|
||||
unsigned _Fract uf;
|
||||
unsigned long _Fract ulf;
|
||||
unsigned long long _Fract ullf;
|
||||
_Sat short _Fract Ssf;
|
||||
_Sat _Fract Sf;
|
||||
_Sat long _Fract Slf;
|
||||
_Sat long long _Fract Sllf;
|
||||
_Sat unsigned short _Fract Susf;
|
||||
_Sat unsigned _Fract Suf;
|
||||
_Sat unsigned long _Fract Sulf;
|
||||
_Sat unsigned long long _Fract Sullf;
|
||||
short _Accum sa;
|
||||
_Accum a;
|
||||
long _Accum la;
|
||||
long long _Accum lla;
|
||||
unsigned short _Accum usa;
|
||||
unsigned _Accum ua;
|
||||
unsigned long _Accum ula;
|
||||
unsigned long long _Accum ulla;
|
||||
_Sat short _Accum Ssa;
|
||||
_Sat _Accum Sa;
|
||||
_Sat long _Accum Sla;
|
||||
_Sat long long _Accum Slla;
|
||||
_Sat unsigned short _Accum Susa;
|
||||
_Sat unsigned _Accum Sua;
|
||||
_Sat unsigned long _Accum Sula;
|
||||
_Sat unsigned long long _Accum Sulla;
|
||||
|
||||
/* C99 Section 6.5.3.3 ~ shall have integer types. */
|
||||
|
||||
~sf; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~f; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~lf; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~llf; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~usf; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~uf; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~ulf; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~ullf; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~Ssf; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~Sf; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~Slf; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~Sllf; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~Susf; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~Suf; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~Sulf; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~Sullf; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~sa; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~a; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~la; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~lla; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~usa; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~ua; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~ula; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~ulla; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~Ssa; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~Sa; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~Sla; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~Slla; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~Susa; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~Sua; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~Sula; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
~Sulla; /* { dg-error "wrong type argument to bit-complement" } */
|
||||
|
||||
}
|
97
gcc/testsuite/gcc.dg/fixed-point/call-by-value.c
Normal file
97
gcc/testsuite/gcc.dg/fixed-point/call-by-value.c
Normal file
@ -0,0 +1,97 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* C99 6.9.1(9) Function definitions; parameter has automatic storage.
|
||||
|
||||
Test that actual parameters are passed by value and that modifications
|
||||
made within functions are lost on function return.
|
||||
|
||||
This test is copied from gcc.dg/dfp/ and changed for fixed-point types. */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
#define FOO_FUN(NAME,TYPE,VALUE) \
|
||||
int foo ## NAME (TYPE z) \
|
||||
{ \
|
||||
z = z + VALUE; \
|
||||
}
|
||||
|
||||
#define FOO_TEST(NAME,TYPE,VALUE) \
|
||||
{ \
|
||||
TYPE NAME = VALUE; \
|
||||
foo ## NAME (NAME); \
|
||||
if (NAME != VALUE) \
|
||||
abort (); \
|
||||
}
|
||||
|
||||
FOO_FUN (sf, short _Fract, 0.2hr)
|
||||
FOO_FUN (f, _Fract, 0.2r)
|
||||
FOO_FUN (lf, long _Fract, 0.2lr)
|
||||
FOO_FUN (llf, long long _Fract, 0.2llr)
|
||||
FOO_FUN (usf, unsigned short _Fract, 0.2uhr)
|
||||
FOO_FUN (uf, unsigned _Fract, 0.2ur)
|
||||
FOO_FUN (ulf, unsigned long _Fract, 0.2ulr)
|
||||
FOO_FUN (ullf, unsigned long long _Fract, 0.2ullr)
|
||||
FOO_FUN (Ssf, _Sat short _Fract, 0.2hr)
|
||||
FOO_FUN (Sf, _Sat _Fract, 0.2r)
|
||||
FOO_FUN (Slf, _Sat long _Fract, 0.2lr)
|
||||
FOO_FUN (Sllf, _Sat long long _Fract, 0.2llr)
|
||||
FOO_FUN (Susf, _Sat unsigned short _Fract, 0.2uhr)
|
||||
FOO_FUN (Suf, _Sat unsigned _Fract, 0.2ur)
|
||||
FOO_FUN (Sulf, _Sat unsigned long _Fract, 0.2ulr)
|
||||
FOO_FUN (Sullf, _Sat unsigned long long _Fract, 0.2ullr)
|
||||
FOO_FUN (sa, short _Accum, 0.2hk)
|
||||
FOO_FUN (a, _Accum, 0.2k)
|
||||
FOO_FUN (la, long _Accum, 0.2lk)
|
||||
FOO_FUN (lla, long long _Accum, 0.2llk)
|
||||
FOO_FUN (usa, unsigned short _Accum, 0.2uhk)
|
||||
FOO_FUN (ua, unsigned _Accum, 0.2uk)
|
||||
FOO_FUN (ula, unsigned long _Accum, 0.2ulk)
|
||||
FOO_FUN (ulla, unsigned long long _Accum, 0.2ullk)
|
||||
FOO_FUN (Ssa, _Sat short _Accum, 0.2hk)
|
||||
FOO_FUN (Sa, _Sat _Accum, 0.2k)
|
||||
FOO_FUN (Sla, _Sat long _Accum, 0.2lk)
|
||||
FOO_FUN (Slla, _Sat long long _Accum, 0.2llk)
|
||||
FOO_FUN (Susa, _Sat unsigned short _Accum, 0.2uhk)
|
||||
FOO_FUN (Sua, _Sat unsigned _Accum, 0.2uk)
|
||||
FOO_FUN (Sula, _Sat unsigned long _Accum, 0.2ulk)
|
||||
FOO_FUN (Sulla, _Sat unsigned long long _Accum, 0.2ullk)
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
FOO_TEST (sf, short _Fract, 0.2hr)
|
||||
FOO_TEST (f, _Fract, 0.2r)
|
||||
FOO_TEST (lf, long _Fract, 0.2lr)
|
||||
FOO_TEST (llf, long long _Fract, 0.2llr)
|
||||
FOO_TEST (usf, unsigned short _Fract, 0.2uhr)
|
||||
FOO_TEST (uf, unsigned _Fract, 0.2ur)
|
||||
FOO_TEST (ulf, unsigned long _Fract, 0.2ulr)
|
||||
FOO_TEST (ullf, unsigned long long _Fract, 0.2ullr)
|
||||
FOO_TEST (Ssf, _Sat short _Fract, 0.2hr)
|
||||
FOO_TEST (Sf, _Sat _Fract, 0.2r)
|
||||
FOO_TEST (Slf, _Sat long _Fract, 0.2lr)
|
||||
FOO_TEST (Sllf, _Sat long long _Fract, 0.2llr)
|
||||
FOO_TEST (Susf, _Sat unsigned short _Fract, 0.2uhr)
|
||||
FOO_TEST (Suf, _Sat unsigned _Fract, 0.2ur)
|
||||
FOO_TEST (Sulf, _Sat unsigned long _Fract, 0.2ulr)
|
||||
FOO_TEST (Sullf, _Sat unsigned long long _Fract, 0.2ullr)
|
||||
FOO_TEST (sa, short _Accum, 0.2hk)
|
||||
FOO_TEST (a, _Accum, 0.2k)
|
||||
FOO_TEST (la, long _Accum, 0.2lk)
|
||||
FOO_TEST (lla, long long _Accum, 0.2llk)
|
||||
FOO_TEST (usa, unsigned short _Accum, 0.2uhk)
|
||||
FOO_TEST (ua, unsigned _Accum, 0.2uk)
|
||||
FOO_TEST (ula, unsigned long _Accum, 0.2ulk)
|
||||
FOO_TEST (ulla, unsigned long long _Accum, 0.2ullk)
|
||||
FOO_TEST (Ssa, _Sat short _Accum, 0.2hk)
|
||||
FOO_TEST (Sa, _Sat _Accum, 0.2k)
|
||||
FOO_TEST (Sla, _Sat long _Accum, 0.2lk)
|
||||
FOO_TEST (Slla, _Sat long long _Accum, 0.2llk)
|
||||
FOO_TEST (Susa, _Sat unsigned short _Accum, 0.2uhk)
|
||||
FOO_TEST (Sua, _Sat unsigned _Accum, 0.2uk)
|
||||
FOO_TEST (Sula, _Sat unsigned long _Accum, 0.2ulk)
|
||||
FOO_TEST (Sulla, _Sat unsigned long long _Accum, 0.2ullk)
|
||||
|
||||
return 0;
|
||||
}
|
279
gcc/testsuite/gcc.dg/fixed-point/cast-bad.c
Normal file
279
gcc/testsuite/gcc.dg/fixed-point/cast-bad.c
Normal file
@ -0,0 +1,279 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* C99 6.5.4 Cast operators.
|
||||
|
||||
Test invalid casts involving fixed-point. */
|
||||
|
||||
#define CAST(NAME,TYPE) \
|
||||
struct s ## NAME { TYPE NAME; } as ## NAME; \
|
||||
union u ## NAME { TYPE NAME; } au ## NAME; \
|
||||
TYPE NAME; \
|
||||
TYPE * NAME ## p;
|
||||
|
||||
CAST (sf, short _Fract)
|
||||
CAST (f, _Fract)
|
||||
CAST (lf, long _Fract)
|
||||
CAST (llf, long long _Fract)
|
||||
CAST (usf, unsigned short _Fract)
|
||||
CAST (uf, unsigned _Fract)
|
||||
CAST (ulf, unsigned long _Fract)
|
||||
CAST (ullf, unsigned long long _Fract)
|
||||
CAST (Ssf, _Sat short _Fract)
|
||||
CAST (Sf, _Sat _Fract)
|
||||
CAST (Slf, _Sat long _Fract)
|
||||
CAST (Sllf, _Sat long long _Fract)
|
||||
CAST (Susf, _Sat unsigned short _Fract)
|
||||
CAST (Suf, _Sat unsigned _Fract)
|
||||
CAST (Sulf, _Sat unsigned long _Fract)
|
||||
CAST (Sullf, _Sat unsigned long long _Fract)
|
||||
CAST (sa, short _Accum)
|
||||
CAST (a, _Accum)
|
||||
CAST (la, long _Accum)
|
||||
CAST (lla, long long _Accum)
|
||||
CAST (usa, unsigned short _Accum)
|
||||
CAST (ua, unsigned _Accum)
|
||||
CAST (ula, unsigned long _Accum)
|
||||
CAST (ulla, unsigned long long _Accum)
|
||||
CAST (Ssa, _Sat short _Accum)
|
||||
CAST (Sa, _Sat _Accum)
|
||||
CAST (Sla, _Sat long _Accum)
|
||||
CAST (Slla, _Sat long long _Accum)
|
||||
CAST (Susa, _Sat unsigned short _Accum)
|
||||
CAST (Sua, _Sat unsigned _Accum)
|
||||
CAST (Sula, _Sat unsigned long _Accum)
|
||||
CAST (Sulla, _Sat unsigned long long _Accum)
|
||||
|
||||
void
|
||||
test (void)
|
||||
{
|
||||
(short _Fract []) sfp; /* { dg-error "cast specifies array type" } */
|
||||
(_Fract []) fp; /* { dg-error "cast specifies array type" } */
|
||||
(long _Fract []) lfp; /* { dg-error "cast specifies array type" } */
|
||||
(long long _Fract []) llfp; /* { dg-error "cast specifies array type" } */
|
||||
(unsigned short _Fract []) usfp; /* { dg-error "cast specifies array type" } */
|
||||
(unsigned _Fract []) ufp; /* { dg-error "cast specifies array type" } */
|
||||
(unsigned long _Fract []) ulfp; /* { dg-error "cast specifies array type" } */
|
||||
(unsigned long long _Fract []) ullfp; /* { dg-error "cast specifies array type" } */
|
||||
(_Sat short _Fract []) Ssfp; /* { dg-error "cast specifies array type" } */
|
||||
(_Sat _Fract []) Sfp; /* { dg-error "cast specifies array type" } */
|
||||
(_Sat long _Fract []) Slfp; /* { dg-error "cast specifies array type" } */
|
||||
(_Sat long long _Fract []) Sllfp; /* { dg-error "cast specifies array type" } */
|
||||
(_Sat unsigned short _Fract []) Susfp; /* { dg-error "cast specifies array type" } */
|
||||
(_Sat unsigned _Fract []) Sufp; /* { dg-error "cast specifies array type" } */
|
||||
(_Sat unsigned long _Fract []) Sulfp; /* { dg-error "cast specifies array type" } */
|
||||
(_Sat unsigned long long _Fract []) Sullfp; /* { dg-error "cast specifies array type" } */
|
||||
(short _Accum []) sap; /* { dg-error "cast specifies array type" } */
|
||||
(_Accum []) ap; /* { dg-error "cast specifies array type" } */
|
||||
(long _Accum []) lap; /* { dg-error "cast specifies array type" } */
|
||||
(long long _Accum []) llap; /* { dg-error "cast specifies array type" } */
|
||||
(unsigned short _Accum []) usap; /* { dg-error "cast specifies array type" } */
|
||||
(unsigned _Accum []) uap; /* { dg-error "cast specifies array type" } */
|
||||
(unsigned long _Accum []) ulap; /* { dg-error "cast specifies array type" } */
|
||||
(unsigned long long _Accum []) ullap; /* { dg-error "cast specifies array type" } */
|
||||
(_Sat short _Accum []) Ssap; /* { dg-error "cast specifies array type" } */
|
||||
(_Sat _Accum []) Sap; /* { dg-error "cast specifies array type" } */
|
||||
(_Sat long _Accum []) Slap; /* { dg-error "cast specifies array type" } */
|
||||
(_Sat long long _Accum []) Sllap; /* { dg-error "cast specifies array type" } */
|
||||
(_Sat unsigned short _Accum []) Susap; /* { dg-error "cast specifies array type" } */
|
||||
(_Sat unsigned _Accum []) Suap; /* { dg-error "cast specifies array type" } */
|
||||
(_Sat unsigned long _Accum []) Sulap; /* { dg-error "cast specifies array type" } */
|
||||
(_Sat unsigned long long _Accum []) Sullap; /* { dg-error "cast specifies array type" } */
|
||||
|
||||
(short _Fract ()) sfp; /* { dg-error "cast specifies function type" } */
|
||||
(_Fract ()) fp; /* { dg-error "cast specifies function type" } */
|
||||
(long _Fract ()) lfp; /* { dg-error "cast specifies function type" } */
|
||||
(long long _Fract ()) llfp; /* { dg-error "cast specifies function type" } */
|
||||
(unsigned short _Fract ()) usfp; /* { dg-error "cast specifies function type" } */
|
||||
(unsigned _Fract ()) ufp; /* { dg-error "cast specifies function type" } */
|
||||
(unsigned long _Fract ()) ulfp; /* { dg-error "cast specifies function type" } */
|
||||
(unsigned long long _Fract ()) ullfp; /* { dg-error "cast specifies function type" } */
|
||||
(_Sat short _Fract ()) Ssfp; /* { dg-error "cast specifies function type" } */
|
||||
(_Sat _Fract ()) Sfp; /* { dg-error "cast specifies function type" } */
|
||||
(_Sat long _Fract ()) Slfp; /* { dg-error "cast specifies function type" } */
|
||||
(_Sat long long _Fract ()) Sllfp; /* { dg-error "cast specifies function type" } */
|
||||
(_Sat unsigned short _Fract ()) Susfp; /* { dg-error "cast specifies function type" } */
|
||||
(_Sat unsigned _Fract ()) Sufp; /* { dg-error "cast specifies function type" } */
|
||||
(_Sat unsigned long _Fract ()) Sulfp; /* { dg-error "cast specifies function type" } */
|
||||
(_Sat unsigned long long _Fract ()) Sullfp; /* { dg-error "cast specifies function type" } */
|
||||
(short _Accum ()) sap; /* { dg-error "cast specifies function type" } */
|
||||
(_Accum ()) ap; /* { dg-error "cast specifies function type" } */
|
||||
(long _Accum ()) lap; /* { dg-error "cast specifies function type" } */
|
||||
(long long _Accum ()) llap; /* { dg-error "cast specifies function type" } */
|
||||
(unsigned short _Accum ()) usap; /* { dg-error "cast specifies function type" } */
|
||||
(unsigned _Accum ()) uap; /* { dg-error "cast specifies function type" } */
|
||||
(unsigned long _Accum ()) ulap; /* { dg-error "cast specifies function type" } */
|
||||
(unsigned long long _Accum ()) ullap; /* { dg-error "cast specifies function type" } */
|
||||
(_Sat short _Accum ()) Ssap; /* { dg-error "cast specifies function type" } */
|
||||
(_Sat _Accum ()) Sap; /* { dg-error "cast specifies function type" } */
|
||||
(_Sat long _Accum ()) Slap; /* { dg-error "cast specifies function type" } */
|
||||
(_Sat long long _Accum ()) Sllap; /* { dg-error "cast specifies function type" } */
|
||||
(_Sat unsigned short _Accum ()) Susap; /* { dg-error "cast specifies function type" } */
|
||||
(_Sat unsigned _Accum ()) Suap; /* { dg-error "cast specifies function type" } */
|
||||
(_Sat unsigned long _Accum ()) Sulap; /* { dg-error "cast specifies function type" } */
|
||||
(_Sat unsigned long long _Accum ()) Sullap; /* { dg-error "cast specifies function type" } */
|
||||
|
||||
(struct ssf) sf; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sf) f; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct slf) lf; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sllf) llf; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct susf) usf; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct suf) uf; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sulf) ulf; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sullf) ullf; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sSsf) Ssf; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sSf) Sf; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sSlf) Slf; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sSllf) Sllf; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sSusf) Susf; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sSuf) Suf; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sSulf) Sulf; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sSullf) Sullf; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct ssa) sa; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sa) a; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sla) la; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct slla) lla; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct susa) usa; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sua) ua; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sula) ula; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sulla) ulla; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sSsa) Ssa; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sSa) Sa; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sSla) Sla; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sSlla) Slla; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sSusa) Susa; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sSua) Sua; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sSula) Sula; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
(struct sSulla) Sulla; /* { dg-error "conversion to non-scalar type requested" } */
|
||||
|
||||
(union usf) sf;
|
||||
(union uf) f;
|
||||
(union ulf) lf;
|
||||
(union ullf) llf;
|
||||
(union uusf) usf;
|
||||
(union uuf) uf;
|
||||
(union uulf) ulf;
|
||||
(union uullf) ullf;
|
||||
(union uSsf) Ssf;
|
||||
(union uSf) Sf;
|
||||
(union uSlf) Slf;
|
||||
(union uSllf) Sllf;
|
||||
(union uSusf) Susf;
|
||||
(union uSuf) Suf;
|
||||
(union uSulf) Sulf;
|
||||
(union uSullf) Sullf;
|
||||
(union usa) sa;
|
||||
(union ua) a;
|
||||
(union ula) la;
|
||||
(union ulla) lla;
|
||||
(union uusa) usa;
|
||||
(union uua) ua;
|
||||
(union uula) ula;
|
||||
(union uulla) ulla;
|
||||
(union uSsa) Ssa;
|
||||
(union uSa) Sa;
|
||||
(union uSla) Sla;
|
||||
(union uSlla) Slla;
|
||||
(union uSusa) Susa;
|
||||
(union uSua) Sua;
|
||||
(union uSula) Sula;
|
||||
(union uSulla) Sulla;
|
||||
|
||||
(union usf) f; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) lf; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) llf; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) usf; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) uf; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) ulf; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) ullf; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) Ssf; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) Sf; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) Slf; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) Sllf; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) Susf; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) Suf; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) Sulf; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) Sullf; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) sa; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) a; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) la; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) lla; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) usa; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) ua; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) ula; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) ulla; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) Ssa; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) Sa; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) Sla; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) Slla; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) Susa; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) Sua; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) Sula; /* { dg-error "cast to union type from type not present in union" } */
|
||||
(union usf) Sulla; /* { dg-error "cast to union type from type not present in union" } */
|
||||
|
||||
(short _Fract) assf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Fract) asf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(long _Fract) aslf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(long long _Fract) asllf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(unsigned short _Fract) asusf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(unsigned _Fract) asuf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(unsigned long _Fract) asulf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(unsigned long long _Fract) asullf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat short _Fract) asSsf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat _Fract) asSf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat long _Fract) asSlf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat long long _Fract) asSllf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat unsigned short _Fract) asSusf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat unsigned _Fract) asSuf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat unsigned long _Fract) asSulf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat unsigned long long _Fract) asSullf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(short _Accum) assa; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Accum) asa; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(long _Accum) asla; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(long long _Accum) aslla; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(unsigned short _Accum) asusa; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(unsigned _Accum) asua; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(unsigned long _Accum) asula; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(unsigned long long _Accum) asulla; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat short _Accum) asSsa; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat _Accum) asSa; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat long _Accum) asSla; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat long long _Accum) asSlla; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat unsigned short _Accum) asSusa; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat unsigned _Accum) asSua; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat unsigned long _Accum) asSula; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat unsigned long long _Accum) asSulla; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
|
||||
(short _Fract) ausf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Fract) auf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(long _Fract) aulf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(long long _Fract) aullf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(unsigned short _Fract) auusf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(unsigned _Fract) auuf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(unsigned long _Fract) auulf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(unsigned long long _Fract) auullf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat short _Fract) auSsf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat _Fract) auSf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat long _Fract) auSlf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat long long _Fract) auSllf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat unsigned short _Fract) auSusf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat unsigned _Fract) auSuf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat unsigned long _Fract) auSulf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat unsigned long long _Fract) auSullf; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(short _Accum) ausa; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Accum) aua; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(long _Accum) aula; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(long long _Accum) aulla; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(unsigned short _Accum) auusa; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(unsigned _Accum) auua; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(unsigned long _Accum) auula; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(unsigned long long _Accum) auulla; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat short _Accum) auSsa; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat _Accum) auSa; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat long _Accum) auSla; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat long long _Accum) auSlla; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat unsigned short _Accum) auSusa; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat unsigned _Accum) auSua; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat unsigned long _Accum) auSula; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
(_Sat unsigned long long _Accum) auSulla; /* { dg-error "aggregate value used where a fixed-point was expected" } */
|
||||
}
|
106
gcc/testsuite/gcc.dg/fixed-point/composite-type.c
Normal file
106
gcc/testsuite/gcc.dg/fixed-point/composite-type.c
Normal file
@ -0,0 +1,106 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu99 -O -Wall" } */
|
||||
|
||||
/* C99 6.2.7: Compatible type and composite type. */
|
||||
|
||||
#define FIXED_POINT_COMPOSITE_DECL(TYPE,NAME) \
|
||||
TYPE g1_##NAME(); \
|
||||
TYPE g2_##NAME(); \
|
||||
TYPE (*h1_##NAME)[2]; \
|
||||
TYPE (*h2_##NAME)[3]; \
|
||||
TYPE (*h3_##NAME)[4]; \
|
||||
TYPE f1_##NAME(TYPE(*)()); \
|
||||
TYPE f1_##NAME(TYPE(*)(TYPE*)); \
|
||||
TYPE f1_##NAME (TYPE(*g)(TYPE*)) \
|
||||
{ \
|
||||
TYPE NAME; \
|
||||
NAME = ((TYPE (*) (TYPE*)) g)(&NAME); \
|
||||
NAME = ((TYPE (*) ()) g); \
|
||||
return NAME; \
|
||||
} \
|
||||
TYPE f2_##NAME(TYPE(*)[]); \
|
||||
TYPE f2_##NAME(TYPE(*)[3]);
|
||||
|
||||
#define FIXED_POINT_COMPOSITE_TEST(TYPE, NAME) \
|
||||
do \
|
||||
{ \
|
||||
TYPE NAME; \
|
||||
NAME = f1_##NAME(g1_##NAME); \
|
||||
NAME = f1_##NAME(g2_##NAME); \
|
||||
NAME = f2_##NAME(h1_##NAME); \
|
||||
NAME = f2_##NAME(h2_##NAME); \
|
||||
NAME = f2_##NAME(h3_##NAME); \
|
||||
} while(0)
|
||||
|
||||
FIXED_POINT_COMPOSITE_DECL(short _Fract, sf); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(_Fract, f); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(long _Fract, lf); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(long long _Fract, llf); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(unsigned short _Fract, usf); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(unsigned _Fract, uf); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(unsigned long _Fract, ulf); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(unsigned long long _Fract, ullf); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(_Sat short _Fract, Ssf); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(_Sat _Fract, Sf); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(_Sat long _Fract, Slf); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(_Sat long long _Fract, Sllf); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(_Sat unsigned short _Fract, Susf); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(_Sat unsigned _Fract, Suf); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(_Sat unsigned long _Fract, Sulf); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(_Sat unsigned long long _Fract, Sullf); /* { dg-error "incompatible types in assignment" } */
|
||||
|
||||
FIXED_POINT_COMPOSITE_DECL(short _Accum, sk); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(_Accum, k); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(long _Accum, lk); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(long long _Accum, llk); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(unsigned short _Accum, usk); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(unsigned _Accum, uk); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(unsigned long _Accum, ulk); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(unsigned long long _Accum, ullk); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(_Sat short _Accum, Ssk); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(_Sat _Accum, Sk); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(_Sat long _Accum, Slk); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(_Sat long long _Accum, Sllk); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(_Sat unsigned short _Accum, Susk); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(_Sat unsigned _Accum, Suk); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(_Sat unsigned long _Accum, Sulk); /* { dg-error "incompatible types in assignment" } */
|
||||
FIXED_POINT_COMPOSITE_DECL(_Sat unsigned long long _Accum, Sullk); /* { dg-error "incompatible types in assignment" } */
|
||||
|
||||
int main()
|
||||
{
|
||||
FIXED_POINT_COMPOSITE_TEST(short _Fract, sf); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(_Fract, f); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(long _Fract, lf); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(long long _Fract, llf); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(unsigned short _Fract, usf); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(unsigned _Fract, uf); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(unsigned long _Fract, ulf); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(unsigned long long _Fract, ullf); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(_Sat short _Fract, Ssf); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(_Sat _Fract, Sf); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(_Sat long _Fract, Slf); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(_Sat long long _Fract, Sllf); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(_Sat unsigned short _Fract, Susf); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(_Sat unsigned _Fract, Suf); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(_Sat unsigned long _Fract, Sulf); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(_Sat unsigned long long _Fract, Sullf); /* { dg-warning "incompatible pointer type" } */
|
||||
|
||||
FIXED_POINT_COMPOSITE_TEST(short _Accum, sk); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(_Accum, k); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(long _Accum, lk); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(long long _Accum, llk); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(unsigned short _Accum, usk); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(unsigned _Accum, uk); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(unsigned long _Accum, ulk); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(unsigned long long _Accum, ullk); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(_Sat short _Accum, Ssk); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(_Sat _Accum, Sk); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(_Sat long _Accum, Slk); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(_Sat long long _Accum, Sllk); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(_Sat unsigned short _Accum, Susk); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(_Sat unsigned _Accum, Suk); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(_Sat unsigned long _Accum, Sulk); /* { dg-warning "incompatible pointer type" } */
|
||||
FIXED_POINT_COMPOSITE_TEST(_Sat unsigned long long _Accum, Sullk); /* { dg-warning "incompatible pointer type" } */
|
||||
|
||||
return 0;
|
||||
}
|
36
gcc/testsuite/gcc.dg/fixed-point/const-1.c
Normal file
36
gcc/testsuite/gcc.dg/fixed-point/const-1.c
Normal file
@ -0,0 +1,36 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* N1169 6.4.4 - Constants.
|
||||
|
||||
Check if the constant 1 is ok. */
|
||||
|
||||
short _Fract sf = 1.0hr;
|
||||
_Fract f = 1.0r;
|
||||
long _Fract lf = 1.0lr;
|
||||
long long _Fract llf = 1.0llr;
|
||||
|
||||
unsigned short _Fract usf = 1.0uhr;
|
||||
unsigned _Fract uf = 1.0ur;
|
||||
unsigned long _Fract ulf = 1.0ulr;
|
||||
unsigned long long _Fract ullf = 1.0ullr;
|
||||
|
||||
short _Fract sfF = 1.0; /* { dg-warning "overflow" } */
|
||||
_Fract fF = 1.0; /* { dg-warning "overflow" } */
|
||||
long _Fract lfF = 1.0; /* { dg-warning "overflow" } */
|
||||
long long _Fract llfF = 1.0; /* { dg-warning "overflow" } */
|
||||
|
||||
unsigned short _Fract usfF = 1.0; /* { dg-warning "overflow" } */
|
||||
unsigned _Fract ufF = 1.0; /* { dg-warning "overflow" } */
|
||||
unsigned long _Fract ulfF = 1.0; /* { dg-warning "overflow" } */
|
||||
unsigned long long _Fract ullfF = 1.0; /* { dg-warning "overflow" } */
|
||||
|
||||
short _Fract sfI = 1; /* { dg-warning "overflow" } */
|
||||
_Fract fI = 1; /* { dg-warning "overflow" } */
|
||||
long _Fract lfI = 1; /* { dg-warning "overflow" } */
|
||||
long long _Fract llfI = 1; /* { dg-warning "overflow" } */
|
||||
|
||||
unsigned short _Fract usfI = 1; /* { dg-warning "overflow" } */
|
||||
unsigned _Fract ufI = 1; /* { dg-warning "overflow" } */
|
||||
unsigned long _Fract ulfI = 1; /* { dg-warning "overflow" } */
|
||||
unsigned long long _Fract ullfI = 1; /* { dg-warning "overflow" } */
|
28
gcc/testsuite/gcc.dg/fixed-point/constant.c
Normal file
28
gcc/testsuite/gcc.dg/fixed-point/constant.c
Normal file
@ -0,0 +1,28 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* N1169 6.4.4.2a - Fixed-point constants (NEW CLAUSE).
|
||||
|
||||
Check if fixed-point constants are ok. */
|
||||
|
||||
_Accum k0 = 0k;
|
||||
_Accum k1 = 9999.0e0k;
|
||||
_Accum k2 = 9999.0k;
|
||||
_Accum k3 = 9999k;
|
||||
_Accum k4 = 9999e0k;
|
||||
_Accum k5 = 09999k;
|
||||
_Accum k6 = 09999e0k;
|
||||
_Accum k7 = 09999.0e0k;
|
||||
_Accum k8 = 09999.0k;
|
||||
_Accum k9 = 0x270fp0k;
|
||||
_Accum k10 = 0x270f.0p0k;
|
||||
|
||||
_Fract r0 = 0r;
|
||||
_Fract r1 = 0e0r;
|
||||
_Fract r2 = 0.0e0r;
|
||||
_Fract r3 = 0.1e0r;
|
||||
_Fract r4 = 0.0r;
|
||||
_Fract r5 = 0.1r;
|
||||
_Fract r6 = 0x0p0r;
|
||||
_Fract r7 = 0x0.0p0r;
|
||||
_Fract r8 = 0x0.1p0r;
|
26
gcc/testsuite/gcc.dg/fixed-point/constants-pedantic.c
Normal file
26
gcc/testsuite/gcc.dg/fixed-point/constants-pedantic.c
Normal file
@ -0,0 +1,26 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu99 -pedantic" } */
|
||||
|
||||
/* N1169 6.4.4.2a - Fixed-point constants (NEW CLAUSE). */
|
||||
|
||||
_Accum k0 = 0k; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Accum k1 = 9999.0e0k; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Accum k2 = 9999.0k; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Accum k3 = 9999k; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Accum k4 = 9999e0k; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Accum k5 = 09999k; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Accum k6 = 09999e0k; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Accum k7 = 09999.0e0k; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Accum k8 = 09999.0k; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Accum k9 = 0x270fp0k; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Accum k10 = 0x270f.0p0k; /* { dg-warning "GCC extension|ISO C" } */
|
||||
|
||||
_Fract r0 = 0r; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Fract r1 = 0e0r; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Fract r2 = 0.0e0r; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Fract r3 = 0.1e0r; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Fract r4 = 0.0r; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Fract r5 = 0.1r; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Fract r6 = 0x0p0r; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Fract r7 = 0x0.0p0r; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Fract r8 = 0x0.1p0r; /* { dg-warning "GCC extension|ISO C" } */
|
432
gcc/testsuite/gcc.dg/fixed-point/convert.c
Normal file
432
gcc/testsuite/gcc.dg/fixed-point/convert.c
Normal file
@ -0,0 +1,432 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-std=gnu99 -O0" } */
|
||||
|
||||
/* C99 6.3 Conversions.
|
||||
|
||||
Check conversions involving fixed-point. */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
/* Fixed-point to fixed-point. */
|
||||
#define CONV(TYPE1,POSTFIX1,TYPE2,POSTFIX2) \
|
||||
{ \
|
||||
TYPE1 a = 0.5 ## POSTFIX1; \
|
||||
TYPE2 b = a; \
|
||||
if (b != 0.5 ## POSTFIX2) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
/* TYPE1 with VALUE1 to TYPE2 with VALUE2. */
|
||||
#define CONV2(TYPE1,VALUE1,TYPE2,VALUE2) \
|
||||
{ \
|
||||
TYPE1 a = VALUE1; \
|
||||
TYPE2 b = a; \
|
||||
if (b != VALUE2) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
/* Fixed-point to integer, and integer to fixed-point. */
|
||||
#define CONV_INT(TYPE1,POSTFIX1,TYPE2) \
|
||||
{ \
|
||||
TYPE1 a = 0.5 ## POSTFIX1; \
|
||||
TYPE2 b = a; \
|
||||
TYPE2 c = 0; \
|
||||
TYPE1 d = c; \
|
||||
if (b != 0) \
|
||||
abort(); \
|
||||
if (d != 0.0 ## POSTFIX1) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
/* Signed fixed-point to integer. */
|
||||
#define CONV_INT2(TYPE1,POSTFIX1,TYPE2) \
|
||||
{ \
|
||||
TYPE1 a = -0.5 ## POSTFIX1; \
|
||||
TYPE2 b = a; \
|
||||
if (b != 0) \
|
||||
abort(); \
|
||||
a = -0.0 ## POSTFIX1; \
|
||||
b = a; \
|
||||
if (b != 0) \
|
||||
abort(); \
|
||||
a = +0.0 ## POSTFIX1; \
|
||||
b = a; \
|
||||
if (b != 0) \
|
||||
abort(); \
|
||||
a = +0.1 ## POSTFIX1; \
|
||||
b = a; \
|
||||
if (b != 0) \
|
||||
abort(); \
|
||||
a = -0.1 ## POSTFIX1; \
|
||||
b = a; \
|
||||
if (b != 0) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
/* Signed fixed-point to signed integer. */
|
||||
#define CONV_INT3(TYPE1,POSTFIX1,TYPE2) \
|
||||
{ \
|
||||
TYPE1 a = -0.5 ## POSTFIX1 - 0.5 ## POSTFIX1; \
|
||||
TYPE2 b = a; \
|
||||
if (b != -1) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
/* Fixed-point to floating-point, and floating-point to fixed-point. */
|
||||
#define CONV_FLOAT(TYPE1,POSTFIX1,TYPE2) \
|
||||
{ \
|
||||
TYPE1 a = 0.5 ## POSTFIX1; \
|
||||
TYPE2 b = a; \
|
||||
TYPE2 c = 0.25; \
|
||||
TYPE1 d = c; \
|
||||
if (b != 0.5) \
|
||||
abort(); \
|
||||
if (d != 0.25 ## POSTFIX1) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
/* Accum to integer, and integer to accum. */
|
||||
#define CONV_ACCUM_INT(TYPE1,POSTFIX1,TYPE2) \
|
||||
{ \
|
||||
TYPE1 a = 99.12345 ## POSTFIX1; \
|
||||
TYPE2 b = a; \
|
||||
TYPE2 c = 123; \
|
||||
TYPE1 d = c; \
|
||||
if (b != 99) \
|
||||
abort(); \
|
||||
if (d != 123.0 ## POSTFIX1) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
#define ALL_CONV(TYPE,POSTFIX) \
|
||||
CONV(TYPE, POSTFIX, short _Fract, hr) \
|
||||
CONV(TYPE, POSTFIX, _Fract, r) \
|
||||
CONV(TYPE, POSTFIX, long _Fract, lr) \
|
||||
CONV(TYPE, POSTFIX, long long _Fract, llr) \
|
||||
CONV(TYPE, POSTFIX, unsigned short _Fract, uhr) \
|
||||
CONV(TYPE, POSTFIX, unsigned _Fract, ur) \
|
||||
CONV(TYPE, POSTFIX, unsigned long _Fract, ulr) \
|
||||
CONV(TYPE, POSTFIX, unsigned long long _Fract, ullr) \
|
||||
CONV(TYPE, POSTFIX, short _Accum, hk) \
|
||||
CONV(TYPE, POSTFIX, _Accum, k) \
|
||||
CONV(TYPE, POSTFIX, long _Accum, lk) \
|
||||
CONV(TYPE, POSTFIX, long long _Accum, llk) \
|
||||
CONV(TYPE, POSTFIX, unsigned short _Accum, uhk) \
|
||||
CONV(TYPE, POSTFIX, unsigned _Accum, uk) \
|
||||
CONV(TYPE, POSTFIX, unsigned long _Accum, ulk) \
|
||||
CONV(TYPE, POSTFIX, unsigned long long _Accum, ullk) \
|
||||
CONV(_Sat TYPE, POSTFIX, short _Fract, hr) \
|
||||
CONV(_Sat TYPE, POSTFIX, _Fract, r) \
|
||||
CONV(_Sat TYPE, POSTFIX, long _Fract, lr) \
|
||||
CONV(_Sat TYPE, POSTFIX, long long _Fract, llr) \
|
||||
CONV(_Sat TYPE, POSTFIX, unsigned short _Fract, uhr) \
|
||||
CONV(_Sat TYPE, POSTFIX, unsigned _Fract, ur) \
|
||||
CONV(_Sat TYPE, POSTFIX, unsigned long _Fract, ulr) \
|
||||
CONV(_Sat TYPE, POSTFIX, unsigned long long _Fract, ullr) \
|
||||
CONV(_Sat TYPE, POSTFIX, short _Accum, hk) \
|
||||
CONV(_Sat TYPE, POSTFIX, _Accum, k) \
|
||||
CONV(_Sat TYPE, POSTFIX, long _Accum, lk) \
|
||||
CONV(_Sat TYPE, POSTFIX, long long _Accum, llk) \
|
||||
CONV(_Sat TYPE, POSTFIX, unsigned short _Accum, uhk) \
|
||||
CONV(_Sat TYPE, POSTFIX, unsigned _Accum, uk) \
|
||||
CONV(_Sat TYPE, POSTFIX, unsigned long _Accum, ulk) \
|
||||
CONV(_Sat TYPE, POSTFIX, unsigned long long _Accum, ullk) \
|
||||
CONV(TYPE, POSTFIX, _Sat short _Fract, hr) \
|
||||
CONV(TYPE, POSTFIX, _Sat _Fract, r) \
|
||||
CONV(TYPE, POSTFIX, _Sat long _Fract, lr) \
|
||||
CONV(TYPE, POSTFIX, _Sat long long _Fract, llr) \
|
||||
CONV(TYPE, POSTFIX, _Sat unsigned short _Fract, uhr) \
|
||||
CONV(TYPE, POSTFIX, _Sat unsigned _Fract, ur) \
|
||||
CONV(TYPE, POSTFIX, _Sat unsigned long _Fract, ulr) \
|
||||
CONV(TYPE, POSTFIX, _Sat unsigned long long _Fract, ullr) \
|
||||
CONV(TYPE, POSTFIX, _Sat short _Accum, hk) \
|
||||
CONV(TYPE, POSTFIX, _Sat _Accum, k) \
|
||||
CONV(TYPE, POSTFIX, _Sat long _Accum, lk) \
|
||||
CONV(TYPE, POSTFIX, _Sat long long _Accum, llk) \
|
||||
CONV(TYPE, POSTFIX, _Sat unsigned short _Accum, uhk) \
|
||||
CONV(TYPE, POSTFIX, _Sat unsigned _Accum, uk) \
|
||||
CONV(TYPE, POSTFIX, _Sat unsigned long _Accum, ulk) \
|
||||
CONV(TYPE, POSTFIX, _Sat unsigned long long _Accum, ullk) \
|
||||
CONV_INT(TYPE, POSTFIX, signed char) \
|
||||
CONV_INT(TYPE, POSTFIX, short) \
|
||||
CONV_INT(TYPE, POSTFIX, int) \
|
||||
CONV_INT(TYPE, POSTFIX, long) \
|
||||
CONV_INT(TYPE, POSTFIX, long long) \
|
||||
CONV_INT(TYPE, POSTFIX, unsigned char) \
|
||||
CONV_INT(TYPE, POSTFIX, unsigned short) \
|
||||
CONV_INT(TYPE, POSTFIX, unsigned int) \
|
||||
CONV_INT(TYPE, POSTFIX, unsigned long) \
|
||||
CONV_INT(TYPE, POSTFIX, unsigned long long) \
|
||||
CONV_INT(_Sat TYPE, POSTFIX, signed char) \
|
||||
CONV_INT(_Sat TYPE, POSTFIX, short) \
|
||||
CONV_INT(_Sat TYPE, POSTFIX, int) \
|
||||
CONV_INT(_Sat TYPE, POSTFIX, long) \
|
||||
CONV_INT(_Sat TYPE, POSTFIX, long long) \
|
||||
CONV_INT(_Sat TYPE, POSTFIX, unsigned char) \
|
||||
CONV_INT(_Sat TYPE, POSTFIX, unsigned short) \
|
||||
CONV_INT(_Sat TYPE, POSTFIX, unsigned int) \
|
||||
CONV_INT(_Sat TYPE, POSTFIX, unsigned long) \
|
||||
CONV_INT(_Sat TYPE, POSTFIX, unsigned long long) \
|
||||
CONV_FLOAT(TYPE, POSTFIX, float) \
|
||||
CONV_FLOAT(TYPE, POSTFIX, double) \
|
||||
CONV_FLOAT(_Sat TYPE, POSTFIX, float) \
|
||||
CONV_FLOAT(_Sat TYPE, POSTFIX, double)
|
||||
|
||||
#define ALL_ACCUM_CONV(TYPE,POSTFIX) \
|
||||
CONV_ACCUM_INT(TYPE, POSTFIX, signed char) \
|
||||
CONV_ACCUM_INT(TYPE, POSTFIX, short) \
|
||||
CONV_ACCUM_INT(TYPE, POSTFIX, int) \
|
||||
CONV_ACCUM_INT(TYPE, POSTFIX, long) \
|
||||
CONV_ACCUM_INT(TYPE, POSTFIX, long long) \
|
||||
CONV_ACCUM_INT(TYPE, POSTFIX, unsigned char) \
|
||||
CONV_ACCUM_INT(TYPE, POSTFIX, unsigned short) \
|
||||
CONV_ACCUM_INT(TYPE, POSTFIX, unsigned int) \
|
||||
CONV_ACCUM_INT(TYPE, POSTFIX, unsigned long) \
|
||||
CONV_ACCUM_INT(TYPE, POSTFIX, unsigned long long) \
|
||||
CONV_ACCUM_INT(_Sat TYPE, POSTFIX, signed char) \
|
||||
CONV_ACCUM_INT(_Sat TYPE, POSTFIX, short) \
|
||||
CONV_ACCUM_INT(_Sat TYPE, POSTFIX, int) \
|
||||
CONV_ACCUM_INT(_Sat TYPE, POSTFIX, long) \
|
||||
CONV_ACCUM_INT(_Sat TYPE, POSTFIX, long long) \
|
||||
CONV_ACCUM_INT(_Sat TYPE, POSTFIX, unsigned char) \
|
||||
CONV_ACCUM_INT(_Sat TYPE, POSTFIX, unsigned short) \
|
||||
CONV_ACCUM_INT(_Sat TYPE, POSTFIX, unsigned int) \
|
||||
CONV_ACCUM_INT(_Sat TYPE, POSTFIX, unsigned long) \
|
||||
CONV_ACCUM_INT(_Sat TYPE, POSTFIX, unsigned long long)
|
||||
|
||||
#define NEG_CONV(TYPE,POSTFIX) \
|
||||
CONV_INT2(TYPE, POSTFIX, signed char) \
|
||||
CONV_INT2(TYPE, POSTFIX, short) \
|
||||
CONV_INT2(TYPE, POSTFIX, int) \
|
||||
CONV_INT2(TYPE, POSTFIX, long) \
|
||||
CONV_INT2(TYPE, POSTFIX, long long) \
|
||||
CONV_INT2(TYPE, POSTFIX, unsigned char) \
|
||||
CONV_INT2(TYPE, POSTFIX, unsigned short) \
|
||||
CONV_INT2(TYPE, POSTFIX, unsigned int) \
|
||||
CONV_INT2(TYPE, POSTFIX, unsigned long) \
|
||||
CONV_INT2(TYPE, POSTFIX, unsigned long long) \
|
||||
CONV_INT3(TYPE, POSTFIX, signed char) \
|
||||
CONV_INT3(TYPE, POSTFIX, short) \
|
||||
CONV_INT3(TYPE, POSTFIX, int) \
|
||||
CONV_INT3(TYPE, POSTFIX, long) \
|
||||
CONV_INT3(TYPE, POSTFIX, long long)
|
||||
|
||||
/* Signed accum to _Sat unsigned/signed fract. */
|
||||
#define SAT_CONV1(TYPE, POSTFIX) \
|
||||
CONV2(TYPE, 3.2 ## POSTFIX, _Sat short _Fract, 1.0hr) \
|
||||
CONV2(TYPE, -3.2 ## POSTFIX, _Sat short _Fract, -0.5hr - 0.5hr) \
|
||||
CONV2(TYPE, 3.2 ## POSTFIX, _Sat _Fract, 1.0r) \
|
||||
CONV2(TYPE, -3.2 ## POSTFIX, _Sat _Fract, -0.5r - 0.5r) \
|
||||
CONV2(TYPE, 3.2 ## POSTFIX, _Sat long _Fract, 1.0lr) \
|
||||
CONV2(TYPE, -3.2 ## POSTFIX, _Sat long _Fract, -0.5lr - 0.5lr) \
|
||||
CONV2(TYPE, 3.2 ## POSTFIX, _Sat long long _Fract, 1.0llr) \
|
||||
CONV2(TYPE, -3.2 ## POSTFIX, _Sat long long _Fract, -0.5llr - 0.5llr) \
|
||||
CONV2(TYPE, 3.2 ## POSTFIX, _Sat unsigned short _Fract, 1.0uhr) \
|
||||
CONV2(TYPE, -3.2 ## POSTFIX, _Sat unsigned short _Fract, 0.0uhr) \
|
||||
CONV2(TYPE, 3.2 ## POSTFIX, _Sat unsigned _Fract, 1.0ur) \
|
||||
CONV2(TYPE, -3.2 ## POSTFIX, _Sat unsigned _Fract, 0.0ur) \
|
||||
CONV2(TYPE, 3.2 ## POSTFIX, _Sat unsigned long _Fract, 1.0ulr) \
|
||||
CONV2(TYPE, -3.2 ## POSTFIX, _Sat unsigned long _Fract, 0.0ulr) \
|
||||
CONV2(TYPE, 3.2 ## POSTFIX, _Sat unsigned long long _Fract, 1.0ullr) \
|
||||
CONV2(TYPE, -3.2 ## POSTFIX, _Sat unsigned long long _Fract, 0.0ullr) \
|
||||
CONV2(TYPE, 1.0 ## POSTFIX, _Sat short _Fract, 1.0hr) \
|
||||
CONV2(TYPE, -1.0 ## POSTFIX, _Sat short _Fract, -0.5hr - 0.5hr) \
|
||||
CONV2(TYPE, 1.0 ## POSTFIX, _Sat _Fract, 1.0r) \
|
||||
CONV2(TYPE, -1.0 ## POSTFIX, _Sat _Fract, -0.5r - 0.5r) \
|
||||
CONV2(TYPE, 1.0 ## POSTFIX, _Sat long _Fract, 1.0lr) \
|
||||
CONV2(TYPE, -1.0 ## POSTFIX, _Sat long _Fract, -0.5lr - 0.5lr) \
|
||||
CONV2(TYPE, 1.0 ## POSTFIX, _Sat long long _Fract, 1.0llr) \
|
||||
CONV2(TYPE, -1.0 ## POSTFIX, _Sat long long _Fract, -0.5llr - 0.5llr) \
|
||||
CONV2(TYPE, 1.0 ## POSTFIX, _Sat unsigned short _Fract, 1.0uhr) \
|
||||
CONV2(TYPE, -1.0 ## POSTFIX, _Sat unsigned short _Fract, 0.0uhr) \
|
||||
CONV2(TYPE, 1.0 ## POSTFIX, _Sat unsigned _Fract, 1.0ur) \
|
||||
CONV2(TYPE, -1.0 ## POSTFIX, _Sat unsigned _Fract, 0.0ur) \
|
||||
CONV2(TYPE, 1.0 ## POSTFIX, _Sat unsigned long _Fract, 1.0ulr) \
|
||||
CONV2(TYPE, -1.0 ## POSTFIX, _Sat unsigned long _Fract, 0.0ulr) \
|
||||
CONV2(TYPE, 1.0 ## POSTFIX, _Sat unsigned long long _Fract, 1.0ullr) \
|
||||
CONV2(TYPE, -1.0 ## POSTFIX, _Sat unsigned long long _Fract, 0.0ullr)
|
||||
|
||||
/* Unsigned accum to _Sat unsigned/signed fract. */
|
||||
#define SAT_CONV2(TYPE, POSTFIX) \
|
||||
CONV2(TYPE, 3.2 ## POSTFIX, _Sat short _Fract, 1.0hr) \
|
||||
CONV2(TYPE, 3.2 ## POSTFIX, _Sat _Fract, 1.0r) \
|
||||
CONV2(TYPE, 3.2 ## POSTFIX, _Sat long _Fract, 1.0lr) \
|
||||
CONV2(TYPE, 3.2 ## POSTFIX, _Sat long long _Fract, 1.0llr) \
|
||||
CONV2(TYPE, 3.2 ## POSTFIX, _Sat unsigned short _Fract, 1.0uhr) \
|
||||
CONV2(TYPE, 3.2 ## POSTFIX, _Sat unsigned _Fract, 1.0ur) \
|
||||
CONV2(TYPE, 3.2 ## POSTFIX, _Sat unsigned long _Fract, 1.0ulr) \
|
||||
CONV2(TYPE, 3.2 ## POSTFIX, _Sat unsigned long long _Fract, 1.0ullr) \
|
||||
CONV2(TYPE, 1.0 ## POSTFIX, _Sat short _Fract, 1.0hr) \
|
||||
CONV2(TYPE, 1.0 ## POSTFIX, _Sat _Fract, 1.0r) \
|
||||
CONV2(TYPE, 1.0 ## POSTFIX, _Sat long _Fract, 1.0lr) \
|
||||
CONV2(TYPE, 1.0 ## POSTFIX, _Sat long long _Fract, 1.0llr) \
|
||||
CONV2(TYPE, 1.0 ## POSTFIX, _Sat unsigned short _Fract, 1.0uhr) \
|
||||
CONV2(TYPE, 1.0 ## POSTFIX, _Sat unsigned _Fract, 1.0ur) \
|
||||
CONV2(TYPE, 1.0 ## POSTFIX, _Sat unsigned long _Fract, 1.0ulr) \
|
||||
CONV2(TYPE, 1.0 ## POSTFIX, _Sat unsigned long long _Fract, 1.0ullr)
|
||||
|
||||
/* Signed fract to _Sat unsigned fract. */
|
||||
#define SAT_CONV3(TYPE, POSTFIX) \
|
||||
CONV2(TYPE, -0.5 ## POSTFIX, _Sat unsigned short _Fract, 0.0uhr) \
|
||||
CONV2(TYPE, -0.5 ## POSTFIX, _Sat unsigned _Fract, 0.0ur) \
|
||||
CONV2(TYPE, -0.5 ## POSTFIX, _Sat unsigned long _Fract, 0.0ulr) \
|
||||
CONV2(TYPE, -0.5 ## POSTFIX, _Sat unsigned long long _Fract, 0.0ullr)
|
||||
|
||||
/* Signed integer to _Sat signed/unsigned fract. */
|
||||
#define SAT_CONV4(TYPE) \
|
||||
CONV2(TYPE, 100, _Sat short _Fract, 1.0hr) \
|
||||
CONV2(TYPE, -100, _Sat short _Fract, -0.5hr - 0.5hr) \
|
||||
CONV2(TYPE, 100, _Sat _Fract, 1.0r) \
|
||||
CONV2(TYPE, -100, _Sat _Fract, -0.5r - 0.5r) \
|
||||
CONV2(TYPE, 100, _Sat long _Fract, 1.0lr) \
|
||||
CONV2(TYPE, -100, _Sat long _Fract, -0.5lr - 0.5lr) \
|
||||
CONV2(TYPE, 100, _Sat long long _Fract, 1.0llr) \
|
||||
CONV2(TYPE, -100, _Sat long long _Fract, -0.5llr - 0.5llr) \
|
||||
CONV2(TYPE, 100, _Sat unsigned short _Fract, 1.0uhr) \
|
||||
CONV2(TYPE, -100, _Sat unsigned short _Fract, 0.0uhr) \
|
||||
CONV2(TYPE, 100, _Sat unsigned _Fract, 1.0ur) \
|
||||
CONV2(TYPE, -100, _Sat unsigned _Fract, 0.0ur) \
|
||||
CONV2(TYPE, 100, _Sat unsigned long _Fract, 1.0ulr) \
|
||||
CONV2(TYPE, -100, _Sat unsigned long _Fract, 0.0ulr) \
|
||||
CONV2(TYPE, 100, _Sat unsigned long long _Fract, 1.0ullr) \
|
||||
CONV2(TYPE, -100, _Sat unsigned long long _Fract, 0.0ullr) \
|
||||
CONV2(TYPE, 1, _Sat short _Fract, 1.0hr) \
|
||||
CONV2(TYPE, -1, _Sat short _Fract, -0.5hr - 0.5hr) \
|
||||
CONV2(TYPE, 1, _Sat _Fract, 1.0r) \
|
||||
CONV2(TYPE, -1, _Sat _Fract, -0.5r - 0.5r) \
|
||||
CONV2(TYPE, 1, _Sat long _Fract, 1.0lr) \
|
||||
CONV2(TYPE, -1, _Sat long _Fract, -0.5lr - 0.5lr) \
|
||||
CONV2(TYPE, 1, _Sat long long _Fract, 1.0llr) \
|
||||
CONV2(TYPE, -1, _Sat long long _Fract, -0.5llr - 0.5llr) \
|
||||
CONV2(TYPE, 1, _Sat unsigned short _Fract, 1.0uhr) \
|
||||
CONV2(TYPE, -1, _Sat unsigned short _Fract, 0.0uhr) \
|
||||
CONV2(TYPE, 1, _Sat unsigned _Fract, 1.0ur) \
|
||||
CONV2(TYPE, -1, _Sat unsigned _Fract, 0.0ur) \
|
||||
CONV2(TYPE, 1, _Sat unsigned long _Fract, 1.0ulr) \
|
||||
CONV2(TYPE, -1, _Sat unsigned long _Fract, 0.0ulr) \
|
||||
CONV2(TYPE, 1, _Sat unsigned long long _Fract, 1.0ullr) \
|
||||
CONV2(TYPE, -1, _Sat unsigned long long _Fract, 0.0ullr)
|
||||
|
||||
/* Unsigned integer to _Sat signed/unsigned fract. */
|
||||
#define SAT_CONV5(TYPE) \
|
||||
CONV2(TYPE, 100, _Sat short _Fract, 1.0hr) \
|
||||
CONV2(TYPE, 100, _Sat _Fract, 1.0r) \
|
||||
CONV2(TYPE, 100, _Sat long _Fract, 1.0lr) \
|
||||
CONV2(TYPE, 100, _Sat long long _Fract, 1.0llr) \
|
||||
CONV2(TYPE, 100, _Sat unsigned short _Fract, 1.0uhr) \
|
||||
CONV2(TYPE, 100, _Sat unsigned _Fract, 1.0ur) \
|
||||
CONV2(TYPE, 100, _Sat unsigned long _Fract, 1.0ulr) \
|
||||
CONV2(TYPE, 100, _Sat unsigned long long _Fract, 1.0ullr) \
|
||||
CONV2(TYPE, 1, _Sat short _Fract, 1.0hr) \
|
||||
CONV2(TYPE, 1, _Sat _Fract, 1.0r) \
|
||||
CONV2(TYPE, 1, _Sat long _Fract, 1.0lr) \
|
||||
CONV2(TYPE, 1, _Sat long long _Fract, 1.0llr) \
|
||||
CONV2(TYPE, 1, _Sat unsigned short _Fract, 1.0uhr) \
|
||||
CONV2(TYPE, 1, _Sat unsigned _Fract, 1.0ur) \
|
||||
CONV2(TYPE, 1, _Sat unsigned long _Fract, 1.0ulr) \
|
||||
CONV2(TYPE, 1, _Sat unsigned long long _Fract, 1.0ullr)
|
||||
|
||||
/* Floating-point to _Sat signed/unsigned fract. */
|
||||
#define SAT_CONV6(TYPE) \
|
||||
CONV2(TYPE, 100.0, _Sat short _Fract, 1.0hr) \
|
||||
CONV2(TYPE, -100.0, _Sat short _Fract, -0.5hr - 0.5hr) \
|
||||
CONV2(TYPE, 100.0, _Sat _Fract, 1.0r) \
|
||||
CONV2(TYPE, -100.0, _Sat _Fract, -0.5r - 0.5r) \
|
||||
CONV2(TYPE, 100.0, _Sat long _Fract, 1.0lr) \
|
||||
CONV2(TYPE, -100.0, _Sat long _Fract, -0.5lr - 0.5lr) \
|
||||
CONV2(TYPE, 100.0, _Sat long long _Fract, 1.0llr) \
|
||||
CONV2(TYPE, -100.0, _Sat long long _Fract, -0.5llr - 0.5llr) \
|
||||
CONV2(TYPE, 100.0, _Sat unsigned short _Fract, 1.0uhr) \
|
||||
CONV2(TYPE, -100.0, _Sat unsigned short _Fract, 0.0uhr) \
|
||||
CONV2(TYPE, 100.0, _Sat unsigned _Fract, 1.0ur) \
|
||||
CONV2(TYPE, -100.0, _Sat unsigned _Fract, 0.0ur) \
|
||||
CONV2(TYPE, 100.0, _Sat unsigned long _Fract, 1.0ulr) \
|
||||
CONV2(TYPE, -100.0, _Sat unsigned long _Fract, 0.0ulr) \
|
||||
CONV2(TYPE, 100.0, _Sat unsigned long long _Fract, 1.0ullr) \
|
||||
CONV2(TYPE, -100.0, _Sat unsigned long long _Fract, 0.0ullr) \
|
||||
CONV2(TYPE, 1.0, _Sat short _Fract, 1.0hr) \
|
||||
CONV2(TYPE, -1.0, _Sat short _Fract, -0.5hr - 0.5hr) \
|
||||
CONV2(TYPE, 1.0, _Sat _Fract, 1.0r) \
|
||||
CONV2(TYPE, -1.0, _Sat _Fract, -0.5r - 0.5r) \
|
||||
CONV2(TYPE, 1.0, _Sat long _Fract, 1.0lr) \
|
||||
CONV2(TYPE, -1.0, _Sat long _Fract, -0.5lr - 0.5lr) \
|
||||
CONV2(TYPE, 1.0, _Sat long long _Fract, 1.0llr) \
|
||||
CONV2(TYPE, -1.0, _Sat long long _Fract, -0.5llr - 0.5llr) \
|
||||
CONV2(TYPE, 1.0, _Sat unsigned short _Fract, 1.0uhr) \
|
||||
CONV2(TYPE, -1.0, _Sat unsigned short _Fract, 0.0uhr) \
|
||||
CONV2(TYPE, 1.0, _Sat unsigned _Fract, 1.0ur) \
|
||||
CONV2(TYPE, -1.0, _Sat unsigned _Fract, 0.0ur) \
|
||||
CONV2(TYPE, 1.0, _Sat unsigned long _Fract, 1.0ulr) \
|
||||
CONV2(TYPE, -1.0, _Sat unsigned long _Fract, 0.0ulr) \
|
||||
CONV2(TYPE, 1.0, _Sat unsigned long long _Fract, 1.0ullr) \
|
||||
CONV2(TYPE, -1.0, _Sat unsigned long long _Fract, 0.0ullr)
|
||||
|
||||
int main ()
|
||||
{
|
||||
ALL_CONV (short _Fract, hr);
|
||||
ALL_CONV (_Fract, r);
|
||||
ALL_CONV (long _Fract, lr);
|
||||
ALL_CONV (long long _Fract, llr);
|
||||
ALL_CONV (unsigned short _Fract, uhr);
|
||||
ALL_CONV (unsigned _Fract, ur);
|
||||
ALL_CONV (unsigned long _Fract, ulr);
|
||||
ALL_CONV (unsigned long long _Fract, ullr);
|
||||
ALL_CONV (short _Accum, hk);
|
||||
ALL_CONV (_Accum, k);
|
||||
ALL_CONV (long _Accum, lk);
|
||||
ALL_CONV (long long _Accum, llk);
|
||||
ALL_CONV (unsigned short _Accum, uhk);
|
||||
ALL_CONV (unsigned _Accum, uk);
|
||||
ALL_CONV (unsigned long _Accum, ulk);
|
||||
ALL_CONV (unsigned long long _Accum, ullk);
|
||||
|
||||
ALL_ACCUM_CONV (short _Accum, hk);
|
||||
ALL_ACCUM_CONV (_Accum, k);
|
||||
ALL_ACCUM_CONV (long _Accum, lk);
|
||||
ALL_ACCUM_CONV (long long _Accum, llk);
|
||||
ALL_ACCUM_CONV (unsigned short _Accum, uhk);
|
||||
ALL_ACCUM_CONV (unsigned _Accum, uk);
|
||||
ALL_ACCUM_CONV (unsigned long _Accum, ulk);
|
||||
ALL_ACCUM_CONV (unsigned long long _Accum, ullk);
|
||||
|
||||
NEG_CONV (short _Fract, hr);
|
||||
NEG_CONV (_Fract, r);
|
||||
NEG_CONV (long _Fract, lr);
|
||||
NEG_CONV (long long _Fract, llr);
|
||||
NEG_CONV (short _Accum, hk);
|
||||
NEG_CONV (_Accum, k);
|
||||
NEG_CONV (long _Accum, lk);
|
||||
NEG_CONV (long long _Accum, llk);
|
||||
|
||||
SAT_CONV1 (short _Accum, hk);
|
||||
SAT_CONV1 (_Accum, k);
|
||||
SAT_CONV1 (long _Accum, lk);
|
||||
SAT_CONV1 (long long _Accum, llk);
|
||||
|
||||
SAT_CONV2 (unsigned short _Accum, uhk);
|
||||
SAT_CONV2 (unsigned _Accum, uk);
|
||||
SAT_CONV2 (unsigned long _Accum, ulk);
|
||||
SAT_CONV2 (unsigned long long _Accum, ullk);
|
||||
|
||||
SAT_CONV3 (short _Fract, hr);
|
||||
SAT_CONV3 (_Fract, r);
|
||||
SAT_CONV3 (long _Fract, lr);
|
||||
SAT_CONV3 (long long _Fract, llr);
|
||||
|
||||
SAT_CONV4 (signed char);
|
||||
SAT_CONV4 (short);
|
||||
SAT_CONV4 (int);
|
||||
SAT_CONV4 (long);
|
||||
SAT_CONV4 (long long);
|
||||
|
||||
SAT_CONV5 (unsigned char);
|
||||
SAT_CONV5 (unsigned short);
|
||||
SAT_CONV5 (unsigned int);
|
||||
SAT_CONV5 (unsigned long);
|
||||
SAT_CONV5 (unsigned long long);
|
||||
|
||||
SAT_CONV6 (float);
|
||||
SAT_CONV6 (double);
|
||||
|
||||
return 0;
|
||||
}
|
158
gcc/testsuite/gcc.dg/fixed-point/define.c
Normal file
158
gcc/testsuite/gcc.dg/fixed-point/define.c
Normal file
@ -0,0 +1,158 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* N1169 7.18a.3 - Precision macros.
|
||||
|
||||
Check if defined fixed-point constants are ok. */
|
||||
|
||||
#include <stdfix.h>
|
||||
|
||||
short fract sf = SFRACT_MAX;
|
||||
fract f = FRACT_MAX;
|
||||
long fract lf = LFRACT_MAX;
|
||||
long long fract llf = LLFRACT_MAX;
|
||||
|
||||
unsigned short fract usf = USFRACT_MAX;
|
||||
unsigned fract uf = UFRACT_MAX;
|
||||
unsigned long fract ulf = ULFRACT_MAX;
|
||||
unsigned long long fract ullf = ULLFRACT_MAX;
|
||||
|
||||
sat short fract Ssf = SFRACT_MAX;
|
||||
sat fract Sf = FRACT_MAX;
|
||||
sat long fract Slf = LFRACT_MAX;
|
||||
sat long long fract Sllf = LLFRACT_MAX;
|
||||
|
||||
sat unsigned short fract Susf = USFRACT_MAX;
|
||||
sat unsigned fract Suf = UFRACT_MAX;
|
||||
sat unsigned long fract Sulf = ULFRACT_MAX;
|
||||
sat unsigned long long fract Sullf = ULLFRACT_MAX;
|
||||
|
||||
short fract sfm = SFRACT_MIN;
|
||||
fract fm = FRACT_MIN;
|
||||
long fract lfm = LFRACT_MIN;
|
||||
long long fract llfm = LLFRACT_MIN;
|
||||
|
||||
unsigned short fract usfm = USFRACT_MIN;
|
||||
unsigned fract ufm = UFRACT_MIN;
|
||||
unsigned long fract ulfm = ULFRACT_MIN;
|
||||
unsigned long long fract ullfm = ULLFRACT_MIN;
|
||||
|
||||
sat short fract Ssfm = SFRACT_MIN;
|
||||
sat fract Sfm = FRACT_MIN;
|
||||
sat long fract Slfm = LFRACT_MIN;
|
||||
sat long long fract Sllfm = LLFRACT_MIN;
|
||||
|
||||
sat unsigned short fract Susfm = USFRACT_MIN;
|
||||
sat unsigned fract Sufm = UFRACT_MIN;
|
||||
sat unsigned long fract Sulfm = ULFRACT_MIN;
|
||||
sat unsigned long long fract Sullfm = ULLFRACT_MIN;
|
||||
|
||||
short fract sfE = SFRACT_EPSILON;
|
||||
fract fE = FRACT_EPSILON;
|
||||
long fract lfE = LFRACT_EPSILON;
|
||||
long long fract llfE = LLFRACT_EPSILON;
|
||||
|
||||
unsigned short fract usfE = USFRACT_EPSILON;
|
||||
unsigned fract ufE = UFRACT_EPSILON;
|
||||
unsigned long fract ulfE = ULFRACT_EPSILON;
|
||||
unsigned long long fract ullfE = ULLFRACT_EPSILON;
|
||||
|
||||
sat short fract SsfE = SFRACT_EPSILON;
|
||||
sat fract SfE = FRACT_EPSILON;
|
||||
sat long fract SlfE = LFRACT_EPSILON;
|
||||
sat long long fract SllfE = LLFRACT_EPSILON;
|
||||
|
||||
sat unsigned short fract SusfE = USFRACT_EPSILON;
|
||||
sat unsigned fract SufE = UFRACT_EPSILON;
|
||||
sat unsigned long fract SulfE = ULFRACT_EPSILON;
|
||||
sat unsigned long long fract SullfE = ULLFRACT_EPSILON;
|
||||
|
||||
short accum sk = SACCUM_MAX;
|
||||
accum k = ACCUM_MAX;
|
||||
long accum lk = LACCUM_MAX;
|
||||
long long accum llk = LLACCUM_MAX;
|
||||
|
||||
unsigned short accum usk = USACCUM_MAX;
|
||||
unsigned accum uk = UACCUM_MAX;
|
||||
unsigned long accum ulk = ULACCUM_MAX;
|
||||
unsigned long long accum ullk = ULLACCUM_MAX;
|
||||
|
||||
sat short accum Ssk = SACCUM_MAX;
|
||||
sat accum Sk = ACCUM_MAX;
|
||||
sat long accum Slk = LACCUM_MAX;
|
||||
sat long long accum Sllk = LLACCUM_MAX;
|
||||
|
||||
sat unsigned short accum Susk = USACCUM_MAX;
|
||||
sat unsigned accum Suk = UACCUM_MAX;
|
||||
sat unsigned long accum Sulk = ULACCUM_MAX;
|
||||
sat unsigned long long accum Sullk = ULLACCUM_MAX;
|
||||
|
||||
short accum skm = SACCUM_MIN;
|
||||
accum km = ACCUM_MIN;
|
||||
long accum lkm = LACCUM_MIN;
|
||||
long long accum llkm = LLACCUM_MIN;
|
||||
|
||||
unsigned short accum uskm = USACCUM_MIN;
|
||||
unsigned accum ukm = UACCUM_MIN;
|
||||
unsigned long accum ulkm = ULACCUM_MIN;
|
||||
unsigned long long accum ullkm = ULLACCUM_MIN;
|
||||
|
||||
sat short accum Sskm = SACCUM_MIN;
|
||||
sat accum Skm = ACCUM_MIN;
|
||||
sat long accum Slkm = LACCUM_MIN;
|
||||
sat long long accum Sllkm = LLACCUM_MIN;
|
||||
|
||||
sat unsigned short accum Suskm = USACCUM_MIN;
|
||||
sat unsigned accum Sukm = UACCUM_MIN;
|
||||
sat unsigned long accum Sulkm = ULACCUM_MIN;
|
||||
sat unsigned long long accum Sullkm = ULLACCUM_MIN;
|
||||
|
||||
short accum skE = SACCUM_EPSILON;
|
||||
accum kE = ACCUM_EPSILON;
|
||||
long accum lkE = LACCUM_EPSILON;
|
||||
long long accum llkE = LLACCUM_EPSILON;
|
||||
|
||||
unsigned short accum uskE = USACCUM_EPSILON;
|
||||
unsigned accum ukE = UACCUM_EPSILON;
|
||||
unsigned long accum ulkE = ULACCUM_EPSILON;
|
||||
unsigned long long accum ullkE = ULLACCUM_EPSILON;
|
||||
|
||||
sat short accum SskE = SACCUM_EPSILON;
|
||||
sat accum SkE = ACCUM_EPSILON;
|
||||
sat long accum SlkE = LACCUM_EPSILON;
|
||||
sat long long accum SllkE = LLACCUM_EPSILON;
|
||||
|
||||
sat unsigned short accum SuskE = USACCUM_EPSILON;
|
||||
sat unsigned accum SukE = UACCUM_EPSILON;
|
||||
sat unsigned long accum SulkE = ULACCUM_EPSILON;
|
||||
sat unsigned long long accum SullkE = ULLACCUM_EPSILON;
|
||||
|
||||
int fbit_sf = SFRACT_FBIT;
|
||||
int fbit_f = FRACT_FBIT;
|
||||
int fbit_lf = LFRACT_FBIT;
|
||||
int fbit_llf = LLFRACT_FBIT;
|
||||
|
||||
int fbit_usf = USFRACT_FBIT;
|
||||
int fbit_uf = UFRACT_FBIT;
|
||||
int fbit_ulf = ULFRACT_FBIT;
|
||||
int fbit_ullf = ULLFRACT_FBIT;
|
||||
|
||||
int fbit_sk = SACCUM_FBIT;
|
||||
int fbit_k = ACCUM_FBIT;
|
||||
int fbit_lk = LACCUM_FBIT;
|
||||
int fbit_llk = LLACCUM_FBIT;
|
||||
|
||||
int fbit_usk = USACCUM_FBIT;
|
||||
int fbit_uk = UACCUM_FBIT;
|
||||
int fbit_ulk = ULACCUM_FBIT;
|
||||
int fbit_ullk = ULLACCUM_FBIT;
|
||||
|
||||
int ibit_sk = SACCUM_IBIT;
|
||||
int ibit_k = ACCUM_IBIT;
|
||||
int ibit_lk = LACCUM_IBIT;
|
||||
int ibit_llk = LLACCUM_IBIT;
|
||||
|
||||
int ibit_usk = USACCUM_IBIT;
|
||||
int ibit_uk = UACCUM_IBIT;
|
||||
int ibit_ulk = ULACCUM_IBIT;
|
||||
int ibit_ullk = ULLACCUM_IBIT;
|
40
gcc/testsuite/gcc.dg/fixed-point/fixed-point.exp
Normal file
40
gcc/testsuite/gcc.dg/fixed-point/fixed-point.exp
Normal file
@ -0,0 +1,40 @@
|
||||
# Copyright (C) 1997, 2004 Free Software Foundation, Inc.
|
||||
|
||||
# This program 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 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program 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.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
# GCC testsuite that uses the `dg.exp' driver.
|
||||
|
||||
# Load support procs.
|
||||
load_lib gcc-dg.exp
|
||||
|
||||
# Skip these tests for targets that don't support this extension.
|
||||
if { ![check_effective_target_fixed_point] } {
|
||||
return;
|
||||
}
|
||||
|
||||
# If a testcase doesn't have special options, use these.
|
||||
global DEFAULT_CFLAGS
|
||||
if ![info exists DEFAULT_CFLAGS] then {
|
||||
set DEFAULT_CFLAGS " -ansi -pedantic-errors"
|
||||
}
|
||||
|
||||
# Initialize `dg'.
|
||||
dg-init
|
||||
|
||||
# Main loop.
|
||||
dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "" $DEFAULT_CFLAGS
|
||||
|
||||
# All done.
|
||||
dg-finish
|
102
gcc/testsuite/gcc.dg/fixed-point/func-array.c
Normal file
102
gcc/testsuite/gcc.dg/fixed-point/func-array.c
Normal file
@ -0,0 +1,102 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* C99 6.5.2.2 Function calls.
|
||||
Test passing array elements involving fixed-point types.
|
||||
Based on the test from ../dfp/. */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
/* A handful of functions that return the Nth argument of
|
||||
an incoming array. */
|
||||
|
||||
#define FUNC(TYPE,NAME) \
|
||||
TYPE NAME ## 0 (TYPE args[]) { return args[0]; } \
|
||||
TYPE NAME ## 1 (TYPE args[]) { return args[1]; } \
|
||||
TYPE NAME ## 2 (TYPE args[]) { return args[2]; } \
|
||||
TYPE NAME ## 3 (TYPE args[]) { return args[3]; } \
|
||||
TYPE NAME ## 4 (TYPE args[]) { return args[4]; } \
|
||||
TYPE NAME ## 5 (TYPE args[]) { return args[5]; }
|
||||
|
||||
FUNC (short _Fract, sf)
|
||||
FUNC (_Fract, f)
|
||||
FUNC (long _Fract, lf)
|
||||
FUNC (long long _Fract, llf)
|
||||
FUNC (unsigned short _Fract, usf)
|
||||
FUNC (unsigned _Fract, uf)
|
||||
FUNC (unsigned long _Fract, ulf)
|
||||
FUNC (unsigned long long _Fract, ullf)
|
||||
FUNC (_Sat short _Fract, Ssf)
|
||||
FUNC (_Sat _Fract, Sf)
|
||||
FUNC (_Sat long _Fract, Slf)
|
||||
FUNC (_Sat long long _Fract, Sllf)
|
||||
FUNC (_Sat unsigned short _Fract, Susf)
|
||||
FUNC (_Sat unsigned _Fract, Suf)
|
||||
FUNC (_Sat unsigned long _Fract, Sulf)
|
||||
FUNC (_Sat unsigned long long _Fract, Sullf)
|
||||
FUNC (short _Accum, sa)
|
||||
FUNC (_Accum, a)
|
||||
FUNC (long _Accum, la)
|
||||
FUNC (long long _Accum, lla)
|
||||
FUNC (unsigned short _Accum, usa)
|
||||
FUNC (unsigned _Accum, ua)
|
||||
FUNC (unsigned long _Accum, ula)
|
||||
FUNC (unsigned long long _Accum, ulla)
|
||||
FUNC (_Sat short _Accum, Ssa)
|
||||
FUNC (_Sat _Accum, Sa)
|
||||
FUNC (_Sat long _Accum, Sla)
|
||||
FUNC (_Sat long long _Accum, Slla)
|
||||
FUNC (_Sat unsigned short _Accum, Susa)
|
||||
FUNC (_Sat unsigned _Accum, Sua)
|
||||
FUNC (_Sat unsigned long _Accum, Sula)
|
||||
FUNC (_Sat unsigned long long _Accum, Sulla)
|
||||
|
||||
int main()
|
||||
{
|
||||
#define TEST(TYPE,NAME,PF) \
|
||||
{ \
|
||||
TYPE NAME[] = { 0.0 ## PF, 0.1 ## PF, 0.2 ## PF, 0.3 ## PF, 0.4 ## PF, \
|
||||
0.5 ## PF }; \
|
||||
if (NAME ## 0 (NAME) != 0.0 ## PF) abort (); \
|
||||
if (NAME ## 1 (NAME) != 0.1 ## PF) abort (); \
|
||||
if (NAME ## 2 (NAME) != 0.2 ## PF) abort (); \
|
||||
if (NAME ## 3 (NAME) != 0.3 ## PF) abort (); \
|
||||
if (NAME ## 4 (NAME) != 0.4 ## PF) abort (); \
|
||||
if (NAME ## 5 (NAME) != 0.5 ## PF) abort (); \
|
||||
}
|
||||
|
||||
TEST (short _Fract, sf, hr)
|
||||
TEST (_Fract, f, r)
|
||||
TEST (long _Fract, lf, lr)
|
||||
TEST (long long _Fract, llf, llr)
|
||||
TEST (unsigned short _Fract, usf, uhr)
|
||||
TEST (unsigned _Fract, uf, ur)
|
||||
TEST (unsigned long _Fract, ulf, ulr)
|
||||
TEST (unsigned long long _Fract, ullf, ullr)
|
||||
TEST (_Sat short _Fract, Ssf, hr)
|
||||
TEST (_Sat _Fract, Sf, r)
|
||||
TEST (_Sat long _Fract, Slf, lr)
|
||||
TEST (_Sat long long _Fract, Sllf, llr)
|
||||
TEST (_Sat unsigned short _Fract, Susf, uhr)
|
||||
TEST (_Sat unsigned _Fract, Suf, ur)
|
||||
TEST (_Sat unsigned long _Fract, Sulf, ulr)
|
||||
TEST (_Sat unsigned long long _Fract, Sullf, ullr)
|
||||
TEST (short _Accum, sa, hk)
|
||||
TEST (_Accum, a, k)
|
||||
TEST (long _Accum, la, lk)
|
||||
TEST (long long _Accum, lla, llk)
|
||||
TEST (unsigned short _Accum, usa, uhk)
|
||||
TEST (unsigned _Accum, ua, uk)
|
||||
TEST (unsigned long _Accum, ula, ulk)
|
||||
TEST (unsigned long long _Accum, ulla, ullk)
|
||||
TEST (_Sat short _Accum, Ssa, hk)
|
||||
TEST (_Sat _Accum, Sa, k)
|
||||
TEST (_Sat long _Accum, Sla, lk)
|
||||
TEST (_Sat long long _Accum, Slla, llk)
|
||||
TEST (_Sat unsigned short _Accum, Susa, uhk)
|
||||
TEST (_Sat unsigned _Accum, Sua, uk)
|
||||
TEST (_Sat unsigned long _Accum, Sula, ulk)
|
||||
TEST (_Sat unsigned long long _Accum, Sulla, ullk)
|
||||
|
||||
return 0;
|
||||
}
|
103
gcc/testsuite/gcc.dg/fixed-point/func-mixed.c
Normal file
103
gcc/testsuite/gcc.dg/fixed-point/func-mixed.c
Normal file
@ -0,0 +1,103 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* C99 6.5.2.2 Function calls.
|
||||
Test scalar passing and return values involving fixed-point types.
|
||||
Based on the test from ../dfp/. */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
/* A handful of functions that return the Nth argument of
|
||||
an incoming array. */
|
||||
|
||||
#define FUNC(TYPE,NAME) \
|
||||
TYPE NAME ## 0 (TYPE arg0, int arg1, unsigned arg2, float arg3, double arg4) \
|
||||
{ return arg0; } \
|
||||
TYPE NAME ## 1 (int arg0, TYPE arg1, unsigned arg2, float arg3, double arg4) \
|
||||
{ return arg1; } \
|
||||
TYPE NAME ## 2 (int arg0, unsigned arg1, TYPE arg2, float arg3, double arg4) \
|
||||
{ return arg2; } \
|
||||
TYPE NAME ## 3 (int arg0, unsigned arg1, float arg2, TYPE arg3, double arg4) \
|
||||
{ return arg3; } \
|
||||
TYPE NAME ## 4 (int arg0, unsigned arg1, float arg2, double arg3, TYPE arg4) \
|
||||
{ return arg4; }
|
||||
|
||||
FUNC (short _Fract, sf)
|
||||
FUNC (_Fract, f)
|
||||
FUNC (long _Fract, lf)
|
||||
FUNC (long long _Fract, llf)
|
||||
FUNC (unsigned short _Fract, usf)
|
||||
FUNC (unsigned _Fract, uf)
|
||||
FUNC (unsigned long _Fract, ulf)
|
||||
FUNC (unsigned long long _Fract, ullf)
|
||||
FUNC (_Sat short _Fract, Ssf)
|
||||
FUNC (_Sat _Fract, Sf)
|
||||
FUNC (_Sat long _Fract, Slf)
|
||||
FUNC (_Sat long long _Fract, Sllf)
|
||||
FUNC (_Sat unsigned short _Fract, Susf)
|
||||
FUNC (_Sat unsigned _Fract, Suf)
|
||||
FUNC (_Sat unsigned long _Fract, Sulf)
|
||||
FUNC (_Sat unsigned long long _Fract, Sullf)
|
||||
FUNC (short _Accum, sa)
|
||||
FUNC (_Accum, a)
|
||||
FUNC (long _Accum, la)
|
||||
FUNC (long long _Accum, lla)
|
||||
FUNC (unsigned short _Accum, usa)
|
||||
FUNC (unsigned _Accum, ua)
|
||||
FUNC (unsigned long _Accum, ula)
|
||||
FUNC (unsigned long long _Accum, ulla)
|
||||
FUNC (_Sat short _Accum, Ssa)
|
||||
FUNC (_Sat _Accum, Sa)
|
||||
FUNC (_Sat long _Accum, Sla)
|
||||
FUNC (_Sat long long _Accum, Slla)
|
||||
FUNC (_Sat unsigned short _Accum, Susa)
|
||||
FUNC (_Sat unsigned _Accum, Sua)
|
||||
FUNC (_Sat unsigned long _Accum, Sula)
|
||||
FUNC (_Sat unsigned long long _Accum, Sulla)
|
||||
|
||||
int main()
|
||||
{
|
||||
#define TEST(TYPE,NAME,PF) \
|
||||
{ \
|
||||
if (NAME ## 0 (0.1 ## PF, -1, 1, 0.3f, 0.5) != 0.1 ## PF) abort (); \
|
||||
if (NAME ## 1 (-1, 0.1 ## PF, 1, 0.3f, 0.5) != 0.1 ## PF) abort (); \
|
||||
if (NAME ## 2 (-1, 1, 0.1 ## PF, 0.3f, 0.5) != 0.1 ## PF) abort (); \
|
||||
if (NAME ## 3 (-1, 1, 0.3f, 0.1 ## PF, 0.5) != 0.1 ## PF) abort (); \
|
||||
if (NAME ## 4 (-1, 1, 0.3f, 0.5, 0.1 ## PF) != 0.1 ## PF) abort (); \
|
||||
}
|
||||
|
||||
TEST (short _Fract, sf, hr)
|
||||
TEST (_Fract, f, r)
|
||||
TEST (long _Fract, lf, lr)
|
||||
TEST (long long _Fract, llf, llr)
|
||||
TEST (unsigned short _Fract, usf, uhr)
|
||||
TEST (unsigned _Fract, uf, ur)
|
||||
TEST (unsigned long _Fract, ulf, ulr)
|
||||
TEST (unsigned long long _Fract, ullf, ullr)
|
||||
TEST (_Sat short _Fract, Ssf, hr)
|
||||
TEST (_Sat _Fract, Sf, r)
|
||||
TEST (_Sat long _Fract, Slf, lr)
|
||||
TEST (_Sat long long _Fract, Sllf, llr)
|
||||
TEST (_Sat unsigned short _Fract, Susf, uhr)
|
||||
TEST (_Sat unsigned _Fract, Suf, ur)
|
||||
TEST (_Sat unsigned long _Fract, Sulf, ulr)
|
||||
TEST (_Sat unsigned long long _Fract, Sullf, ullr)
|
||||
TEST (short _Accum, sa, hk)
|
||||
TEST (_Accum, a, k)
|
||||
TEST (long _Accum, la, lk)
|
||||
TEST (long long _Accum, lla, llk)
|
||||
TEST (unsigned short _Accum, usa, uhk)
|
||||
TEST (unsigned _Accum, ua, uk)
|
||||
TEST (unsigned long _Accum, ula, ulk)
|
||||
TEST (unsigned long long _Accum, ulla, ullk)
|
||||
TEST (_Sat short _Accum, Ssa, hk)
|
||||
TEST (_Sat _Accum, Sa, k)
|
||||
TEST (_Sat long _Accum, Sla, lk)
|
||||
TEST (_Sat long long _Accum, Slla, llk)
|
||||
TEST (_Sat unsigned short _Accum, Susa, uhk)
|
||||
TEST (_Sat unsigned _Accum, Sua, uk)
|
||||
TEST (_Sat unsigned long _Accum, Sula, ulk)
|
||||
TEST (_Sat unsigned long long _Accum, Sulla, ullk)
|
||||
|
||||
return 0;
|
||||
}
|
108
gcc/testsuite/gcc.dg/fixed-point/func-scalar.c
Normal file
108
gcc/testsuite/gcc.dg/fixed-point/func-scalar.c
Normal file
@ -0,0 +1,108 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* C99 6.5.2.2 Function calls.
|
||||
Test scalar passing and return values involving fixed-point types.
|
||||
Based on the test from ../dfp/. */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
/* A handful of functions that return the Nth argument of
|
||||
an incoming array. */
|
||||
|
||||
#define FUNC(TYPE,NAME) \
|
||||
TYPE NAME ## 0 (TYPE arg0, TYPE arg1, TYPE arg2, TYPE arg3, TYPE arg4) \
|
||||
{ return arg0; } \
|
||||
TYPE NAME ## 1 (TYPE arg0, TYPE arg1, TYPE arg2, TYPE arg3, TYPE arg4) \
|
||||
{ return arg1; } \
|
||||
TYPE NAME ## 2 (TYPE arg0, TYPE arg1, TYPE arg2, TYPE arg3, TYPE arg4) \
|
||||
{ return arg2; } \
|
||||
TYPE NAME ## 3 (TYPE arg0, TYPE arg1, TYPE arg2, TYPE arg3, TYPE arg4) \
|
||||
{ return arg3; } \
|
||||
TYPE NAME ## 4 (TYPE arg0, TYPE arg1, TYPE arg2, TYPE arg3, TYPE arg4) \
|
||||
{ return arg4; }
|
||||
|
||||
FUNC (short _Fract, sf)
|
||||
FUNC (_Fract, f)
|
||||
FUNC (long _Fract, lf)
|
||||
FUNC (long long _Fract, llf)
|
||||
FUNC (unsigned short _Fract, usf)
|
||||
FUNC (unsigned _Fract, uf)
|
||||
FUNC (unsigned long _Fract, ulf)
|
||||
FUNC (unsigned long long _Fract, ullf)
|
||||
FUNC (_Sat short _Fract, Ssf)
|
||||
FUNC (_Sat _Fract, Sf)
|
||||
FUNC (_Sat long _Fract, Slf)
|
||||
FUNC (_Sat long long _Fract, Sllf)
|
||||
FUNC (_Sat unsigned short _Fract, Susf)
|
||||
FUNC (_Sat unsigned _Fract, Suf)
|
||||
FUNC (_Sat unsigned long _Fract, Sulf)
|
||||
FUNC (_Sat unsigned long long _Fract, Sullf)
|
||||
FUNC (short _Accum, sa)
|
||||
FUNC (_Accum, a)
|
||||
FUNC (long _Accum, la)
|
||||
FUNC (long long _Accum, lla)
|
||||
FUNC (unsigned short _Accum, usa)
|
||||
FUNC (unsigned _Accum, ua)
|
||||
FUNC (unsigned long _Accum, ula)
|
||||
FUNC (unsigned long long _Accum, ulla)
|
||||
FUNC (_Sat short _Accum, Ssa)
|
||||
FUNC (_Sat _Accum, Sa)
|
||||
FUNC (_Sat long _Accum, Sla)
|
||||
FUNC (_Sat long long _Accum, Slla)
|
||||
FUNC (_Sat unsigned short _Accum, Susa)
|
||||
FUNC (_Sat unsigned _Accum, Sua)
|
||||
FUNC (_Sat unsigned long _Accum, Sula)
|
||||
FUNC (_Sat unsigned long long _Accum, Sulla)
|
||||
|
||||
int main()
|
||||
{
|
||||
#define TEST(TYPE,NAME,PF) \
|
||||
{ \
|
||||
if (NAME ## 0 (0.1 ## PF, 0.2 ## PF, 0.3 ## PF, 0.4 ## PF, 0.5 ## PF) \
|
||||
!= 0.1 ## PF) abort (); \
|
||||
if (NAME ## 1 (0.1 ## PF, 0.2 ## PF, 0.3 ## PF, 0.4 ## PF, 0.5 ## PF) \
|
||||
!= 0.2 ## PF) abort (); \
|
||||
if (NAME ## 2 (0.1 ## PF, 0.2 ## PF, 0.3 ## PF, 0.4 ## PF, 0.5 ## PF) \
|
||||
!= 0.3 ## PF) abort (); \
|
||||
if (NAME ## 3 (0.1 ## PF, 0.2 ## PF, 0.3 ## PF, 0.4 ## PF, 0.5 ## PF) \
|
||||
!= 0.4 ## PF) abort (); \
|
||||
if (NAME ## 4 (0.1 ## PF, 0.2 ## PF, 0.3 ## PF, 0.4 ## PF, 0.5 ## PF) \
|
||||
!= 0.5 ## PF) abort (); \
|
||||
}
|
||||
|
||||
TEST (short _Fract, sf, hr)
|
||||
TEST (_Fract, f, r)
|
||||
TEST (long _Fract, lf, lr)
|
||||
TEST (long long _Fract, llf, llr)
|
||||
TEST (unsigned short _Fract, usf, uhr)
|
||||
TEST (unsigned _Fract, uf, ur)
|
||||
TEST (unsigned long _Fract, ulf, ulr)
|
||||
TEST (unsigned long long _Fract, ullf, ullr)
|
||||
TEST (_Sat short _Fract, Ssf, hr)
|
||||
TEST (_Sat _Fract, Sf, r)
|
||||
TEST (_Sat long _Fract, Slf, lr)
|
||||
TEST (_Sat long long _Fract, Sllf, llr)
|
||||
TEST (_Sat unsigned short _Fract, Susf, uhr)
|
||||
TEST (_Sat unsigned _Fract, Suf, ur)
|
||||
TEST (_Sat unsigned long _Fract, Sulf, ulr)
|
||||
TEST (_Sat unsigned long long _Fract, Sullf, ullr)
|
||||
TEST (short _Accum, sa, hk)
|
||||
TEST (_Accum, a, k)
|
||||
TEST (long _Accum, la, lk)
|
||||
TEST (long long _Accum, lla, llk)
|
||||
TEST (unsigned short _Accum, usa, uhk)
|
||||
TEST (unsigned _Accum, ua, uk)
|
||||
TEST (unsigned long _Accum, ula, ulk)
|
||||
TEST (unsigned long long _Accum, ulla, ullk)
|
||||
TEST (_Sat short _Accum, Ssa, hk)
|
||||
TEST (_Sat _Accum, Sa, k)
|
||||
TEST (_Sat long _Accum, Sla, lk)
|
||||
TEST (_Sat long long _Accum, Slla, llk)
|
||||
TEST (_Sat unsigned short _Accum, Susa, uhk)
|
||||
TEST (_Sat unsigned _Accum, Sua, uk)
|
||||
TEST (_Sat unsigned long _Accum, Sula, ulk)
|
||||
TEST (_Sat unsigned long long _Accum, Sulla, ullk)
|
||||
|
||||
return 0;
|
||||
}
|
191
gcc/testsuite/gcc.dg/fixed-point/func-struct.c
Normal file
191
gcc/testsuite/gcc.dg/fixed-point/func-struct.c
Normal file
@ -0,0 +1,191 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* C99 6.5.2.2 Function calls.
|
||||
Test structure passing and return values involving fixed-point types.
|
||||
Based on the test from ../dfp/. */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
struct example
|
||||
{
|
||||
short _Fract sf;
|
||||
char dummy1;
|
||||
_Fract f;
|
||||
char dummy2;
|
||||
long _Fract lf;
|
||||
char dummy3;
|
||||
long long _Fract llf;
|
||||
char dummy4;
|
||||
unsigned short _Fract usf;
|
||||
char dummy5;
|
||||
unsigned _Fract uf;
|
||||
char dummy6;
|
||||
unsigned long _Fract ulf;
|
||||
char dummy7;
|
||||
unsigned long long _Fract ullf;
|
||||
char dummy8;
|
||||
_Sat short _Fract Ssf;
|
||||
char dummy9;
|
||||
_Sat _Fract Sf;
|
||||
char dummy10;
|
||||
_Sat long _Fract Slf;
|
||||
char dummy11;
|
||||
_Sat long long _Fract Sllf;
|
||||
char dummy12;
|
||||
_Sat unsigned short _Fract Susf;
|
||||
char dummy13;
|
||||
_Sat unsigned _Fract Suf;
|
||||
char dummy14;
|
||||
_Sat unsigned long _Fract Sulf;
|
||||
char dummy15;
|
||||
_Sat unsigned long long _Fract Sullf;
|
||||
char dummy16;
|
||||
short _Accum sa;
|
||||
char dummya1;
|
||||
_Accum a;
|
||||
char dummya2;
|
||||
long _Accum la;
|
||||
char dummya3;
|
||||
long long _Accum lla;
|
||||
char dummya4;
|
||||
unsigned short _Accum usa;
|
||||
char dummya5;
|
||||
unsigned _Accum ua;
|
||||
char dummya6;
|
||||
unsigned long _Accum ula;
|
||||
char dummya7;
|
||||
unsigned long long _Accum ulla;
|
||||
char dummya8;
|
||||
_Sat short _Accum Ssa;
|
||||
char dummya9;
|
||||
_Sat _Accum Sa;
|
||||
char dummya10;
|
||||
_Sat long _Accum Sla;
|
||||
char dummya11;
|
||||
_Sat long long _Accum Slla;
|
||||
char dummya12;
|
||||
_Sat unsigned short _Accum Susa;
|
||||
char dummya13;
|
||||
_Sat unsigned _Accum Sua;
|
||||
char dummya14;
|
||||
_Sat unsigned long _Accum Sula;
|
||||
char dummya15;
|
||||
_Sat unsigned long long _Accum Sulla;
|
||||
char dummya16;
|
||||
} nums = { 0.1hr, 'a',
|
||||
0.2r, 'b',
|
||||
0.3lr, 'c',
|
||||
0.4llr, 'd',
|
||||
0.5uhr, 'e',
|
||||
0.6ur, 'f',
|
||||
0.7ulr, 'g',
|
||||
0.8ullr, 'h',
|
||||
0.11r, 'i',
|
||||
0.22r, 'j',
|
||||
0.33lr, 'k',
|
||||
0.44llr, 'l',
|
||||
0.55uhr, 'm',
|
||||
0.66ur, 'n',
|
||||
0.77ulr, 'o',
|
||||
0.88ullr, 'p',
|
||||
0.1hk, 'q',
|
||||
0.2k, 'r',
|
||||
0.3lk, 's',
|
||||
0.4llk, 't',
|
||||
0.5uhk, 'u',
|
||||
0.6uk, 'v',
|
||||
0.7ulk, 'w',
|
||||
0.8ullk, 'x',
|
||||
0.11k, 'y',
|
||||
0.22k, 'z',
|
||||
0.33lk, '0',
|
||||
0.44llk, '1',
|
||||
0.55uhk, '2',
|
||||
0.66uk, '3',
|
||||
0.77ulk, '4',
|
||||
0.88ullk, '5'
|
||||
};
|
||||
|
||||
/* A handful of functions that return the Nth argument of
|
||||
an incoming array. */
|
||||
|
||||
#define FUNC(TYPE,NAME) \
|
||||
TYPE NAME ## _func (struct example s) \
|
||||
{ return s. NAME; }
|
||||
|
||||
FUNC (short _Fract, sf)
|
||||
FUNC (_Fract, f)
|
||||
FUNC (long _Fract, lf)
|
||||
FUNC (long long _Fract, llf)
|
||||
FUNC (unsigned short _Fract, usf)
|
||||
FUNC (unsigned _Fract, uf)
|
||||
FUNC (unsigned long _Fract, ulf)
|
||||
FUNC (unsigned long long _Fract, ullf)
|
||||
FUNC (_Sat short _Fract, Ssf)
|
||||
FUNC (_Sat _Fract, Sf)
|
||||
FUNC (_Sat long _Fract, Slf)
|
||||
FUNC (_Sat long long _Fract, Sllf)
|
||||
FUNC (_Sat unsigned short _Fract, Susf)
|
||||
FUNC (_Sat unsigned _Fract, Suf)
|
||||
FUNC (_Sat unsigned long _Fract, Sulf)
|
||||
FUNC (_Sat unsigned long long _Fract, Sullf)
|
||||
FUNC (short _Accum, sa)
|
||||
FUNC (_Accum, a)
|
||||
FUNC (long _Accum, la)
|
||||
FUNC (long long _Accum, lla)
|
||||
FUNC (unsigned short _Accum, usa)
|
||||
FUNC (unsigned _Accum, ua)
|
||||
FUNC (unsigned long _Accum, ula)
|
||||
FUNC (unsigned long long _Accum, ulla)
|
||||
FUNC (_Sat short _Accum, Ssa)
|
||||
FUNC (_Sat _Accum, Sa)
|
||||
FUNC (_Sat long _Accum, Sla)
|
||||
FUNC (_Sat long long _Accum, Slla)
|
||||
FUNC (_Sat unsigned short _Accum, Susa)
|
||||
FUNC (_Sat unsigned _Accum, Sua)
|
||||
FUNC (_Sat unsigned long _Accum, Sula)
|
||||
FUNC (_Sat unsigned long long _Accum, Sulla)
|
||||
|
||||
int main()
|
||||
{
|
||||
#define TEST(TYPE,NAME,VALUE) \
|
||||
{ \
|
||||
if (NAME ## _func (nums) != VALUE) abort (); \
|
||||
}
|
||||
|
||||
TEST (short _Fract, sf, 0.1hr)
|
||||
TEST (_Fract, f, 0.2r)
|
||||
TEST (long _Fract, lf, 0.3lr)
|
||||
TEST (long long _Fract, llf, 0.4llr)
|
||||
TEST (unsigned short _Fract, usf, 0.5uhr)
|
||||
TEST (unsigned _Fract, uf, 0.6ur)
|
||||
TEST (unsigned long _Fract, ulf, 0.7ulr)
|
||||
TEST (unsigned long long _Fract, ullf, 0.8ullr)
|
||||
TEST (_Sat short _Fract, Ssf, 0.11hr)
|
||||
TEST (_Sat _Fract, Sf, 0.22r)
|
||||
TEST (_Sat long _Fract, Slf, 0.33lr)
|
||||
TEST (_Sat long long _Fract, Sllf, 0.44llr)
|
||||
TEST (_Sat unsigned short _Fract, Susf, 0.55uhr)
|
||||
TEST (_Sat unsigned _Fract, Suf, 0.66ur)
|
||||
TEST (_Sat unsigned long _Fract, Sulf, 0.77ulr)
|
||||
TEST (_Sat unsigned long long _Fract, Sullf, 0.88ullr)
|
||||
TEST (short _Accum, sa, 0.1hk)
|
||||
TEST (_Accum, a, 0.2k)
|
||||
TEST (long _Accum, la, 0.3lk)
|
||||
TEST (long long _Accum, lla, 0.4llk)
|
||||
TEST (unsigned short _Accum, usa, 0.5uhk)
|
||||
TEST (unsigned _Accum, ua, 0.6uk)
|
||||
TEST (unsigned long _Accum, ula, 0.7ulk)
|
||||
TEST (unsigned long long _Accum, ulla, 0.8ullk)
|
||||
TEST (_Sat short _Accum, Ssa, 0.11hk)
|
||||
TEST (_Sat _Accum, Sa, 0.22k)
|
||||
TEST (_Sat long _Accum, Sla, 0.33lk)
|
||||
TEST (_Sat long long _Accum, Slla, 0.44llk)
|
||||
TEST (_Sat unsigned short _Accum, Susa, 0.55uhk)
|
||||
TEST (_Sat unsigned _Accum, Sua, 0.66uk)
|
||||
TEST (_Sat unsigned long _Accum, Sula, 0.77ulk)
|
||||
TEST (_Sat unsigned long long _Accum, Sulla, 0.88ullk)
|
||||
|
||||
return 0;
|
||||
}
|
145
gcc/testsuite/gcc.dg/fixed-point/func-vararg-mixed.c
Normal file
145
gcc/testsuite/gcc.dg/fixed-point/func-vararg-mixed.c
Normal file
@ -0,0 +1,145 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* C99 6.5.2.2 Function calls.
|
||||
Test passing varargs of fixed-point types.
|
||||
Based on the test from ../dfp/. */
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
static int
|
||||
vararg_int (unsigned arg, ...)
|
||||
{
|
||||
va_list ap;
|
||||
int result_i;
|
||||
va_start (ap, arg);
|
||||
result_i = va_arg (ap, int);
|
||||
return result_i;
|
||||
}
|
||||
|
||||
static _Fract
|
||||
vararg_fract (unsigned arg, ...)
|
||||
{
|
||||
va_list ap;
|
||||
int result_i;
|
||||
_Fract result_fr; \
|
||||
va_start (ap, arg);
|
||||
result_i = va_arg (ap, int);
|
||||
result_fr = va_arg (ap, _Fract); \
|
||||
return result_fr;
|
||||
}
|
||||
|
||||
static int
|
||||
vararg_double (unsigned arg, ...)
|
||||
{
|
||||
va_list ap;
|
||||
int result_i;
|
||||
_Fract result_fr; \
|
||||
double result_d;
|
||||
va_start (ap, arg);
|
||||
result_i = va_arg (ap, int);
|
||||
result_fr = va_arg (ap, _Fract); \
|
||||
result_d = va_arg (ap, double); \
|
||||
return result_d;
|
||||
}
|
||||
|
||||
#define FUNC(TYPE, NAME) \
|
||||
static TYPE \
|
||||
vararg_ ## NAME (unsigned arg, ...) \
|
||||
{ \
|
||||
va_list ap; \
|
||||
int result_i; \
|
||||
_Fract result_fr; \
|
||||
double result_d; \
|
||||
TYPE result; \
|
||||
va_start (ap, arg); \
|
||||
result_i = va_arg (ap, int); \
|
||||
result_fr = va_arg (ap, _Fract); \
|
||||
result_d = va_arg (ap, double); \
|
||||
result = va_arg (ap, TYPE); \
|
||||
va_end (ap); \
|
||||
return result; \
|
||||
}
|
||||
|
||||
FUNC (short _Fract, sf)
|
||||
FUNC (_Fract, f)
|
||||
FUNC (long _Fract, lf)
|
||||
FUNC (long long _Fract, llf)
|
||||
FUNC (unsigned short _Fract, usf)
|
||||
FUNC (unsigned _Fract, uf)
|
||||
FUNC (unsigned long _Fract, ulf)
|
||||
FUNC (unsigned long long _Fract, ullf)
|
||||
FUNC (_Sat short _Fract, Ssf)
|
||||
FUNC (_Sat _Fract, Sf)
|
||||
FUNC (_Sat long _Fract, Slf)
|
||||
FUNC (_Sat long long _Fract, Sllf)
|
||||
FUNC (_Sat unsigned short _Fract, Susf)
|
||||
FUNC (_Sat unsigned _Fract, Suf)
|
||||
FUNC (_Sat unsigned long _Fract, Sulf)
|
||||
FUNC (_Sat unsigned long long _Fract, Sullf)
|
||||
FUNC (short _Accum, sa)
|
||||
FUNC (_Accum, a)
|
||||
FUNC (long _Accum, la)
|
||||
FUNC (long long _Accum, lla)
|
||||
FUNC (unsigned short _Accum, usa)
|
||||
FUNC (unsigned _Accum, ua)
|
||||
FUNC (unsigned long _Accum, ula)
|
||||
FUNC (unsigned long long _Accum, ulla)
|
||||
FUNC (_Sat short _Accum, Ssa)
|
||||
FUNC (_Sat _Accum, Sa)
|
||||
FUNC (_Sat long _Accum, Sla)
|
||||
FUNC (_Sat long long _Accum, Slla)
|
||||
FUNC (_Sat unsigned short _Accum, Susa)
|
||||
FUNC (_Sat unsigned _Accum, Sua)
|
||||
FUNC (_Sat unsigned long _Accum, Sula)
|
||||
FUNC (_Sat unsigned long long _Accum, Sulla)
|
||||
|
||||
int main()
|
||||
{
|
||||
#define TEST(NAME,PF) \
|
||||
if (vararg_int (0, 100, 0.9r, 55.0, 0.2 ## PF) != 100) \
|
||||
abort (); \
|
||||
if (vararg_fract (1, 100, 0.9r, 55.0, 0.2 ## PF) != 0.9r) \
|
||||
abort (); \
|
||||
if (vararg_double (2, 100, 0.9r, 55.0, 0.2 ## PF) != 55.0) \
|
||||
abort (); \
|
||||
if (vararg_ ## NAME (3, 100, 0.9r, 55.0, 0.2 ## PF) != 0.2 ## PF) \
|
||||
abort (); \
|
||||
|
||||
TEST(sf, hr)
|
||||
TEST(f, r)
|
||||
TEST(lf, lr)
|
||||
TEST(llf, llr)
|
||||
TEST(usf, uhr)
|
||||
TEST(uf, ur)
|
||||
TEST(ulf, ulr)
|
||||
TEST(ullf, ullr)
|
||||
TEST(Ssf, hr)
|
||||
TEST(Sf, r)
|
||||
TEST(Slf, lr)
|
||||
TEST(Sllf, llr)
|
||||
TEST(Susf, uhr)
|
||||
TEST(Suf, ur)
|
||||
TEST(Sulf, ulr)
|
||||
TEST(Sullf, ullr)
|
||||
TEST(sa, hk)
|
||||
TEST(a, k)
|
||||
TEST(la, lk)
|
||||
TEST(lla, llk)
|
||||
TEST(usa, uhk)
|
||||
TEST(ua, uk)
|
||||
TEST(ula, ulk)
|
||||
TEST(ulla, ullk)
|
||||
TEST(Ssa, hk)
|
||||
TEST(Sa, k)
|
||||
TEST(Sla, lk)
|
||||
TEST(Slla, llk)
|
||||
TEST(Susa, uhk)
|
||||
TEST(Sua, uk)
|
||||
TEST(Sula, ulk)
|
||||
TEST(Sulla, ullk)
|
||||
|
||||
return 0;
|
||||
}
|
46
gcc/testsuite/gcc.dg/fixed-point/func-vararg-size0.c
Normal file
46
gcc/testsuite/gcc.dg/fixed-point/func-vararg-size0.c
Normal file
@ -0,0 +1,46 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* C99 6.5.2.2 Function calls.
|
||||
Based on the test from ../dfp/. */
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
struct S1
|
||||
{
|
||||
struct
|
||||
{
|
||||
_Fract e;
|
||||
} b[0];
|
||||
};
|
||||
|
||||
/* Test handling vararg parameters whose size is 0. */
|
||||
|
||||
int check_var(int z,...)
|
||||
{
|
||||
double d;
|
||||
struct S1 s1;
|
||||
long long result;
|
||||
va_list ap;
|
||||
va_start (ap, z);
|
||||
d = va_arg (ap, double);
|
||||
s1 = va_arg (ap, struct S1);
|
||||
result = va_arg (ap, long long);
|
||||
va_end (ap);
|
||||
return (result == 2LL);
|
||||
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
struct S1 s1;
|
||||
struct S1 a1[5];
|
||||
|
||||
if (check_var(5, 1.0, s1, 2LL, a1[2], a1[2]) == 0)
|
||||
abort ();
|
||||
|
||||
return 0;
|
||||
}
|
115
gcc/testsuite/gcc.dg/fixed-point/func-vararg.c
Normal file
115
gcc/testsuite/gcc.dg/fixed-point/func-vararg.c
Normal file
@ -0,0 +1,115 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* C99 6.5.2.2 Function calls.
|
||||
Test passing varargs of fixed-point types.
|
||||
Based on the test from ../dfp/. */
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
#define FUNC(TYPE, NAME) \
|
||||
static TYPE \
|
||||
vararg_ ## NAME (unsigned arg, ...) \
|
||||
{ \
|
||||
int i; \
|
||||
va_list ap; \
|
||||
TYPE result; \
|
||||
va_start (ap, arg); \
|
||||
for (i = 0; i <= arg; i++) \
|
||||
result = va_arg (ap, TYPE); \
|
||||
va_end (ap); \
|
||||
return result; \
|
||||
}
|
||||
|
||||
FUNC (short _Fract, sf)
|
||||
FUNC (_Fract, f)
|
||||
FUNC (long _Fract, lf)
|
||||
FUNC (long long _Fract, llf)
|
||||
FUNC (unsigned short _Fract, usf)
|
||||
FUNC (unsigned _Fract, uf)
|
||||
FUNC (unsigned long _Fract, ulf)
|
||||
FUNC (unsigned long long _Fract, ullf)
|
||||
FUNC (_Sat short _Fract, Ssf)
|
||||
FUNC (_Sat _Fract, Sf)
|
||||
FUNC (_Sat long _Fract, Slf)
|
||||
FUNC (_Sat long long _Fract, Sllf)
|
||||
FUNC (_Sat unsigned short _Fract, Susf)
|
||||
FUNC (_Sat unsigned _Fract, Suf)
|
||||
FUNC (_Sat unsigned long _Fract, Sulf)
|
||||
FUNC (_Sat unsigned long long _Fract, Sullf)
|
||||
FUNC (short _Accum, sa)
|
||||
FUNC (_Accum, a)
|
||||
FUNC (long _Accum, la)
|
||||
FUNC (long long _Accum, lla)
|
||||
FUNC (unsigned short _Accum, usa)
|
||||
FUNC (unsigned _Accum, ua)
|
||||
FUNC (unsigned long _Accum, ula)
|
||||
FUNC (unsigned long long _Accum, ulla)
|
||||
FUNC (_Sat short _Accum, Ssa)
|
||||
FUNC (_Sat _Accum, Sa)
|
||||
FUNC (_Sat long _Accum, Sla)
|
||||
FUNC (_Sat long long _Accum, Slla)
|
||||
FUNC (_Sat unsigned short _Accum, Susa)
|
||||
FUNC (_Sat unsigned _Accum, Sua)
|
||||
FUNC (_Sat unsigned long _Accum, Sula)
|
||||
FUNC (_Sat unsigned long long _Accum, Sulla)
|
||||
|
||||
int main()
|
||||
{
|
||||
#define TEST(NAME,PF) \
|
||||
if (vararg_ ## NAME (0, 0.0 ## PF, 0.1 ## PF, 0.2 ## PF, 0.3 ## PF, \
|
||||
0.4 ## PF, 0.5 ## PF) != 0.0 ## PF) \
|
||||
abort (); \
|
||||
if (vararg_ ## NAME (1, 0.0 ## PF, 0.1 ## PF, 0.2 ## PF, 0.3 ## PF, \
|
||||
0.4 ## PF, 0.5 ## PF) != 0.1 ## PF) \
|
||||
abort (); \
|
||||
if (vararg_ ## NAME (2, 0.0 ## PF, 0.1 ## PF, 0.2 ## PF, 0.3 ## PF, \
|
||||
0.4 ## PF, 0.5 ## PF) != 0.2 ## PF) \
|
||||
abort (); \
|
||||
if (vararg_ ## NAME (3, 0.0 ## PF, 0.1 ## PF, 0.2 ## PF, 0.3 ## PF, \
|
||||
0.4 ## PF, 0.5 ## PF) != 0.3 ## PF) \
|
||||
abort (); \
|
||||
if (vararg_ ## NAME (4, 0.0 ## PF, 0.1 ## PF, 0.2 ## PF, 0.3 ## PF, \
|
||||
0.4 ## PF, 0.5 ## PF) != 0.4 ## PF) \
|
||||
abort (); \
|
||||
if (vararg_ ## NAME (5, 0.0 ## PF, 0.1 ## PF, 0.2 ## PF, 0.3 ## PF, \
|
||||
0.4 ## PF, 0.5 ## PF) != 0.5 ## PF) \
|
||||
abort ();
|
||||
|
||||
TEST(sf, hr)
|
||||
TEST(f, r)
|
||||
TEST(lf, lr)
|
||||
TEST(llf, llr)
|
||||
TEST(usf, uhr)
|
||||
TEST(uf, ur)
|
||||
TEST(ulf, ulr)
|
||||
TEST(ullf, ullr)
|
||||
TEST(Ssf, hr)
|
||||
TEST(Sf, r)
|
||||
TEST(Slf, lr)
|
||||
TEST(Sllf, llr)
|
||||
TEST(Susf, uhr)
|
||||
TEST(Suf, ur)
|
||||
TEST(Sulf, ulr)
|
||||
TEST(Sullf, ullr)
|
||||
TEST(sa, hk)
|
||||
TEST(a, k)
|
||||
TEST(la, lk)
|
||||
TEST(lla, llk)
|
||||
TEST(usa, uhk)
|
||||
TEST(ua, uk)
|
||||
TEST(ula, ulk)
|
||||
TEST(ulla, ullk)
|
||||
TEST(Ssa, hk)
|
||||
TEST(Sa, k)
|
||||
TEST(Sla, lk)
|
||||
TEST(Slla, llk)
|
||||
TEST(Susa, uhk)
|
||||
TEST(Sua, uk)
|
||||
TEST(Sula, ulk)
|
||||
TEST(Sulla, ullk)
|
||||
|
||||
return 0;
|
||||
}
|
24
gcc/testsuite/gcc.dg/fixed-point/int-warning.c
Normal file
24
gcc/testsuite/gcc.dg/fixed-point/int-warning.c
Normal file
@ -0,0 +1,24 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu99 -O2" } */
|
||||
|
||||
/* N1169 Conversion from fixed-point to integer.
|
||||
Test if GCC warns when overflow or underflow. */
|
||||
|
||||
signed char sc;
|
||||
unsigned char uc;
|
||||
|
||||
void test()
|
||||
{
|
||||
sc = 500k; /* { dg-warning "overflow in implicit constant conversion" } */
|
||||
sc = -500k; /* { dg-warning "overflow in implicit constant conversion" } */
|
||||
sc = 500lk; /* { dg-warning "overflow in implicit constant conversion" } */
|
||||
sc = -500lk; /* { dg-warning "overflow in implicit constant conversion" } */
|
||||
sc = 500llk; /* { dg-warning "overflow in implicit constant conversion" } */
|
||||
sc = -500llk; /* { dg-warning "overflow in implicit constant conversion" } */
|
||||
uc = 500k; /* { dg-warning "overflow in implicit constant conversion" } */
|
||||
uc = -500k; /* { dg-warning "overflow in implicit constant conversion" } */
|
||||
uc = 500lk; /* { dg-warning "overflow in implicit constant conversion" } */
|
||||
uc = -500lk; /* { dg-warning "overflow in implicit constant conversion" } */
|
||||
uc = 500llk; /* { dg-warning "overflow in implicit constant conversion" } */
|
||||
uc = -500llk; /* { dg-warning "overflow in implicit constant conversion" } */
|
||||
}
|
9
gcc/testsuite/gcc.dg/fixed-point/keywords-c89.c
Normal file
9
gcc/testsuite/gcc.dg/fixed-point/keywords-c89.c
Normal file
@ -0,0 +1,9 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=c89" } */
|
||||
|
||||
/* Flixed-point keywords are not recognized in C89 mode. */
|
||||
|
||||
_Fract w; /* { dg-error "" } */
|
||||
_Accum x; /* { dg-error "" } */
|
||||
_Sat _Fract y; /* { dg-error "" } */
|
||||
_Sat _Accum z; /* { dg-error "" } */
|
9
gcc/testsuite/gcc.dg/fixed-point/keywords-c99.c
Normal file
9
gcc/testsuite/gcc.dg/fixed-point/keywords-c99.c
Normal file
@ -0,0 +1,9 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=c99" } */
|
||||
|
||||
/* Fixed-point keywords are not recognized in C99 mode. */
|
||||
|
||||
_Fract w; /* { dg-error "" } */
|
||||
_Accum x; /* { dg-error "" } */
|
||||
_Sat _Fract y; /* { dg-error "" } */
|
||||
_Sat _Fract z; /* { dg-error "" } */
|
37
gcc/testsuite/gcc.dg/fixed-point/keywords-ignored-c99.c
Normal file
37
gcc/testsuite/gcc.dg/fixed-point/keywords-ignored-c99.c
Normal file
@ -0,0 +1,37 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=c99" } */
|
||||
|
||||
/* Fixed-point keywords are not reserved for c99. */
|
||||
|
||||
int _Fract (void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int _Accum (void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int _Sat (void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int foo1 (int i)
|
||||
{
|
||||
int _Fract = i * 2;
|
||||
return _Fract;
|
||||
}
|
||||
|
||||
int foo2 (int i)
|
||||
{
|
||||
int _Accum = i * 2;
|
||||
return _Accum;
|
||||
}
|
||||
|
||||
int foo3 (int i)
|
||||
{
|
||||
int _Sat = i * 2;
|
||||
return _Sat;
|
||||
}
|
9
gcc/testsuite/gcc.dg/fixed-point/keywords-pedantic.c
Normal file
9
gcc/testsuite/gcc.dg/fixed-point/keywords-pedantic.c
Normal file
@ -0,0 +1,9 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu99 -pedantic" } */
|
||||
|
||||
/* Fixed-point is a GCC extension. */
|
||||
|
||||
_Fract w; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Accum x; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Sat _Fract y; /* { dg-warning "GCC extension|ISO C" } */
|
||||
_Sat _Accum z; /* { dg-warning "GCC extension|ISO C" } */
|
39
gcc/testsuite/gcc.dg/fixed-point/keywords-reserved.c
Normal file
39
gcc/testsuite/gcc.dg/fixed-point/keywords-reserved.c
Normal file
@ -0,0 +1,39 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* N1169 6.4.1: Keywords.
|
||||
C99 6.4.1(2): Keywords.
|
||||
Fixed-point keywords cannot be used in other contexts. */
|
||||
|
||||
int _Fract (void) /* { dg-error "" } */
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int _Accum (void) /* { dg-error "" } */
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int _Sat (void) /* { dg-error "" } */
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int foo1 (int i)
|
||||
{
|
||||
int _Fract = i * 2; /* { dg-error "" } */
|
||||
return _Fract; /* { dg-error "" } */
|
||||
}
|
||||
|
||||
int foo2 (int i)
|
||||
{
|
||||
int _Accum = i * 2; /* { dg-error "" } */
|
||||
return _Accum; /* { dg-error "" } */
|
||||
}
|
||||
|
||||
int foo3 (int i)
|
||||
{
|
||||
int _Sat = i * 2; /* { dg-error "" } */
|
||||
return _Sat; /* { dg-error "" } */
|
||||
}
|
91
gcc/testsuite/gcc.dg/fixed-point/loop-index.c
Normal file
91
gcc/testsuite/gcc.dg/fixed-point/loop-index.c
Normal file
@ -0,0 +1,91 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* C99 6.8.5.2: The for statement.
|
||||
Based on the test from ../dfp/. */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
#define FUNC(TYPE,NAME,PF) \
|
||||
void \
|
||||
NAME (void) \
|
||||
{ \
|
||||
TYPE d; \
|
||||
int i; \
|
||||
for (d = 0.1 ## PF, i = 0; d <= 0.8 ## PF; d += 0.1 ## PF) \
|
||||
i++; \
|
||||
if (i != 8) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
FUNC (short _Fract, sf, hr)
|
||||
FUNC (_Fract, f, r)
|
||||
FUNC (long _Fract, lf, lr)
|
||||
FUNC (long long _Fract, llf, llr)
|
||||
FUNC (unsigned short _Fract, usf, uhr)
|
||||
FUNC (unsigned _Fract, uf, ur)
|
||||
FUNC (unsigned long _Fract, ulf, ulr)
|
||||
FUNC (unsigned long long _Fract, ullf, ullr)
|
||||
FUNC (_Sat short _Fract, Ssf, hr)
|
||||
FUNC (_Sat _Fract, Sf, r)
|
||||
FUNC (_Sat long _Fract, Slf, lr)
|
||||
FUNC (_Sat long long _Fract, Sllf, llr)
|
||||
FUNC (_Sat unsigned short _Fract, Susf, uhr)
|
||||
FUNC (_Sat unsigned _Fract, Suf, ur)
|
||||
FUNC (_Sat unsigned long _Fract, Sulf, ulr)
|
||||
FUNC (_Sat unsigned long long _Fract, Sullf, ullr)
|
||||
FUNC (short _Accum, sa, hk)
|
||||
FUNC (_Accum, a, k)
|
||||
FUNC (long _Accum, la, lk)
|
||||
FUNC (long long _Accum, lla, llk)
|
||||
FUNC (unsigned short _Accum, usa, uhk)
|
||||
FUNC (unsigned _Accum, ua, uk)
|
||||
FUNC (unsigned long _Accum, ula, ulk)
|
||||
FUNC (unsigned long long _Accum, ulla, ullk)
|
||||
FUNC (_Sat short _Accum, Ssa, hk)
|
||||
FUNC (_Sat _Accum, Sa, k)
|
||||
FUNC (_Sat long _Accum, Sla, lk)
|
||||
FUNC (_Sat long long _Accum, Slla, llk)
|
||||
FUNC (_Sat unsigned short _Accum, Susa, uhk)
|
||||
FUNC (_Sat unsigned _Accum, Sua, uk)
|
||||
FUNC (_Sat unsigned long _Accum, Sula, ulk)
|
||||
FUNC (_Sat unsigned long long _Accum, Sulla, ullk)
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
sf ();
|
||||
f ();
|
||||
lf ();
|
||||
llf ();
|
||||
usf ();
|
||||
uf ();
|
||||
ulf ();
|
||||
ullf ();
|
||||
Ssf ();
|
||||
Sf ();
|
||||
Slf ();
|
||||
Sllf ();
|
||||
Susf ();
|
||||
Suf ();
|
||||
Sulf ();
|
||||
Sullf ();
|
||||
sa ();
|
||||
a ();
|
||||
la ();
|
||||
lla ();
|
||||
usa ();
|
||||
ua ();
|
||||
ula ();
|
||||
ulla ();
|
||||
Ssa ();
|
||||
Sa ();
|
||||
Sla ();
|
||||
Slla ();
|
||||
Susa ();
|
||||
Sua ();
|
||||
Sula ();
|
||||
Sulla ();
|
||||
|
||||
return 0;
|
||||
}
|
119
gcc/testsuite/gcc.dg/fixed-point/modes.c
Normal file
119
gcc/testsuite/gcc.dg/fixed-point/modes.c
Normal file
@ -0,0 +1,119 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
typedef _Fract qq __attribute__ ((mode (QQ)));
|
||||
typedef _Fract hq __attribute__ ((mode (HQ)));
|
||||
typedef _Fract sq __attribute__ ((mode (SQ)));
|
||||
typedef _Fract dq __attribute__ ((mode (DQ)));
|
||||
typedef unsigned _Fract uqq __attribute__ ((mode (UQQ)));
|
||||
typedef unsigned _Fract uhq __attribute__ ((mode (UHQ)));
|
||||
typedef unsigned _Fract usq __attribute__ ((mode (USQ)));
|
||||
typedef unsigned _Fract udq __attribute__ ((mode (UDQ)));
|
||||
typedef _Sat _Fract Sqq __attribute__ ((mode (QQ)));
|
||||
typedef _Sat _Fract Shq __attribute__ ((mode (HQ)));
|
||||
typedef _Sat _Fract Ssq __attribute__ ((mode (SQ)));
|
||||
typedef _Sat _Fract Sdq __attribute__ ((mode (DQ)));
|
||||
typedef _Sat unsigned _Fract Suqq __attribute__ ((mode (UQQ)));
|
||||
typedef _Sat unsigned _Fract Suhq __attribute__ ((mode (UHQ)));
|
||||
typedef _Sat unsigned _Fract Susq __attribute__ ((mode (USQ)));
|
||||
typedef _Sat unsigned _Fract Sudq __attribute__ ((mode (UDQ)));
|
||||
typedef _Accum ha __attribute__ ((mode (HA)));
|
||||
typedef _Accum sa __attribute__ ((mode (SA)));
|
||||
typedef _Accum da __attribute__ ((mode (DA)));
|
||||
typedef unsigned _Accum uha __attribute__ ((mode (UHA)));
|
||||
typedef unsigned _Accum usa __attribute__ ((mode (USA)));
|
||||
typedef unsigned _Accum uda __attribute__ ((mode (UDA)));
|
||||
typedef _Sat _Accum Sha __attribute__ ((mode (HA)));
|
||||
typedef _Sat _Accum Ssa __attribute__ ((mode (SA)));
|
||||
typedef _Sat _Accum Sda __attribute__ ((mode (DA)));
|
||||
typedef _Sat unsigned _Accum Suha __attribute__ ((mode (UHA)));
|
||||
typedef _Sat unsigned _Accum Susa __attribute__ ((mode (USA)));
|
||||
typedef _Sat unsigned _Accum Suda __attribute__ ((mode (UDA)));
|
||||
|
||||
/* Not all platforms support TQ, UTQ, TA, UTA modes. */
|
||||
#if defined(__LP64__) && !defined(__hppa__)
|
||||
typedef _Fract tq __attribute__ ((mode (TQ)));
|
||||
typedef unsigned _Fract utq __attribute__ ((mode (UTQ)));
|
||||
typedef _Sat _Fract Stq __attribute__ ((mode (TQ)));
|
||||
typedef _Sat unsigned _Fract Sutq __attribute__ ((mode (UTQ)));
|
||||
typedef _Accum ta __attribute__ ((mode (TA)));
|
||||
typedef unsigned _Accum uta __attribute__ ((mode (UTA)));
|
||||
typedef _Sat _Accum Sta __attribute__ ((mode (TA)));
|
||||
typedef _Sat unsigned _Accum Suta __attribute__ ((mode (UTA)));
|
||||
|
||||
int tqsize[sizeof (tq) == 16 ? 1 : -1];
|
||||
int utqsize[sizeof (utq) == 16 ? 1 : -1];
|
||||
int Stqsize[sizeof (Stq) == 16 ? 1 : -1];
|
||||
int Sutqsize[sizeof (Sutq) == 16 ? 1 : -1];
|
||||
int tasize[sizeof (ta) == 16 ? 1 : -1];
|
||||
int utasize[sizeof (uta) == 16 ? 1 : -1];
|
||||
int Stasize[sizeof (Sta) == 16 ? 1 : -1];
|
||||
int Sutasize[sizeof (Suta) == 16 ? 1 : -1];
|
||||
|
||||
int tqalign = __alignof (tq);
|
||||
int utqalign = __alignof (utq);
|
||||
int Stqalign = __alignof (Stq);
|
||||
int Sutqalign = __alignof (Sutq);
|
||||
int taalign = __alignof (ta);
|
||||
int utaalign = __alignof (uta);
|
||||
int Staalign = __alignof (Sta);
|
||||
int Sutaalign = __alignof (Suta);
|
||||
#endif
|
||||
|
||||
int qqsize[sizeof (qq) == 1 ? 1 : -1];
|
||||
int hqsize[sizeof (hq) == 2 ? 1 : -1];
|
||||
int sqsize[sizeof (sq) == 4 ? 1 : -1];
|
||||
int dqsize[sizeof (dq) == 8 ? 1 : -1];
|
||||
int uqqsize[sizeof (qq) == 1 ? 1 : -1];
|
||||
int uhqsize[sizeof (hq) == 2 ? 1 : -1];
|
||||
int usqsize[sizeof (sq) == 4 ? 1 : -1];
|
||||
int udqsize[sizeof (dq) == 8 ? 1 : -1];
|
||||
int Sqqsize[sizeof (Sqq) == 1 ? 1 : -1];
|
||||
int Shqsize[sizeof (Shq) == 2 ? 1 : -1];
|
||||
int Ssqsize[sizeof (Ssq) == 4 ? 1 : -1];
|
||||
int Sdqsize[sizeof (Sdq) == 8 ? 1 : -1];
|
||||
int Suqqsize[sizeof (Sqq) == 1 ? 1 : -1];
|
||||
int Suhqsize[sizeof (Shq) == 2 ? 1 : -1];
|
||||
int Susqsize[sizeof (Ssq) == 4 ? 1 : -1];
|
||||
int Sudqsize[sizeof (Sdq) == 8 ? 1 : -1];
|
||||
int hasize[sizeof (ha) == 2 ? 1 : -1];
|
||||
int sasize[sizeof (sa) == 4 ? 1 : -1];
|
||||
int dasize[sizeof (da) == 8 ? 1 : -1];
|
||||
int uhasize[sizeof (uha) == 2 ? 1 : -1];
|
||||
int usasize[sizeof (usa) == 4 ? 1 : -1];
|
||||
int udasize[sizeof (uda) == 8 ? 1 : -1];
|
||||
int Shasize[sizeof (Sha) == 2 ? 1 : -1];
|
||||
int Ssasize[sizeof (Ssa) == 4 ? 1 : -1];
|
||||
int Sdasize[sizeof (Sda) == 8 ? 1 : -1];
|
||||
int Suhasize[sizeof (Suha) == 2 ? 1 : -1];
|
||||
int Susasize[sizeof (Susa) == 4 ? 1 : -1];
|
||||
int Sudasize[sizeof (Suda) == 8 ? 1 : -1];
|
||||
|
||||
int qqalign = __alignof (qq);
|
||||
int hqalign = __alignof (hq);
|
||||
int sqalign = __alignof (sq);
|
||||
int dqalign = __alignof (dq);
|
||||
int uqqalign = __alignof (uqq);
|
||||
int uhqalign = __alignof (uhq);
|
||||
int usqalign = __alignof (usq);
|
||||
int udqalign = __alignof (udq);
|
||||
int Sqqalign = __alignof (Sqq);
|
||||
int Shqalign = __alignof (Shq);
|
||||
int Ssqalign = __alignof (Ssq);
|
||||
int Sdqalign = __alignof (Sdq);
|
||||
int Suqqalign = __alignof (Suqq);
|
||||
int Suhqalign = __alignof (Suhq);
|
||||
int Susqalign = __alignof (Susq);
|
||||
int Sudqalign = __alignof (Sudq);
|
||||
int haalign = __alignof (ha);
|
||||
int saalign = __alignof (sa);
|
||||
int daalign = __alignof (da);
|
||||
int uhaalign = __alignof (uha);
|
||||
int usaalign = __alignof (usa);
|
||||
int udaalign = __alignof (uda);
|
||||
int Shaalign = __alignof (Sha);
|
||||
int Ssaalign = __alignof (Ssa);
|
||||
int Sdaalign = __alignof (Sda);
|
||||
int Suhaalign = __alignof (Suha);
|
||||
int Susaalign = __alignof (Susa);
|
||||
int Sudaalign = __alignof (Suda);
|
72
gcc/testsuite/gcc.dg/fixed-point/muldiv-warning.c
Normal file
72
gcc/testsuite/gcc.dg/fixed-point/muldiv-warning.c
Normal file
@ -0,0 +1,72 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* Check if GCC generates warnings when overflows for mul and div. */
|
||||
|
||||
short _Fract sf0 = __SFRACT_MIN__ * __SFRACT_MIN__; /* { dg-warning "overflow" } */
|
||||
_Fract f0 = __FRACT_MIN__ * __FRACT_MIN__; /* { dg-warning "overflow" } */
|
||||
long _Fract lf0 = __LFRACT_MIN__ * __LFRACT_MIN__; /* { dg-warning "overflow" } */
|
||||
long long _Fract llf0 = __LLFRACT_MIN__ * __LLFRACT_MIN__; /* { dg-warning "overflow" } */
|
||||
short _Fract sf1 = __SFRACT_MAX__ * __SFRACT_MIN__;
|
||||
_Fract f1 = __FRACT_MAX__ * __FRACT_MIN__;
|
||||
long _Fract lf1 = __LFRACT_MAX__ * __LFRACT_MIN__;
|
||||
long long _Fract llf1 = __LLFRACT_MAX__ * __LLFRACT_MIN__;
|
||||
short _Fract sf2 = __SFRACT_MIN__ / __SFRACT_MIN__; /* { dg-warning "overflow" } */
|
||||
_Fract f2 = __FRACT_MIN__ / __FRACT_MIN__; /* { dg-warning "overflow" } */
|
||||
long _Fract lf2 = __LFRACT_MIN__ / __LFRACT_MIN__; /* { dg-warning "overflow" } */
|
||||
long long _Fract llf2 = __LLFRACT_MIN__ / __LLFRACT_MIN__; /* { dg-warning "overflow" } */
|
||||
short _Fract sf3 = __SFRACT_MAX__ / __SFRACT_MIN__;
|
||||
_Fract f3 = __FRACT_MAX__ / __FRACT_MIN__;
|
||||
long _Fract lf3 = __LFRACT_MAX__ / __LFRACT_MIN__;
|
||||
long long _Fract llf3 = __LLFRACT_MAX__ / __LLFRACT_MIN__;
|
||||
|
||||
unsigned short _Fract usf0 = __USFRACT_MIN__ * __USFRACT_MIN__;
|
||||
unsigned _Fract uf0 = __UFRACT_MIN__ * __UFRACT_MIN__;
|
||||
unsigned long _Fract ulf0 = __ULFRACT_MIN__ * __ULFRACT_MIN__;
|
||||
unsigned long long _Fract ullf0 = __ULLFRACT_MIN__ * __ULLFRACT_MIN__;
|
||||
unsigned short _Fract usf1 = __USFRACT_MAX__ * __USFRACT_MIN__;
|
||||
unsigned _Fract uf1 = __UFRACT_MAX__ * __UFRACT_MIN__;
|
||||
unsigned long _Fract ulf1 = __ULFRACT_MAX__ * __ULFRACT_MIN__;
|
||||
unsigned long long _Fract ullf1 = __ULLFRACT_MAX__ * __ULLFRACT_MIN__;
|
||||
unsigned short _Fract usf2 = __USFRACT_MAX__ / __USFRACT_MAX__; /* { dg-warning "overflow" } */
|
||||
unsigned _Fract uf2 = __UFRACT_MAX__ / __UFRACT_MAX__; /* { dg-warning "overflow" } */
|
||||
unsigned long _Fract ulf2 = __ULFRACT_MAX__ / __ULFRACT_MAX__; /* { dg-warning "overflow" } */
|
||||
unsigned long long _Fract ullf2 = __ULLFRACT_MAX__ / __ULLFRACT_MAX__; /* { dg-warning "overflow" } */
|
||||
unsigned short _Fract usf3 = __USFRACT_MIN__ / __USFRACT_MAX__;
|
||||
unsigned _Fract uf3 = __UFRACT_MIN__ / __UFRACT_MAX__;
|
||||
unsigned long _Fract ulf3 = __ULFRACT_MIN__ / __ULFRACT_MAX__;
|
||||
unsigned long long _Fract ullf3 = __ULLFRACT_MIN__ / __ULLFRACT_MAX__;
|
||||
|
||||
short _Accum sa0 = __SACCUM_MIN__ * __SACCUM_MIN__; /* { dg-warning "overflow" } */
|
||||
_Accum a0 = __ACCUM_MIN__ * __ACCUM_MIN__; /* { dg-warning "overflow" } */
|
||||
long _Accum la0 = __LACCUM_MIN__ * __LACCUM_MIN__; /* { dg-warning "overflow" } */
|
||||
long long _Accum lla0 = __LLACCUM_MIN__ * __LLACCUM_MIN__; /* { dg-warning "overflow" } */
|
||||
short _Accum sa1 = __SACCUM_MAX__ * 0.1hk;
|
||||
_Accum a1 = __ACCUM_MAX__ * 0.1k;
|
||||
long _Accum la1 = __LACCUM_MAX__ * 0.1lk;
|
||||
long long _Accum lla1 = __LLACCUM_MAX__ * 0.1llk;
|
||||
short _Accum sa2 = __SACCUM_MIN__ / 0.1hk; /* { dg-warning "overflow" } */
|
||||
_Accum a2 = __ACCUM_MIN__ / 0.1k; /* { dg-warning "overflow" } */
|
||||
long _Accum la2 = __LACCUM_MIN__ / 0.1lk; /* { dg-warning "overflow" } */
|
||||
long long _Accum lla2 = __LLACCUM_MIN__ / 0.1llk; /* { dg-warning "overflow" } */
|
||||
short _Accum sa3 = __SACCUM_MAX__ / __SACCUM_MIN__;
|
||||
_Accum a3 = __ACCUM_MAX__ / __ACCUM_MIN__;
|
||||
long _Accum la3 = __LACCUM_MAX__ / __LACCUM_MIN__;
|
||||
long long _Accum lla3 = __LLACCUM_MAX__ / __LLACCUM_MIN__;
|
||||
|
||||
unsigned short _Accum usa0 = __USACCUM_MIN__ * __USACCUM_MIN__;
|
||||
unsigned _Accum ua0 = __UACCUM_MIN__ * __UACCUM_MIN__;
|
||||
unsigned long _Accum ula0 = __ULACCUM_MIN__ * __ULACCUM_MIN__;
|
||||
unsigned long long _Accum ulla0 = __ULLACCUM_MIN__ * __ULLACCUM_MIN__;
|
||||
unsigned short _Accum usa1 = __USACCUM_MAX__ * __USACCUM_MAX__; /* { dg-warning "overflow" } */
|
||||
unsigned _Accum ua1 = __UACCUM_MAX__ * __UACCUM_MAX__; /* { dg-warning "overflow" } */
|
||||
unsigned long _Accum ula1 = __ULACCUM_MAX__ * __ULACCUM_MAX__; /* { dg-warning "overflow" } */
|
||||
unsigned long long _Accum ulla1 = __ULLACCUM_MAX__ * __ULLACCUM_MAX__; /* { dg-warning "overflow" } */
|
||||
unsigned short _Accum usa2 = __USACCUM_MAX__ / 0.5hk; /* { dg-warning "overflow" } */
|
||||
unsigned _Accum ua2 = __UACCUM_MAX__ / 0.5k; /* { dg-warning "overflow" } */
|
||||
unsigned long _Accum ula2 = __ULACCUM_MAX__ / 0.5lk; /* { dg-warning "overflow" } */
|
||||
unsigned long long _Accum ulla2 = __ULLACCUM_MAX__ / 0.5llk; /* { dg-warning "overflow" } */
|
||||
unsigned short _Accum usa3 = __USACCUM_MIN__ / __USACCUM_MAX__;
|
||||
unsigned _Accum ua3 = __UACCUM_MIN__ / __UACCUM_MAX__;
|
||||
unsigned long _Accum ula3 = __ULACCUM_MIN__ / __ULACCUM_MAX__;
|
||||
unsigned long long _Accum ulla3 = __ULLACCUM_MIN__ / __ULLACCUM_MAX__;
|
53
gcc/testsuite/gcc.dg/fixed-point/noassoc.c
Normal file
53
gcc/testsuite/gcc.dg/fixed-point/noassoc.c
Normal file
@ -0,0 +1,53 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-std=gnu99 -O0" } */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
/* Make sure GCC knows there is no associativity for saturating types. */
|
||||
|
||||
/* Don't transform to (temp + (0.5r + 0.8r)) */
|
||||
_Sat _Fract add_test (_Sat _Fract temp)
|
||||
{
|
||||
return temp + 0.5r + 0.8r;
|
||||
}
|
||||
|
||||
/* Don't transform to (temp * ((-0.5r - 0.5r) * (-0.5r - 0.5r))) */
|
||||
_Sat _Fract mul_test (_Sat _Fract temp)
|
||||
{
|
||||
return temp * (-0.5r - 0.5r) * (-0.5r - 0.5r);
|
||||
}
|
||||
|
||||
/* Don't transform to ((temp1 + temp2) * 0.5r) */
|
||||
_Sat _Fract mul_add_test (_Sat _Fract temp1, _Sat _Fract temp2)
|
||||
{
|
||||
return temp1 * 0.5r + temp2 * 0.5r;
|
||||
}
|
||||
|
||||
/* Don't transform to ((temp1 - temp2) * 0.5r) */
|
||||
_Sat _Fract mul_sub_test (_Sat _Fract temp1, _Sat _Fract temp2)
|
||||
{
|
||||
return temp1 * 0.5r - temp2 * 0.5r;
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
_Sat _Fract a;
|
||||
|
||||
a = add_test (-0.5r);
|
||||
if (a != 0.8r)
|
||||
abort ();
|
||||
|
||||
a = mul_test (0.1r);
|
||||
if (a != 0.1r)
|
||||
abort ();
|
||||
|
||||
a = mul_add_test (0.75r, 0.5r);
|
||||
if (a != 0.625r)
|
||||
abort ();
|
||||
|
||||
a = mul_sub_test (0.75r, -0.5r);
|
||||
if (a != 0.625r)
|
||||
abort ();
|
||||
|
||||
return 0;
|
||||
}
|
167
gcc/testsuite/gcc.dg/fixed-point/operator-bitwise.c
Normal file
167
gcc/testsuite/gcc.dg/fixed-point/operator-bitwise.c
Normal file
@ -0,0 +1,167 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* C99 6.5.10: Bitwise AND operator.
|
||||
C99 6.5.11: Bitwise exclusive OR operator.
|
||||
C99 6.5.12: Bitwise inclusive OR operator.
|
||||
|
||||
Test that these operators do not accept fixed-point operands.
|
||||
Based on the test from ../dfp/. */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
#define OPERATE(OPRD1,OPRT,OPRD2) \
|
||||
do \
|
||||
{ \
|
||||
OPRD1 OPRT OPRD2; \
|
||||
} while (0)
|
||||
|
||||
|
||||
|
||||
#define BITWISE_OPERATOR(OPRT,OPRD) \
|
||||
do \
|
||||
{ \
|
||||
OPERATE(OPRD,OPRT,1); \
|
||||
OPERATE(OPRD,OPRT,0); \
|
||||
OPERATE(OPRD,OPRT,0x15); \
|
||||
OPERATE(0,OPRT,OPRD); \
|
||||
OPERATE(1,OPRT,OPRD); \
|
||||
OPERATE(0x15,OPRT,OPRD); \
|
||||
} while (0)
|
||||
|
||||
void operator_notfor_fixed_point()
|
||||
{
|
||||
short _Fract sf;
|
||||
_Fract f;
|
||||
long _Fract lf;
|
||||
long long _Fract llf;
|
||||
unsigned short _Fract usf;
|
||||
unsigned _Fract uf;
|
||||
unsigned long _Fract ulf;
|
||||
unsigned long long _Fract ullf;
|
||||
_Sat short _Fract Ssf;
|
||||
_Sat _Fract Sf;
|
||||
_Sat long _Fract Slf;
|
||||
_Sat long long _Fract Sllf;
|
||||
_Sat unsigned short _Fract Susf;
|
||||
_Sat unsigned _Fract Suf;
|
||||
_Sat unsigned long _Fract Sulf;
|
||||
_Sat unsigned long long _Fract Sullf;
|
||||
short _Accum sa;
|
||||
_Accum a;
|
||||
long _Accum la;
|
||||
long long _Accum lla;
|
||||
unsigned short _Accum usa;
|
||||
unsigned _Accum ua;
|
||||
unsigned long _Accum ula;
|
||||
unsigned long long _Accum ulla;
|
||||
_Sat short _Accum Ssa;
|
||||
_Sat _Accum Sa;
|
||||
_Sat long _Accum Sla;
|
||||
_Sat long long _Accum Slla;
|
||||
_Sat unsigned short _Accum Susa;
|
||||
_Sat unsigned _Accum Sua;
|
||||
_Sat unsigned long _Accum Sula;
|
||||
_Sat unsigned long long _Accum Sulla;
|
||||
|
||||
/* C99 Section 6.5.{10,11,12} Bitwise operator. Constraints: Each of
|
||||
the operands shall have integer type. Fixed-point type is rejected
|
||||
by compiler when bitwise operation is performed. */
|
||||
|
||||
BITWISE_OPERATOR(&,sf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,sf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,sf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,f); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,f); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,f); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,lf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,lf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,lf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,llf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,llf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,llf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,usf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,usf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,usf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,uf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,uf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,uf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,ulf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,ulf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,ulf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,ullf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,ullf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,ullf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,Ssf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,Ssf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,Ssf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,Sf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,Sf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,Sf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,Slf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,Slf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,Slf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,Sllf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,Sllf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,Sllf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,Susf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,Susf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,Susf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,Suf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,Suf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,Suf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,Sulf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,Sulf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,Sulf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,Sullf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,Sullf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,Sullf); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,sa); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,sa); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,sa); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,a); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,a); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,a); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,la); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,la); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,la); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,lla); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,lla); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,lla); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,usa); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,usa); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,usa); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,ua); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,ua); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,ua); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,ula); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,ula); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,ula); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,ulla); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,ulla); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,ulla); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,Ssa); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,Ssa); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,Ssa); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,Sa); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,Sa); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,Sa); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,Sla); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,Sla); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,Sla); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,Slla); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,Slla); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,Slla); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,Susa); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,Susa); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,Susa); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,Sua); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,Sua); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,Sua); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,Sula); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,Sula); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,Sula); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(&,Sulla); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(|,Sulla); /* { dg-error "invalid operands to binary" } */
|
||||
BITWISE_OPERATOR(^,Sulla); /* { dg-error "invalid operands to binary" } */
|
||||
}
|
98
gcc/testsuite/gcc.dg/fixed-point/operator-comma.c
Normal file
98
gcc/testsuite/gcc.dg/fixed-point/operator-comma.c
Normal file
@ -0,0 +1,98 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-std=gnu99 -O0" } */
|
||||
|
||||
/* C99 6.5.17: Comma operator.
|
||||
Test with fixed-point operands.
|
||||
Based on the test from ../dfp/. */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
#define FUNC(TYPE,NAME,PF) \
|
||||
volatile TYPE NAME ## a, NAME ## b, NAME ## c; \
|
||||
void \
|
||||
init_ ## NAME () \
|
||||
{ \
|
||||
NAME ## b = 0.2 ## PF; \
|
||||
NAME ## c = 0.3 ## PF; \
|
||||
}
|
||||
|
||||
FUNC (short _Fract, sf, hr)
|
||||
FUNC (_Fract, f, r)
|
||||
FUNC (long _Fract, lf, lr)
|
||||
FUNC (long long _Fract, llf, llr)
|
||||
FUNC (unsigned short _Fract, usf, uhr)
|
||||
FUNC (unsigned _Fract, uf, ur)
|
||||
FUNC (unsigned long _Fract, ulf, ulr)
|
||||
FUNC (long long _Fract, ullf, ullr)
|
||||
FUNC (_Sat short _Fract, Ssf, hr)
|
||||
FUNC (_Sat _Fract, Sf, r)
|
||||
FUNC (_Sat long _Fract, Slf, lr)
|
||||
FUNC (_Sat long long _Fract, Sllf, llr)
|
||||
FUNC (_Sat unsigned short _Fract, Susf, uhr)
|
||||
FUNC (_Sat unsigned _Fract, Suf, ur)
|
||||
FUNC (_Sat unsigned long _Fract, Sulf, ulr)
|
||||
FUNC (_Sat long long _Fract, Sullf, ullr)
|
||||
FUNC (short _Accum, sa, hk)
|
||||
FUNC (_Accum, a, k)
|
||||
FUNC (long _Accum, la, lk)
|
||||
FUNC (long long _Accum, lla, llk)
|
||||
FUNC (unsigned short _Accum, usa, uhk)
|
||||
FUNC (unsigned _Accum, ua, uk)
|
||||
FUNC (unsigned long _Accum, ula, ulk)
|
||||
FUNC (long long _Accum, ulla, ullk)
|
||||
FUNC (_Sat short _Accum, Ssa, hk)
|
||||
FUNC (_Sat _Accum, Sa, k)
|
||||
FUNC (_Sat long _Accum, Sla, lk)
|
||||
FUNC (_Sat long long _Accum, Slla, llk)
|
||||
FUNC (_Sat unsigned short _Accum, Susa, uhk)
|
||||
FUNC (_Sat unsigned _Accum, Sua, uk)
|
||||
FUNC (_Sat unsigned long _Accum, Sula, ulk)
|
||||
FUNC (_Sat long long _Accum, Sulla, ullk)
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
#define TEST(NAME) \
|
||||
init_ ## NAME (); \
|
||||
NAME ## a = (NAME ## b, NAME ## c); \
|
||||
if (NAME ## a != NAME ## c) \
|
||||
abort (); \
|
||||
NAME ## a = (NAME ## c, 123, NAME ## b); \
|
||||
if (NAME ## a != NAME ## b) \
|
||||
abort ();
|
||||
|
||||
TEST(sf)
|
||||
TEST(f)
|
||||
TEST(lf)
|
||||
TEST(llf)
|
||||
TEST(usf)
|
||||
TEST(uf)
|
||||
TEST(ulf)
|
||||
TEST(ullf)
|
||||
TEST(Ssf)
|
||||
TEST(Sf)
|
||||
TEST(Slf)
|
||||
TEST(Sllf)
|
||||
TEST(Susf)
|
||||
TEST(Suf)
|
||||
TEST(Sulf)
|
||||
TEST(Sullf)
|
||||
TEST(sa)
|
||||
TEST(a)
|
||||
TEST(la)
|
||||
TEST(lla)
|
||||
TEST(usa)
|
||||
TEST(ua)
|
||||
TEST(ula)
|
||||
TEST(ulla)
|
||||
TEST(Ssa)
|
||||
TEST(Sa)
|
||||
TEST(Sla)
|
||||
TEST(Slla)
|
||||
TEST(Susa)
|
||||
TEST(Sua)
|
||||
TEST(Sula)
|
||||
TEST(Sulla)
|
||||
|
||||
return 0;
|
||||
}
|
101
gcc/testsuite/gcc.dg/fixed-point/operator-cond.c
Normal file
101
gcc/testsuite/gcc.dg/fixed-point/operator-cond.c
Normal file
@ -0,0 +1,101 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-std=gnu99 -O0" } */
|
||||
|
||||
/* C99 6.5.15 Conditional operator.
|
||||
Test with fixed-point operands.
|
||||
Based on the test from ../dfp/. */
|
||||
|
||||
extern void abort (void);
|
||||
volatile int yes, no;
|
||||
|
||||
#define FUNC(TYPE,NAME,PF) \
|
||||
volatile TYPE NAME ## a, NAME ## b, NAME ## c; \
|
||||
void \
|
||||
init_ ## NAME () \
|
||||
{ \
|
||||
NAME ## b = 0.2 ## PF; \
|
||||
NAME ## c = 0.3 ## PF; \
|
||||
yes = 1; \
|
||||
no = 0; \
|
||||
}
|
||||
|
||||
FUNC (short _Fract, sf, hr)
|
||||
FUNC (_Fract, f, r)
|
||||
FUNC (long _Fract, lf, lr)
|
||||
FUNC (long long _Fract, llf, llr)
|
||||
FUNC (unsigned short _Fract, usf, uhr)
|
||||
FUNC (unsigned _Fract, uf, ur)
|
||||
FUNC (unsigned long _Fract, ulf, ulr)
|
||||
FUNC (long long _Fract, ullf, ullr)
|
||||
FUNC (_Sat short _Fract, Ssf, hr)
|
||||
FUNC (_Sat _Fract, Sf, r)
|
||||
FUNC (_Sat long _Fract, Slf, lr)
|
||||
FUNC (_Sat long long _Fract, Sllf, llr)
|
||||
FUNC (_Sat unsigned short _Fract, Susf, uhr)
|
||||
FUNC (_Sat unsigned _Fract, Suf, ur)
|
||||
FUNC (_Sat unsigned long _Fract, Sulf, ulr)
|
||||
FUNC (_Sat long long _Fract, Sullf, ullr)
|
||||
FUNC (short _Accum, sa, hk)
|
||||
FUNC (_Accum, a, k)
|
||||
FUNC (long _Accum, la, lk)
|
||||
FUNC (long long _Accum, lla, llk)
|
||||
FUNC (unsigned short _Accum, usa, uhk)
|
||||
FUNC (unsigned _Accum, ua, uk)
|
||||
FUNC (unsigned long _Accum, ula, ulk)
|
||||
FUNC (long long _Accum, ulla, ullk)
|
||||
FUNC (_Sat short _Accum, Ssa, hk)
|
||||
FUNC (_Sat _Accum, Sa, k)
|
||||
FUNC (_Sat long _Accum, Sla, lk)
|
||||
FUNC (_Sat long long _Accum, Slla, llk)
|
||||
FUNC (_Sat unsigned short _Accum, Susa, uhk)
|
||||
FUNC (_Sat unsigned _Accum, Sua, uk)
|
||||
FUNC (_Sat unsigned long _Accum, Sula, ulk)
|
||||
FUNC (_Sat long long _Accum, Sulla, ullk)
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
#define TEST(NAME) \
|
||||
init_ ## NAME (); \
|
||||
NAME ## a = yes ? NAME ## b : NAME ## c; \
|
||||
if (NAME ## a != NAME ## b) \
|
||||
abort (); \
|
||||
NAME ## a = no ? NAME ## b : NAME ## c; \
|
||||
if (NAME ## a != NAME ## c) \
|
||||
abort ();
|
||||
|
||||
TEST(sf)
|
||||
TEST(f)
|
||||
TEST(lf)
|
||||
TEST(llf)
|
||||
TEST(usf)
|
||||
TEST(uf)
|
||||
TEST(ulf)
|
||||
TEST(ullf)
|
||||
TEST(Ssf)
|
||||
TEST(Sf)
|
||||
TEST(Slf)
|
||||
TEST(Sllf)
|
||||
TEST(Susf)
|
||||
TEST(Suf)
|
||||
TEST(Sulf)
|
||||
TEST(Sullf)
|
||||
TEST(sa)
|
||||
TEST(a)
|
||||
TEST(la)
|
||||
TEST(lla)
|
||||
TEST(usa)
|
||||
TEST(ua)
|
||||
TEST(ula)
|
||||
TEST(ulla)
|
||||
TEST(Ssa)
|
||||
TEST(Sa)
|
||||
TEST(Sla)
|
||||
TEST(Slla)
|
||||
TEST(Susa)
|
||||
TEST(Sua)
|
||||
TEST(Sula)
|
||||
TEST(Sulla)
|
||||
|
||||
return 0;
|
||||
}
|
115
gcc/testsuite/gcc.dg/fixed-point/operator-logical.c
Normal file
115
gcc/testsuite/gcc.dg/fixed-point/operator-logical.c
Normal file
@ -0,0 +1,115 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* C99 Logical AND operator.
|
||||
C99 Logical OR operator.
|
||||
Test with fixed-point operands.
|
||||
Based on the test from ../dfp/. */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
#define OPERATE(OPRD1,OPRT,OPRD2,RLT) \
|
||||
do \
|
||||
{ \
|
||||
if (( (OPRD1) OPRT (OPRD2) )!= RLT) \
|
||||
abort (); \
|
||||
} while (0)
|
||||
|
||||
#define FIXED_POINT_LOGICAL(OPRD) \
|
||||
do \
|
||||
{ \
|
||||
OPRD = 0.1; \
|
||||
OPERATE(1,||,OPRD,1); \
|
||||
OPERATE(0,||,OPRD,1); \
|
||||
OPERATE(OPRD,||,1,1); \
|
||||
OPERATE(OPRD,||,0,1); \
|
||||
OPRD = 0; \
|
||||
OPERATE(1,||,OPRD,1); \
|
||||
OPERATE(0,||,OPRD,0); \
|
||||
OPERATE(OPRD,||,1,1); \
|
||||
OPERATE(OPRD,||,0,0); \
|
||||
OPRD = 0.1; \
|
||||
OPERATE(1,&&,OPRD,1); \
|
||||
OPERATE(0,&&,OPRD,0); \
|
||||
OPERATE(OPRD,&&,1,1); \
|
||||
OPERATE(OPRD,&&,0,0); \
|
||||
OPRD = 0; \
|
||||
OPERATE(1,&&,OPRD,0); \
|
||||
OPERATE(0,&&,OPRD,0); \
|
||||
OPERATE(OPRD,&&,1,0); \
|
||||
OPERATE(OPRD,&&,0,0); \
|
||||
} while (0)
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
short _Fract sf;
|
||||
_Fract f;
|
||||
long _Fract lf;
|
||||
long long _Fract llf;
|
||||
unsigned short _Fract usf;
|
||||
unsigned _Fract uf;
|
||||
unsigned long _Fract ulf;
|
||||
unsigned long long _Fract ullf;
|
||||
_Sat short _Fract Ssf;
|
||||
_Sat _Fract Sf;
|
||||
_Sat long _Fract Slf;
|
||||
_Sat long long _Fract Sllf;
|
||||
_Sat unsigned short _Fract Susf;
|
||||
_Sat unsigned _Fract Suf;
|
||||
_Sat unsigned long _Fract Sulf;
|
||||
_Sat unsigned long long _Fract Sullf;
|
||||
short _Accum sa;
|
||||
_Accum a;
|
||||
long _Accum la;
|
||||
long long _Accum lla;
|
||||
unsigned short _Accum usa;
|
||||
unsigned _Accum ua;
|
||||
unsigned long _Accum ula;
|
||||
unsigned long long _Accum ulla;
|
||||
_Sat short _Accum Ssa;
|
||||
_Sat _Accum Sa;
|
||||
_Sat long _Accum Sla;
|
||||
_Sat long long _Accum Slla;
|
||||
_Sat unsigned short _Accum Susa;
|
||||
_Sat unsigned _Accum Sua;
|
||||
_Sat unsigned long _Accum Sula;
|
||||
_Sat unsigned long long _Accum Sulla;
|
||||
|
||||
/* C99 Section 6.5.{13,14} Logical operator. Constraints Each of the
|
||||
operands shall have scalar type. Fixed-point types would obey this. */
|
||||
FIXED_POINT_LOGICAL (sf);
|
||||
FIXED_POINT_LOGICAL (f);
|
||||
FIXED_POINT_LOGICAL (lf);
|
||||
FIXED_POINT_LOGICAL (llf);
|
||||
FIXED_POINT_LOGICAL (usf);
|
||||
FIXED_POINT_LOGICAL (uf);
|
||||
FIXED_POINT_LOGICAL (ulf);
|
||||
FIXED_POINT_LOGICAL (ullf);
|
||||
FIXED_POINT_LOGICAL (Ssf);
|
||||
FIXED_POINT_LOGICAL (Sf);
|
||||
FIXED_POINT_LOGICAL (Slf);
|
||||
FIXED_POINT_LOGICAL (Sllf);
|
||||
FIXED_POINT_LOGICAL (Susf);
|
||||
FIXED_POINT_LOGICAL (Suf);
|
||||
FIXED_POINT_LOGICAL (Sulf);
|
||||
FIXED_POINT_LOGICAL (Sullf);
|
||||
FIXED_POINT_LOGICAL (sa);
|
||||
FIXED_POINT_LOGICAL (a);
|
||||
FIXED_POINT_LOGICAL (la);
|
||||
FIXED_POINT_LOGICAL (lla);
|
||||
FIXED_POINT_LOGICAL (usa);
|
||||
FIXED_POINT_LOGICAL (ua);
|
||||
FIXED_POINT_LOGICAL (ula);
|
||||
FIXED_POINT_LOGICAL (ulla);
|
||||
FIXED_POINT_LOGICAL (Ssa);
|
||||
FIXED_POINT_LOGICAL (Sa);
|
||||
FIXED_POINT_LOGICAL (Sla);
|
||||
FIXED_POINT_LOGICAL (Slla);
|
||||
FIXED_POINT_LOGICAL (Susa);
|
||||
FIXED_POINT_LOGICAL (Sua);
|
||||
FIXED_POINT_LOGICAL (Sula);
|
||||
FIXED_POINT_LOGICAL (Sulla);
|
||||
|
||||
return 0;
|
||||
}
|
58
gcc/testsuite/gcc.dg/fixed-point/operator-unary.c
Normal file
58
gcc/testsuite/gcc.dg/fixed-point/operator-unary.c
Normal file
@ -0,0 +1,58 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* C99 6.5.3 Unary operators & and *.
|
||||
Based on the test from ../dfp/. */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
#define UNARY_OPERATOR(TYPE,SUFFIX) \
|
||||
do \
|
||||
{ \
|
||||
TYPE unary_d = 0.1 ## SUFFIX; \
|
||||
TYPE* unary_dp; \
|
||||
/* & operator. */ \
|
||||
unary_dp = &(unary_d); \
|
||||
/* * operator. */ \
|
||||
unary_d = *(unary_dp); \
|
||||
} while (0)
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
/* C99 6.5.3 Unary operators. */
|
||||
UNARY_OPERATOR(short _Fract, hr);
|
||||
UNARY_OPERATOR(_Fract, r);
|
||||
UNARY_OPERATOR(long _Fract, lr);
|
||||
UNARY_OPERATOR(long long _Fract, llr);
|
||||
UNARY_OPERATOR(unsigned short _Fract, uhr);
|
||||
UNARY_OPERATOR(unsigned _Fract, ur);
|
||||
UNARY_OPERATOR(unsigned long _Fract, ulr);
|
||||
UNARY_OPERATOR(unsigned long long _Fract, ullr);
|
||||
UNARY_OPERATOR(_Sat short _Fract, hr);
|
||||
UNARY_OPERATOR(_Sat _Fract, r);
|
||||
UNARY_OPERATOR(_Sat long _Fract, lr);
|
||||
UNARY_OPERATOR(_Sat long long _Fract, llr);
|
||||
UNARY_OPERATOR(_Sat unsigned short _Fract, uhr);
|
||||
UNARY_OPERATOR(_Sat unsigned _Fract, ur);
|
||||
UNARY_OPERATOR(_Sat unsigned long _Fract, ulr);
|
||||
UNARY_OPERATOR(_Sat unsigned long long _Fract, ullr);
|
||||
UNARY_OPERATOR(short _Accum, hk);
|
||||
UNARY_OPERATOR(_Accum, k);
|
||||
UNARY_OPERATOR(long _Accum, lk);
|
||||
UNARY_OPERATOR(long long _Accum, llk);
|
||||
UNARY_OPERATOR(unsigned short _Accum, uhk);
|
||||
UNARY_OPERATOR(unsigned _Accum, uk);
|
||||
UNARY_OPERATOR(unsigned long _Accum, ulk);
|
||||
UNARY_OPERATOR(unsigned long long _Accum, ullk);
|
||||
UNARY_OPERATOR(_Sat short _Accum, hk);
|
||||
UNARY_OPERATOR(_Sat _Accum, k);
|
||||
UNARY_OPERATOR(_Sat long _Accum, lk);
|
||||
UNARY_OPERATOR(_Sat long long _Accum, llk);
|
||||
UNARY_OPERATOR(_Sat unsigned short _Accum, uhk);
|
||||
UNARY_OPERATOR(_Sat unsigned _Accum, uk);
|
||||
UNARY_OPERATOR(_Sat unsigned long _Accum, ulk);
|
||||
UNARY_OPERATOR(_Sat unsigned long long _Accum, ullk);
|
||||
|
||||
return 0;
|
||||
}
|
77
gcc/testsuite/gcc.dg/fixed-point/struct-layout-1.c
Normal file
77
gcc/testsuite/gcc.dg/fixed-point/struct-layout-1.c
Normal file
@ -0,0 +1,77 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* This test is based on the test from ../dfp/. */
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
struct S1
|
||||
{
|
||||
long _Fract a[0];
|
||||
};
|
||||
|
||||
struct S2
|
||||
{
|
||||
struct
|
||||
{
|
||||
long _Fract e;
|
||||
} b[0];
|
||||
};
|
||||
|
||||
struct S3
|
||||
{
|
||||
union
|
||||
{
|
||||
long _Fract c;
|
||||
} a[0];
|
||||
};
|
||||
|
||||
struct S4
|
||||
{
|
||||
int a[0];
|
||||
long _Fract b[0];
|
||||
};
|
||||
|
||||
struct S5
|
||||
{
|
||||
union
|
||||
{
|
||||
long _Fract c[0];
|
||||
} a;
|
||||
};
|
||||
|
||||
int check_var (int z, ...)
|
||||
{
|
||||
long long result;
|
||||
va_list ap;
|
||||
va_start (ap, z);
|
||||
va_arg (ap, struct S1);
|
||||
result = va_arg (ap, long long);
|
||||
va_end (ap);
|
||||
|
||||
return (result == 2LL);
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
struct S1 s1;
|
||||
struct S2 s2;
|
||||
struct S3 s3;
|
||||
struct S4 s4;
|
||||
struct S5 s5;
|
||||
|
||||
if (check_var (2, s1, 2LL) == 0)
|
||||
abort ();
|
||||
if (check_var (2, s2, 2LL) == 0)
|
||||
abort ();
|
||||
if (check_var (2, s3, 2LL) == 0)
|
||||
abort ();
|
||||
if (check_var (2, s4, 2LL) == 0)
|
||||
abort ();
|
||||
if (check_var (2, s5, 2LL) == 0)
|
||||
abort ();
|
||||
|
||||
return 0;
|
||||
}
|
63
gcc/testsuite/gcc.dg/fixed-point/struct-union.c
Normal file
63
gcc/testsuite/gcc.dg/fixed-point/struct-union.c
Normal file
@ -0,0 +1,63 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O -Wall" } */
|
||||
|
||||
/* C99 6.5.2.3 Structure and union members.
|
||||
If the first expression has qualified type, the result has the so-qualified
|
||||
version of the type of the designated member.
|
||||
Based on the test from ../dfp/. */
|
||||
|
||||
struct s {_Fract f; const long _Fract lf;};
|
||||
struct sv { volatile _Fract f; volatile long _Fract lf; };
|
||||
union u
|
||||
{
|
||||
const long _Fract lf;
|
||||
_Fract f;
|
||||
const struct s cs;
|
||||
};
|
||||
|
||||
struct s s;
|
||||
struct sv sv;
|
||||
const struct s cs;
|
||||
|
||||
union u u;
|
||||
const union u cu;
|
||||
|
||||
struct s g (struct s s)
|
||||
{
|
||||
return s;
|
||||
}
|
||||
|
||||
union u h (union u u)
|
||||
{
|
||||
return u;
|
||||
}
|
||||
|
||||
void f()
|
||||
{
|
||||
cs.f = 0.1r; /* { dg-error "assignment of read-only variable" } */
|
||||
cs.lf = 0.2lr; /* { dg-error "assignment of read-only variable" } */
|
||||
s.lf = 0.3lr; /* { dg-error "assignment of read-only member" } */
|
||||
|
||||
s.f = 0.4r;
|
||||
u.f = 0.5r;
|
||||
|
||||
u.lf = 0.6lr; /* { dg-error "assignment of read-only member" } */
|
||||
u.cs.f = 0.7r; /* { dg-error "assignment of read-only member" } */
|
||||
u.cs.lf = 0.8lr; /* { dg-error "assignment of read-only member" } */
|
||||
|
||||
cu.f = 0.9r; /* { dg-error "assignment of read-only variable" } */
|
||||
|
||||
cu.lf = 0.01lr; /* { dg-error "assignment of read-only variable" } */
|
||||
cu.cs.f = 0.02r; /* { dg-error "assignment of read-only variable" } */
|
||||
cu.cs.lf = 0.03lr; /* { dg-error "assignment of read-only variable" } */
|
||||
|
||||
/* f().x is a valid postfix expression but is not an lvalue if
|
||||
function f() returning a structure or union. */
|
||||
g(s).f = 0.04r; /* { dg-error "lvalue required" } */
|
||||
h(u).lf = 0.05lr; /* { dg-error "lvalue required" } */
|
||||
|
||||
/* Test assignment to volatile structure members. */
|
||||
sv.f = 0.06r;
|
||||
sv.lf = 0.07lr;
|
||||
}
|
||||
|
40
gcc/testsuite/gcc.dg/fixed-point/types.c
Normal file
40
gcc/testsuite/gcc.dg/fixed-point/types.c
Normal file
@ -0,0 +1,40 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* N1169 6.3.1.3a - Fixed-point types (NEW CLAUSE).
|
||||
|
||||
Check if all types are ok. */
|
||||
|
||||
short _Fract q0;
|
||||
_Fract q1;
|
||||
long _Fract q2;
|
||||
long long _Fract q3;
|
||||
unsigned short _Fract q4;
|
||||
unsigned _Fract q5;
|
||||
unsigned long _Fract q6;
|
||||
unsigned long long _Fract q7;
|
||||
_Sat short _Fract sq0;
|
||||
_Sat _Fract sq1;
|
||||
_Sat long _Fract sq2;
|
||||
_Sat long long _Fract sq3;
|
||||
_Sat unsigned short _Fract sq4;
|
||||
_Sat unsigned _Fract sq5;
|
||||
_Sat unsigned long _Fract sq6;
|
||||
_Sat unsigned long long _Fract sq7;
|
||||
|
||||
short _Accum a0;
|
||||
_Accum a1;
|
||||
long _Accum a2;
|
||||
long long _Accum a3;
|
||||
unsigned short _Accum a4;
|
||||
unsigned _Accum a5;
|
||||
unsigned long _Accum a6;
|
||||
unsigned long long _Accum a7;
|
||||
_Sat short _Accum sa0;
|
||||
_Sat _Accum sa1;
|
||||
_Sat long _Accum sa2;
|
||||
_Sat long long _Accum sa3;
|
||||
_Sat unsigned short _Accum sa4;
|
||||
_Sat unsigned _Accum sa5;
|
||||
_Sat unsigned long _Accum sa6;
|
||||
_Sat unsigned long long _Accum sa7;
|
303
gcc/testsuite/gcc.dg/fixed-point/typespec.c
Normal file
303
gcc/testsuite/gcc.dg/fixed-point/typespec.c
Normal file
@ -0,0 +1,303 @@
|
||||
/* Test for valid and invalid combinations of type specifiers.
|
||||
Based off gcc.dg/test-spec-1.c */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
typedef char type;
|
||||
|
||||
void _Fract *x0; /* { dg-error "" "void _Fract" } */
|
||||
char _Fract *x3; /* { dg-error "" "char _Fract" } */
|
||||
short _Fract *x6;
|
||||
int _Fract *x9; /* { dg-error "" "int _Fract" } */
|
||||
long _Fract *x12;
|
||||
float _Fract *x15; /* { dg-error "" "float _Fract" } */
|
||||
double _Fract *x18; /* { dg-error "" "double _Fract" } */
|
||||
signed _Fract *x21;
|
||||
_Bool _Fract *x24; /* { dg-error "" "_Bool _Fract" } */
|
||||
int _Fract *x27; /* { dg-error "" "int _Fract" } */
|
||||
type _Fract *x30; /* { dg-error "" "type _Fract" } */
|
||||
char signed _Fract *x33; /* { dg-error "" "char signed _Fract" } */
|
||||
char unsigned _Fract *x36; /* { dg-error "" "char unsigned _Fract" } */
|
||||
short _Fract *x39;
|
||||
short signed _Fract *x42;
|
||||
short unsigned _Fract *x45;
|
||||
_Fract short*x48;
|
||||
_Fract short signed*x51;
|
||||
_Fract short unsigned*x54;
|
||||
_Fract long*x57;
|
||||
_Fract long signed*x60;
|
||||
_Fract long unsigned*x63;
|
||||
_Fract signed long*x66;
|
||||
_Fract signed short*x69;
|
||||
int signed _Fract *x72; /* { dg-error "" "int signed _Fract" } */
|
||||
int unsigned _Fract *x75; /* { dg-error "" "int unsigned _Fract" } */
|
||||
long int _Fract *x78; /* { dg-error "" "long int _Fract" } */
|
||||
long long _Fract *x81;
|
||||
long double _Fract *x84; /* { dg-error "" "long double _Fract" } */
|
||||
long signed _Fract *x87;
|
||||
long unsigned _Fract *x90;
|
||||
double long _Fract *x93; /* { dg-error "" "double long _Fract" } */
|
||||
signed char _Fract *x96; /* { dg-error "" "signed char _Fract" } */
|
||||
signed short _Fract *x99;
|
||||
signed int _Fract *x102; /* { dg-error "" "signed int _Fract" } */
|
||||
signed long _Fract *x105;
|
||||
unsigned char _Fract *x108; /* { dg-error "" "unsigned char _Fract" } */
|
||||
unsigned short _Fract *x111;
|
||||
unsigned int _Fract *x114; /* { dg-error "" "unsigned int _Fract" } */
|
||||
unsigned long _Fract *x117;
|
||||
short int signed _Fract *x120; /* { dg-error "" "short int signed _Fract" } */
|
||||
short int unsigned _Fract *x123; /* { dg-error "" "short int unsigned _Fract" } */
|
||||
short signed int _Fract *x126; /* { dg-error "" "short signed int _Fract" } */
|
||||
short unsigned int _Fract *x129; /* { dg-error "" "short unsigned int _Fract" } */
|
||||
int short signed _Fract *x132; /* { dg-error "" "int short signed _Fract" } */
|
||||
int short unsigned _Fract *x135; /* { dg-error "" "int short unsigned _Fract" } */
|
||||
int long long _Fract *x138; /* { dg-error "" "int long long _Fract" } */
|
||||
int long signed _Fract *x141; /* { dg-error "" "int long signed _Fract" } */
|
||||
int long unsigned _Fract *x144; /* { dg-error "" "int long unsigned _Fract" } */
|
||||
int signed short _Fract *x147; /* { dg-error "" "int signed short _Fract" } */
|
||||
int signed long _Fract *x150; /* { dg-error "" "int signed long _Fract" } */
|
||||
int unsigned short _Fract *x153; /* { dg-error "" "int unsigned short _Fract" } */
|
||||
int unsigned long _Fract *x156; /* { dg-error "" "int unsigned long _Fract" } */
|
||||
long int long _Fract *x159; /* { dg-error "" "long int long _Fract" } */
|
||||
long int signed _Fract *x162; /* { dg-error "" "long int signed _Fract" } */
|
||||
long int unsigned _Fract *x165; /* { dg-error "" "long int unsigned _Fract" } */
|
||||
long long int _Fract *x168; /* { dg-error "" "long long int _Fract" } */
|
||||
long long signed _Fract *x171;
|
||||
long long unsigned _Fract *x175;
|
||||
long signed int _Fract *x178; /* { dg-error "" "long signed int _Fract" } */
|
||||
long unsigned int _Fract *x181; /* { dg-error "" "long unsigned int _Fract" } */
|
||||
long unsigned long _Fract *x184;
|
||||
signed short int _Fract *x187; /* { dg-error "" "signed short int _Fract" } */
|
||||
signed int short _Fract *x190; /* { dg-error "" "signed int short _Fract" } */
|
||||
signed int long _Fract *x192; /* { dg-error "" "signed int long _Fract" } */
|
||||
signed long int _Fract *x195; /* { dg-error "" "signed long int _Fract" } */
|
||||
signed long long _Fract *x198;
|
||||
unsigned short int _Fract *x201; /* { dg-error "" "unsigned short int _Fract" } */
|
||||
unsigned int short _Fract *x204; /* { dg-error "" "unsigned int short _Fract" } */
|
||||
unsigned int long _Fract *x207; /* { dg-error "" "unsigned int long _Fract" } */
|
||||
unsigned long int _Fract *x210; /* { dg-error "" "unsigned long int _Fract" } */
|
||||
unsigned long long _Fract *x213;
|
||||
int long long signed _Fract *x216; /* { dg-error "" "int long long signed _Fract" } */
|
||||
int long long unsigned _Fract *x219; /* { dg-error "" "int long long unsigned _Fract" } */
|
||||
int long signed long _Fract *x222; /* { dg-error "" "int long signed long _Fract" } */
|
||||
int long unsigned long _Fract *x226; /* { dg-error "" "int long unsigned long _Fract" } */
|
||||
int signed long long _Fract *x229; /* { dg-error "" "int signed long long _Fract" } */
|
||||
int unsigned long long _Fract *x232; /* { dg-error "" "int unsigned long long _Fract" } */
|
||||
long int long signed _Fract *x235; /* { dg-error "" "long int long signed _Fract" } */
|
||||
long int long unsigned _Fract *x238; /* { dg-error "" "long int long unsigned _Fract" } */
|
||||
long int signed long _Fract *x241; /* { dg-error "" "long int signed long _Fract" } */
|
||||
long int unsigned long _Fract *x244; /* { dg-error "" "long int unsigned long _Fract" } */
|
||||
long long int signed _Fract *x247; /* { dg-error "" "long long int signed _Fract" } */
|
||||
long long int unsigned _Fract *x250; /* { dg-error "" "long long int unsigned _Fract" } */
|
||||
long long signed int _Fract *x253; /* { dg-error "" "long long signed int _Fract" } */
|
||||
long long unsigned int _Fract *x256; /* { dg-error "" "long long unsigned int _Fract" } */
|
||||
long signed int long _Fract *x259; /* { dg-error "" "long signed int long _Fract" } */
|
||||
long signed long int _Fract *x262; /* { dg-error "" "long signed long int _Fract" } */
|
||||
long unsigned int long _Fract *x265; /* { dg-error "" "long unsigned int long _Fract" } */
|
||||
long unsigned long int _Fract *x268; /* { dg-error "" "long unsigned long int _Fract" } */
|
||||
signed long long int _Fract *x271; /* { dg-error "" "signed long long int _Fract" } */
|
||||
unsigned int long long _Fract *x274; /* { dg-error "" "unsigned int long long _Fract" } */
|
||||
unsigned long int long _Fract *x277; /* { dg-error "" "unsigned long int long _Fract" } */
|
||||
unsigned long long int _Fract *x280; /* { dg-error "" "unsigned long long int _Fract" } */
|
||||
_Complex _Fract *x283; /* { dg-error "" "_Complex _Fract" } */
|
||||
_Fract _Complex *x286; /* { dg-error "" "_Fract _Complex" } */
|
||||
unsigned _Fract *x289;
|
||||
signed _Fract *x292;
|
||||
|
||||
void _Accum *k0; /* { dg-error "" "void _Accum" } */
|
||||
char _Accum *k3; /* { dg-error "" "char _Accum" } */
|
||||
short _Accum *k6;
|
||||
int _Accum *k9; /* { dg-error "" "int _Accum" } */
|
||||
long _Accum *k12;
|
||||
float _Accum *k15; /* { dg-error "" "float _Accum" } */
|
||||
double _Accum *k18; /* { dg-error "" "double _Accum" } */
|
||||
signed _Accum *k21;
|
||||
_Bool _Accum *k24; /* { dg-error "" "_Bool _Accum" } */
|
||||
int _Accum *k27; /* { dg-error "" "int _Accum" } */
|
||||
type _Accum *k30; /* { dg-error "" "type _Accum" } */
|
||||
char signed _Accum *k33; /* { dg-error "" "char signed _Accum" } */
|
||||
char unsigned _Accum *k36; /* { dg-error "" "char unsigned _Accum" } */
|
||||
short _Accum *k39;
|
||||
short signed _Accum *k42;
|
||||
short unsigned _Accum *k45;
|
||||
_Accum short*k48;
|
||||
_Accum short signed*k51;
|
||||
_Accum short unsigned*k54;
|
||||
_Accum long*k57;
|
||||
_Accum long signed*k60;
|
||||
_Accum long unsigned*k63;
|
||||
_Accum signed long*k66;
|
||||
_Accum signed short*k69;
|
||||
int signed _Accum *k72; /* { dg-error "" "int signed _Accum" } */
|
||||
int unsigned _Accum *k75; /* { dg-error "" "int unsigned _Accum" } */
|
||||
long int _Accum *k78; /* { dg-error "" "long int _Accum" } */
|
||||
long long _Accum *k81;
|
||||
long double _Accum *k84; /* { dg-error "" "long double _Accum" } */
|
||||
long signed _Accum *k87;
|
||||
long unsigned _Accum *k90;
|
||||
double long _Accum *k93; /* { dg-error "" "double long _Accum" } */
|
||||
signed char _Accum *k96; /* { dg-error "" "signed char _Accum" } */
|
||||
signed short _Accum *k99;
|
||||
signed int _Accum *k102; /* { dg-error "" "signed int _Accum" } */
|
||||
signed long _Accum *k105;
|
||||
unsigned char _Accum *k108; /* { dg-error "" "unsigned char _Accum" } */
|
||||
unsigned short _Accum *k111;
|
||||
unsigned int _Accum *k114; /* { dg-error "" "unsigned int _Accum" } */
|
||||
unsigned long _Accum *k117;
|
||||
short int signed _Accum *k120; /* { dg-error "" "short int signed _Accum" } */
|
||||
short int unsigned _Accum *k123; /* { dg-error "" "short int unsigned _Accum" } */
|
||||
short signed int _Accum *k126; /* { dg-error "" "short signed int _Accum" } */
|
||||
short unsigned int _Accum *k129; /* { dg-error "" "short unsigned int _Accum" } */
|
||||
int short signed _Accum *k132; /* { dg-error "" "int short signed _Accum" } */
|
||||
int short unsigned _Accum *k135; /* { dg-error "" "int short unsigned _Accum" } */
|
||||
int long long _Accum *k138; /* { dg-error "" "int long long _Accum" } */
|
||||
int long signed _Accum *k141; /* { dg-error "" "int long signed _Accum" } */
|
||||
int long unsigned _Accum *k144; /* { dg-error "" "int long unsigned _Accum" } */
|
||||
int signed short _Accum *k147; /* { dg-error "" "int signed short _Accum" } */
|
||||
int signed long _Accum *k150; /* { dg-error "" "int signed long _Accum" } */
|
||||
int unsigned short _Accum *k153; /* { dg-error "" "int unsigned short _Accum" } */
|
||||
int unsigned long _Accum *k156; /* { dg-error "" "int unsigned long _Accum" } */
|
||||
long int long _Accum *k159; /* { dg-error "" "long int long _Accum" } */
|
||||
long int signed _Accum *k162; /* { dg-error "" "long int signed _Accum" } */
|
||||
long int unsigned _Accum *k165; /* { dg-error "" "long int unsigned _Accum" } */
|
||||
long long int _Accum *k168; /* { dg-error "" "long long int _Accum" } */
|
||||
long long signed _Accum *k171;
|
||||
long long unsigned _Accum *k175;
|
||||
long signed int _Accum *k178; /* { dg-error "" "long signed int _Accum" } */
|
||||
long unsigned int _Accum *k181; /* { dg-error "" "long unsigned int _Accum" } */
|
||||
long unsigned long _Accum *k184;
|
||||
signed short int _Accum *k187; /* { dg-error "" "signed short int _Accum" } */
|
||||
signed int short _Accum *k190; /* { dg-error "" "signed int short _Accum" } */
|
||||
signed int long _Accum *k192; /* { dg-error "" "signed int long _Accum" } */
|
||||
signed long int _Accum *k195; /* { dg-error "" "signed long int _Accum" } */
|
||||
signed long long _Accum *k198;
|
||||
unsigned short int _Accum *k201; /* { dg-error "" "unsigned short int _Accum" } */
|
||||
unsigned int short _Accum *k204; /* { dg-error "" "unsigned int short _Accum" } */
|
||||
unsigned int long _Accum *k207; /* { dg-error "" "unsigned int long _Accum" } */
|
||||
unsigned long int _Accum *k210; /* { dg-error "" "unsigned long int _Accum" } */
|
||||
unsigned long long _Accum *k213;
|
||||
int long long signed _Accum *k216; /* { dg-error "" "int long long signed _Accum" } */
|
||||
int long long unsigned _Accum *k219; /* { dg-error "" "int long long unsigned _Accum" } */
|
||||
int long signed long _Accum *k222; /* { dg-error "" "int long signed long _Accum" } */
|
||||
int long unsigned long _Accum *k226; /* { dg-error "" "int long unsigned long _Accum" } */
|
||||
int signed long long _Accum *k229; /* { dg-error "" "int signed long long _Accum" } */
|
||||
int unsigned long long _Accum *k232; /* { dg-error "" "int unsigned long long _Accum" } */
|
||||
long int long signed _Accum *k235; /* { dg-error "" "long int long signed _Accum" } */
|
||||
long int long unsigned _Accum *k238; /* { dg-error "" "long int long unsigned _Accum" } */
|
||||
long int signed long _Accum *k241; /* { dg-error "" "long int signed long _Accum" } */
|
||||
long int unsigned long _Accum *k244; /* { dg-error "" "long int unsigned long _Accum" } */
|
||||
long long int signed _Accum *k247; /* { dg-error "" "long long int signed _Accum" } */
|
||||
long long int unsigned _Accum *k250; /* { dg-error "" "long long int unsigned _Accum" } */
|
||||
long long signed int _Accum *k253; /* { dg-error "" "long long signed int _Accum" } */
|
||||
long long unsigned int _Accum *k256; /* { dg-error "" "long long unsigned int _Accum" } */
|
||||
long signed int long _Accum *k259; /* { dg-error "" "long signed int long _Accum" } */
|
||||
long signed long int _Accum *k262; /* { dg-error "" "long signed long int _Accum" } */
|
||||
long unsigned int long _Accum *k265; /* { dg-error "" "long unsigned int long _Accum" } */
|
||||
long unsigned long int _Accum *k268; /* { dg-error "" "long unsigned long int _Accum" } */
|
||||
signed long long int _Accum *k271; /* { dg-error "" "signed long long int _Accum" } */
|
||||
unsigned int long long _Accum *k274; /* { dg-error "" "unsigned int long long _Accum" } */
|
||||
unsigned long int long _Accum *k277; /* { dg-error "" "unsigned long int long _Accum" } */
|
||||
unsigned long long int _Accum *k280; /* { dg-error "" "unsigned long long int _Accum" } */
|
||||
_Complex _Accum *k283; /* { dg-error "" "_Complex _Accum" } */
|
||||
_Accum _Complex *k286; /* { dg-error "" "_Accum _Complex" } */
|
||||
unsigned _Accum *k289;
|
||||
signed _Accum *k292;
|
||||
|
||||
void _Sat *s0; /* { dg-error "" "void _Sat" } */
|
||||
char _Sat *s3; /* { dg-error "" "char _Sat" } */
|
||||
short _Sat *s6; /* { dg-error "" "short _Sat" } */
|
||||
int _Sat *s9; /* { dg-error "" "int _Sat" } */
|
||||
long _Sat *s12; /* { dg-error "" "long _Sat" } */
|
||||
float _Sat *s15; /* { dg-error "" "float _Sat" } */
|
||||
double _Sat *s18; /* { dg-error "" "double _Sat" } */
|
||||
signed _Sat *s21; /* { dg-error "" "signed _Sat" } */
|
||||
_Bool _Sat *s24; /* { dg-error "" "_Bool _Sat" } */
|
||||
int _Sat *s27; /* { dg-error "" "int _Sat" } */
|
||||
type _Sat *s30; /* { dg-error "" "type _Sat" } */
|
||||
char signed _Sat *s33; /* { dg-error "" "char signed _Sat" } */
|
||||
char unsigned _Sat *s36; /* { dg-error "" "char unsigned _Sat" } */
|
||||
short _Sat *s39; /* { dg-error "" "short _Sat" } */
|
||||
short signed _Sat *s42; /* { dg-error "" "short signed _Sat" } */
|
||||
short unsigned _Sat *s45; /* { dg-error "" "short unsigned _Sat" } */
|
||||
_Sat short*s48; /* { dg-error "" "_Sat short" } */
|
||||
_Sat short signed*s51; /* { dg-error "" "_Sat short signed" } */
|
||||
_Sat short unsigned*s54; /* { dg-error "" "_Sat short unsigned" } */
|
||||
_Sat long*s57; /* { dg-error "" "_Sat long" } */
|
||||
_Sat long signed*s60; /* { dg-error "" "_Sat long signed" } */
|
||||
_Sat long unsigned*s63; /* { dg-error "" "_Sat long unsigned" } */
|
||||
_Sat signed long*s66; /* { dg-error "" "_Sat signed long" } */
|
||||
_Sat signed short*s69; /* { dg-error "" "_Sat signed short" } */
|
||||
int signed _Sat *s72; /* { dg-error "" "int signed _Sat" } */
|
||||
int unsigned _Sat *s75; /* { dg-error "" "int unsigned _Sat" } */
|
||||
long int _Sat *s78; /* { dg-error "" "long int _Sat" } */
|
||||
long long _Sat *s81; /* { dg-error "" "long long _Sat" } */
|
||||
long double _Sat *s84; /* { dg-error "" "long double _Sat" } */
|
||||
long signed _Sat *s87; /* { dg-error "" "long signed _Sat" } */
|
||||
long unsigned _Sat *s90; /* { dg-error "" "long unsigned _Sat" } */
|
||||
double long _Sat *s93; /* { dg-error "" "double long _Sat" } */
|
||||
signed char _Sat *s96; /* { dg-error "" "signed char _Sat" } */
|
||||
signed short _Sat *s99; /* { dg-error "" "signed short _Sat" } */
|
||||
signed int _Sat *s102; /* { dg-error "" "signed int _Sat" } */
|
||||
signed long _Sat *s105; /* { dg-error "" "signed long _Sat" } */
|
||||
unsigned char _Sat *s108; /* { dg-error "" "unsigned char _Sat" } */
|
||||
unsigned short _Sat *s111; /* { dg-error "" "unsigned short _Sat" } */
|
||||
unsigned int _Sat *s114; /* { dg-error "" "unsigned int _Sat" } */
|
||||
unsigned long _Sat *s117; /* { dg-error "" "unsigned long _Sat" } */
|
||||
short int signed _Sat *s120; /* { dg-error "" "short int signed _Sat" } */
|
||||
short int unsigned _Sat *s123; /* { dg-error "" "short int unsigned _Sat" } */
|
||||
short signed int _Sat *s126; /* { dg-error "" "short signed int _Sat" } */
|
||||
short unsigned int _Sat *s129; /* { dg-error "" "short unsigned int _Sat" } */
|
||||
int short signed _Sat *s132; /* { dg-error "" "int short signed _Sat" } */
|
||||
int short unsigned _Sat *s135; /* { dg-error "" "int short unsigned _Sat" } */
|
||||
int long long _Sat *s138; /* { dg-error "" "int long long _Sat" } */
|
||||
int long signed _Sat *s141; /* { dg-error "" "int long signed _Sat" } */
|
||||
int long unsigned _Sat *s144; /* { dg-error "" "int long unsigned _Sat" } */
|
||||
int signed short _Sat *s147; /* { dg-error "" "int signed short _Sat" } */
|
||||
int signed long _Sat *s150; /* { dg-error "" "int signed long _Sat" } */
|
||||
int unsigned short _Sat *s153; /* { dg-error "" "int unsigned short _Sat" } */
|
||||
int unsigned long _Sat *s156; /* { dg-error "" "int unsigned long _Sat" } */
|
||||
long int long _Sat *s159; /* { dg-error "" "long int long _Sat" } */
|
||||
long int signed _Sat *s162; /* { dg-error "" "long int signed _Sat" } */
|
||||
long int unsigned _Sat *s165; /* { dg-error "" "long int unsigned _Sat" } */
|
||||
long long int _Sat *s168; /* { dg-error "" "long long int _Sat" } */
|
||||
long long signed _Sat *s171; /* { dg-error "" "long long signed _Sat" } */
|
||||
long long unsigned _Sat *s175; /* { dg-error "" "long long unsigned _Sat" } */
|
||||
long signed int _Sat *s178; /* { dg-error "" "long signed int _Sat" } */
|
||||
long unsigned int _Sat *s181; /* { dg-error "" "long unsigned int _Sat" } */
|
||||
long unsigned long _Sat *s184; /* { dg-error "" "long unsigned long _Sat" } */
|
||||
signed short int _Sat *s187; /* { dg-error "" "signed short int _Sat" } */
|
||||
signed int short _Sat *s190; /* { dg-error "" "signed int short _Sat" } */
|
||||
signed int long _Sat *s192; /* { dg-error "" "signed int long _Sat" } */
|
||||
signed long int _Sat *s195; /* { dg-error "" "signed long int _Sat" } */
|
||||
signed long long _Sat *s198; /* { dg-error "" "signed long long _Sat" } */
|
||||
unsigned short int _Sat *s201; /* { dg-error "" "unsigned short int _Sat" } */
|
||||
unsigned int short _Sat *s204; /* { dg-error "" "unsigned int short _Sat" } */
|
||||
unsigned int long _Sat *s207; /* { dg-error "" "unsigned int long _Sat" } */
|
||||
unsigned long int _Sat *s210; /* { dg-error "" "unsigned long int _Sat" } */
|
||||
unsigned long long _Sat *s213; /* { dg-error "" "unsigned long long _Sat" } */
|
||||
int long long signed _Sat *s216; /* { dg-error "" "int long long signed _Sat" } */
|
||||
int long long unsigned _Sat *s219; /* { dg-error "" "int long long unsigned _Sat" } */
|
||||
int long signed long _Sat *s222; /* { dg-error "" "int long signed long _Sat" } */
|
||||
int long unsigned long _Sat *s226; /* { dg-error "" "int long unsigned long _Sat" } */
|
||||
int signed long long _Sat *s229; /* { dg-error "" "int signed long long _Sat" } */
|
||||
int unsigned long long _Sat *s232; /* { dg-error "" "int unsigned long long _Sat" } */
|
||||
long int long signed _Sat *s235; /* { dg-error "" "long int long signed _Sat" } */
|
||||
long int long unsigned _Sat *s238; /* { dg-error "" "long int long unsigned _Sat" } */
|
||||
long int signed long _Sat *s241; /* { dg-error "" "long int signed long _Sat" } */
|
||||
long int unsigned long _Sat *s244; /* { dg-error "" "long int unsigned long _Sat" } */
|
||||
long long int signed _Sat *s247; /* { dg-error "" "long long int signed _Sat" } */
|
||||
long long int unsigned _Sat *s250; /* { dg-error "" "long long int unsigned _Sat" } */
|
||||
long long signed int _Sat *s253; /* { dg-error "" "long long signed int _Sat" } */
|
||||
long long unsigned int _Sat *s256; /* { dg-error "" "long long unsigned int _Sat" } */
|
||||
long signed int long _Sat *s259; /* { dg-error "" "long signed int long _Sat" } */
|
||||
long signed long int _Sat *s262; /* { dg-error "" "long signed long int _Sat" } */
|
||||
long unsigned int long _Sat *s265; /* { dg-error "" "long unsigned int long _Sat" } */
|
||||
long unsigned long int _Sat *s268; /* { dg-error "" "long unsigned long int _Sat" } */
|
||||
signed long long int _Sat *s271; /* { dg-error "" "signed long long int _Sat" } */
|
||||
unsigned int long long _Sat *s274; /* { dg-error "" "unsigned int long long _Sat" } */
|
||||
unsigned long int long _Sat *s277; /* { dg-error "" "unsigned long int long _Sat" } */
|
||||
unsigned long long int _Sat *s280; /* { dg-error "" "unsigned long long int _Sat" } */
|
||||
_Complex _Sat *s283; /* { dg-error "" "_Complex _Sat" } */
|
||||
_Sat _Complex *s286; /* { dg-error "" "_Sat _Complex" } */
|
||||
unsigned _Sat *s289; /* { dg-error "" "unsigned _Sat" } */
|
||||
signed _Sat *s292; /* { dg-error "" "signed _Sat" } */
|
256
gcc/testsuite/gcc.dg/fixed-point/unary.c
Normal file
256
gcc/testsuite/gcc.dg/fixed-point/unary.c
Normal file
@ -0,0 +1,256 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* C99 6.5.3 Unary operators.
|
||||
|
||||
Check unary operators ++ -- + - !. */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
#define INCDEC(TYPE,POSTFIX) \
|
||||
{ TYPE a = 0.0 ## POSTFIX; \
|
||||
if (a++ != 0.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (a != 1.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (a-- != 1.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (a != 0.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (++a != 1.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (a != 1.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (--a != 0.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (a != 0.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
#define FRACT_INCDEC(TYPE,POSTFIX) \
|
||||
{ TYPE a = -0.5 ## POSTFIX; \
|
||||
if (a++ != -0.5 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (a != 0.5 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (a-- != 0.5 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (a != -0.5 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (++a != 0.5 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (a != 0.5 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (--a != -0.5 ## POSTFIX) \
|
||||
abort(); \
|
||||
if (a != -0.5 ## POSTFIX) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
#define FRACT_SAT_INCDEC(TYPE,POSTFIX) \
|
||||
{ TYPE a = 0.9 ## POSTFIX; \
|
||||
if (++a != 1.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
a = -0.1 ## POSTFIX; \
|
||||
if (--a != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
#define FRACT_SAT_UNS_INCDEC(TYPE,POSTFIX) \
|
||||
{ TYPE a = 0.9 ## POSTFIX; \
|
||||
if (++a != 1.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
a = 0.1 ## POSTFIX; \
|
||||
if (--a != 0.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
#define PLUS(TYPE,POSTFIX) \
|
||||
{ TYPE a = 0.1 ## POSTFIX; \
|
||||
if (+a != 0.1 ## POSTFIX) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
#define NEG(TYPE,POSTFIX) \
|
||||
{ TYPE a = -0.1 ## POSTFIX; \
|
||||
if (-a != 0.1 ## POSTFIX) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
#define FRACT_SAT_NEG(TYPE,POSTFIX) \
|
||||
{ TYPE a = -0.5 ## POSTFIX - 0.5 ## POSTFIX; \
|
||||
if (-a != 1.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
#define UNS_NEG(TYPE,POSTFIX) \
|
||||
{ TYPE a = 0.0 ## POSTFIX; \
|
||||
if (-a != 0.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
#define FRACT_SAT_UNS_NEG(TYPE,POSTFIX) \
|
||||
{ TYPE a = 0.5 ## POSTFIX; \
|
||||
if (-a != 0.0 ## POSTFIX) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
#define LOGNEG(TYPE,POSTFIX) \
|
||||
{ TYPE a = 0.0 ## POSTFIX; \
|
||||
TYPE b = 0.1 ## POSTFIX; \
|
||||
if (!a != 1) \
|
||||
abort(); \
|
||||
if (!b != 0) \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
FRACT_INCDEC(short _Fract, hr);
|
||||
FRACT_INCDEC(_Fract, r);
|
||||
FRACT_INCDEC(long _Fract, lr);
|
||||
FRACT_INCDEC(long long _Fract, llr);
|
||||
FRACT_INCDEC(_Sat short _Fract, hr);
|
||||
FRACT_INCDEC(_Sat _Fract, r);
|
||||
FRACT_INCDEC(_Sat long _Fract, lr);
|
||||
FRACT_INCDEC(_Sat long long _Fract, llr);
|
||||
|
||||
INCDEC(short _Accum, hk);
|
||||
INCDEC(_Accum, k);
|
||||
INCDEC(long _Accum, lk);
|
||||
INCDEC(long long _Accum, llk);
|
||||
INCDEC(unsigned short _Accum, uhk);
|
||||
INCDEC(unsigned _Accum, uk);
|
||||
INCDEC(unsigned long _Accum, ulk);
|
||||
INCDEC(unsigned long long _Accum, ullk);
|
||||
INCDEC(_Sat short _Accum, hk);
|
||||
INCDEC(_Sat _Accum, k);
|
||||
INCDEC(_Sat long _Accum, lk);
|
||||
INCDEC(_Sat long long _Accum, llk);
|
||||
INCDEC(_Sat unsigned short _Accum, uhk);
|
||||
INCDEC(_Sat unsigned _Accum, uk);
|
||||
INCDEC(_Sat unsigned long _Accum, ulk);
|
||||
INCDEC(_Sat unsigned long long _Accum, ullk);
|
||||
|
||||
FRACT_SAT_INCDEC(_Sat short _Fract, hr);
|
||||
FRACT_SAT_INCDEC(_Sat _Fract, r);
|
||||
FRACT_SAT_INCDEC(_Sat long _Fract, lr);
|
||||
FRACT_SAT_INCDEC(_Sat long long _Fract, llr);
|
||||
|
||||
FRACT_SAT_UNS_INCDEC(_Sat unsigned short _Fract, uhr);
|
||||
FRACT_SAT_UNS_INCDEC(_Sat unsigned _Fract, ur);
|
||||
FRACT_SAT_UNS_INCDEC(_Sat unsigned long _Fract, ulr);
|
||||
FRACT_SAT_UNS_INCDEC(_Sat unsigned long long _Fract, ullr);
|
||||
|
||||
PLUS(short _Fract, hr);
|
||||
PLUS(_Fract, r);
|
||||
PLUS(long _Fract, lr);
|
||||
PLUS(long long _Fract, llr);
|
||||
PLUS(unsigned short _Fract, uhr);
|
||||
PLUS(unsigned _Fract, ur);
|
||||
PLUS(unsigned long _Fract, ulr);
|
||||
PLUS(unsigned long long _Fract, ullr);
|
||||
PLUS(_Sat short _Fract, hr);
|
||||
PLUS(_Sat _Fract, r);
|
||||
PLUS(_Sat long _Fract, lr);
|
||||
PLUS(_Sat long long _Fract, llr);
|
||||
PLUS(_Sat unsigned short _Fract, uhr);
|
||||
PLUS(_Sat unsigned _Fract, ur);
|
||||
PLUS(_Sat unsigned long _Fract, ulr);
|
||||
PLUS(_Sat unsigned long long _Fract, ullr);
|
||||
PLUS(short _Accum, hk);
|
||||
PLUS(_Accum, k);
|
||||
PLUS(long _Accum, lk);
|
||||
PLUS(long long _Accum, llk);
|
||||
PLUS(unsigned short _Accum, uhk);
|
||||
PLUS(unsigned _Accum, uk);
|
||||
PLUS(unsigned long _Accum, ulk);
|
||||
PLUS(unsigned long long _Accum, ullk);
|
||||
PLUS(_Sat short _Accum, hk);
|
||||
PLUS(_Sat _Accum, k);
|
||||
PLUS(_Sat long _Accum, lk);
|
||||
PLUS(_Sat long long _Accum, llk);
|
||||
PLUS(_Sat unsigned short _Accum, uhk);
|
||||
PLUS(_Sat unsigned _Accum, uk);
|
||||
PLUS(_Sat unsigned long _Accum, ulk);
|
||||
PLUS(_Sat unsigned long long _Accum, ullk);
|
||||
|
||||
NEG(short _Fract, hr);
|
||||
NEG(_Fract, r);
|
||||
NEG(long _Fract, lr);
|
||||
NEG(long long _Fract, llr);
|
||||
NEG(_Sat short _Fract, hr);
|
||||
NEG(_Sat _Fract, r);
|
||||
NEG(_Sat long _Fract, lr);
|
||||
NEG(_Sat long long _Fract, llr);
|
||||
NEG(short _Accum, hk);
|
||||
NEG(_Accum, k);
|
||||
NEG(long _Accum, lk);
|
||||
NEG(long long _Accum, llk);
|
||||
NEG(_Sat short _Accum, hk);
|
||||
NEG(_Sat _Accum, k);
|
||||
NEG(_Sat long _Accum, lk);
|
||||
NEG(_Sat long long _Accum, llk);
|
||||
|
||||
FRACT_SAT_NEG(_Sat short _Fract, hr);
|
||||
FRACT_SAT_NEG(_Sat _Fract, r);
|
||||
FRACT_SAT_NEG(_Sat long _Fract, lr);
|
||||
FRACT_SAT_NEG(_Sat long long _Fract, llr);
|
||||
|
||||
UNS_NEG(short _Fract, hr);
|
||||
UNS_NEG(_Fract, r);
|
||||
UNS_NEG(long _Fract, lr);
|
||||
UNS_NEG(long long _Fract, llr);
|
||||
UNS_NEG(_Sat short _Fract, hr);
|
||||
UNS_NEG(_Sat _Fract, r);
|
||||
UNS_NEG(_Sat long _Fract, lr);
|
||||
UNS_NEG(_Sat long long _Fract, llr);
|
||||
UNS_NEG(short _Accum, hk);
|
||||
UNS_NEG(_Accum, k);
|
||||
UNS_NEG(long _Accum, lk);
|
||||
UNS_NEG(long long _Accum, llk);
|
||||
UNS_NEG(_Sat short _Accum, hk);
|
||||
UNS_NEG(_Sat _Accum, k);
|
||||
UNS_NEG(_Sat long _Accum, lk);
|
||||
UNS_NEG(_Sat long long _Accum, llk);
|
||||
|
||||
FRACT_SAT_UNS_NEG(_Sat unsigned short _Fract, uhr);
|
||||
FRACT_SAT_UNS_NEG(_Sat unsigned _Fract, ur);
|
||||
FRACT_SAT_UNS_NEG(_Sat unsigned long _Fract, ulr);
|
||||
FRACT_SAT_UNS_NEG(_Sat unsigned long long _Fract, ullr);
|
||||
|
||||
LOGNEG(short _Fract, hr);
|
||||
LOGNEG(_Fract, r);
|
||||
LOGNEG(long _Fract, lr);
|
||||
LOGNEG(long long _Fract, llr);
|
||||
LOGNEG(unsigned short _Fract, uhr);
|
||||
LOGNEG(unsigned _Fract, ur);
|
||||
LOGNEG(unsigned long _Fract, ulr);
|
||||
LOGNEG(unsigned long long _Fract, ullr);
|
||||
LOGNEG(_Sat short _Fract, hr);
|
||||
LOGNEG(_Sat _Fract, r);
|
||||
LOGNEG(_Sat long _Fract, lr);
|
||||
LOGNEG(_Sat long long _Fract, llr);
|
||||
LOGNEG(_Sat unsigned short _Fract, uhr);
|
||||
LOGNEG(_Sat unsigned _Fract, ur);
|
||||
LOGNEG(_Sat unsigned long _Fract, ulr);
|
||||
LOGNEG(_Sat unsigned long long _Fract, ullr);
|
||||
LOGNEG(short _Accum, hk);
|
||||
LOGNEG(_Accum, k);
|
||||
LOGNEG(long _Accum, lk);
|
||||
LOGNEG(long long _Accum, llk);
|
||||
LOGNEG(unsigned short _Accum, uhk);
|
||||
LOGNEG(unsigned _Accum, uk);
|
||||
LOGNEG(unsigned long _Accum, ulk);
|
||||
LOGNEG(unsigned long long _Accum, ullk);
|
||||
LOGNEG(_Sat short _Accum, hk);
|
||||
LOGNEG(_Sat _Accum, k);
|
||||
LOGNEG(_Sat long _Accum, lk);
|
||||
LOGNEG(_Sat long long _Accum, llk);
|
||||
LOGNEG(_Sat unsigned short _Accum, uhk);
|
||||
LOGNEG(_Sat unsigned _Accum, uk);
|
||||
LOGNEG(_Sat unsigned long _Accum, ulk);
|
||||
LOGNEG(_Sat unsigned long long _Accum, ullk);
|
||||
|
||||
return 0;
|
||||
}
|
62
gcc/testsuite/gcc.dg/fixed-point/union-init.c
Normal file
62
gcc/testsuite/gcc.dg/fixed-point/union-init.c
Normal file
@ -0,0 +1,62 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
/* Cast to union is a GNU C extension.
|
||||
Based on the test from ../dfp/. */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
union u
|
||||
{
|
||||
long _Fract lf;
|
||||
double d;
|
||||
};
|
||||
|
||||
union n
|
||||
{
|
||||
double d;
|
||||
_Fract f;
|
||||
};
|
||||
|
||||
int main ()
|
||||
{
|
||||
static union u u1 = { 0.1lr };
|
||||
static union u u2 = { 0.2lr };
|
||||
static union u u4 = { 0.0 };
|
||||
|
||||
static union n n1 = { 0.3r };
|
||||
static union n n2 = { 3.25 };
|
||||
|
||||
long _Fract lf;
|
||||
_Fract f;
|
||||
double d;
|
||||
|
||||
if (u1.lf != 0.1lr)
|
||||
abort ();
|
||||
|
||||
if (u2.lf != 0.2lr)
|
||||
abort ();
|
||||
|
||||
/* cast fixed-point to union type. */
|
||||
lf = 0.4lr;
|
||||
f = 0.5r;
|
||||
d = 3.25;
|
||||
|
||||
u4 = (union u) lf;
|
||||
if (u4.lf != 0.4lr)
|
||||
abort ();
|
||||
|
||||
u4 = (union u) d;
|
||||
if (u4.d != 3.25)
|
||||
abort ();
|
||||
|
||||
n1 = (union n) f;
|
||||
if (n1.f != 0.5r)
|
||||
abort ();
|
||||
|
||||
n1 = (union n)d;
|
||||
if (n1.d != 3.25)
|
||||
abort ();
|
||||
|
||||
return 0;
|
||||
}
|
7
gcc/testsuite/gcc.dg/nofixed-point-1.c
Normal file
7
gcc/testsuite/gcc.dg/nofixed-point-1.c
Normal file
@ -0,0 +1,7 @@
|
||||
/* { dg-do compile { target {! fixed_point} } } */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
|
||||
_Fract w; /* { dg-error "not supported" "reject fixed-point" } */
|
||||
_Sat _Fract x; /* { dg-error "not supported" "reject fixed-point" } */
|
||||
_Accum y; /* { dg-error "not supported" "reject fixed-point" } */
|
||||
_Sat _Accum z; /* { dg-error "not supported" "reject fixed-point" } */
|
49
gcc/testsuite/gcc.target/mips/dpaq_sa_l_w.c
Normal file
49
gcc/testsuite/gcc.target/mips/dpaq_sa_l_w.c
Normal file
@ -0,0 +1,49 @@
|
||||
/* { dg-do compile { target {fixed_point} } } */
|
||||
/* { dg-mips-options "-O2 -mips32r2 -mdsp" } */
|
||||
/* { dg-final { scan-assembler-times "\tdpaq_sa.l.w\t\\\$ac" 3 } } */
|
||||
|
||||
_Sat long long _Fract
|
||||
f1 (_Sat long _Fract x, _Sat long _Fract y, _Sat long long _Fract z)
|
||||
{
|
||||
return (_Sat long long _Fract) x * y + z;
|
||||
}
|
||||
|
||||
_Sat long long _Fract
|
||||
f2 (_Sat long _Fract x, _Sat long _Fract y, _Sat long long _Fract z)
|
||||
{
|
||||
return z + (_Sat long long _Fract) y * x;
|
||||
}
|
||||
|
||||
_Sat long long _Fract
|
||||
f3 (_Sat long _Fract x, _Sat long _Fract y, _Sat long long _Fract z)
|
||||
{
|
||||
_Sat long long _Fract t = (_Sat long long _Fract) x * y;
|
||||
int temp = 5;
|
||||
if (temp == 5)
|
||||
z = t + z; /* Need to put z at the end. GCC does not swap operands to
|
||||
match the ssmadd pattern, because types are saturating. */
|
||||
return z;
|
||||
}
|
||||
|
||||
long long _Fract
|
||||
f4 (long _Fract x, long _Fract y, long long _Fract z)
|
||||
{
|
||||
return (long long _Fract) x * y + z;
|
||||
}
|
||||
|
||||
long long _Fract
|
||||
f5 (long _Fract x, long _Fract y, long long _Fract z)
|
||||
{
|
||||
return z + (long long _Fract) y * x;
|
||||
}
|
||||
|
||||
long long _Fract
|
||||
f6 (long _Fract x, long _Fract y, long long _Fract z)
|
||||
{
|
||||
long long _Fract t = (long long _Fract) x * y;
|
||||
int temp = 5;
|
||||
if (temp == 5)
|
||||
z = t + z; /* Need to put z at the end. GCC does not swap operands to
|
||||
match the ssmadd pattern, because types are saturating. */
|
||||
return z;
|
||||
}
|
35
gcc/testsuite/gcc.target/mips/dpsq_sa_l_w.c
Normal file
35
gcc/testsuite/gcc.target/mips/dpsq_sa_l_w.c
Normal file
@ -0,0 +1,35 @@
|
||||
/* { dg-do compile { target {fixed_point} } } */
|
||||
/* { dg-mips-options "-O2 -mips32r2 -mdsp" } */
|
||||
/* { dg-final { scan-assembler-times "\tdpsq_sa.l.w\t\\\$ac" 2 } } */
|
||||
|
||||
_Sat long long _Fract
|
||||
f1 (_Sat long _Fract x, _Sat long _Fract y, _Sat long long _Fract z)
|
||||
{
|
||||
return z - (_Sat long long _Fract) x * y;
|
||||
}
|
||||
|
||||
_Sat long long _Fract
|
||||
f2 (_Sat long _Fract x, _Sat long _Fract y, _Sat long long _Fract z)
|
||||
{
|
||||
_Sat long long _Fract t = (_Sat long long _Fract) x * y;
|
||||
int temp = 5;
|
||||
if (temp == 5)
|
||||
z -= t;
|
||||
return z;
|
||||
}
|
||||
|
||||
long long _Fract
|
||||
f3 (long _Fract x, long _Fract y, long long _Fract z)
|
||||
{
|
||||
return z - (long long _Fract) x * y;
|
||||
}
|
||||
|
||||
long long _Fract
|
||||
f4 (long _Fract x, long _Fract y, long long _Fract z)
|
||||
{
|
||||
long long _Fract t = (long long _Fract) x * y;
|
||||
int temp = 5;
|
||||
if (temp == 5)
|
||||
z -= t;
|
||||
return z;
|
||||
}
|
215
gcc/testsuite/gcc.target/mips/fixed-scalar-type.c
Normal file
215
gcc/testsuite/gcc.target/mips/fixed-scalar-type.c
Normal file
@ -0,0 +1,215 @@
|
||||
/* Test scalar fixed-point instructions */
|
||||
/* { dg-do compile { target {fixed_point} } } */
|
||||
/* { dg-mips-options "-march=mips32r2 -mdspr2 -O2" } */
|
||||
/* { dg-final { scan-assembler-times "\taddu\t" 10 } } */
|
||||
/* { dg-final { scan-assembler-times "\tsubu\t" 10 } } */
|
||||
/* { dg-final { scan-assembler "\taddu_s.qb\t" } } */
|
||||
/* { dg-final { scan-assembler-times "\taddu_s.ph\t" 2 } } */
|
||||
/* { dg-final { scan-assembler-times "\taddq_s.ph\t" 2 } } */
|
||||
/* { dg-final { scan-assembler-times "\taddq_s.w\t" 2 } } */
|
||||
/* { dg-final { scan-assembler "\tsubu_s.qb\t" } } */
|
||||
/* { dg-final { scan-assembler-times "\tsubu_s.ph\t" 2 } } */
|
||||
/* { dg-final { scan-assembler-times "\tsubq_s.ph\t" 2 } } */
|
||||
/* { dg-final { scan-assembler-times "\tsubq_s.w\t" 2 } } */
|
||||
/* { dg-final { scan-assembler-times "\tmulq_rs.ph\t" 1 } } */
|
||||
/* { dg-final { scan-assembler-times "\tmulq_rs.w\t" 1 } } */
|
||||
|
||||
short _Fract non_sat_test1 (short _Fract a, short _Fract b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
_Fract non_sat_test2 (_Fract a, _Fract b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
long _Fract non_sat_test3 (long _Fract a, long _Fract b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
unsigned short _Fract non_sat_test4 (unsigned short _Fract a,
|
||||
unsigned short _Fract b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
unsigned _Fract non_sat_test5 (unsigned _Fract a, unsigned _Fract b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
unsigned long _Fract non_sat_test6 (unsigned long _Fract a,
|
||||
unsigned long _Fract b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
short _Accum non_sat_test7 (short _Accum a, short _Accum b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
_Accum non_sat_test8 (_Accum a, _Accum b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
unsigned short _Accum non_sat_test9 (unsigned short _Accum a,
|
||||
unsigned short _Accum b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
unsigned _Accum non_sat_test10 (unsigned _Accum a, unsigned _Accum b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
short _Fract non_sat_test11 (short _Fract a, short _Fract b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
_Fract non_sat_test12 (_Fract a, _Fract b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
long _Fract non_sat_test13 (long _Fract a, long _Fract b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
unsigned short _Fract non_sat_test14 (unsigned short _Fract a,
|
||||
unsigned short _Fract b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
unsigned _Fract non_sat_test15 (unsigned _Fract a, unsigned _Fract b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
unsigned long _Fract non_sat_test16 (unsigned long _Fract a,
|
||||
unsigned long _Fract b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
short _Accum non_sat_test17 (short _Accum a, short _Accum b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
_Accum non_sat_test18 (_Accum a, _Accum b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
unsigned short _Accum non_sat_test19 (unsigned short _Accum a,
|
||||
unsigned short _Accum b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
unsigned _Accum non_sat_test20 (unsigned _Accum a, unsigned _Accum b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
_Sat unsigned short _Fract test1 (_Sat unsigned short _Fract a,
|
||||
_Sat unsigned short _Fract b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
_Sat unsigned _Fract test2 (_Sat unsigned _Fract a, _Sat unsigned _Fract b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
_Sat unsigned short _Accum test3 (_Sat unsigned short _Accum a,
|
||||
_Sat unsigned short _Accum b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
_Sat _Fract test4 (_Sat _Fract a, _Sat _Fract b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
_Sat long _Fract test5 (_Sat long _Fract a, _Sat long _Fract b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
_Sat short _Accum test6 (_Sat short _Accum a, _Sat short _Accum b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
_Sat _Accum test7 (_Sat _Accum a, _Sat _Accum b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
_Sat unsigned short _Fract test8 (_Sat unsigned short _Fract a,
|
||||
_Sat unsigned short _Fract b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
_Sat unsigned _Fract test9 (_Sat unsigned _Fract a, _Sat unsigned _Fract b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
_Sat unsigned short _Accum test10 (_Sat unsigned short _Accum a,
|
||||
_Sat unsigned short _Accum b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
_Sat _Fract test11 (_Sat _Fract a, _Sat _Fract b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
_Sat long _Fract test12 (_Sat long _Fract a, _Sat long _Fract b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
_Sat short _Accum test13 (_Sat short _Accum a, _Sat short _Accum b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
_Sat _Accum test14 (_Sat _Accum a, _Sat _Accum b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
_Sat _Fract test15 (_Sat _Fract a, _Sat _Fract b)
|
||||
{
|
||||
return a * b;
|
||||
}
|
||||
|
||||
_Sat long _Fract test16 (_Sat long _Fract a, _Sat long _Fract b)
|
||||
{
|
||||
return a * b;
|
||||
}
|
||||
|
||||
_Fract test17 (_Fract a, _Fract b)
|
||||
{
|
||||
return a * b;
|
||||
}
|
||||
|
||||
long _Fract test18 (long _Fract a, long _Fract b)
|
||||
{
|
||||
return a * b;
|
||||
}
|
132
gcc/testsuite/gcc.target/mips/fixed-vector-type.c
Normal file
132
gcc/testsuite/gcc.target/mips/fixed-vector-type.c
Normal file
@ -0,0 +1,132 @@
|
||||
/* Test vector fixed-point instructions */
|
||||
/* { dg-do compile { target {fixed_point} } } */
|
||||
/* { dg-mips-options "-march=mips32r2 -mdspr2 -O2" } */
|
||||
/* { dg-final { scan-assembler-times "\taddq_s.ph\t" 2 } } */
|
||||
/* { dg-final { scan-assembler-times "\tsubq_s.ph\t" 2 } } */
|
||||
/* { dg-final { scan-assembler-times "\taddu_s.qb\t" 1 } } */
|
||||
/* { dg-final { scan-assembler-times "\taddu_s.ph\t" 2 } } */
|
||||
/* { dg-final { scan-assembler-times "\tsubu_s.qb\t" 1 } } */
|
||||
/* { dg-final { scan-assembler-times "\tsubu_s.ph\t" 2 } } */
|
||||
/* { dg-final { scan-assembler-times "\tmulq_rs.ph\t" 1 } } */
|
||||
|
||||
typedef _Sat unsigned short _Fract sat_v4uqq __attribute__ ((vector_size(4)));
|
||||
typedef _Sat unsigned _Fract sat_v2uhq __attribute__ ((vector_size(4)));
|
||||
typedef _Sat unsigned short _Accum sat_v2uha __attribute__ ((vector_size(4)));
|
||||
typedef _Sat _Fract sat_v2hq __attribute__ ((vector_size(4)));
|
||||
typedef _Sat short _Accum sat_v2ha __attribute__ ((vector_size(4)));
|
||||
|
||||
typedef unsigned short _Fract v4uqq __attribute__ ((vector_size(4)));
|
||||
typedef unsigned _Fract v2uhq __attribute__ ((vector_size(4)));
|
||||
typedef unsigned short _Accum v2uha __attribute__ ((vector_size(4)));
|
||||
typedef _Fract v2hq __attribute__ ((vector_size(4)));
|
||||
typedef short _Accum v2ha __attribute__ ((vector_size(4)));
|
||||
|
||||
sat_v2hq test1 (sat_v2hq a, sat_v2hq b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
sat_v2ha test2 (sat_v2ha a, sat_v2ha b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
sat_v2hq test3 (sat_v2hq a, sat_v2hq b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
sat_v2ha test4 (sat_v2ha a, sat_v2ha b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
sat_v4uqq test5 (sat_v4uqq a, sat_v4uqq b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
sat_v2uhq test6 (sat_v2uhq a, sat_v2uhq b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
sat_v2uha test7 (sat_v2uha a, sat_v2uha b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
sat_v4uqq test8 (sat_v4uqq a, sat_v4uqq b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
sat_v2uhq test9 (sat_v2uhq a, sat_v2uhq b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
sat_v2uha test10 (sat_v2uha a, sat_v2uha b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
sat_v2hq test11 (sat_v2hq a, sat_v2hq b)
|
||||
{
|
||||
return a * b;
|
||||
}
|
||||
|
||||
v2hq test12 (v2hq a, v2hq b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
v2hq test13 (v2hq a, v2hq b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
v2hq test14 (v2hq a, v2hq b)
|
||||
{
|
||||
return a * b;
|
||||
}
|
||||
|
||||
v2ha test15 (v2ha a, v2ha b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
v2ha test16 (v2ha a, v2ha b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
v4uqq test17 (v4uqq a, v4uqq b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
v4uqq test18 (v4uqq a, v4uqq b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
v2uhq test19 (v2uhq a, v2uhq b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
v2uhq test20 (v2uhq a, v2uhq b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
v2uha test21 (v2uha a, v2uha b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
v2uha test22 (v2uha a, v2uha b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
@ -1271,6 +1271,14 @@ proc check_effective_target_large_long_double { } {
|
||||
}]
|
||||
}
|
||||
|
||||
# Return 1 if the target supports compiling fixed-point,
|
||||
# 0 otherwise.
|
||||
|
||||
proc check_effective_target_fixed_point { } {
|
||||
return [check_no_compiler_messages fixed_point object {
|
||||
_Sat _Fract x; _Sat _Accum y;
|
||||
}]
|
||||
}
|
||||
|
||||
# Return 1 if the target supports compiling decimal floating point,
|
||||
# 0 otherwise.
|
||||
|
Loading…
Reference in New Issue
Block a user