1a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg/* fpumacro.h: FPU related macros.
2a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg *
3a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg * Copyright (C) 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
4a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
5a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg */
6a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
7a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg#ifndef _SPARC64_FPUMACRO_H
8a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg#define _SPARC64_FPUMACRO_H
9a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
10a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg#include <asm/asi.h>
11a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg#include <asm/visasm.h>
12a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
13a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborgstruct fpustate {
14a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg	u32	regs[64];
15a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg};
16a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
17a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg#define FPUSTATE (struct fpustate *)(current_thread_info()->fpregs)
18a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
19a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborgstatic inline unsigned long fprs_read(void)
20a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg{
21a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg	unsigned long retval;
22a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
23a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg	__asm__ __volatile__("rd %%fprs, %0" : "=r" (retval));
24a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
25a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg	return retval;
26a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg}
27a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
28a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborgstatic inline void fprs_write(unsigned long val)
29a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg{
30a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg	__asm__ __volatile__("wr %0, 0x0, %%fprs" : : "r" (val));
31a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg}
32a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
33a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg#endif /* !(_SPARC64_FPUMACRO_H) */
34