ARMアーキテクチャ
![]() |
開発者 | ARMホールディングス |
---|---|
ビット数 | 32ビット、64ビット |
発表 | 1983年 |
バージョン | ARMv9[1] |
デザイン | RISC |
タイプ | Register-Register |
エンコード | Fixed |
ブランチ | Condition code |
エンディアン | Bi |
拡張 | Thumb, Jazelle, VFP, NEON, SVE, SME |
レジスタ | |
16(32ビット)、31(64ビット) |
ARMアーキテクチャ(アーム[2][3][4][5]アーキテクチャ) とは、ARMホールディングスの事業部門であるARM Ltd.により設計・ライセンスされているアーキテクチャである。組み込み機器や低電力アプリケーションからスーパーコンピューターまで様々な機器で用いられている。
概要
[編集]歴史
[編集]主な採用製品
[編集]ARM6
[編集]- ARM60 3DOインタラクティブ マルチプレーヤー
-
ARM60 CPU (VY86C06020FC-2) -
ARM60 CPU (P60ARM)
- ARM610 Apple ニュートン・メッセージパッド、メッセージパッド100、メッセージパッド110、メッセージパッド120
ARM7/7E
[編集]- 携帯情報端末
- 携帯電話
- 携帯ゲーム機
- ゲームボーイアドバンス
- ニンテンドー
- 携帯音楽プレーヤー
- 電卓
- HP 20b / HP 30b
- その他
- レゴマインドストーム NXT(知能ブロックの一部)
- ルンバ(一部の機種)
ARM9/9E
[編集]ARM11/11E
[編集]Cortex-M3
[編集]Cortex-A8
[編集]Cortex-A9
[編集]- タブレットは2010年頃から、スマートフォンは2011年から採用された。初期は2コアだったが、4コアのものがタブレットは2011年から、スマートフォンは2012年から登場した。
- NVIDIA Tegra 2
- 携帯ゲーム機
- Apple A5
- Apple A5X
- シングルボードコンピュータ
- PandaBoard
- BeagleBoard同様、テキサス・インスツルメンツの技術支援によって開発されたボード。
- Wandboard
- PandaBoard
Cortex-A15
[編集]Cortex-A57
[編集]Cortex-A72
[編集]Cortex-A73
[編集]Cortex-A75
[編集]Cortex-A76
[編集]Cortex-A77
[編集]Cortex-A78
[編集]Cortex-X1
[編集]
コアの性能と採用実績
[編集]ARM社製
[編集]ファミリー | アーキテクチャ | コア | 特徴 | キャッシュ (I/D)/MMU | 性能 MIPS @ MHz | 採用製品 |
---|---|---|---|---|---|---|
ARM1 | ARMv1 | ARM1 | なし | ARM Evaluation System second processor for BBC Micro | ||
ARM2 | ARMv2 | ARM2 | MUL(乗算)命令を追加 |
|
Acorn Archimedes, Chessmachine | |
ARMv2a | ARM250 | 統合メモリコントローラ (MMU), Graphics and IO processor. SWAP命令を追加 | なし, MEMC1a | 7 MIPS @ 12 MHz | Acorn Archimedes | |
ARM3 | ARMv2a | ARM2a | ARMとしてはじめてのキャッシュの採用 | 4 KB 統合 |
| |
ARM6 | ARMv3 | ARM60 | 32ビットアドレス空間をサポート(それまでは26ビット) | なし | 10 MIPS @ 12 MHz | 3DO, Zarlink GPS Receiver |
ARM600 | キャッシュ、コプロセッサバス(FPA10浮動小数点演算ユニット用) | 4 KB 統合 | 28 MIPS @ 33 MHz | |||
ARM610 | キャッシュ、コプロセッサバスは無し |
|
Acorn Risc PC 600, Apple Newton 100シリーズ | |||
ARM7 | ARMv3 | ARM700 | 8 KB 統合 | 40 MHz | Acorn Risc PC 試作CPUカード | |
ARM710 | Acorn Risc PC 700 | |||||
ARM710a |
|
Acorn Risc PC 700, Apple Newton eMate 300 | ||||
ARM7100 | Integrated SoC. | 18 MHz | Psion Series 5 | |||
ARM7500 | 4 KB 統合 | 40 MHz | Acorn A7000 | |||
ARM7500FE | Integrated SoC. "FE"、FPA・EDOメモリコントローラを追加 |
|
Acorn A7000+ | |||
ARM7TDMI | v4T | ARM7TDMI(-S) | 3ステージ パイプライン | なし | 15 MIPS @ 16.8 MHz | ゲームボーイアドバンス, ニンテンドーDS, iPod |
ARM710T | MMU | 36 MIPS @ 40 MHz | Psion 5 series, Apple Newton | |||
ARM720T | 8 KB 統合キャッシュ, MMU | 60 MIPS @ 59.8 MHz | ||||
ARM740T | MPU | |||||
v5TEJ | ARM7EJ-S | Jazelle DBX | なし | |||
ARM9TDMI | v4T | ARM9TDMI | 5ステージ パイプライン | |||
ARM920T | 16 KB/16 KB, MMU | 200 MIPS @ 180 MHz | Armadillo, GP32,GP2X(マスタ), en:Tapwave Zodiac (Motorola i. MX1) | |||
ARM922T | 8 KB/8 KB, MMU | 200/250 MHz | Cavium CNS2132 (Econa product lines), Cavium STR8132 (Econa evaluation board), Ritmo Torrent Box/Mini Lan Server/BT-Downloader (ZAP-LN-86BT) | |||
ARM940T | 4 KB/4 KB, MPU | GP2X(スレーブ) | ||||
ARM9E | v5TE | ARM946E-S | variable, tightly coupled memories (TCM), MPU |
|
ニンテンドーDS, ノキア N-Gage, Conexant 802.11 chips | |
ARM966E-S | キャッシュレス, TCMs |
ST Micro STR91xF, Ethernet内蔵 | ||||
ARM968E-S | ||||||
v5TEJ | ARM926EJ-S | Jazelle DBX | variable, TCMs, MMU | 220 MIPS @ 200 MHz | Mobile phones: ソニー・エリクソン・モバイルコミュニケーションズ(K, W シリーズ), シーメンス and Benq(x65 シリーズ以降), テキサスインスツルメンツ OMAP1710 | |
v5TE | ARM996HS | Clockless processor | キャッシュレス, TCMs, MPU | |||
ARM10E | v5TE | ARM1020E | (VFP) | 32 KB/32 KB, MMU | ||
ARM1022E | 16 KB/16 KB, MMU | |||||
v5TEJ | ARM1026EJ-S | Jazelle DBX | variable, MMU or MPU | |||
ARM11 | v6 | ARM1136J(F)-S | SIMD, Jazelle DBX, (VFP) | variable, MMU | 1.25 DMIPS/MHz | TI OMAP 2, NXP i.MX3 |
v6T2 | ARM1156T2(F)-S | SIMD, Thumb-2, (VFP) | 1.54 DMIPS/MHz | |||
v6KZ | ARM1176JZ(F)-S | SIMD, Jazelle DBX, (VFP) | variable, MMU+TrustZone | 1.25 DMIPS/MHz | iPhone, iPhone 3G, Broadcom BCM2835 | |
v6K | ARM11 MPCore | 1 – 4 core SMP, SIMD, Jazelle DBX, (VFP) | variable, MMU | 1.25 DMIPS/MHz(最大608 MHz) | NVIDIA Tegra | |
SecurCore | v6-M | SC000 | 0.9 DMIPS/MHz | |||
v4T | SC100 | |||||
v7-M | SC300 | 1.25 DMIPS/MHz | ||||
Cortex-M | v6-M | Cortex-M0 | マイクロコントローラ向け。M1はFPGA上で動作。命令はM3のサブセット。Thumb-2 (BL, MRS, MSR, ISB, DSB, and DMB)対応。 | 0.9 DMIPS/MHz | NXP LPC11xx, Triad Semiconductor, Melfas, 忠北テクノパーク, Nuvoton, オーストリアマイクロシステムズ, ローム, SwissMicros GmbH (DM15, DM41等) | |
Cortex-M0+ | 0.93 DMIPS/MHz | NXP LPC81x, LPC82x, NXP S32K11x, Renesas RAファミリ, Renesas Synergy S1シリーズ | ||||
Cortex-M1 | なし, tightly coupled memory optional. | Altera Cyclone III[27], Actel FPGA[28] | ||||
v7-M | Cortex-M3 | マイクロコントローラ向け(ハーバード・アーキテクチャ) | キャッシュなし, (MPU) | 1.25 DMIPS/MHz | Texas Instruments Stellaris MCU, STMicroelectronics STM32, STMicroelectronics Accordo2, NXP LPC1000, NXP mbed, 東芝 TX03, Luminary Micro, Ember EM3xx, Atmel AT91SAM3, Europe Technologies EasyBCU, Energy Micro EFM32, Actel SmartFusion, Renesas R-IN32 | |
v7E-M | Cortex-M4 | マイクロコントローラ向け(ハーバード・アーキテクチャ)。M3にDSP追加。モーター制御、FA/電力制御、オーディオ/ビデオ処理など。 | NXP Kinetis, NXP LPC43xx, NXP i.MX 6, 7, 8, NXP S32K14x, S32M, STMicroelectronics, Renesas RAファミリ, Renesas Synergy MCU (S3/S5/S7), Infineon TRAVEO | |||
v7-M | Cortex-M7 | マイクロコントローラ向け(ハーバード・アーキテクチャ)。M4までの3段パイプラインから、スーパースカラ(デュアル)6段パイプラインとなり、命令/データ1次キャッシュ、倍精度浮動小数点演算を追加するなど大幅に強化された。クロック周波数は最大800 MHz程度までをターゲットとしており、2017年現在600 MHzで動作する製品がある(NXP i.MX RT1050シリーズ)。
反面、M3,M4にあったBitBand機能が削除されているなどの変更点もある。 |
L1 命令/データ 各0 – 64 KB, (MPU) | 2.14 DMIPS/MHz[29][30] | STMicroelectronics STM32 F7, Atmel SAM x7x, NXP i.MX RT1050, NXP i.MX 8M Nano, Plus, i.MX 95, NXP S32G, S32K, S32M274, 276, Infineon TRAVEO | |
v8-M | Cortex-M23 | マイクロコントローラ向け(ノイマン・アーキテクチャ) | 0.98 DMIPS/MHz[31] | Renesas Synergy S1JA, Renesas RA2A1, Renesas RA2L1, Microchip SAML10 | ||
Cortex-M33 | マイクロコントローラ向け(ハーバード・アーキテクチャ) | 1.50 DMIPS/MHz[32] | Renesas RA6M4, Renesas RA4M3, STM32L5, NXP5500, NXP i.MX 8ULP, i.MX 9 | |||
Cortex-R | v7-R | Cortex-R4 | リアルタイム/セーフティクリティカルな組み込みシステム向け | 可変キャッシュ, MMUはオプション | 1.66 DMIPS/MHz | Texas Instruments TMS570, Broadcom, Renesas RZ/T, STMicroelectronics Accordo2 |
Cortex-R5 | AMD/Xilinx Zynq UltraScale+ MPSoC | |||||
Cortex-R7 | 2.53 DMIPS/MHz | |||||
v8-R | Cortex-R52 | Renesas R-Car V4H, Renesas RZ/T2, NXP S32N, S32Z, S32E | ||||
Cortex-A | v7-A | Cortex-A5 | 低コスト、低消費電力 | L1: 4 KB – 64 KB可変, L2: オプション, メモリ管理ユニット, TrustZone | 1.57 DMIPS/MHz (400 MHz – 800 MHz) | Atmel SAMA5, PS-T328, Snapdragon S4 Play, Snapdragon 200 |
Cortex-A7 | 1 – 4マルチプロセッシング 浮動小数点演算器 L2キャッシュメモリ4 MB(最高) | メモリ管理ユニット, TrustZone, ラージ物理アドレス拡張 | 1.9 DMIPS/MHz ( – 1.5Ghz) | Snapdragon S4 Play, Snapdragon 200, 208, 210, 212, 400, Allwinner A20, Allwinner A31, MediaTek MT6589, Broadcom BCM2836, Renesas R-Car H2, NXP i.MX 6, 7 | ||
Cortex-A8 | アプリケーション向け, NEON, Jazelle RCT, Thumb-2 | 可変 (L1+L2), メモリ管理ユニット, TrustZone | 2.0 DMIPS/MHz (600 MHz – 1 GHz) | TI OMAP 3, Freescale i.MX 5, Apple A4, Samsung Exynos 3, Allwinner A1x, Rockchip RK29xx | ||
Cortex-A9 | アプリケーション向け, 1 – 4コア対称型マルチプロセッシング, (VFP), (NEON), Jazelle RCT and DBX, Thumb-2, アウト・オブ・オーダー実行, 投機的実行, スーパースケーラ | メモリ管理ユニット, TrustZone | 2.5 DMIPS/MHz (800 MHz – 2 GHz) | TI OMAP 4, NXP i.MX 6, ST-Ericsson NovaThor U8500, NVIDIA Tegra 2, NVIDIA Tegra 3, NVIDIA Tegra 4i, STMicroelectronics SPEAr1300, ザイリンクス Zynq-7000, Apple A5, Rockchip RK3xxx, Samsung Exynos 4, HiSilicon K3V2, Kirin 910, MediaTek, Renesas RZ/A, Intel Cyclone V SoC FPGA | ||
Cortex-A15 | 1 – 4コア対称型マルチプロセッシング | メモリ管理ユニット, TrustZone, ラージ物理アドレス拡張 | 3.5 DMIPS/MHz (1 GHz – 2.5 GHz) | TI OMAP 5, Samsung Exynos 5, NVIDIA Tegra 4, NVIDIA Tegra K1, HiSilicon Kirin 920, Renesas APE6, Renesas R-Car H2, Renesas MP6530, Alpine AL-212 | ||
Cortex-A17 | Rockchip RK3288 | |||||
v8-A | Cortex-A32 | 超小型、低消費電力、電力効率重視。IoT機器向け。32ビット命令セット。 | ||||
Cortex-A35 | 低コスト、低消費電力、電力効率重視。64ビット命令セット。 | メモリ管理ユニット, TrustZone, 64bit仮想アドレス, synchronization primitives。[33] | MediaTek Helio X30, NXP i.MX 8 | |||
Cortex-A53 | AArch64。暗号化命令 | 2.3 DMIPS/MHz | Snapdragon 410, 412, 415, 425, 610, 615, 617, 625, 808, 810, HiSilicon Kirin 620, 930, 935, Rockchip RK3368, MediaTek MT6732, 6735, 6737, 6737T, 6738, 6750, 6752, 6753, Helio P10, P20, P25, X10, X30, Renesas R-Car H3, AMD/Xilinx Zynq UltraScale+ MPSoC, NXP i.MX 8, NXP S32G, S32R, TI AM67, 67A, 65x, 64x, 62P, 62x, 62Ax | |||
Cortex-A57 | 4.1 DMIPS/MHz | Snapdragon 808, 810, Nvidia Tegra X1, Samsung Exynos 7, Alpine AL-324, Renesas R-Car H3 | ||||
Cortex-A72 | Snapdragon 618, 620, 650, 652, HiSilicon Kirin 950, 955, AWS Graviton, Marvell ARMADA 7K, 8K, NXP i.MX 8, TI AM68, 69, 68A, 69A, TI DRA82x, TI TDA4x | |||||
Cortex-A73 | HiSilicon Kirin 960, MediaTek Helio X30 | |||||
v8.2-A | Cortex-A55 | Renesas R-Car S4, NXP i.MX 9 | ||||
Cortex-A75 | L1D: 64 KB, メモリ管理ユニット, TrustZone, 64bit仮想アドレス | |||||
Cortex-A76 | 4命令decode | Renesas R-Car V4H | ||||
Cortex-A77 | ||||||
Cortex-A78 | ||||||
Cortex-A78C[34] | ||||||
v9.0-A | Cortex-A510 | Dimensity 9000, Snapdragon 7 Gen 1, Snapdragon 8 Gen1, Snapdragon 8 Gen2, Exynos 2200 | ||||
Cortex-A710 | Dimensity 9000, Snapdragon 7 Gen 1, Snapdragon 8 Gen1, Snapdragon 8 Gen2, Exynos 2200 | |||||
Cortex-A715 | ||||||
v9.2-A | Cortex-A520 | コードネーム: Hayes | ||||
Cortex-A720 | コードネーム: Hunter | |||||
Cortex-X | v8.2-A | Cortex-X1 | ||||
v9.0-A | Cortex-X2 | Dimensity 9000, Qualcomm Snapdragon 8 Gen 1, Exynos 2200 | ||||
Cortex-X3 | Dimensity 9200, Snapdragon 8 Gen 2 | |||||
v9.2-A | Cortex-X4 | |||||
Neoverse | v8.2-A | Neoverse E1 | ||||
Neoverse N1 | Ampere Altra, Altra Max, AWS Graviton2 | |||||
v8.4-A | Neoverse V1 | AWS Graviton3 | ||||
v9.0-A | Neoverse E2 | |||||
Neoverse N2 | ||||||
Neoverse V2 | NVIDIA Grace |
サードパーティー
[編集]ファミリー | アーキテクチャ | 名称 | 特徴 | キャッシュ (I/D)/MMU | 性能 MIPS @ MHz | 採用製品 |
---|---|---|---|---|---|---|
StrongARM | v4 | SA-1 | 16 KB/8 – 16 KB, MMU | 1.0 DMIPS/MHz (203 – 206 MHz) | ||
XScale | v5TE | 80200/IOP310/IOP315 | I/O Processor | |||
80219 | ||||||
IOP321 | en:Iyonix | |||||
IOP33x | ||||||
PXA210/PXA250 | Applications processor | ザウルス SL-5600, SL-A300 | ||||
PXA255 | 32 KB/32 KB, MMU | 400 BogoMips @ 400 MHz | en:Gumstix | |||
PXA26x | ||||||
PXA27x | 800 MIPS @ 624 MHz | HTC Universal, ザウルス SL-C1000,3000,3100,3200,Willcom W-ZERO3シリーズ WS003SH,WS004SH,WS007SH,WS011SH,WS020SH | ||||
PXA800(E)F | ||||||
Monahans | 1000 MIPS @ 1.25 GHz | |||||
PXA900 | Blackberry 8700, Blackberry Pearl (8100) | |||||
IXC1100 | Control Plane Processor | |||||
IXP2400/IXP2800 | ||||||
IXP2850 | ||||||
IXP2325/IXP2350 | ||||||
IXP42x | en:NSLU2 | |||||
IXP460/IXP465 | ||||||
Snapdragon | v7-A | Scorpion | アプリケーション向け, 1 – 2コア対称型マルチプロセッシング, VFPv3, NEON, Thumb-2, Jazelle RCT, アウト・オブ・オーダー実行, 投機的実行 | 可変(L1+L2), MMU, TrustZone | 2.1 DMIPS/MHz (800 MHz – 1.5 GHz) | Qualcomm Snapdragon S1, S2, S3 (第1 – 3世代) |
Krait | アプリケーション向け, 1 – 4コア対称型マルチプロセッシング, VFPv4 | MMU, TrustZone | 3.3 DMIPS/MHz ( – 2.5 GHz) | Qualcomm Snapdragon S4 (第4世代・S4 Playは除く), 400/600/800 (第5世代) | ||
v8-A | Kryo | 64 KB/512 KB – 1 MB | 6.3 DMIPS/MHz ( – 2.6 GHz) | Qualcomm Snapdragon 820 | ||
Centriq | v8-A | Folker | Centriq 2400 | |||
ARMADA | v7-A | Sheeva PJ4 | アプリケーション向け, 1 – 4コア対称型マルチプロセッシング, VFPv3, Wireless MMX2, Thumb-2 | 可変(L1+L2), MMU, TrustZone | 2.42 DMIPS/MHz ( – 1.5 GHz) | Marvell ARMADA 500/600シリーズ |
Sheeva PJ4B | 組み込み向け, 1 – 4コア対称型マルチプロセッシング, VFPv3, NEON, Wireless MMX2, Thumb-2 | 可変(L1+L2), MMU, TrustZone | 2.61 DMIPS/MHz ( – 1.6 GHz) | Marvell ARMADA XP/370/1500 | ||
Apple Ax | v7-A | Swift | アプリケーション向け, 2コア対称型マルチプロセッシング, VFPv4 | 32 KB/32 KB | 1.1 GHz, 1.4 GHz | Apple A6, Apple A6X |
v8-A | Cyclone | アプリケーション向け, 2コア, AArch64 | 64 KB/64 KB | 1.3 GHz | Apple A7 | |
Cyclone gen 2 | 1.1 GHz, 1.4 GHz, 1.5 GHz | Apple A8 | ||||
Typhoon | アプリケーション向け, 3コア, AArch64 | 1.5 GHz | Apple A8X | |||
Twister | アプリケーション向け, 2コア, AArch64 | 2.23 GHz, 2.26 GHz | Apple A9, Apple A9X | |||
Hurricane, Zephyr | アプリケーション向け, 2+2コア, AArch64 | 1.64 GHz, 2.33 GHz | Apple A10 Fusion | |||
アプリケーション向け, 3+3コア, AArch64 | 2.38Ghz | Apple A10X Fusion | ||||
Monsoon, Mistral | アプリケーション向け, 2+4コア, AArch64 | L1: 64 KB/64 KB, L2: 8 MB | 2.39 GHz | Apple A11 Bionic | ||
Vortex, Tempest | L1: 128 KB/128 KB, L2: 8 MB | 2.49 GHz | Apple A12 Bionic | |||
アプリケーション向け, 4+4コア, AArch64 | 2.5GHZ | Apple A12X Bionic, Apple A12Z Bionic | ||||
v8.3-A | Lightning, Thunder | アプリケーション向け, 2+4コア, AArch64 | L1: 48 KB/48 KB, L2: 4 MB | 2.65 GHz | Apple A13 Bionic | |
v8.6-A | Firestorm, Icestorm | L1: 192 KB/64 KB, L2: 12 MB/4 MB | 2.99 GHz | Apple A14 Bionic | ||
Apple M1 | アプリケーション向け, 4+4コア, AArch64 | 3.2 GHz | Apple M1 | |||
Apple M1 Pro | アプリケーション向け, 6+2コア, 8+2コア, AArch64 | Apple M1 Pro | ||||
Apple M1 Max | アプリケーション向け, 8+2コア, AArch64 | Apple M1 Max | ||||
Apple M1 Ultra | アプリケーション向け, 16+4コア, AArch64 | Apple M1 Ultra | ||||
Apple A15 | Avalanche, Blizzard | アプリケーション向け, 2+4コア, AArch64 | 3.23 GHz | Apple A15 | ||
Apple M2 | アプリケーション向け, 4+4コア, AArch64 | L1: 192 KB/128 KB, L2: 16 MB/4 MB | 3.5 GHz | Apple M2 | ||
Apple M2 Pro | アプリケーション向け, 6+4コア, 8+4コア, AArch64 | L1: 192 KB/128 KB, L2: 32 MB/4 MB | Apple M2 Pro | |||
Apple M2 Max | アプリケーション向け, 8+4コア, AArch64 | Apple M2 Max | ||||
Apple A16 | Everest, Sawtooth | アプリケーション向け, 2+4コア, AArch64 | L2: 16 MB/8 MB/24 MB | 3.46 GHz | Apple A16 | |
Tegra K1 | v8-A | Denver | 128 KB/64 KB | Google Nexus 9, Xiaomi Mi Pad | ||
Parker | Denver 2.0 | DRIVE PX2 | ||||
Xavier | Carmel | DRIVE Xavier, Jetson AGX Xavier | ||||
Exynos | v8-A | Exynos M1 | 64 KB/2 MB
(4コアシェア) |
Exynos 8890 (Exynos 8 Octa) | ||
Exynos M2 | Exynos 8895 | |||||
Exynos M3 | Exynos 9810 |
ARMv7-A, v8-A は以下の SoC で実装されている。
- Allwinner (全志科技)
- Amlogic (晶晨半导体)
- Apple A4, A5, A5X, A6, A6X, A7, A8, A8X, A9, A9X, A10, A10X, A11, A12, A12X
- Freescale i.MX
- Fujitsu ARM based SoC Platform (FASP)
- HiSilicon (海思半导体)
- Marvell ARMADA
- MediaTek
- NVIDIA Tegra
- Qualcomm Snapdragon
- Renesas EV2, APE6
- Rockchip (瑞芯微电子)
- Samsung Hummingbird, Exynos
- ST-Ericsson NovaThor
- STMicroelectronics SPEAr
- Texas Instruments OMAP
- Trident PNX
- ZiiLABS ZMS
ARMアーキテクチャを採用しているCPU/メーカ
[編集]- NXPセミコンダクターズ
- LPC
- LPCXpresso
- mbed
- フリースケール・セミコンダクタ
- i.MX
- Kinetis
- DEC-インテル
- インテル - マーベル・テクノロジー・グループ
- STマイクロエレクトロニクス
- STM32
- サイプレス・マイクロシステムズ
- 東芝
- Panasonic
- MN2WS0220シリーズ(スマートテレビ用UniPhier)
- ルネサス エレクトロニクス
- RAファミリ
- RZファミリ
- REファミリ
- EMMA Mobile
- R-Mobile
- R-Car
- R-IN
- Renesas Synergy
- 富士通
32ビットARM
[編集]命令セット
[編集]CPUモード
[編集]レジスタ
[編集]usr | sys | svc | abt | und | irq | fiq |
---|---|---|---|---|---|---|
R0 | ||||||
R1 | ||||||
R2 | ||||||
R3 | ||||||
R4 | ||||||
R5 | ||||||
R6 | ||||||
R7 | ||||||
R8 | R8_fiq | |||||
R9 | R9_fiq | |||||
R10 | R10_fiq | |||||
R11 | R11_fiq | |||||
R12 | R12_fiq | |||||
R13 | R13_svc | R13_abt | R13_und | R13_irq | R13_fiq | |
R14 | R14_svc | R14_abt | R14_und | R14_irq | R14_fiq | |
R15 | ||||||
CPSR | ||||||
SPSR_svc | SPSR_abt | SPSR_und | SPSR_irq | SPSR_fiq |
- FPSCR - Floating-point status and control register (浮動小数点状態制御レジスタ)
- FPEXC - Floating-point exception register (浮動小数点例外レジスタ)
- FPSID - Floating-point system ID register (浮動小数点システムIDレジスタ)
条件実行
[編集]ARMの命令セットにおいてユニークなのは、マシン語の最上位4ビットを占める条件コードを使用した条件実行命令であり、これによってほぼ全ての命令を分岐命令無しに条件付きで実行することができる。
これにより、マシン語中の即値フィールドに割けるビット数が減ってしまう等の欠点もあるものの、小さなif文に対応するコードの生成時に分岐命令を避けることが可能になる。例として、ユークリッドの互除法を挙げる。
(この例はC言語による)
int gcd(int i, int j)
{
while (i != j) {
if (i > j)
i -= j;
else
j -= i;
}
return i;
}
ARMのアセンブリ言語では、whileループの部分は以下のようになる。
loop
CMP Ri, Rj ; i と j を比較
SUBGT Ri, Ri, Rj ; もし "GT" ならば i = i - j;
SUBLT Rj, Rj, Ri ; もし "LT" ならば j = j - i;
BNE loop ; もし "NE" ならば loop に戻る
a += (j << 2);
のような文を1つのARM命令
ADD Ra, Ra, Rj, LSL #2
Thumb
[編集]ARMプロセッサはThumbと呼ばれるコード効率の向上を意図した16ビット長の命令モードを持っている(SuperHの命令16ビット/データ32ビットに倣い追加された)。条件実行のための4ビットプレディケートが削除されている。メモリポートやバスが32ビットよりも狭い状況において32ビットコードよりも性能が向上する。多くの場合、組み込みアプリケーションでは32ビットのデータパスを持っているのは一部のアドレス範囲のみであり(例: ゲームボーイアドバンス)、残りは16ビットかそれよりも狭くなっている。このような状況では、Thumbコードをコンパイルし、CPUに最も負荷のかかる部分だけを32ビット長の命令セットを使用して手作業で最適化するのが、通常は理にかなっている。Thumb命令とARM命令は単一の実行ファイル内で混在が可能であるが、Thumb命令を実行できるモードとARM命令を実行できるモードは独立しており、両者を使うにはその都度プロセッサの状態を切り替える必要がある。状態の切り替えは分岐命令 (BX, BLX) で行うことができるため、通常は関数単位でThumb命令とARM命令を使い分け、関数呼び出しの際に切り替えを行うのが一般的である。
Thumbテクノロジを搭載した最初のプロセッサはARM7TDMIである。ARM9とそれ以降のファミリは、XScaleも含めて全てThumbテクノロジを搭載している。
Thumb-2
[編集]Thumb-2テクノロジは2003年に発表されたARM1156コアで登場した。Thumb-2はThumbの制限された16ビット長の命令セットを追加の32ビット長命令で拡張し、命令セットの幅を広げるものである。公称されているThumb-2の目的は、Thumbと同様のコード密度と32ビットメモリ上でのARM命令セットと同様の性能を得ることであり、Thumb-2はビットフィールド操作、テーブル分岐や条件付き実行などを含んでいる。従来はThumbモードにおいて使用可能な汎用レジスタは8本のみであり自由度が低かったが、Thumb-2で導入された32ビット長命令では16本全てのレジスタが使用可能である。16ビット長命令と32ビット長命令はモードの切り替えなしで混在可能であるため、ThumbモードにおいてもARMモードに近い自由度が得られるようになった。
Jazelle
[編集]Thumb Execution Environment (ThumbEE)
[編集]DSP 拡張命令
[編集]デジタル信号処理とマルチメディアアプリケーション向けに ARMアーキテクチャを拡張するため、いくつかの命令が追加された[2]。ARMv5TE と ARMv5TEJ というアーキテクチャ名の "E" がこれを表していると思われる。
追加された命令は、デジタルシグナルプロセッサアーキテクチャで一般的なものである。例えば、符号付積和演算、飽和加算と飽和減算、「先行する0のカウント」のバリエーションである。
SIMD
[編集]ARMv6で導入された[38]。32ビット幅。
Advanced SIMD (NEON)
[編集]Wireless MMX
[編集]Wireless MMX (WMMX) はインテルがXScaleプロセッサ向けに開発したSIMD命令セットである。64ビット幅のレジスタが16本用意されており、8/16/32/64ビットのSIMD整数演算が可能。XScaleとその売却先であるマーベル・テクノロジー・グループ製のARM SoCに採用されている。命令セット自体はx86プロセッサのMMXとは全く異なるものの、GCCやVisual C++等のコンパイラで利用できる組み込み関数はMMXとの互換性がある程度確保されており、これを利用すればMMX向けに記述されたコードを比較的容易に移植することができる。
VFP
[編集]64ビットARM
[編集]ARMv8-Aから採用。ARMの64ビットモードアーキテクチャAArch64では、汎用レジスタはすべて64ビットとなり、数も16個から31個に増やされる。サーバ用途も意識して仮想化支援命令および暗号支援命令が追加され、SIMD拡張命令であるNEONも大幅に強化される。
命令セットの特徴
[編集]汎用レジスタの増加と64ビット化に伴い、命令セットは完全に再定義されている。コード効率を重視して命令長は32ビットのままで、32ビットARMの特徴であった条件付き実行命令の大半が削除される。これによって一般的なRISC命令セットに近くなったが、依然としてコードサイズを小さくするための工夫が随所に織り込まれている。
AArch64モードにおける命令セットはA64と呼ばれ、以下にA64命令セットの特徴を示す。
- 即値シフト付きオペランド
- これは従来の32ビットARM命令セットにおいてフレキシブル第2オペランド (Flexible second operand) と呼ばれていたものに相当する。多くの基本的な演算命令においては、入力オペランドのうち1つに対する操作を即値左シフト、即値論理右シフト、即値算術右シフト、シフトなし、の4つから選択することができ、演算命令と即値シフト命令を一体化することができる。なお、従来とは異なりローテートは不可能となった。
- 条件付き実行命令
- 汎用レジスタ数が倍増したのに伴い、基本命令の多くからは条件付き実行機能が削除されたが、それでも比較的豊富な条件付き実行命令が定義されている。代表的なものを挙げるとCCMP(条件付き比較)、CINC(条件付きインクリメント)、CSEL(条件付き選択; いわゆるCMOV)等が存在する。
- Compare-and-Branch命令
- PC相対分岐においては、ゼロフラグを参照する場合のみであるが比較と条件分岐を1命令で行うことが可能になっている (CBZ/CBNZ)。これは従来Thumb-2命令セットでのみ定義されていたものであるが、A64モードでは基本命令として定義されている。
- 符号拡張/ゼロ拡張付き命令
- 算術演算/比較命令については、入力オペランドのうち1つを8,16,32ビットから32もしくは64ビットに符号/ゼロ拡張するバージョンが用意されている。
汎用レジスタは64ビット幅であるが、多くの演算命令にはレジスタの下位32ビットのみを参照する32ビット命令が用意されている。この場合、レジスタの部分書き換えが発生しないように、演算結果の32ビットの値は暗黙のゼロ拡張が行われた上で64ビットレジスタに格納される。
Advanced SIMD and Floating-point 命令
[編集]A64命令セットにおいては従来のVFPとAdvanced SIMD (NEON) は統合され、一つの命令体系となった。これに伴い、名称についてはAdvanced SIMD and Floating-point命令と呼ばれるようになった。
主な変更点は倍精度浮動小数点演算への対応、IEEE754への準拠、レジスタ本数の増加の3点である。レジスタについては128ビットのレジスタが32本に増加している。依然として64ビットレジスタとしてアクセスすることも可能であるが、32ビットモードとは異なり、64ビットレジスタは128ビットレジスタの下位64ビットにマッピングされている。
VFPとAdvanced SIMDの統合に伴い、従来はVFPが担っていたスカラの浮動小数点演算命令は、SIMDレジスタのうち下位の32/64ビットにのみ作用する命令として再定義されている。例えば浮動小数点加算命令については
fadd s2, s1, s0 ; s2 <= s0 + s1(単精度スカラ)
fadd d2, d1, d0 ; d2 <= d0 + d1(倍精度スカラ)
fadd v2.4s, v1.4s, v0.4s ; [v2] <= [v0] + [v1](単精度x4 SIMD)
fadd v2.2d, v1.2d, v0.2d ; [v2] <= [v0] + [v1](倍精度x2 SIMD)
のようなバリエーションが命令のニーモニックを保ちつつ、オペランドのプレフィックス (s, d, v) とサフィックスを変更することによって記述可能になっている(サフィックスについては、一部の環境向けのアセンブラではニーモニック側に付加する省略記法も許されるようである)。これはx86プロセッサのSSE命令セットがスカラ命令とSIMD命令の双方を備えているのとよく似ている。