mcrfs.c 582 B

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