#   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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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

