blob: 25df316b7ebf89174d53a4bb2e64176d4d61e57a [file] [log] [blame]
Thomas Gleixnerd94d71c2019-05-29 07:12:40 -07001/* SPDX-License-Identifier: GPL-2.0-only */
Alexander Graf963cf3d2010-02-19 11:00:40 +01002/*
Alexander Graf963cf3d2010-02-19 11:00:40 +01003 *
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
Andreas Schwab49f6be82010-05-31 21:59:13 +020014extern 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);
Alexander Graf963cf3d2010-02-19 11:00:40 +010017
Andreas Schwab49f6be82010-05-31 21:59:13 +020018extern 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);
Alexander Graf963cf3d2010-02-19 11:00:40 +010022
Andreas Schwab49f6be82010-05-31 21:59:13 +020023extern void fps_fmadds(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2,
Alexander Graf963cf3d2010-02-19 11:00:40 +010024 u32 *src3);
Andreas Schwab49f6be82010-05-31 21:59:13 +020025extern void fps_fmsubs(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2,
Alexander Graf963cf3d2010-02-19 11:00:40 +010026 u32 *src3);
Andreas Schwab49f6be82010-05-31 21:59:13 +020027extern void fps_fnmadds(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2,
Alexander Graf963cf3d2010-02-19 11:00:40 +010028 u32 *src3);
Andreas Schwab49f6be82010-05-31 21:59:13 +020029extern void fps_fnmsubs(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2,
Alexander Graf963cf3d2010-02-19 11:00:40 +010030 u32 *src3);
Andreas Schwab49f6be82010-05-31 21:59:13 +020031extern void fps_fsel(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2,
Alexander Graf963cf3d2010-02-19 11:00:40 +010032 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
Andreas Schwab05d77ac2010-08-21 11:43:20 +000074extern void kvm_cvt_fd(u32 *from, u64 *to);
75extern void kvm_cvt_df(u64 *from, u32 *to);
Andreas Schwab49f6be82010-05-31 21:59:13 +020076
Alexander Graf963cf3d2010-02-19 11:00:40 +010077#endif