新石器Wiki

近年はシリコン(石)から進化した便利なもので溢れる時代。そんな気になった事や試した事など記す。

ユーザ用ツール

サイト用ツール


programing:arm-programing:arm-unaligned-access


差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
programing:arm-programing:arm-unaligned-access [2018/04/26 12:43] yokoprograming:arm-programing:arm-unaligned-access [2026/07/28 13:16] (現在) – 外部編集 127.0.0.1
行 1: 行 1:
-ARMの非境界整列アドレスのデータアクセス +====== ARMの非境界整列アドレスのデータアクセス ======
-===================================+
 RISC系CPUでは、16bitや32bitのデータアクセスを行う時に、それぞれ2バイト境界や4バイト境界アドレスでないと例外トラップする仕様も多いが、ARMv6T2以降では非境界アドレスのデータアクセスもサポートされている。 RISC系CPUでは、16bitや32bitのデータアクセスを行う時に、それぞれ2バイト境界や4バイト境界アドレスでないと例外トラップする仕様も多いが、ARMv6T2以降では非境界アドレスのデータアクセスもサポートされている。
  
-ARMv7の場合 +===== ARMv7の場合 =====
-----------+
 ARMv7 以降では、非境界整列アクセスが義務付けられてる(デフォルト)。 ARMv7 以降では、非境界整列アクセスが義務付けられてる(デフォルト)。
  
行 16: 行 14:
 Abitは、デフォルトで「0」となっており、非境界アドレスのアクセスも可能となっているが、システム起動初期化時 A=1 として非境界アクセスをチェックし、安定して起動したら A=0 とするような使い方もできる。 Abitは、デフォルトで「0」となっており、非境界アドレスのアクセスも可能となっているが、システム起動初期化時 A=1 として非境界アクセスをチェックし、安定して起動したら A=0 とするような使い方もできる。
  
-```+<code c>
     asm(" mrc p15, 0, r0, c1, c0, 0");     asm(" mrc p15, 0, r0, c1, c0, 0");
     asm(" bic r0, r0, #0x00000002"); /* clear A bit (disable alignment fault) */     asm(" bic r0, r0, #0x00000002"); /* clear A bit (disable alignment fault) */
     asm(" mcr p15, 0, r0, c1, c0, 0");     asm(" mcr p15, 0, r0, c1, c0, 0");
-```+</code>
  
-GCCコンパイラの動作 +===== GCCコンパイラの動作 =====
-------------------+
 GCCは、デフォルトで `-munaligned-access` が有効となっているらしく、データアクセスが境界調整されている場合、コマンドラインオプション `-mno_unaligned_access` を使って非境界整列アクセスをサポートするライブラリ関数へのリンクを避けることもできる。 GCCは、デフォルトで `-munaligned-access` が有効となっているらしく、データアクセスが境界調整されている場合、コマンドラインオプション `-mno_unaligned_access` を使って非境界整列アクセスをサポートするライブラリ関数へのリンクを避けることもできる。
  
-補足 +===== 補足 =====
-----+
  
   - 非境界アクセスが発生すると、実際のメモリバス上は複数回のバスアクセスとなり、多少アクセス時間がかかる。   - 非境界アクセスが発生すると、実際のメモリバス上は複数回のバスアクセスとなり、多少アクセス時間がかかる。
  
-参考 +===== 参考 =====
-----+
  
-1. [[http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0473kj/dom1359731171041_00013.html|ARM® コンパイラ armasm ユーザガイド 6.18 アドレス境界調整]] +  - [[http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0473kj/dom1359731171041_00013.html|ARM® コンパイラ armasm ユーザガイド 6.18 アドレス境界調整]] 
-2. [[http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ij/Cihdbfje.html|RealView Compilation Tools アセンブラガイド 4.2.1. アドレス境界調整]] +  [[http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ij/Cihdbfje.html|RealView Compilation Tools アセンブラガイド 4.2.1. アドレス境界調整]] 
-3. [[http://blog.kmckk.com/archives/5170117.html|GCC(ARM)のunaligned data accessコード生成]]+  [[http://blog.kmckk.com/archives/5170117.html|GCC(ARM)のunaligned data accessコード生成]]
  
programing/arm-programing/arm-unaligned-access.1524714185.txt.gz · 最終更新: by yoko