File: /usr/src/linux/arch/ppc/math-emu/mcrfs.c

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     
10     int
11     mcrfs(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