#   Copyright (C) 2002, 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.  

# Test that the correct data prefetch instructions (SSE or 3DNow! variant,
# or none) are used for various i386 cpu-type and instruction set
# extension options for __builtin_prefetch.  When using -mtune, specify
# the minimum supported architecture in case the compiler was configured
# with a different default.

# Failure reports do not include the compile option that was used; that
# information can be seen in the compile line in the log file.

# Do not generate prefetch instructions for the following options.

set PREFETCH_NONE [list \
	{ -march=i386 -mtune=i386 } \
	{ -march=i386 -mtune=i486 } \
	{ -march=i386 -mtune=i586 } \
	{ -march=i386 -mtune=i686 } \
	{ -march=i386 -mtune=pentium2 } \
	{ -march=i386 -mtune=k6 } \
	{ -march=i386 -mtune=k6-2 } \
	{ -march=i386 -mtune=k6-3 } \
	{ -march=i386 } \
	{ -march=i486 } \
	{ -march=i586 } \
	{ -march=i686 } \
	{ -march=pentium2 } \
	{ -march=k6 } ]

# For options in PREFETCH_SSE, generate SSE prefetch instructions for
# __builtin_prefetch.  This includes -mtune for targets that treat prefetch
# instructions as nops.

set PREFETCH_SSE [list \
	{ -march=i686 -mtune=pentium3 } \
	{ -march=i686 -mtune=pentium3m } \
	{ -march=i686 -mtune=pentium-m } \
	{ -march=i686 -mtune=pentium4 } \
	{ -march=i686 -mtune=pentium4m } \
	{ -march=i686 -mtune=prescott } \
	{ -march=i686 -mtune=athlon } \
	{ -march=i686 -mtune=athlon-4 } \
	{ -march=i686 -mtune=c3-2 } \
	{ -march=pentium3 } \
	{ -march=pentium3m } \
	{ -march=pentium-m } \
	{ -march=pentium4 } \
	{ -march=pentium4m } \
	{ -march=prescott } \
	{ -march=c3-2 } ]

# Generate 3DNow! prefetch instructions for the following.

set PREFETCH_3DNOW [list \
	{ -march=c3 } \
	{ -march=k6-2 } \
	{ -march=k6-3 } ]

# Athlon supports both 3DNow! and SSE prefetch instructions.  For
# __builtin_prefetch, generate the 3DNow! instruction for write
# prefetches but SSE prefetch instructions for read prefetches.

set PREFETCH_ATHLON [list \
	{ -march=athlon } \
	{ -march=athlon-4 } ]

if $tracelevel then {
    strace $tracelevel
}

# Load support procs.
load_lib gcc-dg.exp

# Initialize harness.
dg-init

# Save these.  They are needed if testsuite loops over multiple ABIs
set saved_torture_with_loops $torture_with_loops
set saved_torture_without_loops $torture_without_loops

set torture_with_loops $PREFETCH_NONE
set torture_without_loops $PREFETCH_NONE
gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/i386-pf-none-*.c]] ""

set torture_with_loops $PREFETCH_SSE
set torture_without_loops $PREFETCH_SSE
gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/i386-pf-sse-*.c]] ""

set torture_with_loops $PREFETCH_3DNOW
set torture_without_loops $PREFETCH_3DNOW
gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/i386-pf-3dnow-*.c]] ""

set torture_with_loops $PREFETCH_ATHLON
set torture_without_loops $PREFETCH_ATHLON
gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/i386-pf-athlon-*.c]] ""

set torture_with_loops $saved_torture_with_loops
set torture_without_loops $saved_torture_without_loops

dg-finish

