18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/* fpumacro.h: FPU related macros.
38c2ecf20Sopenharmony_ci *
48c2ecf20Sopenharmony_ci * Copyright (C) 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
58c2ecf20Sopenharmony_ci * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#ifndef _SPARC64_FPUMACRO_H
98c2ecf20Sopenharmony_ci#define _SPARC64_FPUMACRO_H
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#include <asm/asi.h>
128c2ecf20Sopenharmony_ci#include <asm/visasm.h>
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_cistruct fpustate {
158c2ecf20Sopenharmony_ci	u32	regs[64];
168c2ecf20Sopenharmony_ci};
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ci#define FPUSTATE (struct fpustate *)(current_thread_info()->fpregs)
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_cistatic inline unsigned long fprs_read(void)
218c2ecf20Sopenharmony_ci{
228c2ecf20Sopenharmony_ci	unsigned long retval;
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci	__asm__ __volatile__("rd %%fprs, %0" : "=r" (retval));
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_ci	return retval;
278c2ecf20Sopenharmony_ci}
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_cistatic inline void fprs_write(unsigned long val)
308c2ecf20Sopenharmony_ci{
318c2ecf20Sopenharmony_ci	__asm__ __volatile__("wr %0, 0x0, %%fprs" : : "r" (val));
328c2ecf20Sopenharmony_ci}
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ci#endif /* !(_SPARC64_FPUMACRO_H) */
35