Commit 294689c4 by Bernd Schmidt Committed by Bernd Schmidt

weak-call.c: New test.

	* gcc.target/tic6x/weak-call.c: New test.
	* gcc.target/tic6x/fpcmp.c: New test.
	* gcc.target/tic6x/fpdiv.c: New test.
	* gcc.target/tic6x/rotdi16-scan.c: New test.
	* gcc.target/tic6x/ffssi.c: New test.
	* gcc.target/tic6x/fpdiv-lib.c: New test.
	* gcc.target/tic6x/cold-lc.c: New test.
	* gcc.target/tic6x/longcalls.c: New test.
	* gcc.target/tic6x/abi-align-1.c: New test.
	* gcc.target/tic6x/fpcmp-finite.c: New test.
	* gcc.target/tic6x/rotdi16.c: New test.
	* gcc.target/tic6x/bswapl.c: New test.
	* gcc.target/tic6x/ffsdi.c: New test.
	* gcc.target/tic6x/tic6x.exp: New file.
	* gcc/testsuite/gcc.target/tic6x/builtins/arith24.c: New test.
	* gcc/testsuite/gcc.target/tic6x/builtins/smpy.c: New test.
	* gcc/testsuite/gcc.target/tic6x/builtins/smpylh.c: New test.
	* gcc/testsuite/gcc.target/tic6x/builtins/smpyh.c: New test.
	* gcc/testsuite/gcc.target/tic6x/builtins/sarith1.c: New test.
	* gcc/testsuite/gcc.target/tic6x/builtins/extclr.c: New test
	* gcc/testsuite/gcc.target/tic6x/builtins/c6x-builtins.exp: New file.
	* gcc.target/tic6x/builtin-math-7.c: New test, adapted from gcc.dg.
	* lib/target-supports.exp (chck_profiling_available): Not on tic6x.
	(check_effective_target_ti_c67x, check_effective_target_ti_c64xp):
	New functions.
	* gcc.c-torture/execute/20101011-1.c: Add a condition for
	__TMS320C6X__.
	* gcc.dg/20020312-2.c: Likewise.
	* gcc.dg/pr27095.c: Handle tic6x like hppa.
	* gcc.dg/torture/pr37868.c: Skip on tic6x.
	* gcc.dg/torture/builtin-math-7.c: Likewise.

From-SVN: r176310
parent bcead286
2011-07-15 Bernd Schmidt <bernds@codesourcery.com>
* gcc.target/tic6x/weak-call.c: New test.
* gcc.target/tic6x/fpcmp.c: New test.
* gcc.target/tic6x/fpdiv.c: New test.
* gcc.target/tic6x/rotdi16-scan.c: New test.
* gcc.target/tic6x/ffssi.c: New test.
* gcc.target/tic6x/fpdiv-lib.c: New test.
* gcc.target/tic6x/cold-lc.c: New test.
* gcc.target/tic6x/longcalls.c: New test.
* gcc.target/tic6x/abi-align-1.c: New test.
* gcc.target/tic6x/fpcmp-finite.c: New test.
* gcc.target/tic6x/rotdi16.c: New test.
* gcc.target/tic6x/bswapl.c: New test.
* gcc.target/tic6x/ffsdi.c: New test.
* gcc.target/tic6x/tic6x.exp: New file.
* gcc/testsuite/gcc.target/tic6x/builtins/arith24.c: New test.
* gcc/testsuite/gcc.target/tic6x/builtins/smpy.c: New test.
* gcc/testsuite/gcc.target/tic6x/builtins/smpylh.c: New test.
* gcc/testsuite/gcc.target/tic6x/builtins/smpyh.c: New test.
* gcc/testsuite/gcc.target/tic6x/builtins/sarith1.c: New test.
* gcc/testsuite/gcc.target/tic6x/builtins/extclr.c: New test
* gcc/testsuite/gcc.target/tic6x/builtins/c6x-builtins.exp: New file.
* gcc.target/tic6x/builtin-math-7.c: New test, adapted from gcc.dg.
* lib/target-supports.exp (chck_profiling_available): Not on tic6x.
(check_effective_target_ti_c67x, check_effective_target_ti_c64xp):
New functions.
* gcc.c-torture/execute/20101011-1.c: Add a condition for
__TMS320C6X__.
* gcc.dg/20020312-2.c: Likewise.
* gcc.dg/pr27095.c: Handle tic6x like hppa.
* gcc.dg/torture/pr37868.c: Skip on tic6x.
* gcc.dg/torture/builtin-math-7.c: Likewise.
2011-07-14 Andrew Pinski <pinskia@gmail.com> 2011-07-14 Andrew Pinski <pinskia@gmail.com>
PR tree-opt/49309 PR tree-opt/49309
......
...@@ -12,6 +12,9 @@ ...@@ -12,6 +12,9 @@
#elif defined (__sh__) #elif defined (__sh__)
/* On SH division by zero does not trap. */ /* On SH division by zero does not trap. */
# define DO_TEST 0 # define DO_TEST 0
#elif defined (__TMS320C6X__)
/* On TI C6X division by zero does not trap. */
# define DO_TEST 0
#elif defined (__mips__) && !defined(__linux__) #elif defined (__mips__) && !defined(__linux__)
/* MIPS divisions do trap by default, but libgloss targets do not /* MIPS divisions do trap by default, but libgloss targets do not
intercept the trap and raise a SIGFPE. The same is probably intercept the trap and raise a SIGFPE. The same is probably
......
...@@ -64,6 +64,8 @@ extern void abort (void); ...@@ -64,6 +64,8 @@ extern void abort (void);
# define PIC_REG "12" # define PIC_REG "12"
#elif defined(__sparc__) #elif defined(__sparc__)
# define PIC_REG "l7" # define PIC_REG "l7"
#elif defined(__TMS320C6X__)
# define PIC_REG "B14"
#elif defined(__v850) #elif defined(__v850)
/* No pic register. */ /* No pic register. */
#elif defined(__vax__) #elif defined(__vax__)
......
...@@ -16,10 +16,11 @@ main (int argc, char **argv) ...@@ -16,10 +16,11 @@ main (int argc, char **argv)
memset (x, argc, strlen (x)); memset (x, argc, strlen (x));
return 0; return 0;
} }
/* { dg-final { scan-assembler-not "(?n)strlen\(.*\n\)+.*strlen" { target { ! { powerpc*-*-darwin* hppa*-*-hpux* ia64-*-hpux* alpha*-*-* spu-*-* } } } } } */ /* { dg-final { scan-assembler-not "(?n)strlen\(.*\n\)+.*strlen" { target { ! { powerpc*-*-darwin* hppa*-*-hpux* ia64-*-hpux* alpha*-*-* spu-*-* tic6x-*-* } } } } } */
/* hppa*-*-hpux* has an IMPORT statement for strlen (plus the branch). */ /* hppa*-*-hpux* has an IMPORT statement for strlen (plus the branch). */
/* *-*-darwin* has something similar. */ /* *-*-darwin* has something similar. */
/* { dg-final { scan-assembler-not "(?n)strlen\(.*\n\)+.*strlen\(.*\n\)+.*strlen" { target hppa*-*-hpux* } } } */ /* tic6x emits a comment at the point where the delayed branch happens. */
/* { dg-final { scan-assembler-not "(?n)strlen\(.*\n\)+.*strlen\(.*\n\)+.*strlen" { target hppa*-*-hpux* tic6x-*-* } } } */
/* { dg-final { scan-assembler-not "(?n)bl L_strlen\(.*\n\)+.*bl L_strlen" { target powerpc*-*-darwin* } } } */ /* { dg-final { scan-assembler-not "(?n)bl L_strlen\(.*\n\)+.*bl L_strlen" { target powerpc*-*-darwin* } } } */
/* ia64-*-hpux* has a global statement, a type statement, and the branch. */ /* ia64-*-hpux* has a global statement, a type statement, and the branch. */
/* { dg-final { scan-assembler-not "(?n)strlen\(.*\n\)+.*strlen\(.*\n\)+.*strlen\(.*\n\)+.*strlen" { target ia64-*-hpux* } } } */ /* { dg-final { scan-assembler-not "(?n)strlen\(.*\n\)+.*strlen\(.*\n\)+.*strlen\(.*\n\)+.*strlen" { target ia64-*-hpux* } } } */
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
Origin: Kaveh R. Ghazi, August 13, 2009. */ Origin: Kaveh R. Ghazi, August 13, 2009. */
/* { dg-do run } */ /* { dg-do run } */
/* { dg-skip-if "" { tic6x-*-* } "*" "" } */
/* { dg-add-options ieee } */ /* { dg-add-options ieee } */
/* { dg-require-effective-target large_double } */ /* { dg-require-effective-target large_double } */
......
/* { dg-do run } */ /* { dg-do run } */
/* { dg-options "-fno-strict-aliasing" } */ /* { dg-options "-fno-strict-aliasing" } */
/* { dg-skip-if "unaligned access" { sparc*-*-* sh*-*-* } "*" "" } */ /* { dg-skip-if "unaligned access" { sparc*-*-* sh*-*-* tic6x-*-* } "*" "" } */
extern void abort (void); extern void abort (void);
#if (__SIZEOF_INT__ <= 2) #if (__SIZEOF_INT__ <= 2)
......
/* { dg-do run } */
/* common */
char c;
/* arrays must be 8 byte aligned, regardless of size */
char c_ary[1];
/* data */
char d = 1;
char d_ary[1] = {1};
int main ()
{
if (((unsigned long)&c_ary[0] & 7) != 0)
return 1;
if (((unsigned long)&d_ary[0] & 7) != 0)
return 1;
return 0;
}
/* { dg-do compile } */
/* { dg-options "-O2 -march=c64x+" } */
/* { dg-final { scan-assembler-not "call" } } */
int foo (int x)
{
return __builtin_bswap32 (x);
}
long long bar (long long x)
{
return __builtin_bswap64 (x);
}
/* Copyright (C) 2009 Free Software Foundation.
Verify that folding of complex mul and div work correctly.
TI C6X specific version, reduced by two tests that fails due to the
use of implicit -freciprocal-math.
Origin: Kaveh R. Ghazi, August 13, 2009. */
/* { dg-do run } */
/* { dg-options "-O2" } */
/* { dg-add-options ieee } */
extern void link_error(int);
/* Evaluate this expression at compile-time. */
#define COMPILETIME_TESTIT(TYPE,X,OP,Y,RES) do { \
if ((_Complex TYPE)(X) OP (_Complex TYPE)(Y) != (_Complex TYPE)(RES)) \
link_error(__LINE__); \
} while (0)
/* Use this error function for cases which only evaluate at
compile-time when optimizing. */
#ifdef __OPTIMIZE__
# define ERROR_FUNC(X) link_error(X)
#else
# define ERROR_FUNC(X) __builtin_abort()
#endif
/* Evaluate this expression at compile-time using static initializers. */
#define STATICINIT_TESTIT(TYPE,X,OP,Y,RES) do { \
static const _Complex TYPE foo = (_Complex TYPE)(X) OP (_Complex TYPE)(Y); \
if (foo != (_Complex TYPE)(RES)) \
ERROR_FUNC (__LINE__); \
} while (0)
/* Evaluate this expression at runtime. */
#define RUNTIME_TESTIT(TYPE,X,OP,Y,RES) do { \
volatile _Complex TYPE foo; \
foo = (_Complex TYPE)(X); \
foo OP##= (_Complex TYPE)(Y); \
if (foo != (_Complex TYPE)(RES)) \
__builtin_abort(); \
} while (0)
/* Evaluate this expression at compile-time and runtime. */
#define TESTIT(TYPE,X,OP,Y,RES) do { \
STATICINIT_TESTIT(TYPE,X,OP,Y,RES); \
COMPILETIME_TESTIT(TYPE,X,OP,Y,RES); \
RUNTIME_TESTIT(TYPE,X,OP,Y,RES); \
} while (0)
/* Either the real or imaginary parts should be infinity. */
#define TEST_ONE_PART_INF(VAL) do { \
static const _Complex double foo = (VAL); \
if (! __builtin_isinf(__real foo) && ! __builtin_isinf(__imag foo)) \
ERROR_FUNC (__LINE__); \
if (! __builtin_isinf(__real (VAL)) && ! __builtin_isinf(__imag (VAL))) \
__builtin_abort(); \
} while (0)
int main()
{
/* Test some regular finite values. */
TESTIT (double, 3.+4.i, *, 2, 6+8i);
TESTIT (double, 3.+4.i, /, 2, 1.5+2i);
TESTIT (int, 3+4i, *, 2, 6+8i);
TESTIT (int, 3+4i, /, 2, 1+2i);
TESTIT (double, 3.+4.i, *, 2+5i, -14+23i);
TESTIT (int, 3+4i, *, 2+5i, -14+23i);
TESTIT (int, 30+40i, /, 5i, 8-6i);
TESTIT (int, 14+6i, /, 7+3i, 2);
TESTIT (int, 8+24i, /, 4+12i, 2);
/* Test for accuracy. */
COMPILETIME_TESTIT (double,
(1 + __DBL_EPSILON__ + 1i),
*,
(1 - __DBL_EPSILON__ + 1i),
-4.93038065763132378382330353301741393545754021943139377981e-32+2i);
/* This becomes (NaN + iInf). */
#define VAL1 ((_Complex double)__builtin_inf() * 1i)
/* Test some C99 Annex G special cases. */
TEST_ONE_PART_INF ((VAL1) * (VAL1));
TEST_ONE_PART_INF ((_Complex double)1 / (_Complex double)0);
TEST_ONE_PART_INF ((VAL1) / (_Complex double)1);
RUNTIME_TESTIT (double, 1, /, VAL1, 0);
STATICINIT_TESTIT (double, 1, /, VAL1, 0);
return 0;
}
/* { dg-require-effective-target ti_c64xp } */
#include <c6x_intrinsics.h>
extern void abort (void);
typedef short __v2hi __attribute ((vector_size(4)));
int a = 0x5000d000;
int b = 0xc0002000;
int c = 0x40009000;
int d = 0x80000001;
int e = 0x50002001;
int f = 0xc0008000;
int a4 = 0x50d03080;
int b4 = 0xc020f080;
int c4 = 0xc0202080;
int d4 = 0x50003080;
int e4 = 0xc0202180;
int main ()
{
int v;
long long vll;
v = _add2 (a, b);
if (v != 0x1000f000)
abort ();
v = _sub2 (a, b);
if (v != 0x9000b000)
abort ();
v = _sub2 (b, a);
if (v != 0x70005000)
abort ();
v = _add4 (a4, b4);
if (v != 0x10f02000)
abort ();
v = _sub4 (a4, b4);
if (v != 0x90b04000)
abort ();
v = _saddu4 (a4, c4);
if (v != 0xfff050ff)
abort ();
v = _sadd2 (a, b);
if (v != 0x1000f000)
abort ();
v = _sadd2 (a, c);
if (v != 0x7fff8000)
abort ();
v = _ssub2 (a, b);
if (v != 0x7fffb000)
abort ();
v = _ssub2 (b, a);
if (v != 0x80005000)
abort ();
vll = _smpy2ll (a, b);
if (vll != 0xd8000000f4000000ll)
abort ();
vll = _smpy2ll (d, d);
if (vll != 0x7fffffff00000002ll)
abort ();
v = _avg2 (b, e);
if (v != 0x08002001)
abort ();
v = _avgu4 (d4, e4);
if (v != 0x88102980)
abort ();
v = _abs2 (a);
if (v != 0x50003000)
abort ();
v = _abs2 (f);
if (v != 0x40007fff)
abort ();
return 0;
}
# Copyright (C) 2009 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 3 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 GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
# GCC testsuite that uses the `c-torture.exp' driver, looping over
# optimization options.
load_lib gcc-dg.exp
dg-init
gcc-dg-runtest [lsort [glob $srcdir/$subdir/*.c]] ""
dg-finish
#include <c6x_intrinsics.h>
extern void abort (void);
#define N 4
int vals[N] = { 0, 0xffffffff, 0x89abcdef, 0xdeadbeef };
int main ()
{
int i;
for (i = 0; i < N; i++)
{
int shf1, shf2;
int v = vals[i];
unsigned int uv = v;
for (shf1 = 0; shf1 < 32; shf1++)
for (shf2 = 0; shf2 < 32; shf2++)
{
int r = (shf1 << 5) | shf2;
if (shf2 > shf1)
{
unsigned int mask = (1u << (shf2 - shf1) << 1) - 1;
mask <<= shf1;
if (_clrr (v, r) != (v & ~mask))
abort ();
}
if (_extr (v, r) != v << shf1 >> shf2)
abort ();
if (_extru (v, r) != uv << shf1 >> shf2)
abort ();
}
}
return 0;
}
#include <c6x_intrinsics.h>
extern void abort (void);
int a1 = 0x50000000;
int b1 = 0xc0000000;
int c1 = 0x40000000;
int a2 = 0xd0000000;
int b2 = 0x20000000;
int c2 = 0x90000000;
int d = 0x80000000;
int main ()
{
if (_sadd (a1, b1) != 0x10000000)
abort ();
if (_sadd (a2, b2) != 0xf0000000)
abort ();
if (_sadd (a1, c1) != 0x7fffffff)
abort ();
if (_sadd (a2, c2) != 0x80000000)
abort ();
if (_ssub (a1, b1) != 0x7fffffff)
abort ();
if (_ssub (a2, b2) != 0xb0000000)
abort ();
if (_ssub (b1, a1) != 0x80000000)
abort ();
if (_ssub (b2, a2) != 0x50000000)
abort ();
if (_abs (a1) != 0x50000000)
abort ();
if (_abs (b1) != 0x40000000)
abort ();
if (_abs (d) != 0x7fffffff)
abort ();
if (_sshl (a1, 1) != 0x7fffffff
|| _sshl (b2, 1) != 0x40000000
|| _sshl (a2, 1) != 0xa0000000
|| _sshl (a2, 4) != 0x80000000)
abort ();
return 0;
}
#include <c6x_intrinsics.h>
extern void abort (void);
int a1 = 0x5000;
int b1 = 0xc000;
int a2 = 0xd000;
int b2 = 0x2000;
int c = 0x8000;
int main ()
{
if (_smpy (a1, b1) != 0xd8000000)
abort ();
if (_smpy (a2, b2) != 0xf4000000)
abort ();
if (_smpy (c, c) != 0x7fffffff)
abort ();
return 0;
}
#include <c6x_intrinsics.h>
extern void abort (void);
int a1 = 0x50000000;
int b1 = 0xc0000000;
int a2 = 0xd0000000;
int b2 = 0x20000000;
int c = 0x80000000;
int main ()
{
if (_smpyh (a1, b1) != 0xd8000000)
abort ();
if (_smpyh (a2, b2) != 0xf4000000)
abort ();
if (_smpyh (c, c) != 0x7fffffff)
abort ();
return 0;
}
#include <c6x_intrinsics.h>
extern void abort (void);
int a1 = 0x5000;
int b1 = 0xc0000000;
int a2 = 0xd000;
int b2 = 0x20000000;
int c = 0x8000;
int main ()
{
if (_smpylh (a1, b1) != 0xd8000000)
abort ();
if (_smpylh (a2, b2) != 0xf4000000)
abort ();
if (_smpylh (c, 0x80000000) != 0x7fffffff)
abort ();
if (_smpyhl (b1, a1) != 0xd8000000)
abort ();
if (_smpyhl (b2, a2) != 0xf4000000)
abort ();
if (_smpyhl (0x80000000, c) != 0x7fffffff)
abort ();
return 0;
}
/* { dg-do compile } */
/* { dg-options "-O2 -mlong-calls" } */
extern void dump_stack (void) __attribute__ ((__cold__));
struct thread_info {
struct task_struct *task;
};
extern struct thread_info *current_thread_info (void);
void dump_stack (void)
{
unsigned long stack;
show_stack ((current_thread_info ()->task), &stack);
}
void die (char *str, void *fp, int nr)
{
dump_stack ();
while (1);
}
/* { dg-do compile } */
/* { dg-require-effective-target ti_c64xp } */
/* { dg-options "-O2" } */
/* { dg-final { scan-assembler-not "call" } } */
long long foo (long long x)
{
return __builtin_ffsll (x);
}
long long bar (long long x)
{
return __builtin_clzll (x);
}
long long baz (long long x)
{
return __builtin_ctzll (x);
}
/* { dg-do compile } */
/* { dg-options "-O2 -march=c64x+" } */
/* { dg-final { scan-assembler-not "call" } } */
int foo (int x)
{
return __builtin_ffsl (x);
}
int bar (int x)
{
return __builtin_clzl (x);
}
int baz (int x)
{
return __builtin_ctzl (x);
}
/* { dg-do compile } */
/* { dg-require-effective-target ti_c67x } */
/* { dg-options "-O2 -ffinite-math-only" } */
/* { dg-final { scan-assembler-not "cmpeq" } } */
double gedf (double x, double y)
{
return x >= y;
}
double ledf (double x, double y)
{
return x <= y;
}
float gesf (float x, float y)
{
return x >= y;
}
float lesf (float x, float y)
{
return x <= y;
}
/* { dg-do compile } */
/* { dg-require-effective-target ti_c67x } */
/* { dg-options "-O2" } */
/* { dg-final { scan-assembler-times "cmpeq.p" 4 } } */
double gedf (double x, double y)
{
return x >= y;
}
double ledf (double x, double y)
{
return x <= y;
}
float gesf (float x, float y)
{
return x >= y;
}
float lesf (float x, float y)
{
return x <= y;
}
/* { dg-do compile } */
/* { dg-require-effective-target ti_c67x } */
/* { dg-options "-O2 -fno-reciprocal-math" } */
/* { dg-final { scan-assembler-not "rcpdp" } } */
/* { dg-final { scan-assembler-not "rcpsp" } } */
double f (double x, double y)
{
return x / y;
}
float g (float x, float y)
{
return x / y;
}
/* { dg-do compile } */
/* { dg-require-effective-target ti_c67x } */
/* { dg-options "-O2" } */
/* { dg-final { scan-assembler "rcpdp" } } */
/* { dg-final { scan-assembler "rcpsp" } } */
double f (double x, double y)
{
return x / y;
}
float g (float x, float y)
{
return x / y;
}
/* { dg-do compile } */
/* { dg-options "-O2 -mlong-calls" } */
/* { dg-final { scan-assembler-times "\\tcall\[p\]*\[\\t ]*.s" 3 } } */
/* { dg-final { scan-assembler "call\[p\]*\[\\t ]*.s.\[\\t ]*.f" } } */
/* { dg-final { scan-assembler-not "call\[p\]*\[\\t ]*.s.\[\\t ]*.g" } } */
/* { dg-final { scan-assembler-not "call\[p\]*\[\\t ]*.s.\[\\t ]*.h" } } */
int x;
static __attribute__ ((noinline)) void f ()
{
x = 5;
}
extern void g ();
static __attribute__ ((noinline)) __attribute__((section(".init.text"))) void h ()
{
x = 5;
}
int bar ()
{
f ();
g ();
h ();
}
/* { dg-do compile } */
/* { dg-require-effective-target ti_c64xp } */
/* { dg-options "-O2" } */
/* { dg-final { scan-assembler "dpackx" } } */
#include <stdlib.h>
unsigned long long z = 0x012389ab4567cdefull;
int main ()
{
unsigned long long z2 = (z << 48) | (z >> 16);
if (z2 != 0xcdef012389ab4567ull)
abort ();
exit (0);
}
/* { dg-do run } */
/* { dg-options "-O2" } */
#include <stdlib.h>
unsigned long long z = 0x012389ab4567cdefull;
int main ()
{
unsigned long long z2 = (z << 48) | (z >> 16);
if (z2 != 0xcdef012389ab4567ull)
abort ();
exit (0);
}
# Copyright (C) 2010 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 3 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 GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
# GCC testsuite that uses the `dg.exp' driver.
if ![istarget tic6x-*-*] then {
return
}
# Load support procs.
load_lib gcc-dg.exp
# Like dg-options, but treats certain C6X-specific options specially:
#
# -march=*
# Select the target architecture. Skip the test if the multilib
# flags force a different arch.
proc dg-c6x-options {args} {
upvar dg-extra-tool-flags extra_tool_flags
upvar dg-do-what do_what
set multilib_arch ""
set arch ""
foreach flag [target_info multilib_flags] {
regexp "^-march=(.*)" $flag dummy multilib_arch
}
set flags [lindex $args 1]
foreach flag $flags {
regexp "^-march=(.*)" $flag dummy arch
}
if {$multilib_arch == "" || $multilib_cpu == $arch} {
set extra_tool_flags $flags
} else {
set do_what [list [lindex $do_what 0] "N" "P"]
}
}
# Initialize `dg'.
dg-init
# Main loop.
dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cCS\]]] "" ""
# All done.
dg-finish
/* { dg-do compile } */
/* { dg-options "-O2" } */
/* { dg-final { scan-assembler-not "call\[\\t ]*.s.\[\\t ]*.f" } } */
/* { dg-final { scan-assembler-not "call\[\\t ]*.s.\[\\t ]*.g" } } */
extern void f () __attribute__ ((weak));
extern void g () __attribute__ ((weak)) __attribute__ ((noinline));
void g ()
{
}
int main ()
{
f ();
g ();
}
...@@ -568,6 +568,7 @@ proc check_profiling_available { test_what } { ...@@ -568,6 +568,7 @@ proc check_profiling_available { test_what } {
|| [istarget powerpc-*-eabi*] || [istarget powerpc-*-eabi*]
|| [istarget powerpc-*-elf] || [istarget powerpc-*-elf]
|| [istarget rx-*-*] || [istarget rx-*-*]
|| [istarget tic6x-*-elf]
|| [istarget xstormy16-*] || [istarget xstormy16-*]
|| [istarget xtensa*-*-elf] || [istarget xtensa*-*-elf]
|| [istarget *-*-netware*] || [istarget *-*-netware*]
...@@ -1398,6 +1399,25 @@ proc check_effective_target_broken_cplxf_arg { } { ...@@ -1398,6 +1399,25 @@ proc check_effective_target_broken_cplxf_arg { } {
}] }]
} }
# Return 1 is this is a TI C6X target supporting C67X instructions
proc check_effective_target_ti_c67x { } {
return [check_no_compiler_messages ti_c67x assembly {
#if !defined(_TMS320C6700)
#error FOO
#endif
}]
}
# Return 1 is this is a TI C6X target supporting C64X+ instructions
proc check_effective_target_ti_c64xp { } {
return [check_no_compiler_messages ti_c64xp assembly {
#if !defined(_TMS320C6400_PLUS)
#error FOO
#endif
}]
}
proc check_alpha_max_hw_available { } { proc check_alpha_max_hw_available { } {
return [check_runtime alpha_max_hw_available { return [check_runtime alpha_max_hw_available {
int main() { return __builtin_alpha_amask(1<<8) != 0; } int main() { return __builtin_alpha_amask(1<<8) != 0; }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment