1/* 2 Copyright 2003 Richard Curnow, SuperH (UK) Ltd. 3 4 This file is subject to the terms and conditions of the GNU General Public 5 License. See the file "COPYING" in the main directory of this archive 6 for more details. 7 8 Tight version of memset for the case of just clearing a page. It turns out 9 that having the alloco's spaced out slightly due to the increment/branch 10 pair causes them to contend less for access to the cache. Similarly, 11 keeping the stores apart from the allocos causes less contention. => Do two 12 separate loops. Do multiple stores per loop to amortise the 13 increment/branch cost a little. 14 15 Parameters: 16 r2 : source effective address (start of page) 17 18 Always clears 4096 bytes. 19 20 Note : alloco guarded by synco to avoid TAKum03020 erratum 21 22*/ 23 24 .section .text..SHmedia32,"ax" 25 .little 26 27 .balign 8 28 .global sh64_page_clear 29sh64_page_clear: 30 pta/l 1f, tr1 31 pta/l 2f, tr2 32 ptabs/l r18, tr0 33 34 movi 4096, r7 35 add r2, r7, r7 36 add r2, r63, r6 371: 38 alloco r6, 0 39 synco ! TAKum03020 40 addi r6, 32, r6 41 bgt/l r7, r6, tr1 42 43 add r2, r63, r6 442: 45 st.q r6, 0, r63 46 st.q r6, 8, r63 47 st.q r6, 16, r63 48 st.q r6, 24, r63 49 addi r6, 32, r6 50 bgt/l r7, r6, tr2 51 52 blink tr0, r63 53