/* Copyright Greg Novak, released to the public domain */

/* x87 refers to the usual floating point unit.  SSE stands for 
   streaming simd extensions and presumably an optimizing compiler
   will try to put some of your floating point instructions there
   instead of the usual x87 unit.  You may run into problems with
   imprecise exceptions, where the processor is not left in a 
   consistent state after the error.  I don't know what to do about
   this, but presumably there's something.  Let me know if you 
   have a suggestion. */

/* Handle all exceptions at once */
void enable_all_exceptions(void);
void disable_all_exceptions(void);

/* En/disable individual exceptions */

void enable_x87_invalid_operation_exception(void);
void enable_x87_divide_by_zero_exception(void);
void enable_x87_denormalized_operand_exception(void);
void enable_x87_numeric_overflow_exception(void);
void enable_x87_numeric_underflow_exception(void);
void enable_x87_inexact_result_exception(void);

void disable_x87_invalid_operation_exception(void);
void disable_x87_divide_by_zero_exception(void);
void disable_x87_denormalized_operand_exception(void);
void disable_x87_numeric_overflow_exception(void);
void disable_x87_numeric_underflow_exception(void);
void disable_x87_inexact_result_exception(void);

void enable_sse_invalid_operation_exception(void);
void enable_sse_divide_by_zero_exception(void);
void enable_sse_denormalized_operand_exception(void);
void enable_sse_numeric_overflow_exception(void);
void enable_sse_numeric_underflow_exception(void);
void enable_sse_inexact_result_exception(void);

void disable_sse_invalid_operation_exception(void);
void disable_sse_divide_by_zero_exception(void);
void disable_sse_denormalized_operand_exception(void);
void disable_sse_numeric_overflow_exception(void);
void disable_sse_numeric_underflow_exception(void);
void disable_sse_inexact_result_exception(void);

/* low-level routines to read+write status registers */

short read_x87_control_register(void);
void write_x87_control_register(short cw);
int read_sse_control_register(void);
void write_sse_control_register(int);

Answers/Code/IntelFloatingPointExceptionsDotH (last edited 2007-09-12 23:31:19 by GregNovak)