diff options
author | Janis Johnson <janis187@us.ibm.com> | 2001-12-07 01:42:35 +0000 |
---|---|---|
committer | Janis Johnson <janis@gcc.gnu.org> | 2001-12-07 01:42:35 +0000 |
commit | e83d297b1049d7d298aa315ae8219f6a5ddec0c7 (patch) | |
tree | baf0c96827241d6794dcca8eb20a81c5076a34e7 | |
parent | e94c6dee73d9ffdaf8bae0f9cfdde6db3e4840b1 (diff) | |
download | gcc-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/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/builtin-types.def | 2 | ||||
-rw-r--r-- | gcc/builtins.c | 21 | ||||
-rw-r--r-- | gcc/builtins.def | 2 | ||||
-rw-r--r-- | gcc/doc/extend.texi | 9 | ||||
-rw-r--r-- | gcc/doc/md.texi | 16 |
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} |