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