summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJanis Johnson <janis187@us.ibm.com>2001-12-07 01:42:35 +0000
committerJanis Johnson <janis@gcc.gnu.org>2001-12-07 01:42:35 +0000
commite83d297b1049d7d298aa315ae8219f6a5ddec0c7 (patch)
treebaf0c96827241d6794dcca8eb20a81c5076a34e7
parente94c6dee73d9ffdaf8bae0f9cfdde6db3e4840b1 (diff)
downloadgcc-e83d297b1049d7d298aa315ae8219f6a5ddec0c7.tar.gz
builtin-types.def (BT_FN_VOID_PTR_VAR): New.
* builtin-types.def (BT_FN_VOID_PTR_VAR): New. * builtins.def (BUILT_IN_PREFETCH): Change arguments. * builtins.c (expand_builtin_prefetch): Two arguments are now optional, with defaults for read prefetch with high degree of locality. * doc/extend.texi (__builtin_prefetch): Update documentation. * doc/md.texi (prefetch): Add documentation. From-SVN: r47741
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/builtin-types.def2
-rw-r--r--gcc/builtins.c21
-rw-r--r--gcc/builtins.def2
-rw-r--r--gcc/doc/extend.texi9
-rw-r--r--gcc/doc/md.texi16
6 files changed, 53 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 23f501228e9..809c5857a4d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2001-12-06 Janis Johnson <janis187@us.ibm.com>
+
+ * builtin-types.def (BT_FN_VOID_PTR_VAR): New.
+ * builtins.def (BUILT_IN_PREFETCH): Change arguments.
+ * builtins.c (expand_builtin_prefetch): Two arguments are now optional,
+ with defaults for read prefetch with high degree of locality.
+ * doc/extend.texi (__builtin_prefetch): Update documentation.
+ * doc/md.texi (prefetch): Add documentation.
+
2001-12-06 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
* fixinc/inclhack.def (stdio_va_list): Handle __VA_LIST__ in Tru64
diff --git a/gcc/builtin-types.def b/gcc/builtin-types.def
index b4c866fddda..f24f5c79524 100644
--- a/gcc/builtin-types.def
+++ b/gcc/builtin-types.def
@@ -167,6 +167,8 @@ DEF_FUNCTION_TYPE_VAR_0 (BT_FN_PTR_VAR, BT_PTR)
DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_VALIST_REF_VAR,
BT_VOID, BT_VALIST_REF)
+DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_PTR_VAR,
+ BT_VOID, BT_PTR)
DEF_FUNCTION_TYPE_VAR_1 (BT_FN_INT_CONST_STRING_VAR,
BT_INT, BT_CONST_STRING)
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 68df170b600..515b75220a1 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -727,9 +727,26 @@ expand_builtin_prefetch (arglist)
tree arg0, arg1, arg2;
rtx op0, op1, op2;
+ if (!validate_arglist (arglist, POINTER_TYPE, 0))
+ return;
+
arg0 = TREE_VALUE (arglist);
- arg1 = TREE_VALUE (TREE_CHAIN (arglist));
- arg2 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
+ /* Arguments 1 and 2 are optional; argument 1 (read/write) defaults to
+ zero (read) and argument 2 (locality) defaults to 3 (high degree of
+ locality). */
+ if (TREE_CHAIN (arglist))
+ {
+ arg1 = TREE_VALUE (TREE_CHAIN (arglist));
+ if (TREE_CHAIN (TREE_CHAIN (arglist)))
+ arg2 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
+ else
+ arg2 = build_int_2 (3, 0);
+ }
+ else
+ {
+ arg1 = integer_zero_node;
+ arg2 = build_int_2 (3, 0);
+ }
/* Argument 0 is an address. */
op0 = expand_expr (arg0, NULL_RTX, Pmode, EXPAND_NORMAL);
diff --git a/gcc/builtins.def b/gcc/builtins.def
index ebb323f235d..118f1d5a5af 100644
--- a/gcc/builtins.def
+++ b/gcc/builtins.def
@@ -338,7 +338,7 @@ DEF_GCC_BUILTIN(BUILT_IN_TRAP,
BT_FN_VOID)
DEF_GCC_BUILTIN(BUILT_IN_PREFETCH,
"__builtin_prefetch",
- BT_FN_VOID_PTR_INT_INT)
+ BT_FN_VOID_PTR_VAR)
/* Stdio builtins. */
DEF_FALLBACK_BUILTIN(BUILT_IN_PUTCHAR,
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 61757f0d4d9..a6853d8206e 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -4442,7 +4442,7 @@ if (__builtin_expect (ptr != NULL, 1))
when testing pointer or floating-point values.
@end deftypefn
-@deftypefn {Built-in Function} void __builtin_prefetch (void *@var{addr}, int @var{rw}, int @var{locality})
+@deftypefn {Built-in Function} void __builtin_prefetch (void *@var{addr}, ...)
This function is used to minimize cache-miss latency by moving data into
a cache before it is accessed.
You can insert calls to @code{__builtin_prefetch} into code for which
@@ -4452,14 +4452,17 @@ If the prefetch is done early enough before the access then the data will
be in the cache by the time it is accessed.
The value of @var{addr} is the address of the memory to prefetch.
+There are two optional arguments, @var{rw} and @var{locality}.
The value of @var{rw} is a compile-time constant one or zero; one
-means that the prefetch is preparing for a write to the memory address.
+means that the prefetch is preparing for a write to the memory address
+and zero, the default, means that the prefetch is preparing for a read.
The value @var{locality} must be a compile-time constant integer between
zero and three. A value of zero means that the data has no temporal
locality, so it need not be left in the cache after the access. A value
of three means that the data has a high degree of temporal locality and
should be left in all levels of cache possible. Values of one and two
-mean, respectively, a low or moderate degree of temporal locality.
+mean, respectively, a low or moderate degree of temporal locality. The
+default is three.
@smallexample
for (i = 0; i < n; i++)
diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi
index f8ecb2a1b6d..23154cdc08f 100644
--- a/gcc/doc/md.texi
+++ b/gcc/doc/md.texi
@@ -3015,6 +3015,22 @@ A typical @code{conditional_trap} pattern looks like
"@dots{}")
@end smallexample
+@cindex @code{prefetch} instruction pattern
+@item @samp{prefetch}
+
+This pattern, if defined, emits code for a non-faulting data prefetch
+instruction. Operand 0 is the address of the memory to prefetch. Operand 1
+is a constant 1 if the prefetch is preparing for a write to the memory
+address, or a constant 0 otherwise. Operand 2 is the expected degree of
+temporal locality of the data and is a value between 0 and 3, inclusive; 0
+means that the data has no temporal locality, so it need not be left in the
+cache after the access; 3 means that the data has a high degree of temporal
+locality and should be left in all levels of cache possible; 1 and 2 mean,
+respectively, a low or moderate degree of temporal locality.
+
+Targets that do not support write prefetches or locality hints can ignore
+the values of operands 1 and 2.
+
@cindex @code{cycle_display} instruction pattern
@item @samp{cycle_display}