162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Copyright Novell Inc. 2010
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Authors: Alexander Graf <agraf@suse.de>
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#ifndef __ASM_KVM_FPU_H__
1062306a36Sopenharmony_ci#define __ASM_KVM_FPU_H__
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include <linux/types.h>
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ciextern void fps_fres(u64 *fpscr, u32 *dst, u32 *src1);
1562306a36Sopenharmony_ciextern void fps_frsqrte(u64 *fpscr, u32 *dst, u32 *src1);
1662306a36Sopenharmony_ciextern void fps_fsqrts(u64 *fpscr, u32 *dst, u32 *src1);
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ciextern void fps_fadds(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2);
1962306a36Sopenharmony_ciextern void fps_fdivs(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2);
2062306a36Sopenharmony_ciextern void fps_fmuls(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2);
2162306a36Sopenharmony_ciextern void fps_fsubs(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2);
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ciextern void fps_fmadds(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2,
2462306a36Sopenharmony_ci		       u32 *src3);
2562306a36Sopenharmony_ciextern void fps_fmsubs(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2,
2662306a36Sopenharmony_ci		       u32 *src3);
2762306a36Sopenharmony_ciextern void fps_fnmadds(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2,
2862306a36Sopenharmony_ci		        u32 *src3);
2962306a36Sopenharmony_ciextern void fps_fnmsubs(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2,
3062306a36Sopenharmony_ci		        u32 *src3);
3162306a36Sopenharmony_ciextern void fps_fsel(u64 *fpscr, u32 *dst, u32 *src1, u32 *src2,
3262306a36Sopenharmony_ci		     u32 *src3);
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci#define FPD_ONE_IN(name) extern void fpd_ ## name(u64 *fpscr, u32 *cr, \
3562306a36Sopenharmony_ci				u64 *dst, u64 *src1);
3662306a36Sopenharmony_ci#define FPD_TWO_IN(name) extern void fpd_ ## name(u64 *fpscr, u32 *cr, \
3762306a36Sopenharmony_ci				u64 *dst, u64 *src1, u64 *src2);
3862306a36Sopenharmony_ci#define FPD_THREE_IN(name) extern void fpd_ ## name(u64 *fpscr, u32 *cr, \
3962306a36Sopenharmony_ci				u64 *dst, u64 *src1, u64 *src2, u64 *src3);
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ciextern void fpd_fcmpu(u64 *fpscr, u32 *cr, u64 *src1, u64 *src2);
4262306a36Sopenharmony_ciextern void fpd_fcmpo(u64 *fpscr, u32 *cr, u64 *src1, u64 *src2);
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ciFPD_ONE_IN(fsqrts)
4562306a36Sopenharmony_ciFPD_ONE_IN(frsqrtes)
4662306a36Sopenharmony_ciFPD_ONE_IN(fres)
4762306a36Sopenharmony_ciFPD_ONE_IN(frsp)
4862306a36Sopenharmony_ciFPD_ONE_IN(fctiw)
4962306a36Sopenharmony_ciFPD_ONE_IN(fctiwz)
5062306a36Sopenharmony_ciFPD_ONE_IN(fsqrt)
5162306a36Sopenharmony_ciFPD_ONE_IN(fre)
5262306a36Sopenharmony_ciFPD_ONE_IN(frsqrte)
5362306a36Sopenharmony_ciFPD_ONE_IN(fneg)
5462306a36Sopenharmony_ciFPD_ONE_IN(fabs)
5562306a36Sopenharmony_ciFPD_TWO_IN(fadds)
5662306a36Sopenharmony_ciFPD_TWO_IN(fsubs)
5762306a36Sopenharmony_ciFPD_TWO_IN(fdivs)
5862306a36Sopenharmony_ciFPD_TWO_IN(fmuls)
5962306a36Sopenharmony_ciFPD_TWO_IN(fcpsgn)
6062306a36Sopenharmony_ciFPD_TWO_IN(fdiv)
6162306a36Sopenharmony_ciFPD_TWO_IN(fadd)
6262306a36Sopenharmony_ciFPD_TWO_IN(fmul)
6362306a36Sopenharmony_ciFPD_TWO_IN(fsub)
6462306a36Sopenharmony_ciFPD_THREE_IN(fmsubs)
6562306a36Sopenharmony_ciFPD_THREE_IN(fmadds)
6662306a36Sopenharmony_ciFPD_THREE_IN(fnmsubs)
6762306a36Sopenharmony_ciFPD_THREE_IN(fnmadds)
6862306a36Sopenharmony_ciFPD_THREE_IN(fsel)
6962306a36Sopenharmony_ciFPD_THREE_IN(fmsub)
7062306a36Sopenharmony_ciFPD_THREE_IN(fmadd)
7162306a36Sopenharmony_ciFPD_THREE_IN(fnmsub)
7262306a36Sopenharmony_ciFPD_THREE_IN(fnmadd)
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ciextern void kvm_cvt_fd(u32 *from, u64 *to);
7562306a36Sopenharmony_ciextern void kvm_cvt_df(u64 *from, u32 *to);
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci#endif
78