| |||
| Home > About Previous Releases > Differences between RVCT v2.2 and RVCT v2.1 > Changes to library support | |||
The following changes were made in RVCT v2.2:
The ARM implementation of floating-point computations has been changed to provide improved support for C99 functions. Where this changes behavior significantly, a compatibility mode has been introduced to aid developers to migrate code to use the new features. C99 functions that are new in fplib (or where behavior has changed) are:
ilogb, ilogbf, ilogbl
logb, logbf, logbl
scalbn, scalbnf, scalbnl, scalbln, scalblnf, scalblnl
nextafter, nextafterf, nextafterl, nexttoward, nexttowardf, nexttowardl.
C99 functions that are new in mathlib (or where behavior has changed) are:
fpclassify and signbit
isfinite, isinf, isnan,
and isnormal
copysign, copysignf
isgreater, isgreaterequal, isless, islessequal, islessgreater,
and isunordered.
To help you to port your code, the new compatibility mode emulates the previous behavior of these functions and macros:
ilogb, ilogbf, ilogbl
finite
isnan.
This legacy support will be removed in a future release. ARM recommends that you migrate your use of these features to the equivalent functions in the latest release of the compiler.
The ARM libraries have been enhanced to provide improved support for multithreading. This is designed to help developers who are working with RTOS-based systems.
The user-overridable function __user_libspace() has
been split into two wrapper functions:
This returns a pointer to the __user_libspace data
area used to store data that is global to an entire process, that
is, data shared between all threads.
This returns a pointer to the __user_libspace data
area used to store data that is local to a particular thread.
There are also three new user-overridable functions to manage the locking mechanisms used to prevent corruption of shared data due to concurrent access:
This accepts a pointer to a 32-bit word and initializes it as a valid mutex.
int _mutex_initialize(mutex *m);
This causes the calling thread to obtain a lock on the supplied mutex.
void _mutex_acquire(mutex *m);
This causes the calling thread to release the supplied mutex.
void _mutex_release(mutex *m);
This has resulted in a change in the way some functions behave in a multi threaded environment, making it easier for developers to use these functions in multiprocess systems.
The ARM librarian, armar, supports
the command-line option --diag_style to specify
how diagnostic messages are displayed, for example, to include the
line number and character count, use:
armar --diag_style ide
The default is ARM format, that is, --diag_style arm.