18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci#include <linux/types.h>
38c2ecf20Sopenharmony_ci#include <linux/errno.h>
48c2ecf20Sopenharmony_ci#include <linux/uaccess.h>
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#include <asm/sfp-machine.h>
78c2ecf20Sopenharmony_ci#include <math-emu/soft-fp.h>
88c2ecf20Sopenharmony_ci#include <math-emu/double.h>
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ciint
118c2ecf20Sopenharmony_cifctiwz(u32 *frD, void *frB)
128c2ecf20Sopenharmony_ci{
138c2ecf20Sopenharmony_ci	FP_DECL_D(B);
148c2ecf20Sopenharmony_ci	FP_DECL_EX;
158c2ecf20Sopenharmony_ci	u32 fpscr;
168c2ecf20Sopenharmony_ci	unsigned int r;
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ci	fpscr = __FPU_FPSCR;
198c2ecf20Sopenharmony_ci	__FPU_FPSCR &= ~(3);
208c2ecf20Sopenharmony_ci	__FPU_FPSCR |= FP_RND_ZERO;
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci	FP_UNPACK_DP(B, frB);
238c2ecf20Sopenharmony_ci	FP_TO_INT_D(r, B, 32, 1);
248c2ecf20Sopenharmony_ci	frD[1] = r;
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_ci	__FPU_FPSCR = fpscr;
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci#ifdef DEBUG
298c2ecf20Sopenharmony_ci	printk("%s: D %p, B %p: ", __func__, frD, frB);
308c2ecf20Sopenharmony_ci	dump_double(frD);
318c2ecf20Sopenharmony_ci	printk("\n");
328c2ecf20Sopenharmony_ci#endif
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ci	return 0;
358c2ecf20Sopenharmony_ci}
36