processor_32.h revision fa43972fab24a3c050e880a7831f9378c6cebc0b
1af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt/*
2af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt * include/asm-sh/processor.h
3af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt *
4af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt * Copyright (C) 1999, 2000  Niibe Yutaka
5af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt * Copyright (C) 2002, 2003  Paul Mundt
6af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt */
7af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
8af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#ifndef __ASM_SH_PROCESSOR_32_H
9af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define __ASM_SH_PROCESSOR_32_H
10af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#ifdef __KERNEL__
11af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
12af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#include <linux/compiler.h>
13fa43972fab24a3c050e880a7831f9378c6cebc0bPaul Mundt#include <linux/linkage.h>
14af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#include <asm/page.h>
15af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#include <asm/types.h>
16af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#include <asm/cache.h>
17af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#include <asm/ptrace.h>
18af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
19af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt/*
20af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt * Default implementation of macro that returns current
21af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt * instruction pointer ("program counter").
22af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt */
23103340cc36384c1afee4453b65a784d8b20d9d8dPaul Mundt#define current_text_addr() ({ void *pc; __asm__("mova	1f, %0\n.align 2\n1:":"=z" (pc)); pc; })
24af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
25af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt/* Core Processor Version Register */
26af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define CCN_PVR		0xff000030
27af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define CCN_CVR		0xff000040
28af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define CCN_PRR		0xff000044
29af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
30af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundtstruct sh_cpuinfo {
31af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	unsigned int type;
323611ee7acc113e5e482b7d20d5133935226f3129Stuart Menefy	int cut_major, cut_minor;
33af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	unsigned long loops_per_jiffy;
34af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	unsigned long asid_cache;
35af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
36af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	struct cache_info icache;	/* Primary I-cache */
37af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	struct cache_info dcache;	/* Primary D-cache */
38af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	struct cache_info scache;	/* Secondary cache */
39af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
40af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	unsigned long flags;
41af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt} __attribute__ ((aligned(L1_CACHE_BYTES)));
42af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
43af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundtextern struct sh_cpuinfo cpu_data[];
44af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define boot_cpu_data cpu_data[0]
45af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define current_cpu_data cpu_data[smp_processor_id()]
46af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define raw_current_cpu_data cpu_data[raw_smp_processor_id()]
47af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
48fa43972fab24a3c050e880a7831f9378c6cebc0bPaul Mundtasmlinkage void __init sh_cpu_init(void);
49fa43972fab24a3c050e880a7831f9378c6cebc0bPaul Mundt
50af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt/*
51af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt * User space process size: 2GB.
52af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt *
53af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt * Since SH7709 and SH7750 have "area 7", we can't use 0x7c000000--0x7fffffff
54af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt */
55af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define TASK_SIZE	0x7c000000UL
56af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
57922a70d327bd4b11342c2afd08e20d35f52064c3David Howells#define STACK_TOP	TASK_SIZE
58922a70d327bd4b11342c2afd08e20d35f52064c3David Howells#define STACK_TOP_MAX	STACK_TOP
59922a70d327bd4b11342c2afd08e20d35f52064c3David Howells
60af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt/* This decides where the kernel will search for a free chunk of vm
61af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt * space during mmap's.
62af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt */
63af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define TASK_UNMAPPED_BASE	(TASK_SIZE / 3)
64af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
65af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt/*
66af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt * Bit of SR register
67af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt *
68af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt * FD-bit:
69af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt *     When it's set, it means the processor doesn't have right to use FPU,
70af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt *     and it results exception when the floating operation is executed.
71af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt *
72af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt * IMASK-bit:
73af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt *     Interrupt level mask
74af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt */
75af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define SR_DSP		0x00001000
76af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define SR_IMASK	0x000000f0
779bbafce2eec190ef7e44b0eb1095ba17ce6ad3afPaul Mundt#define SR_FD		0x00008000
78af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
79af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt/*
80af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt * FPU structure and data
81af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt */
82af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
83af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundtstruct sh_fpu_hard_struct {
84af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	unsigned long fp_regs[16];
85af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	unsigned long xfp_regs[16];
86af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	unsigned long fpscr;
87af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	unsigned long fpul;
88af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
89af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	long status; /* software status information */
90af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt};
91af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
92af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt/* Dummy fpu emulator  */
93af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundtstruct sh_fpu_soft_struct {
94af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	unsigned long fp_regs[16];
95af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	unsigned long xfp_regs[16];
96af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	unsigned long fpscr;
97af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	unsigned long fpul;
98af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
99af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	unsigned char lookahead;
100af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	unsigned long entry_pc;
101af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt};
102af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
103af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundtunion sh_fpu_union {
104af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	struct sh_fpu_hard_struct hard;
105af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	struct sh_fpu_soft_struct soft;
106af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt};
107af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
108af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundtstruct thread_struct {
109af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	/* Saved registers when thread is descheduled */
110af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	unsigned long sp;
111af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	unsigned long pc;
112af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
113af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	/* Hardware debugging registers */
114af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	unsigned long ubc_pc;
115af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
116af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	/* floating point info */
117af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	union sh_fpu_union fpu;
118af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt};
119af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
120af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt/* Count of active tasks with UBC settings */
121af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundtextern int ubc_usercnt;
122af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
123af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define INIT_THREAD  {						\
124af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	.sp = sizeof(init_stack) + (long) &init_stack,		\
125af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt}
126af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
127af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt/*
128af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt * Do necessary setup to start up a newly executed thread.
129af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt */
130af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define start_thread(regs, new_pc, new_sp)	 \
131af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	set_fs(USER_DS);			 \
132af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	regs->pr = 0;				 \
133af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	regs->sr = SR_FD;	/* User mode. */ \
134af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	regs->pc = new_pc;			 \
135af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	regs->regs[15] = new_sp
136af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
137af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt/* Forward declaration, a strange C thing */
138af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundtstruct task_struct;
139af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundtstruct mm_struct;
140af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
141af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt/* Free all resources held by a thread. */
142af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundtextern void release_thread(struct task_struct *);
143af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
144af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt/* Prepare to copy thread state - unlazy all lazy status */
145af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define prepare_to_copy(tsk)	do { } while (0)
146af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
147af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt/*
148af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt * create a kernel thread without removing it from tasklists
149af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt */
150af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundtextern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
151af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
152af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt/* Copy and release all segment info associated with a VM */
153af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define copy_segments(p, mm)	do { } while(0)
154af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define release_segments(mm)	do { } while(0)
155af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
156af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt/*
157af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt * FPU lazy state save handling.
158af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt */
159af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
160af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundtstatic __inline__ void disable_fpu(void)
161af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt{
162af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	unsigned long __dummy;
163af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
164af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	/* Set FD flag in SR */
165af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	__asm__ __volatile__("stc	sr, %0\n\t"
166af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt			     "or	%1, %0\n\t"
167af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt			     "ldc	%0, sr"
168af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt			     : "=&r" (__dummy)
169af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt			     : "r" (SR_FD));
170af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt}
171af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
172af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundtstatic __inline__ void enable_fpu(void)
173af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt{
174af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	unsigned long __dummy;
175af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
176af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	/* Clear out FD flag in SR */
177af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	__asm__ __volatile__("stc	sr, %0\n\t"
178af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt			     "and	%1, %0\n\t"
179af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt			     "ldc	%0, sr"
180af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt			     : "=&r" (__dummy)
181af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt			     : "r" (~SR_FD));
182af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt}
183af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
184af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt/* Double presision, NANS as NANS, rounding to nearest, no exceptions */
185af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define FPSCR_INIT  0x00080000
186af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
187af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define	FPSCR_CAUSE_MASK	0x0001f000	/* Cause bits */
188af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define	FPSCR_FLAG_MASK		0x0000007c	/* Flag bits */
189af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
190af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt/*
191af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt * Return saved PC of a blocked thread.
192af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt */
193af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define thread_saved_pc(tsk)	(tsk->thread.pc)
194af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
195af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundtvoid show_trace(struct task_struct *tsk, unsigned long *sp,
196af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt		struct pt_regs *regs);
197af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundtextern unsigned long get_wchan(struct task_struct *p);
198af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
199af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define KSTK_EIP(tsk)  (task_pt_regs(tsk)->pc)
200af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define KSTK_ESP(tsk)  (task_pt_regs(tsk)->regs[15])
201af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
202af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define cpu_sleep()	__asm__ __volatile__ ("sleep" : : : "memory")
203af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define cpu_relax()	barrier()
204af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
205af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#if defined(CONFIG_CPU_SH2A) || defined(CONFIG_CPU_SH3) || \
206af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt    defined(CONFIG_CPU_SH4)
207af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define PREFETCH_STRIDE		L1_CACHE_BYTES
208af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define ARCH_HAS_PREFETCH
209af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define ARCH_HAS_PREFETCHW
210af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundtstatic inline void prefetch(void *x)
211af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt{
212af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt	__asm__ __volatile__ ("pref @%0\n\t" : : "r" (x) : "memory");
213af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt}
214af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
215af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#define prefetchw(x)	prefetch(x)
216af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#endif
217af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt
218af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#endif /* __KERNEL__ */
219af3c7dfe822b598a2f977098101ed8b63cf0fdd1Paul Mundt#endif /* __ASM_SH_PROCESSOR_32_H */
220