builtin-types.def (BT_FN_VOID_PTR_VAR): New.
authorJanis Johnson <janis187@us.ibm.com>
Fri, 7 Dec 2001 01:42:35 +0000 (01:42 +0000)
committerJanis Johnson <janis@gcc.gnu.org>
Fri, 7 Dec 2001 01:42:35 +0000 (01:42 +0000)
* 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

gcc/ChangeLog
gcc/builtin-types.def
gcc/builtins.c
gcc/builtins.def
gcc/doc/extend.texi
gcc/doc/md.texi

index 23f501228e9560f9e308f45aedaa0df2faf511d2..809c5857a4d8c4916f9a6f669573d2f3ae3e25eb 100644 (file)
@@ -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
index b4c866fdddaf9fc115affe7d578d21fcc2a12b47..f24f5c7952435bdc380ed29499901e5c824cf603 100644 (file)
@@ -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)
 
index 68df170b600679904d69b7b281a4068e1574d2f2..515b75220a11c599c8eec9d0184083b6360e253f 100644 (file)
@@ -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);
index ebb323f235de18ef70d4942c18dd248ceea02904..118f1d5a5af3c553ada0b833f40ff72357ad1a18 100644 (file)
@@ -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,
index 61757f0d4d99f5a821daed8b3064ea60434f0353..a6853d8206e3e7c41d737ace2716db3c17b55b96 100644 (file)
@@ -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++)
index f8ecb2a1b6dd9f22682f89238bce0b0e209a5ae8..23154cdc08f990e84264a2f8fb711717fb001937 100644 (file)
@@ -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}