From 5f3ca2f6b5f75640167a7c58b6da2f885363ba79 Mon Sep 17 00:00:00 2001 From: kkojima Date: Tue, 25 Mar 2008 13:38:45 +0000 Subject: [PATCH] * config/sh/sh.md (prefetch): Add condition for SH2A target. (prefetch_sh2a): New. * gcc.target/sh/sh2a-prefetch.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@133516 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/config/sh/sh.md | 11 +++++++++- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.target/sh/sh2a-prefetch.c | 34 +++++++++++++++++++++++++++++ 4 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/sh/sh2a-prefetch.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7ca50285e1f..339c91e3dd9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2008-03-25 Naveen.H.S + + * config/sh/sh.md (prefetch): Add condition for SH2A target. + (prefetch_sh2a): New. + 2008-03-25 Jayant Sonar Naveen.H.S diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md index 750e9d36d96..0073370701e 100644 --- a/gcc/config/sh/sh.md +++ b/gcc/config/sh/sh.md @@ -13716,7 +13716,8 @@ mov.l\\t1f,r0\\n\\ [(prefetch (match_operand 0 "address_operand" "p") (match_operand:SI 1 "const_int_operand" "n") (match_operand:SI 2 "const_int_operand" "n"))] - "(TARGET_HARD_SH4 || TARGET_SH5) && (TARGET_SHMEDIA || !TARGET_VXWORKS_RTP)" + "TARGET_SH2A || ((TARGET_HARD_SH4 || TARGET_SH5) + && (TARGET_SHMEDIA || !TARGET_VXWORKS_RTP))" " { if (GET_MODE (operands[0]) != Pmode @@ -13727,6 +13728,14 @@ mov.l\\t1f,r0\\n\\ operands[0] = force_reg (Pmode, operands[0]); }") +(define_insn "prefetch_m2a" + [(prefetch (match_operand:SI 0 "register_operand" "r") + (match_operand:SI 1 "const_int_operand" "n") + (match_operand:SI 2 "const_int_operand" "n"))] + "TARGET_SH2A" + "pref\\t@%0" + [(set_attr "type" "other")]) + (define_insn "alloco_i" [(set (mem:BLK (match_operand:QI 0 "cache_address_operand" "p")) (unspec:BLK [(const_int 0)] UNSPEC_ALLOCO))] diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7cee9300aed..f61cfcf5507 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2008-03-25 Naveen.H.S + + * gcc.target/sh/sh2a-prefetch.c: New test. + 2008-03-25 Jayant Sonar Naveen.H.S diff --git a/gcc/testsuite/gcc.target/sh/sh2a-prefetch.c b/gcc/testsuite/gcc.target/sh/sh2a-prefetch.c new file mode 100644 index 00000000000..e0c9a0d7dc6 --- /dev/null +++ b/gcc/testsuite/gcc.target/sh/sh2a-prefetch.c @@ -0,0 +1,34 @@ +/* Testcase to check generation of a SH2A specific instruction PREF @Rm. */ +/* { dg-do assemble {target sh*-*-*}} */ +/* { dg-options "-O0" } */ +/* { dg-skip-if "" { "sh*-*-*" } "*" "-m2a -m2a-nofpu -m2a-single -m2a-single-only" } */ +/* { dg-final { scan-assembler "pref"} } */ + +void +opt (void) +{ + int *p, wk; + int data[100]; + + /* data prefetch , instructions hit the cache. */ + + __builtin_prefetch (&data[0], 0, 0); + __builtin_prefetch (&data[0], 0, 1); + __builtin_prefetch (&data[0], 0, 2); + __builtin_prefetch (&data[0], 0, 3); + __builtin_prefetch (&data[0], 1, 0); + __builtin_prefetch (&data[0], 1, 1); + __builtin_prefetch (&data[0], 1, 2); + __builtin_prefetch (&data[0], 1, 3); + + + for (p = &data[0]; p < &data[9]; p++) + { + if (*p > *(p + 1)) + { + wk = *p; + *p = *(p + 1); + *(p + 1) = wk; + } + } +} -- 2.11.0