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 
14 extern void fps_fres(u64 *fpscr, u32 *dst, u32 *src1);
15 extern void fps_frsqrte(u64 *fpscr, u32 *dst, u32 *src1);
16 extern void fps_fsqrts(u64 *fpscr, u32 *dst, u32 *src1);
17 
18 extern void fps_fadds(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2);
19 extern void fps_fdivs(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2);
20 extern void fps_fmuls(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2);
21 extern void fps_fsubs(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2);
22 
23 extern void fps_fmadds(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2,
24 		       u32 *src3);
25 extern void fps_fmsubs(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2,
26 		       u32 *src3);
27 extern void fps_fnmadds(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2,
28 		        u32 *src3);
29 extern void fps_fnmsubs(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2,
30 		        u32 *src3);
31 extern 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 
41 extern void fpd_fcmpu(u64 *fpscr, u32 *cr, u64 *src1, u64 *src2);
42 extern void fpd_fcmpo(u64 *fpscr, u32 *cr, u64 *src1, u64 *src2);
43 
44 FPD_ONE_IN(fsqrts)
45 FPD_ONE_IN(frsqrtes)
46 FPD_ONE_IN(fres)
47 FPD_ONE_IN(frsp)
48 FPD_ONE_IN(fctiw)
49 FPD_ONE_IN(fctiwz)
50 FPD_ONE_IN(fsqrt)
51 FPD_ONE_IN(fre)
52 FPD_ONE_IN(frsqrte)
53 FPD_ONE_IN(fneg)
54 FPD_ONE_IN(fabs)
55 FPD_TWO_IN(fadds)
56 FPD_TWO_IN(fsubs)
57 FPD_TWO_IN(fdivs)
58 FPD_TWO_IN(fmuls)
59 FPD_TWO_IN(fcpsgn)
60 FPD_TWO_IN(fdiv)
61 FPD_TWO_IN(fadd)
62 FPD_TWO_IN(fmul)
63 FPD_TWO_IN(fsub)
64 FPD_THREE_IN(fmsubs)
65 FPD_THREE_IN(fmadds)
66 FPD_THREE_IN(fnmsubs)
67 FPD_THREE_IN(fnmadds)
68 FPD_THREE_IN(fsel)
69 FPD_THREE_IN(fmsub)
70 FPD_THREE_IN(fmadd)
71 FPD_THREE_IN(fnmsub)
72 FPD_THREE_IN(fnmadd)
73 
74 extern void kvm_cvt_fd(u32 *from, u64 *to);
75 extern void kvm_cvt_df(u64 *from, u32 *to);
76 
77 #endif
78