ARM® コンパイラ 『ARM C および C++ ライブラリと浮動小数点サポートユーザガイド』

バージョン 5.05


目次

序章
本書について
本書の構成
用語集
表記規則
ご意見、ご感想
その他の情報
1 ARM C ライブラリと C++ ライブラリ
1.1 C ライブラリへのリンケージが必須
1.2 C および C++ ランタイムライブラリ
1.3 C および C++ ライブラリ機能
1.4 ARM C および C++ ライブラリのライブラリヒープ使用状況の要件
1.5 ARM アーキテクチャ用アプリケーションバイナリインタフェース(ABI)への準拠
1.6 CLIBABI の他の実装に対するオブジェクトファイルの移植性の向上
1.7 ARM C および C++ ライブラリのディレクトリ構造
1.8 ビルドオプションに基づく ARM C および C++ ライブラリのバリアントの選択
1.9 Thumb C ライブラリ
1.10 C++ および C ライブラリと std ネームスペース
1.11 ARM C ライブラリとマルチスレッド
1.12 ARM C ライブラリと再入可能関数
1.13 ARM C ライブラリとスレッドセーフな関数
1.14 C ライブラリでのスタティックデータの使用
1.15 C ライブラリによる __user_libspace スタティックデータ領域の使用
1.16 __user_libspace スタティックデータ領域のサブセクションにアクセスする C ライブラリ関数
1.17 C ライブラリでの既存の関数 __user_libspace() の再実装
1.18 マルチスレッドアプリケーションにおけるロックの管理
1.19 再実装したミューテックス関数を確実に呼び出す方法
1.20 マルチスレッド環境での ARM C ライブラリの使用
1.21 ARM C ライブラリでのスレッドセーフティ
1.22 ARM C++ ライブラリでのスレッドセーフティ
1.23 マルチスレッド環境での浮動小数点ステータスワード
1.24 アプリケーションでの C ライブラリの使用
1.25 セミホスティング環境のアプリケーションでの C および C ++ ライブラリの使用
1.26 $Sub$$ を使用してセミホストと非セミホストの I/O 機能を混合
1.27 非セミホスティング環境でのライブラリの使用
1.28 非セミホスティング環境における C++ 例外
1.29 C ライブラリ関数の直接セミホスティング依存関数
1.30 C ライブラリ関数の間接セミホスティング依存関数
1.31 異なる環境をターゲットとした C ライブラリ API 定義
1.32 C ライブラリを使用しないアプリケーションの作成
1.33 C ライブラリを使用せずにベアマシン C としてアプリケーションを作成
1.34 整数および浮動小数点コンパイラ関数と、C ライブラリなしでのアプリケーションのビルド
1.35 ベアマシン整数 C
1.36 浮動小数点処理を使用したベアマシン C
1.37 カスタマイズされた C ライブラリ起動コードおよび C ライブラリ関数へのアクセス
1.38 C ライブラリを使用する場合の低レベル関数の使用
1.39 C ライブラリを使用する場合の高レベル関数の使用
1.40 C ライブラリを使用する場合の malloc() の使用
1.41 新しい実行環境に合わせた C ライブラリのカスタマイズ
1.42 実行環境の初期化とアプリケーションの実行
1.43 C++ の初期化、構築、および破棄
1.44 .init_array に代わる C$$pi_ctorvec の従来のサポート
1.45 例外システムの初期化
1.46 例外用の緊急時バッファメモリ
1.47 main() から呼び出されるライブラリ関数
1.48 プログラム終了および assert マクロ
1.49 C ライブラリでのロケール関数をカスタマイズするためのアセンブラマクロ
1.50 C ライブラリのロケールサブシステムのリンク時における選択
1.51 ISO8859-1 の実装
1.52 Shift-JIS および UTF-8 の実装
1.53 C ライブラリのロケールサブシステムの実行時における選択
1.54 C ライブラリのロケールデータブロックの定義
1.55 LC_CTYPE データブロック
1.56 LC_COLLATE データブロック
1.57 LC_MONETARY データブロック
1.58 LC_NUMERIC データブロック
1.59 LC_TIME データブロック
1.60 エラー通知、エラー処理、プログラム終了処理のための C ライブラリ関数の変更
1.61 ARM で提供されるヒープおよびヒープを使用するライブラリ関数の使用の回避
1.62 メモリ割り当て関数の C ライブラリサポート
1.63 ヒープ 1 標準ヒープ実装
1.64 ヒープ 2 代替ヒープ実装
1.65 ベアマシン C からのヒープ実装の使用
1.66 スタックポインタの初期化とヒープの上下限
1.67 __initial_sp、__heap_base、および __heap_limit の定義
1.68 実行時のヒープサイズの拡張
1.69 __user_initial_stackheap() の従来のサポート
1.70 C および C++ ライブラリでの入出力関数のカスタマイズ
1.71 C および C++ ライブラリ内での低レベル関数のターゲット依存関係
1.72 C ライブラリ printf ファミリ関数
1.73 C ライブラリ scanf ファミリ関数
1.74 C ライブラリで高レベルライブラリ関数の直接使用を有効化するための低レベルライブラリ関数の再定義
1.75 C ライブラリ関数 fread()、fgets()、および gets()
1.76 C ライブラリでの __backspace() の再実装
1.77 C ライブラリでの __backspacewc() の再実装
1.78 C ライブラリでのターゲットに依存するシステム入出力関数の再定義
1.79 入出力以外の C ライブラリ関数のカスタマイズ
1.80 ARM ライブラリのリアルタイム整数除算
1.81 ARM C ライブラリが ISO C 仕様の要件を満たす方法
1.82 mathlib エラー処理
1.83 C ライブラリの signal() 関数と追加の型引数によりサポートされる ISO 準拠のシグナルの実装
1.84 ISO 準拠の C ライブラリ入出力の特性
1.85 標準 C++ ライブラリの実装定義
1.86 C ライブラリ関数と拡張機能
1.87 コンパイラによって生成されたライブラリに存在するヘルパ関数
1.88 C および C++ ライブラリの命名規則
1.89 FILE 宣言およびワイド I/O 関数プロトタイプを無効化するマクロ __ARM_WCHAR_NO_IO の使用
1.90 実行専用メモリを使用するライブラリ関数の使用
2 ARM C マイクロライブラリ
2.1 microlib について
2.2 microlib とデフォルトの C ライブラリの違い
2.3 microlib のライブラリヒープ使用状況の要件
2.4 microlib でサポートされていない ISO C 機能
2.5 microlib を使用したアプリケーションのビルド
2.6 microlib で使用するスタックおよびヒープの設定
2.7 microlib とリンクしたプログラムの開始と終了
2.8 microlib 入出力関数のカスタマイズ
3 浮動小数点のサポート
3.1 浮動小数点サポートについて
3.2 ソフトウェア浮動小数点ライブラリ fplib
3.3 fplib ルーチンの呼び出し
3.4 特定形式の数値に対する fplib 算術演算
3.5 floats、long longs、doubles、ints の間の fplib 変換
3.6 float と double の間の fplib 比較
3.7 fplib C99 関数
3.8 ARM 浮動小数点環境の制御
3.9 Microsoft 製品との互換性を維持するための浮動小数点関数
3.10 ARM 浮動小数点環境を制御するための C99 互換関数
3.11 C99 丸めモードおよび浮動小数点例外マクロ
3.12 例外フラグの処理
3.13 丸めモードの処理の関数
3.14 浮動小数点環境全体を保存および復元するための関数
3.15 例外を一時的に無効化する関数
3.16 C99 インタフェースの ARM 浮動小数点コンパイラ拡張
3.17 ユーザ定義の例外トラップハンドラの記述
3.18 ユーザ定義の例外ハンドラの例
3.19 シグナルによる例外トラップ処理
3.20 mathlib(_WANT_SNAN)で提供される C99 シグナル NaN の使用
3.21 mathlib での倍精度浮動小数点関数および単精度浮動小数点関数
3.22 IEEE 754 算術演算
3.23 IEEE 754 算術演算の基本データ型
3.24 IEEE 754 算術演算の単精度データ型
3.25 IEEE 754 算術演算の倍精度データ型
3.26 IEEE 754 算術演算の単精度浮動小数点数値のサンプル
3.27 IEEE 754 算術演算の倍精度浮動小数点数値のサンプル
3.28 IEEE 754 算術演算と丸め
3.29 IEEE 754 浮動小数点演算で発生する例外
3.30 ARM 浮動小数点環境で認識される例外のタイプ
3.31 ベクタ浮動小数点(VFP)サポートライブラリの使用
4 C および C++ ライブラリ関数
4.1 __aeabi_errno_addr()
4.2 alloca()
4.3 clock()
4.4 _clock_init()
4.5 __default_signal_handler()
4.6 errno
4.7 _findlocale()
4.8 _fisatty()
4.9 _get_lconv()
4.10 getenv()
4.11 _getenv_init()
4.12 __heapstats()
4.13 __heapvalid()
4.14 lconv 構造体
4.15 localeconv()
4.16 _membitcpybl()、_membitcpybb()、_membitcpyhl()、_membitcpyhb()、_membitcpywl()、_membitcpywb()、_membitmovebl()、_membitmovebb()、_membitmovehl()、_membitmovehb()、_membitmovewl()、_membitmovewb()
4.17 posix_memalign()
4.18 #pragma import(_main_redirection)
4.19 __raise()
4.20 _rand_r()
4.21 remove()
4.22 rename()
4.23 __rt_entry
4.24 __rt_errno_addr()
4.25 __rt_exit()
4.26 __rt_fp_status_addr()
4.27 __rt_heap_extend()
4.28 __rt_lib_init()
4.29 __rt_lib_shutdown()
4.30 __rt_raise()
4.31 __rt_stackheap_init()
4.32 setlocale()
4.33 _srand_r()
4.34 strcasecmp()
4.35 strncasecmp()
4.36 strlcat()
4.37 strlcpy()
4.38 _sys_close()
4.39 _sys_command_string()
4.40 _sys_ensure()
4.41 _sys_exit()
4.42 _sys_flen()
4.43 _sys_istty()
4.44 _sys_open()
4.45 _sys_read()
4.46 _sys_seek()
4.47 _sys_tmpnam()
4.48 _sys_write()
4.49 system()
4.50 time()
4.51 _ttywrch()
4.52 __user_heap_extend()
4.53 __user_heap_extent()
4.54 __user_setup_stackheap()
4.55 __vectab_stack_and_reset
4.56 wcscasecmp()
4.57 wcsncasecmp()
4.58 wcstombs()
4.59 スレッドセーフな C ライブラリ関数
4.60 スレッドセーフではない C ライブラリ関数
4.61 古い関数 __user_initial_stackheap()
5 浮動小数点サポート関数
5.1 _clearfp()
5.2 _controlfp()
5.3 __fp_status()
5.4 gamma()、gamma_r()
5.5 __ieee_status()
5.6 j0()、j1()、jn()(第 1 種のベッセル関数)
5.7 significand()(数値の小数部)
5.8 _statusfp()
5.9 y0()、y1()、yn()(第 2 種のベッセル関数)
A ライブラリドキュメントに対する改訂
A.1 『ARM C および C++ ライブラリと浮動小数点サポートユーザガイド』に対する改訂

図の一覧

3-1 IEEE 754 単精度浮動小数点形式
3-2 IEEE 754 倍精度浮動小数点形式
5-1 浮動小数点ステータスワードのレイアウト
5-2 IEEE のステータスワードのレイアウト

表の一覧

1-1 C ライブラリの呼び出し
1-2 直接セミホスティング依存関数
1-3 間接セミホスティング依存関数
1-4 最新の API 定義
1-5 スタンドアロン C ライブラリ関数
1-6 デフォルトの ISO8859-1 ロケール
1-7 デフォルトの Shift-JIS ロケールと UTF-8 ロケール
1-8 トラップおよびエラー処理
1-9 入出力依存
1-10 RVCT 4.0 以前での数学関数
1-11 signal() 関数でサポートされるシグナル
1-12 perror() メッセージ
1-13 標準 C++ ライブラリとの相違点
1-14 C ライブラリの拡張
3-1 算術演算ルーチン
3-2 数値形式変換ルーチン
3-3 浮動小数点比較ルーチン
3-4 fplib C99 関数
3-5 FE_EX_INTYPE_MASK オペランドの型フラグ
3-6 FE_EX_OUTTYPE_MASK オペランドの型フラグ
3-7 FE_EX_FN_MASK オペランドの演算の型フラグ
3-8 FE_EX_CMPRET_MASK の比較型フラグ
3-9 単精度浮動小数点値のサンプル
3-10 倍精度浮動小数点値のサンプル
4-1 スレッドセーフな関数
4-2 スレッドセーフではない関数
5-1 _controlfp の引数に使用されるマクロ
5-2 ステータスワードビットの修正
5-3 丸めモードの制御
A-1 発行 J と発行 K の相違点
A-2 発行 I と発行 J の相違点
A-3 発行 H と発行 I の相違点
A-4 発行 G と発行 H の相違点
A-5 発行 F と発行 G の相違点
A-6 発行 E と発行 F の相違点
A-7 発行 D と発行 E の相違点
A-8 発行 C と発行 D の相違点
A-9 発行 B と発行 C の相違点
A-10 発行 A と発行 B の相違点

リリース情報

ドキュメント履歴
発行 日付 機密保持ステータス 変更点
A 28 5 月 2010 非機密扱い ARM コンパイラ v4.1 リリース
B 30 9 月 2010 非機密扱い ARM コンパイラ v4.1 のアップデート 1
C 28 1 月 2011 非機密扱い ARM コンパイラ v4.1 パッチ 3 のアップデート 2
D 30 4 月 2011 非機密扱い ARM コンパイラ v5.0 リリース
E 29 7 月 2011 非機密扱い ARM コンパイラ v5.0 のアップデート 1
F 30 8 月 2011 非機密扱い ARM コンパイラ v5.01 リリース
G 29 2 月 2012 非機密扱い ARM コンパイラ v5.01 リリースマニュアルの更新 1
H 27 7 月 2012 非機密扱い ARM コンパイラ v5.02 リリース
I 31 1 月 2013 非機密扱い ARM コンパイラ v5.03 リリース
J 16 12 月 2013 非機密扱い ARM コンパイラ v5.04 リリース
K 10 9 月 2014 非機密扱い ARM コンパイラ v5.05 リリース

Non-Confidential Proprietary Notice

This document is protected by copyright and other related rights and the practice or implementation of the information contained in this document may be protected by one or more patents or pending patent applications. No part of this document may be reproduced in any form by any means without the express prior written permission of ARM. No license, express or implied, by estoppel or otherwise to any intellectual property rights is granted by this document unless specifically stated.
Your access to the information in this document is conditional upon your acceptance that you will not use or permit others to use the information for the purposes of determining whether implementations infringe any third party patents.
THIS DOCUMENT IS PROVIDED “AS IS”. ARM PROVIDES NO REPRESENTATIONS AND NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, SATISFACTORY QUALITY, NON-INFRINGEMENT OR FITNESS FOR A PARTICULAR PURPOSE WITH RESPECT TO THE DOCUMENT. For the avoidance of doubt, ARM makes no representation with respect to, and has undertaken no analysis to identify or understand the scope and content of, third party patents, copyrights, trade secrets, or other rights.
This document may include technical inaccuracies or typographical errors.
TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT WILL ARM BE LIABLE FOR ANY DAMAGES, INCLUDING WITHOUT LIMITATION ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF ANY USE OF THIS DOCUMENT, EVEN IF ARM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
This document consists solely of commercial items. You shall be responsible for ensuring that any use, duplication or disclosure of this document complies fully with any relevant export laws and regulations to assure that this document or any portion thereof is not exported, directly or indirectly, in violation of such export laws. Use of the word “partner” in reference to ARM’s customers is not intended to create or refer to any partnership relationship with any other company. ARM may make changes to this document at any time and without notice.
If any of the provisions contained in these terms conflict with any of the provisions of any signed written agreement covering this document with ARM, then the signed written agreement prevails over and supersedes the conflicting provisions of these terms. This document may be translated into other languages for convenience, and you agree that if there is any conflict between the English version of this document and any translation, the terms of the English version of the Agreement shall prevail.
Copyright © [2010-2014], ARM Limited or its affiliates. All rights reserved.
ARM Limited. Company 02557590 registered in England.
110 Fulbourn Road, Cambridge, England CB1 9NJ.
LES-PRE-20349

非機密著作権情報

本書は、著作権などの権利により保護されており、本書に含まれる手順または実装に関する情報は 1 つ以上の特許または申請中の特許により保護されている可能性があります。本書のいかなる部分も、ARM から事前に書面による明示的な承諾なく、 何らかの形式や方法で無断複製することは許可されていません。 特に記載がない限り、明示的であるか黙示的であるかを問わず、また禁反言やその他いかなる知的財産権のライセンスを許諾するものではありません。
本書の情報には、実装により、いかなる第三者の特許も侵害されないことを確認する目的で情報を使用せず、第三者にもそれを許可しないと承諾することを条件としてアクセスすることができます。
本書は、「現状」のまま提供されます。ARM は、明示的、黙示的、または制定法上のいずれを問わず、いかなる表明も保証も行いません。これには、本書に関連した商品性、品質基準、非侵害、または特定目的への適合性に関する黙示的保証を含むが、 これに限定されません。疑義を避けるため、ARM は第三者の特許、著作権、営業機密、または他の権利の範囲および内容に関して、いかなる表明も行わず、識別や理解のための分析も行いません。
本書には、技術的に不正確な箇所および誤記が含まれる場合があります。
法により禁止されていない限りにおいて、ARM は本書の使用により生じた直接的、間接的、特別、付随的、懲罰的、または結果的損害などを含むすべての損害に対して、たとえそのような損害の可能性が事前に告知されていた場合でも、その原因および責任理論の如何に関わらず一切の責任を 負わないものとします。
本書には、商品のみが含まれています。本書の使用、複製、または開示が関連するあらゆる輸出法および輸出規制に完全に準拠し、本書が全体であれ一部であれ、該当する輸出法に違反して直接的または間接的に輸出されることがないことを保証する 責任を負うものとします。ARM のお客様に関連して「パートナー」という言葉が使用されている場合でも、他会社と提携関係を設立することや、言及することを意図するものではありません。ARM は、通知することなくいつでも本書を変更することができます。
本契約のいずれかの規定と、ARM と締結された本書の内容を含む署名済みの書面契約の間に矛盾がある場合、署名済みの書面契約を本契約の規定より優先するものとします。本書は、 便宜上、他言語に翻訳される場合がありますが、本書の英語版と翻訳との間に矛盾がある場合、契約書の英語版に含まれる規定を優先することに同意するものとします。
記号 ( ® または ™ ) が付いた言葉およびロゴは、ARM Limited や関連会社の EU またはその他の国における登録商標および商標です。All rights reserved.本書に記載されている他の製品名は、各社の所有する商標です。ARM の 商標の使用に関する次のガイドラインに従ってください。 http://www.arm.com/about/trademark-usage-guidelines.php
Copyright © [2010-2014], ARM Limited or its affiliates. All rights reserved.
ARM Limited. Company 02557590 registered in England.
110 Fulbourn Road, Cambridge, England CB1 9NJ.
LES-PRE-20349

補記

本書の一部の情報は、『IEEE 754 - 1985 IEEE Standard for Binary Floating-Point Arithmetic』に基づいています。記載されている方法による配置と使用から生じる責任または義務を IEEE では一切放棄しています。

機密保持ステータス

本書は非機密扱いであり、本書を使用、複製、および開示する権利は、ARM および ARM が本書を提供した当事者との間で締結した契約の条項に基づいたライセンスの制限により異なります。
無制限アクセスは、ARM 社内による分類です。

製品ステータス

本書の情報は最終版であり、開発済み製品に対応しています。

Web アドレス

非機密扱いPDF file icon PDF 版ARM DUI0475KJ
Copyright © 2010-2014 ARM.All rights reserved.