summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorkkojima <kkojima@138bc75d-0d04-0410-961f-82ee72b054a4>2008-03-25 13:38:45 +0000
committerkkojima <kkojima@138bc75d-0d04-0410-961f-82ee72b054a4>2008-03-25 13:38:45 +0000
commit5f3ca2f6b5f75640167a7c58b6da2f885363ba79 (patch)
treec812e8bd0ba9e0a60a0830662d2b015f47fb7973 /gcc
parent419b390c2e7e2be3b0d1def732db63b5d0ac5610 (diff)
downloadgcc-5f3ca2f6b5f75640167a7c58b6da2f885363ba79.tar.gz
* 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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/sh/sh.md11
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/sh/sh2a-prefetch.c34
4 files changed, 53 insertions, 1 deletions
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 <naveen.hs@kpitcummins.com>
+
+ * config/sh/sh.md (prefetch): Add condition for SH2A target.
+ (prefetch_sh2a): New.
+
2008-03-25 Jayant Sonar <Jayant.sonar@kpitcummins.com>
Naveen.H.S <naveen.hs@kpitcummins.com>
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 <naveen.hs@kpitcummins.com>
+
+ * gcc.target/sh/sh2a-prefetch.c: New test.
+
2008-03-25 Jayant Sonar <Jayant.sonar@kpitcummins.com>
Naveen.H.S <naveen.hs@kpitcummins.com>
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;
+ }
+ }
+}