i387.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * include/asm-i386/i387.h
  3.  *
  4.  * Copyright (C) 1994 Linus Torvalds
  5.  *
  6.  * Pentium III FXSR, SSE support
  7.  * General FPU state handling cleanups
  8.  * Gareth Hughes <gareth@valinux.com>, May 2000
  9.  */
  10. #ifndef __ASM_I386_I387_H
  11. #define __ASM_I386_I387_H
  12. #include <linux/sched.h>
  13. #include <asm/processor.h>
  14. #include <asm/sigcontext.h>
  15. #include <asm/user.h>
  16. extern void init_fpu(void);
  17. /*
  18.  * FPU lazy state save handling...
  19.  */
  20. extern void save_init_fpu( struct task_struct *tsk );
  21. extern void restore_fpu( struct task_struct *tsk );
  22. extern void kernel_fpu_begin(void);
  23. #define kernel_fpu_end() stts()
  24. #define unlazy_fpu( tsk ) do { 
  25. if ( tsk->flags & PF_USEDFPU ) 
  26. save_init_fpu( tsk ); 
  27. } while (0)
  28. #define clear_fpu( tsk ) do { 
  29. if ( tsk->flags & PF_USEDFPU ) { 
  30. asm volatile("fwait"); 
  31. tsk->flags &= ~PF_USEDFPU; 
  32. stts(); 
  33. } while (0)
  34. /*
  35.  * FPU state interaction...
  36.  */
  37. extern unsigned short get_fpu_cwd( struct task_struct *tsk );
  38. extern unsigned short get_fpu_swd( struct task_struct *tsk );
  39. extern unsigned short get_fpu_twd( struct task_struct *tsk );
  40. extern unsigned short get_fpu_mxcsr( struct task_struct *tsk );
  41. extern void set_fpu_cwd( struct task_struct *tsk, unsigned short cwd );
  42. extern void set_fpu_swd( struct task_struct *tsk, unsigned short swd );
  43. extern void set_fpu_twd( struct task_struct *tsk, unsigned short twd );
  44. extern void set_fpu_mxcsr( struct task_struct *tsk, unsigned short mxcsr );
  45. #define load_mxcsr( val ) do { 
  46. unsigned long __mxcsr = ((unsigned long)(val) & 0xffbf); 
  47. asm volatile( "ldmxcsr %0" : : "m" (__mxcsr) ); 
  48. } while (0)
  49. /*
  50.  * Signal frame handlers...
  51.  */
  52. extern int save_i387( struct _fpstate *buf );
  53. extern int restore_i387( struct _fpstate *buf );
  54. /*
  55.  * ptrace request handers...
  56.  */
  57. extern int get_fpregs( struct user_i387_struct *buf,
  58.        struct task_struct *tsk );
  59. extern int set_fpregs( struct task_struct *tsk,
  60.        struct user_i387_struct *buf );
  61. extern int get_fpxregs( struct user_fxsr_struct *buf,
  62. struct task_struct *tsk );
  63. extern int set_fpxregs( struct task_struct *tsk,
  64. struct user_fxsr_struct *buf );
  65. extern void load_empty_fpu(struct task_struct *);
  66. /*
  67.  * FPU state for core dumps...
  68.  */
  69. extern int dump_fpu( struct pt_regs *regs,
  70.      struct user_i387_struct *fpu );
  71. extern int dump_extended_fpu( struct pt_regs *regs,
  72.       struct user_fxsr_struct *fpu );
  73. #endif /* __ASM_I386_I387_H */