1/*
2 * BK Id: SCCS/s.mcrfs.c 1.6 05/17/01 18:14:23 cort
3 */
4#include <linux/types.h>
5#include <linux/errno.h>
6#include <asm/uaccess.h>
7
8#include "soft-fp.h"
9
10int
11mcrfs(u32 *ccr, u32 crfD, u32 crfS)
12{
13	u32 value, clear;
14
15#ifdef DEBUG
16	printk("%s: %p (%08x) %d %d\n", __FUNCTION__, ccr, *ccr, crfD, crfS);
17#endif
18
19	clear = 15 << ((7 - crfS) << 2);
20	if (!crfS)
21		clear = 0x90000000;
22
23	value = (__FPU_FPSCR >> ((7 - crfS) << 2)) & 15;
24	__FPU_FPSCR &= ~(clear);
25
26	*ccr &= ~(15 << ((7 - crfD) << 2));
27	*ccr |= (value << ((7 - crfD) << 2));
28
29#ifdef DEBUG
30	printk("CR: %08x\n", __FUNCTION__, *ccr);
31#endif
32
33	return 0;
34}
35