1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 *
4 * Copyright Novell Inc. 2010
5 *
6 * Authors: Alexander Graf <agraf@suse.de>
7 */
8
9#ifndef __ASM_KVM_FPU_H__
10#define __ASM_KVM_FPU_H__
11
12#include <linux/types.h>
13
14extern void fps_fres(u64 *fpscr, u32 *dst, u32 *src1);
15extern void fps_frsqrte(u64 *fpscr, u32 *dst, u32 *src1);
16extern void fps_fsqrts(u64 *fpscr, u32 *dst, u32 *src1);
17
18extern void fps_fadds(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2);
19extern void fps_fdivs(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2);
20extern void fps_fmuls(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2);
21extern void fps_fsubs(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2);
22
23extern void fps_fmadds(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2,
24		       u32 *src3);
25extern void fps_fmsubs(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2,
26		       u32 *src3);
27extern void fps_fnmadds(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2,
28		        u32 *src3);
29extern void fps_fnmsubs(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2,
30		        u32 *src3);
31extern void fps_fsel(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2,
32		     u32 *src3);
33
34#define FPD_ONE_IN(name) extern void fpd_ ## name(u64 *fpscr, u32 *cr, \
35				u64 *dst, u64 *src1);
36#define FPD_TWO_IN(name) extern void fpd_ ## name(u64 *fpscr, u32 *cr, \
37				u64 *dst, u64 *src1, u64 *src2);
38#define FPD_THREE_IN(name) extern void fpd_ ## name(u64 *fpscr, u32 *cr, \
39				u64 *dst, u64 *src1, u64 *src2, u64 *src3);
40
41extern void fpd_fcmpu(u64 *fpscr, u32 *cr, u64 *src1, u64 *src2);
42extern void fpd_fcmpo(u64 *fpscr, u32 *cr, u64 *src1, u64 *src2);
43
44FPD_ONE_IN(fsqrts)
45FPD_ONE_IN(frsqrtes)
46FPD_ONE_IN(fres)
47FPD_ONE_IN(frsp)
48FPD_ONE_IN(fctiw)
49FPD_ONE_IN(fctiwz)
50FPD_ONE_IN(fsqrt)
51FPD_ONE_IN(fre)
52FPD_ONE_IN(frsqrte)
53FPD_ONE_IN(fneg)
54FPD_ONE_IN(fabs)
55FPD_TWO_IN(fadds)
56FPD_TWO_IN(fsubs)
57FPD_TWO_IN(fdivs)
58FPD_TWO_IN(fmuls)
59FPD_TWO_IN(fcpsgn)
60FPD_TWO_IN(fdiv)
61FPD_TWO_IN(fadd)
62FPD_TWO_IN(fmul)
63FPD_TWO_IN(fsub)
64FPD_THREE_IN(fmsubs)
65FPD_THREE_IN(fmadds)
66FPD_THREE_IN(fnmsubs)
67FPD_THREE_IN(fnmadds)
68FPD_THREE_IN(fsel)
69FPD_THREE_IN(fmsub)
70FPD_THREE_IN(fmadd)
71FPD_THREE_IN(fnmsub)
72FPD_THREE_IN(fnmadd)
73
74extern void kvm_cvt_fd(u32 *from, u64 *to);
75extern void kvm_cvt_df(u64 *from, u32 *to);
76
77#endif
78