Datasheet

Floating-point Support
ARM DUI 0067D Copyright © 1999-2001 ARM Limited. All rights reserved. 5-11
The fields in Figure 5-2 on page 5-10 are as follows:
Bits 0 to 4 (values
0x1
to
0x10
, respectively) are the sticky flags, or cumulative
flags, for each exception. The sticky flag for an exception is set to 1 whenever that
exception happens and is not trapped. Sticky flags are never cleared by the
system, only by the user. The mapping of exceptions to bits is:
bit 0 (
0x01
) is for the Invalid Operation exception
bit 1 (
0x02
) is for the Divide by Zero exception
bit 2 (
0x04
) is for the Overflow exception
bit 3 (
0x08
) is for the Underflow exception
bit 4 (
0x10
) is for the Inexact Result exception.
Bits 8 to 12 (values
0x100
to
0x1000
) control various aspects of the FPA
floating-point coprocessor. Any attempt to write to these bits is ignored if there is
no FPA in your system.
Bits 16 to 20 (values
0x10000
to
0x100000
) control whether each exception is
trapped or not. If a bit is set to 1, the corresponding exception is trapped. If a bit
is set to 0, the corresponding exception sets its sticky flag and return a plausible
result, as described in Exceptions on page 5-35.
Bits 24 to 31 contain the system ID that cannot be changed. It is set to
0x40
for
software floating-point, to
0x80
or above for hardware floating-point, and to 0 or
1 if a hardware floating-point environment is being faked by an emulator.
Bits marked R are reserved. They cannot be written to by the
__fp_status
call, and
you must ignore anything you find in them.
The rounding mode cannot be changed with the
__fp_status
call.
In addition to defining the
__fp_status
call itself,
stdlib.h
also defines some constants
to be used for the arguments:
#define __fpsr_IXE 0x100000
#define __fpsr_UFE 0x80000
#define __fpsr_OFE 0x40000
#define __fpsr_DZE 0x20000
#define __fpsr_IOE 0x10000
#define __fpsr_IXC 0x10
#define __fpsr_UFC 0x8
#define __fpsr_OFC 0x4
#define __fpsr_DZC 0x2
#define __fpsr_IOC 0x1
For example, to trap the Invalid Operation exception and untrap all other exceptions,
you would do: