mcrfs.c 552 B

12345678910111213141516171819202122232425262728293031
  1. #include <linux/types.h>
  2. #include <linux/errno.h>
  3. #include <asm/uaccess.h>
  4. #include "soft-fp.h"
  5. int
  6. mcrfs(u32 *ccr, u32 crfD, u32 crfS)
  7. {
  8. u32 value, clear;
  9. #ifdef DEBUG
  10. printk("%s: %p (%08x) %d %d\n", __FUNCTION__, ccr, *ccr, crfD, crfS);
  11. #endif
  12. clear = 15 << ((7 - crfS) << 2);
  13. if (!crfS)
  14. clear = 0x90000000;
  15. value = (__FPU_FPSCR >> ((7 - crfS) << 2)) & 15;
  16. __FPU_FPSCR &= ~(clear);
  17. *ccr &= ~(15 << ((7 - crfD) << 2));
  18. *ccr |= (value << ((7 - crfD) << 2));
  19. #ifdef DEBUG
  20. printk("CR: %08x\n", __FUNCTION__, *ccr);
  21. #endif
  22. return 0;
  23. }