Artifact
17a1f21cccc89ef9046661455fc6b590f7ec3f32:
0000: 2f 2a 20 54 68 69 73 20 66 69 6c 65 20 69 73 20 /* This file is
0010: 64 65 72 69 76 65 64 20 66 72 6f 6d 20 67 63 63 derived from gcc
0020: 2d 32 2e 36 2e 33 2f 6c 69 62 67 63 63 32 2e 63 -2.6.3/libgcc2.c
0030: 2c 20 73 65 63 74 69 6f 6e 20 4c 5f 63 6c 65 61 , section L_clea
0040: 72 5f 63 61 63 68 65 20 2a 2f 0a 0a 2f 2a 20 43 r_cache */../* C
0050: 6f 70 79 72 69 67 68 74 20 28 43 29 20 31 39 38 opyright (C) 198
0060: 39 2c 20 31 39 39 32 2c 20 31 39 39 33 2c 20 31 9, 1992, 1993, 1
0070: 39 39 34 20 46 72 65 65 20 53 6f 66 74 77 61 72 994 Free Softwar
0080: 65 20 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 49 6e e Foundation, In
0090: 63 2e 0a 0a 54 68 69 73 20 66 69 6c 65 20 69 73 c...This file is
00a0: 20 70 61 72 74 20 6f 66 20 47 4e 55 20 43 43 2e part of GNU CC.
00b0: 0a 0a 47 4e 55 20 43 43 20 69 73 20 66 72 65 65 ..GNU CC is free
00c0: 20 73 6f 66 74 77 61 72 65 3b 20 79 6f 75 20 63 software; you c
00d0: 61 6e 20 72 65 64 69 73 74 72 69 62 75 74 65 20 an redistribute
00e0: 69 74 20 61 6e 64 2f 6f 72 20 6d 6f 64 69 66 79 it and/or modify
00f0: 0a 69 74 20 75 6e 64 65 72 20 74 68 65 20 74 65 .it under the te
0100: 72 6d 73 20 6f 66 20 74 68 65 20 47 4e 55 20 47 rms of the GNU G
0110: 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 eneral Public Li
0120: 63 65 6e 73 65 20 61 73 20 70 75 62 6c 69 73 68 cense as publish
0130: 65 64 20 62 79 0a 74 68 65 20 46 72 65 65 20 53 ed by.the Free S
0140: 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 61 74 69 oftware Foundati
0150: 6f 6e 3b 20 65 69 74 68 65 72 20 76 65 72 73 69 on; either versi
0160: 6f 6e 20 32 2c 20 6f 72 20 28 61 74 20 79 6f 75 on 2, or (at you
0170: 72 20 6f 70 74 69 6f 6e 29 0a 61 6e 79 20 6c 61 r option).any la
0180: 74 65 72 20 76 65 72 73 69 6f 6e 2e 0a 0a 47 4e ter version...GN
0190: 55 20 43 43 20 69 73 20 64 69 73 74 72 69 62 75 U CC is distribu
01a0: 74 65 64 20 69 6e 20 74 68 65 20 68 6f 70 65 20 ted in the hope
01b0: 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 that it will be
01c0: 75 73 65 66 75 6c 2c 0a 62 75 74 20 57 49 54 48 useful,.but WITH
01d0: 4f 55 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 OUT ANY WARRANTY
01e0: 3b 20 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74 ; without even t
01f0: 68 65 20 69 6d 70 6c 69 65 64 20 77 61 72 72 61 he implied warra
0200: 6e 74 79 20 6f 66 0a 4d 45 52 43 48 41 4e 54 41 nty of.MERCHANTA
0210: 42 49 4c 49 54 59 20 6f 72 20 46 49 54 4e 45 53 BILITY or FITNES
0220: 53 20 46 4f 52 20 41 20 50 41 52 54 49 43 55 4c S FOR A PARTICUL
0230: 41 52 20 50 55 52 50 4f 53 45 2e 20 20 53 65 65 AR PURPOSE. See
0240: 20 74 68 65 0a 47 4e 55 20 47 65 6e 65 72 61 6c the.GNU General
0250: 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 Public License
0260: 66 6f 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 for more details
0270: 2e 0a 0a 59 6f 75 20 73 68 6f 75 6c 64 20 68 61 ...You should ha
0280: 76 65 20 72 65 63 65 69 76 65 64 20 61 20 63 6f ve received a co
0290: 70 79 20 6f 66 20 74 68 65 20 47 4e 55 20 47 65 py of the GNU Ge
02a0: 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 neral Public Lic
02b0: 65 6e 73 65 0a 61 6c 6f 6e 67 20 77 69 74 68 20 ense.along with
02c0: 47 4e 55 20 43 43 3b 20 73 65 65 20 74 68 65 20 GNU CC; see the
02d0: 66 69 6c 65 20 43 4f 50 59 49 4e 47 2e 20 20 49 file COPYING. I
02e0: 66 20 6e 6f 74 2c 20 77 72 69 74 65 20 74 6f 0a f not, write to.
02f0: 74 68 65 20 46 72 65 65 20 53 6f 66 74 77 61 72 the Free Softwar
0300: 65 20 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 36 37 e Foundation, 67
0310: 35 20 4d 61 73 73 20 41 76 65 2c 20 43 61 6d 62 5 Mass Ave, Camb
0320: 72 69 64 67 65 2c 20 4d 41 20 30 32 31 33 39 2c ridge, MA 02139,
0330: 20 55 53 41 2e 20 20 2a 2f 0a 0a 0a 2f 2a 20 43 USA. */.../* C
0340: 6c 65 61 72 20 70 61 72 74 20 6f 66 20 61 6e 20 lear part of an
0350: 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 63 68 instruction cach
0360: 65 2e 20 2a 2f 0a 0a 2f 2a 20 4f 75 72 20 65 6d e. */../* Our em
0370: 70 68 61 73 69 73 20 68 65 72 65 20 69 73 20 5f phasis here is _
0380: 6e 6f 74 5f 20 74 6f 20 63 6c 65 61 72 20 61 73 not_ to clear as
0390: 20 66 65 77 20 63 61 63 68 65 20 6c 69 6e 65 73 few cache lines
03a0: 20 61 73 20 70 6f 73 73 69 62 6c 65 0a 20 2a 20 as possible. *
03b0: 6f 72 20 77 69 74 68 20 61 73 20 66 65 77 20 6d or with as few m
03c0: 61 63 68 69 6e 65 20 69 6e 73 74 72 75 63 74 69 achine instructi
03d0: 6f 6e 73 20 61 73 20 70 6f 73 73 69 62 6c 65 2c ons as possible,
03e0: 20 62 75 74 20 74 6f 20 64 6f 20 69 74 20 5f 72 but to do it _r
03f0: 69 67 68 74 5f 2e 0a 20 2a 2f 0a 0a 0a 0a 2f 2a ight_.. */..../*
0400: 20 54 68 69 73 20 63 6f 64 65 20 69 73 20 61 70 This code is ap
0410: 70 61 72 65 6e 74 6c 79 20 75 6e 74 65 73 74 65 parently unteste
0420: 64 21 21 20 2a 2f 0a 0a 23 69 66 64 65 66 20 5f d!! */..#ifdef _
0430: 5f 6d 36 38 6b 5f 5f 0a 23 69 66 64 65 66 20 4e _m68k__.#ifdef N
0440: 65 58 54 0a 23 64 65 66 69 6e 65 20 43 4c 45 41 eXT.#define CLEA
0450: 52 5f 49 4e 53 4e 5f 43 41 43 48 45 28 42 45 47 R_INSN_CACHE(BEG
0460: 2c 20 45 4e 44 29 20 20 20 5c 0a 20 20 20 61 73 , END) \. as
0470: 6d 20 76 6f 6c 61 74 69 6c 65 20 28 22 74 72 61 m volatile ("tra
0480: 70 20 23 32 22 29 0a 23 65 6e 64 69 66 0a 23 65 p #2").#endif.#e
0490: 6e 64 69 66 0a 0a 2f 2a 20 54 68 69 73 20 69 73 ndif../* This is
04a0: 20 66 72 6f 6d 20 41 6e 64 72 65 61 73 20 53 74 from Andreas St
04b0: 6f 6c 63 6b 65 20 3c 73 74 6f 6c 63 6b 65 40 49 olcke <stolcke@I
04c0: 43 53 49 2e 42 65 72 6b 65 6c 65 79 2e 45 44 55 CSI.Berkeley.EDU
04d0: 3e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 >. */.#if define
04e0: 64 28 5f 5f 6d 69 70 73 5f 5f 29 20 7c 7c 20 64 d(__mips__) || d
04f0: 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 36 34 5f efined(__mips64_
0500: 5f 29 0a 23 69 66 64 65 66 20 75 6c 74 72 69 78 _).#ifdef ultrix
0510: 0a 23 69 6e 63 6c 75 64 65 20 3c 6d 69 70 73 2f .#include <mips/
0520: 63 61 63 68 65 63 74 6c 2e 68 3e 0a 23 65 6c 73 cachectl.h>.#els
0530: 65 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f e.#include <sys/
0540: 63 61 63 68 65 63 74 6c 2e 68 3e 0a 23 65 6e 64 cachectl.h>.#end
0550: 69 66 0a 23 64 65 66 69 6e 65 20 43 4c 45 41 52 if.#define CLEAR
0560: 5f 49 4e 53 4e 5f 43 41 43 48 45 28 42 45 47 2c _INSN_CACHE(BEG,
0570: 20 45 4e 44 29 20 20 20 5c 0a 20 20 20 63 61 63 END) \. cac
0580: 68 65 66 6c 75 73 68 20 28 42 45 47 2c 20 45 4e heflush (BEG, EN
0590: 44 20 2d 20 42 45 47 2c 20 42 43 41 43 48 45 29 D - BEG, BCACHE)
05a0: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 .#endif..#ifdef
05b0: 5f 5f 63 6f 6e 76 65 78 5f 5f 0a 23 64 65 66 69 __convex__.#defi
05c0: 6e 65 20 43 4c 45 41 52 5f 49 4e 53 4e 5f 43 41 ne CLEAR_INSN_CA
05d0: 43 48 45 28 42 45 47 2c 20 45 4e 44 29 20 20 20 CHE(BEG, END)
05e0: 5c 0a 20 20 20 61 73 6d 20 28 22 70 69 63 68 22 \. asm ("pich"
05f0: 29 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 0a 5f ).#endif..void._
0600: 5f 54 52 5f 63 6c 65 61 72 5f 63 61 63 68 65 20 _TR_clear_cache
0610: 28 62 65 67 2c 20 65 6e 64 29 0a 20 20 20 20 20 (beg, end).
0620: 63 68 61 72 20 2a 62 65 67 2c 20 2a 65 6e 64 3b char *beg, *end;
0630: 0a 7b 0a 23 69 66 64 65 66 20 43 4c 45 41 52 5f .{.#ifdef CLEAR_
0640: 49 4e 53 4e 5f 43 41 43 48 45 20 0a 20 20 43 4c INSN_CACHE . CL
0650: 45 41 52 5f 49 4e 53 4e 5f 43 41 43 48 45 20 28 EAR_INSN_CACHE (
0660: 62 65 67 2c 20 65 6e 64 29 3b 0a 23 65 6c 73 65 beg, end);.#else
0670: 0a 23 69 66 64 65 66 20 49 4e 53 4e 5f 43 41 43 .#ifdef INSN_CAC
0680: 48 45 5f 53 49 5a 45 20 2f 2a 20 54 68 69 73 20 HE_SIZE /* This
0690: 69 73 20 61 63 74 75 61 6c 6c 79 20 64 65 61 64 is actually dead
06a0: 20 63 6f 64 65 21 21 20 2a 2f 0a 23 64 65 66 69 code!! */.#defi
06b0: 6e 65 20 49 4e 53 4e 5f 43 41 43 48 45 5f 50 4c ne INSN_CACHE_PL
06c0: 41 4e 45 5f 53 49 5a 45 20 28 49 4e 53 4e 5f 43 ANE_SIZE (INSN_C
06d0: 41 43 48 45 5f 53 49 5a 45 20 2f 20 49 4e 53 4e ACHE_SIZE / INSN
06e0: 5f 43 41 43 48 45 5f 44 45 50 54 48 29 0a 20 20 _CACHE_DEPTH).
06f0: 73 74 61 74 69 63 20 63 68 61 72 20 61 72 72 61 static char arra
0700: 79 5b 49 4e 53 4e 5f 43 41 43 48 45 5f 53 49 5a y[INSN_CACHE_SIZ
0710: 45 20 2b 20 49 4e 53 4e 5f 43 41 43 48 45 5f 50 E + INSN_CACHE_P
0720: 4c 41 4e 45 5f 53 49 5a 45 20 2b 20 49 4e 53 4e LANE_SIZE + INSN
0730: 5f 43 41 43 48 45 5f 4c 49 4e 45 5f 57 49 44 54 _CACHE_LINE_WIDT
0740: 48 5d 3b 0a 20 20 73 74 61 74 69 63 20 69 6e 74 H];. static int
0750: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 3d 20 30 initialized = 0
0760: 3b 0a 20 20 69 6e 74 20 6f 66 66 73 65 74 3b 0a ;. int offset;.
0770: 20 20 76 6f 69 64 20 2a 73 74 61 72 74 5f 61 64 void *start_ad
0780: 64 72 3b 0a 20 20 76 6f 69 64 20 2a 65 6e 64 5f dr;. void *end_
0790: 61 64 64 72 3b 0a 20 20 74 79 70 65 64 65 66 20 addr;. typedef
07a0: 28 2a 66 75 6e 63 74 69 6f 6e 5f 70 74 72 29 20 (*function_ptr)
07b0: 28 29 3b 0a 0a 23 69 66 20 28 49 4e 53 4e 5f 43 ();..#if (INSN_C
07c0: 41 43 48 45 5f 53 49 5a 45 20 2f 20 49 4e 53 4e ACHE_SIZE / INSN
07d0: 5f 43 41 43 48 45 5f 4c 49 4e 45 5f 57 49 44 54 _CACHE_LINE_WIDT
07e0: 48 29 20 3c 20 31 36 0a 20 20 2f 2a 20 49 74 27 H) < 16. /* It'
07f0: 73 20 63 68 65 61 70 65 72 20 74 6f 20 63 6c 65 s cheaper to cle
0800: 61 72 20 74 68 65 20 77 68 6f 6c 65 20 63 61 63 ar the whole cac
0810: 68 65 2e 0a 20 20 20 20 20 50 75 74 20 69 6e 20 he.. Put in
0820: 61 20 73 65 72 69 65 73 20 6f 66 20 6a 75 6d 70 a series of jump
0830: 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73 6f instructions so
0840: 20 74 68 61 74 20 63 61 6c 6c 69 6e 67 20 74 68 that calling th
0850: 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20 e beginning.
0860: 20 6f 66 20 74 68 65 20 63 61 63 68 65 20 77 69 of the cache wi
0870: 6c 6c 20 63 6c 65 61 72 20 74 68 65 20 77 68 6f ll clear the who
0880: 6c 65 20 74 68 69 6e 67 2e 20 20 2a 2f 0a 0a 20 le thing. */..
0890: 20 69 66 20 28 21 20 69 6e 69 74 69 61 6c 69 7a if (! initializ
08a0: 65 64 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 ed). {.
08b0: 69 6e 74 20 70 74 72 20 3d 20 28 28 28 69 6e 74 int ptr = (((int
08c0: 29 20 61 72 72 61 79 20 2b 20 49 4e 53 4e 5f 43 ) array + INSN_C
08d0: 41 43 48 45 5f 4c 49 4e 45 5f 57 49 44 54 48 20 ACHE_LINE_WIDTH
08e0: 2d 20 31 29 0a 09 09 20 26 20 2d 49 4e 53 4e 5f - 1)... & -INSN_
08f0: 43 41 43 48 45 5f 4c 49 4e 45 5f 57 49 44 54 48 CACHE_LINE_WIDTH
0900: 29 3b 0a 20 20 20 20 20 20 69 6e 74 20 65 6e 64 );. int end
0910: 5f 70 74 72 20 3d 20 70 74 72 20 2b 20 49 4e 53 _ptr = ptr + INS
0920: 4e 5f 43 41 43 48 45 5f 53 49 5a 45 3b 0a 0a 20 N_CACHE_SIZE;..
0930: 20 20 20 20 20 77 68 69 6c 65 20 28 70 74 72 20 while (ptr
0940: 3c 20 65 6e 64 5f 70 74 72 29 0a 09 7b 0a 09 20 < end_ptr)..{..
0950: 20 2a 28 49 4e 53 54 52 55 43 54 49 4f 4e 5f 54 *(INSTRUCTION_T
0960: 59 50 45 20 2a 29 70 74 72 0a 09 20 20 20 20 3d YPE *)ptr.. =
0970: 20 4a 55 4d 50 5f 41 48 45 41 44 5f 49 4e 53 54 JUMP_AHEAD_INST
0980: 52 55 43 54 49 4f 4e 20 2b 20 49 4e 53 4e 5f 43 RUCTION + INSN_C
0990: 41 43 48 45 5f 4c 49 4e 45 5f 57 49 44 54 48 3b ACHE_LINE_WIDTH;
09a0: 0a 09 20 20 70 74 72 20 2b 3d 20 49 4e 53 4e 5f .. ptr += INSN_
09b0: 43 41 43 48 45 5f 4c 49 4e 45 5f 57 49 44 54 48 CACHE_LINE_WIDTH
09c0: 3b 0a 09 7d 0a 20 20 20 20 20 20 2a 28 49 4e 53 ;..}. *(INS
09d0: 54 52 55 43 54 49 4f 4e 5f 54 59 50 45 20 2a 29 TRUCTION_TYPE *)
09e0: 28 70 74 72 20 2d 20 49 4e 53 4e 5f 43 41 43 48 (ptr - INSN_CACH
09f0: 45 5f 4c 49 4e 45 5f 57 49 44 54 48 29 20 3d 20 E_LINE_WIDTH) =
0a00: 52 45 54 55 52 4e 5f 49 4e 53 54 52 55 43 54 49 RETURN_INSTRUCTI
0a10: 4f 4e 3b 0a 0a 20 20 20 20 20 20 69 6e 69 74 69 ON;.. initi
0a20: 61 6c 69 7a 65 64 20 3d 20 31 3b 0a 20 20 20 20 alized = 1;.
0a30: 7d 0a 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 }.. /* Call the
0a40: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 beginning of th
0a50: 65 20 73 65 71 75 65 6e 63 65 2e 20 20 2a 2f 0a e sequence. */.
0a60: 20 20 28 28 28 66 75 6e 63 74 69 6f 6e 5f 70 74 (((function_pt
0a70: 72 29 20 28 28 28 69 6e 74 29 20 61 72 72 61 79 r) (((int) array
0a80: 20 2b 20 49 4e 53 4e 5f 43 41 43 48 45 5f 4c 49 + INSN_CACHE_LI
0a90: 4e 45 5f 57 49 44 54 48 20 2d 20 31 29 0a 09 09 NE_WIDTH - 1)...
0aa0: 20 20 20 20 26 20 2d 49 4e 53 4e 5f 43 41 43 48 & -INSN_CACH
0ab0: 45 5f 4c 49 4e 45 5f 57 49 44 54 48 29 29 0a 20 E_LINE_WIDTH)).
0ac0: 20 20 28 29 29 3b 0a 0a 23 65 6c 73 65 20 2f 2a ());..#else /*
0ad0: 20 43 61 63 68 65 20 69 73 20 6c 61 72 67 65 2e Cache is large.
0ae0: 20 20 2a 2f 0a 0a 20 20 69 66 20 28 21 20 69 6e */.. if (! in
0af0: 69 74 69 61 6c 69 7a 65 64 29 0a 20 20 20 20 7b itialized). {
0b00: 0a 20 20 20 20 20 20 69 6e 74 20 70 74 72 20 3d . int ptr =
0b10: 20 28 28 28 69 6e 74 29 20 61 72 72 61 79 20 2b (((int) array +
0b20: 20 49 4e 53 4e 5f 43 41 43 48 45 5f 4c 49 4e 45 INSN_CACHE_LINE
0b30: 5f 57 49 44 54 48 20 2d 20 31 29 0a 09 09 20 26 _WIDTH - 1)... &
0b40: 20 2d 49 4e 53 4e 5f 43 41 43 48 45 5f 4c 49 4e -INSN_CACHE_LIN
0b50: 45 5f 57 49 44 54 48 29 3b 0a 0a 20 20 20 20 20 E_WIDTH);..
0b60: 20 77 68 69 6c 65 20 28 70 74 72 20 3c 20 28 69 while (ptr < (i
0b70: 6e 74 29 20 61 72 72 61 79 20 2b 20 73 69 7a 65 nt) array + size
0b80: 6f 66 20 61 72 72 61 79 29 0a 09 7b 0a 09 20 20 of array)..{..
0b90: 2a 28 49 4e 53 54 52 55 43 54 49 4f 4e 5f 54 59 *(INSTRUCTION_TY
0ba0: 50 45 20 2a 29 70 74 72 20 3d 20 52 45 54 55 52 PE *)ptr = RETUR
0bb0: 4e 5f 49 4e 53 54 52 55 43 54 49 4f 4e 3b 0a 09 N_INSTRUCTION;..
0bc0: 20 20 70 74 72 20 2b 3d 20 49 4e 53 4e 5f 43 41 ptr += INSN_CA
0bd0: 43 48 45 5f 4c 49 4e 45 5f 57 49 44 54 48 3b 0a CHE_LINE_WIDTH;.
0be0: 09 7d 0a 0a 20 20 20 20 20 20 69 6e 69 74 69 61 .}.. initia
0bf0: 6c 69 7a 65 64 20 3d 20 31 3b 0a 20 20 20 20 7d lized = 1;. }
0c00: 0a 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 .. /* Find the
0c10: 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 61 72 72 61 location in arra
0c20: 79 20 74 68 61 74 20 6f 63 63 75 70 69 65 73 20 y that occupies
0c30: 74 68 65 20 73 61 6d 65 20 63 61 63 68 65 20 6c the same cache l
0c40: 69 6e 65 20 61 73 20 42 45 47 2e 20 20 2a 2f 0a ine as BEG. */.
0c50: 0a 20 20 6f 66 66 73 65 74 20 3d 20 28 28 69 6e . offset = ((in
0c60: 74 29 20 62 65 67 20 26 20 2d 49 4e 53 4e 5f 43 t) beg & -INSN_C
0c70: 41 43 48 45 5f 4c 49 4e 45 5f 57 49 44 54 48 29 ACHE_LINE_WIDTH)
0c80: 20 26 20 28 49 4e 53 4e 5f 43 41 43 48 45 5f 50 & (INSN_CACHE_P
0c90: 4c 41 4e 45 5f 53 49 5a 45 20 2d 20 31 29 3b 0a LANE_SIZE - 1);.
0ca0: 20 20 73 74 61 72 74 5f 61 64 64 72 20 3d 20 28 start_addr = (
0cb0: 28 28 69 6e 74 29 20 28 61 72 72 61 79 20 2b 20 ((int) (array +
0cc0: 49 4e 53 4e 5f 43 41 43 48 45 5f 50 4c 41 4e 45 INSN_CACHE_PLANE
0cd0: 5f 53 49 5a 45 20 2d 20 31 29 0a 09 09 20 26 20 _SIZE - 1)... &
0ce0: 2d 49 4e 53 4e 5f 43 41 43 48 45 5f 50 4c 41 4e -INSN_CACHE_PLAN
0cf0: 45 5f 53 49 5a 45 29 0a 09 09 2b 20 6f 66 66 73 E_SIZE)...+ offs
0d00: 65 74 29 3b 0a 0a 20 20 2f 2a 20 43 6f 6d 70 75 et);.. /* Compu
0d10: 74 65 20 74 68 65 20 63 61 63 68 65 20 61 6c 69 te the cache ali
0d20: 67 6e 6d 65 6e 74 20 6f 66 20 74 68 65 20 70 6c gnment of the pl
0d30: 61 63 65 20 74 6f 20 73 74 6f 70 20 63 6c 65 61 ace to stop clea
0d40: 72 69 6e 67 2e 20 20 2a 2f 0a 23 69 66 20 30 20 ring. */.#if 0
0d50: 20 2f 2a 20 54 68 69 73 20 69 73 20 6e 6f 74 20 /* This is not
0d60: 6e 65 65 64 65 64 20 66 6f 72 20 67 63 63 27 73 needed for gcc's
0d70: 20 70 75 72 70 6f 73 65 73 2e 20 20 2a 2f 0a 20 purposes. */.
0d80: 20 2f 2a 20 49 66 20 74 68 65 20 62 6c 6f 63 6b /* If the block
0d90: 20 74 6f 20 63 6c 65 61 72 20 69 73 20 62 69 67 to clear is big
0da0: 67 65 72 20 74 68 61 6e 20 61 20 63 61 63 68 65 ger than a cache
0db0: 20 70 6c 61 6e 65 2c 0a 20 20 20 20 20 77 65 20 plane,. we
0dc0: 63 6c 65 61 72 20 74 68 65 20 65 6e 74 69 72 65 clear the entire
0dd0: 20 63 61 63 68 65 2c 20 61 6e 64 20 4f 46 46 53 cache, and OFFS
0de0: 45 54 20 69 73 20 61 6c 72 65 61 64 79 20 63 6f ET is already co
0df0: 72 72 65 63 74 2e 20 20 2a 2f 20 0a 20 20 69 66 rrect. */ . if
0e00: 20 28 65 6e 64 20 3c 20 62 65 67 20 2b 20 49 4e (end < beg + IN
0e10: 53 4e 5f 43 41 43 48 45 5f 50 4c 41 4e 45 5f 53 SN_CACHE_PLANE_S
0e20: 49 5a 45 29 0a 23 65 6e 64 69 66 0a 20 20 20 20 IZE).#endif.
0e30: 6f 66 66 73 65 74 20 3d 20 28 28 28 69 6e 74 29 offset = (((int)
0e40: 20 28 65 6e 64 20 2b 20 49 4e 53 4e 5f 43 41 43 (end + INSN_CAC
0e50: 48 45 5f 4c 49 4e 45 5f 57 49 44 54 48 20 2d 20 HE_LINE_WIDTH -
0e60: 31 29 0a 09 20 20 20 20 20 20 20 26 20 2d 49 4e 1).. & -IN
0e70: 53 4e 5f 43 41 43 48 45 5f 4c 49 4e 45 5f 57 49 SN_CACHE_LINE_WI
0e80: 44 54 48 29 0a 09 20 20 20 20 20 20 26 20 28 49 DTH).. & (I
0e90: 4e 53 4e 5f 43 41 43 48 45 5f 50 4c 41 4e 45 5f NSN_CACHE_PLANE_
0ea0: 53 49 5a 45 20 2d 20 31 29 29 3b 0a 0a 23 69 66 SIZE - 1));..#if
0eb0: 20 49 4e 53 4e 5f 43 41 43 48 45 5f 44 45 50 54 INSN_CACHE_DEPT
0ec0: 48 20 3e 20 31 0a 20 20 65 6e 64 5f 61 64 64 72 H > 1. end_addr
0ed0: 20 3d 20 28 73 74 61 72 74 5f 61 64 64 72 20 26 = (start_addr &
0ee0: 20 2d 49 4e 53 4e 5f 43 41 43 48 45 5f 50 4c 41 -INSN_CACHE_PLA
0ef0: 4e 45 5f 53 49 5a 45 29 20 2b 20 6f 66 66 73 65 NE_SIZE) + offse
0f00: 74 3b 0a 20 20 69 66 20 28 65 6e 64 5f 61 64 64 t;. if (end_add
0f10: 72 20 3c 3d 20 73 74 61 72 74 5f 61 64 64 72 29 r <= start_addr)
0f20: 0a 20 20 20 20 65 6e 64 5f 61 64 64 72 20 2b 3d . end_addr +=
0f30: 20 49 4e 53 4e 5f 43 41 43 48 45 5f 50 4c 41 4e INSN_CACHE_PLAN
0f40: 45 5f 53 49 5a 45 3b 0a 0a 20 20 66 6f 72 20 28 E_SIZE;.. for (
0f50: 70 6c 61 6e 65 20 3d 20 30 3b 20 70 6c 61 6e 65 plane = 0; plane
0f60: 20 3c 20 49 4e 53 4e 5f 43 41 43 48 45 5f 44 45 < INSN_CACHE_DE
0f70: 50 54 48 3b 20 70 6c 61 6e 65 2b 2b 29 0a 20 20 PTH; plane++).
0f80: 20 20 7b 0a 20 20 20 20 20 20 69 6e 74 20 61 64 {. int ad
0f90: 64 72 20 3d 20 73 74 61 72 74 5f 61 64 64 72 20 dr = start_addr
0fa0: 2b 20 70 6c 61 6e 65 20 2a 20 49 4e 53 4e 5f 43 + plane * INSN_C
0fb0: 41 43 48 45 5f 50 4c 41 4e 45 5f 53 49 5a 45 3b ACHE_PLANE_SIZE;
0fc0: 0a 20 20 20 20 20 20 69 6e 74 20 73 74 6f 70 20 . int stop
0fd0: 3d 20 65 6e 64 5f 61 64 64 72 20 2b 20 70 6c 61 = end_addr + pla
0fe0: 6e 65 20 2a 20 49 4e 53 4e 5f 43 41 43 48 45 5f ne * INSN_CACHE_
0ff0: 50 4c 41 4e 45 5f 53 49 5a 45 3b 0a 0a 20 20 20 PLANE_SIZE;..
1000: 20 20 20 77 68 69 6c 65 20 28 61 64 64 72 20 21 while (addr !
1010: 3d 20 73 74 6f 70 29 0a 09 7b 0a 09 20 20 2f 2a = stop)..{.. /*
1020: 20 43 61 6c 6c 20 74 68 65 20 72 65 74 75 72 6e Call the return
1030: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 instruction at
1040: 41 44 44 52 2e 20 20 2a 2f 0a 09 20 20 28 28 66 ADDR. */.. ((f
1050: 75 6e 63 74 69 6f 6e 5f 70 74 72 29 20 61 64 64 unction_ptr) add
1060: 72 29 20 28 29 3b 0a 0a 09 20 20 61 64 64 72 20 r) ();... addr
1070: 2b 3d 20 49 4e 53 4e 5f 43 41 43 48 45 5f 4c 49 += INSN_CACHE_LI
1080: 4e 45 5f 57 49 44 54 48 3b 0a 09 7d 0a 20 20 20 NE_WIDTH;..}.
1090: 20 7d 0a 23 65 6c 73 65 20 2f 2a 20 6a 75 73 74 }.#else /* just
10a0: 20 6f 6e 65 20 70 6c 61 6e 65 20 2a 2f 0a 20 20 one plane */.
10b0: 64 6f 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 2f do. {. /
10c0: 2a 20 43 61 6c 6c 20 74 68 65 20 72 65 74 75 72 * Call the retur
10d0: 6e 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 n instruction at
10e0: 20 53 54 41 52 54 5f 41 44 44 52 2e 20 20 2a 2f START_ADDR. */
10f0: 0a 20 20 20 20 20 20 28 28 66 75 6e 63 74 69 6f . ((functio
1100: 6e 5f 70 74 72 29 20 73 74 61 72 74 5f 61 64 64 n_ptr) start_add
1110: 72 29 20 28 29 3b 0a 0a 20 20 20 20 20 20 73 74 r) ();.. st
1120: 61 72 74 5f 61 64 64 72 20 2b 3d 20 49 4e 53 4e art_addr += INSN
1130: 5f 43 41 43 48 45 5f 4c 49 4e 45 5f 57 49 44 54 _CACHE_LINE_WIDT
1140: 48 3b 0a 20 20 20 20 7d 0a 20 20 77 68 69 6c 65 H;. }. while
1150: 20 28 28 73 74 61 72 74 5f 61 64 64 72 20 25 20 ((start_addr %
1160: 49 4e 53 4e 5f 43 41 43 48 45 5f 53 49 5a 45 29 INSN_CACHE_SIZE)
1170: 20 21 3d 20 6f 66 66 73 65 74 29 3b 0a 23 65 6e != offset);.#en
1180: 64 69 66 20 2f 2a 20 6a 75 73 74 20 6f 6e 65 20 dif /* just one
1190: 70 6c 61 6e 65 20 2a 2f 0a 23 65 6e 64 69 66 20 plane */.#endif
11a0: 2f 2a 20 43 61 63 68 65 20 69 73 20 6c 61 72 67 /* Cache is larg
11b0: 65 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 43 e */.#endif /* C
11c0: 61 63 68 65 20 65 78 69 73 74 73 20 2a 2f 0a 23 ache exists */.#
11d0: 65 6e 64 69 66 20 2f 2a 20 43 4c 45 41 52 5f 49 endif /* CLEAR_I
11e0: 4e 53 4e 5f 43 41 43 48 45 20 2a 2f 0a 7d 0a NSN_CACHE */.}.