狠狠撸

狠狠撸Share a Scribd company logo
進化するART
DroidKaigi
2015/4/25
僻地のプログラマkmt-t
1
自己紹介
? ハンドルネーム
– @kmt_t
? 職業
– 業務系プログラマ
– 元組み込み系
? 専門分野
– 画像処理、ファイルシステム、仮想マシン
– 最近は自然言語処理、ディープラーニング
書籍出版中!
? 「Androidの仮想マシン Dalvik編」発売中
– 達人出版会様より出版!
– ARTを攻略するにはまずDalvikから!
2
今日話す内容
? ARTの概要
? ARTの実行ファイル
? ARTのコンパイラ
? 今回解説するのはバージョン5.1.0_r1.0
3
今日話す内容
? ARTの概要
? ARTの実行ファイル
? ARTのコンパイラ
? 今回解説するのはバージョン5.1.0_r1.0
4
注意!
コードがかなり頻繁に変わるので
将来的に正しい保証はありません
ARTの概要
5
ARTとは何か?
? (ART = Android RunTime)
? ランタイムとは
– アプリケーション実行環境
– コアライブラリ
? Androidのランタイムとは
– Dalvikバイトコードの実行環境
– KitKatまではDalvik
– LolipopからはART
6
ARTの特徴
? コードの変更点
– Dalvikから完全書き換え
– プログラミングはC言語からC++11
? アーキテクチャの変更点
– JITコンパイラからAOTコンパイラに
? バイトコードを機械語にコンパイル
? AOTコンパイラでアプリケーションインストール
時にコンパイルするように変更
– ガベージコレクションが改善
– 64bitCPU対応
7
ベンチマーク
8
出典 : http://gigazine.net/news/20140406-nexus-5-art/
ART Dalvik
ARTの実行ファイル
9
ARTの実行ファイル
? OATファイル
– AOTコンパイラが出力する実行ファイル
– 機械語はOATファイルに保存
? DEXファイル
– OATファイルに埋め込まれる
– メタデータはDEXファイルをそのまま使用
– 「Androidの仮想マシンDalvik編」参照
10
OATファイルの概要
? ELF形式
– Linuxでは一般的に使われている形式
– OATファイルは共有ライブラリ
? リンカとローダはART独自
– リンカ、ローダとは?
– メモリへ展開
– アドレスの再配置
– シンボルの解決
– 詳細は「Linkers & Loaders」参照
11
ELFの概要
? 以下のブロックに分割
– ELFヘッダ
– プログラムヘッダ
? セグメント情報
– セグメント
– セクション
– セクションヘッダ
? セクション情報
? セグメントとセクションは同じ領域を別
の論理単位に分割
12
ELFヘッダ
プログラムヘッダ
セグメント
または
セクション
セクションヘッダ
OATファイルをobjdumpする
13
# arm-linux-androideabi-objdump -h ./boot.oat
./boot.oat: file format elf32-littlearm
Sections:
Idx Name Size VMA LMA File off Algn
0 .dynsym 00000040 709780f4 709780f4 000000f4 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
1 .dynstr 00000026 70978134 70978134 00000134 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
2 .hash 00000020 7097815c 7097815c 0000015c 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
3 .rodata 01a50000 70979000 70979000 00001000 2**12
CONTENTS, ALLOC, LOAD, READONLY, DATA ※ ART独自のデータ含む
4 .text 01499d80 723c9000 723c9000 01a51000 2**12
CONTENTS, ALLOC, LOAD, READONLY, CODE
5 .dynamic 00000038 73863000 73863000 02eeb000 2**12
CONTENTS, ALLOC, LOAD, READONLY, DATA
6 .oat_patches 001af258 00000000 00000000 02eeb038 2**3
CONTENTS, READONLY ※ ART独自のセクション
.rodataセクション
? DEXファイルとガイド情報
14
アイテム名 内容
OatHeader .rodataに保存されているデータのヘッダ
OatDexFile DEXファイルをmmapするファイル名の配列
Dex DEXファイルの配列 (DEXファイルそのもの)
OatClass クラスに紐付けられたコンパイル済みメソッドの位置
GcMap ガベージコレクションのガイド情報
VmapTable 仮想マシンのレジスタに格納されている値の型
MappingTable CPUと仮想マシンのプログラムカウンタの対応表
.oat_patchesセクション
? イメージファイルの再配置情報
? イメージファイルとは?
– イメージファイルはアプリケーション起動時
にImageSpaceヒープにロードされる
– イメージファイルはロードされるたびにアド
レスを変更するため、再配置が必要
? ImageSpaceヒープに含まれるデータ
– 定数文字列、クラスメタデータ、メソッドメ
タデータのJavaオブジェクトインスタンス
? 通常のELFファイルには含まれない
15
.textセクション
? コンパイルされたメソッドの機械語
16
その他セクション (一般的な使い方)
? .dynsimセクション
– 動的リンクのシンボルテーブル
? .dynstrセクション
– .dynsymのシンボル文字列テーブル
? .hashセクション
– シンボル検索用のハッシュテーブル
– 一般的にはリンカ、ローダ用
– リンカ、ローダが独自実装であるARTでは使用しない
? .dynamic
– 動的リンクシンボル検索用のハッシュテーブル
– 一般的にはリンカ、ローダ用
– リンカ、ローダが独自実装であるARTでは使用しない
17
ARTのコンパイラ
18
3つのコンパイラ
? Quickコンパイラ
– DalvikのJITコンパイラベース
? Portableコンパイラ
– LLVMベース
? Seaコンパイラ
– LLVM IRの上にSea IRのレイヤを追加
19
3つのコンパイラ
? Quickコンパイラ
– DalvikのJITコンパイラベース
20
Quickコンパイラの特徴
? Quickコンパイラは
– DalvikのJITコンパイラベース
– DalvikのJITコンパイラを先に理解する
– 「Androidの仮想マシン Dalvik編」参照
? ARTが速くなったのは何故?
– コンパイラ方式が変更、だけではない!
– ランタイム全体の改善
– メモリアロケータの高速化
– ガベージコレクションの高速化
21
Quickコンパイラのアーキテクチャ
22
バイトコード
MIR
最適化
LIR
機械語
?バイトコードに近い表現
?基本ブロックに分割
?レジスタをSSA形式に変換
?制御フローダイアグラム、支配木に変換
?ほとんどの最適化はここでやる
?機械語に近い表現
?ただし機械語独立
?コンパイル済みコード
コンパイラの基本用語
? SSA (静的単一代入)
– 仮想マシンレジスタ番号に添え字を付ける
– 代入されるごとに添え字を増加
– 添え字の違う仮想マシンレジスタは別物
? 基本ブロック
– 途中でジャンプしない
– 途中にジャンプされない
– 連続したプログラムのブロック
23
制御フローダイアグラム (CFD)
? 基本ブロックの分岐をグ
ラフ化したもの
? コードやレジスタの
生死の判定で使用
24
基本
ブロックM
基本
ブロックL
基本
ブロックN
基本
ブロックO
基本
ブロックP
If true If false
支配木
? ある基本ブロックの前に
必ず通る基本ブロックの
ことを「支配する」
? SSAの最適化で使用
? 「MはNを支配する」
25
基本
ブロックM
基本
ブロックL
基本
ブロックN
基本
ブロックO
基本
ブロックP
If true If false
最適化一覧 (1/2)
手法 DX Dalvik ART
エスケープ解析 (配列オブジェクトの消去) ○ × ×
Pruned-SSA ○ ○ ○
定数伝播 ○ ○ ○
定数畳み込み ○ × ×
定数集約 (同じ定数のロードを一カ所に) ○ × ○
基本帰納変数による計算の簡略化 × ○ ×
ループ不変式の移動 × ○ ○
インライン展開 × ○ ○
死んだコードの除去 ○ ○ ○
無駄な仮想マシンレジスタ複製の除去 ○ × ○
リテラルの命令埋め込み ○ × ×
26
最適化一覧 (2/2)
手法 DX Dalvik ART
無駄なNULLチェックの除去 × × ○
無駄なクラス初期化チェックの除去 × × ○
32bit整数以外の比較とジャンプ命令の結合 × × ○
フィールドオフセットの命令埋め込み × × ○
反仮想化 (仮想メソッドの仮想化除去) × × ○
基本ブロックの並びの最適化 × × ○
無駄な例外ハンドラの除去 × × ○
無駄なメモリロードの抑止 × ○ ○
仮想マシンレジスタのCPUレジスタへの昇格 × × ○
無駄なCPUレジスタ複製の抑止 × × ○
CPUレジスタ割り当ての重み付け (移動コストや
使用頻度の高いCPUレジスタは破棄されない)
× × ○
27
ARTのコンパイラの利点
? JITコンパイラよりパフォーマンスがよい
– 実行時のオーバーヘッドがない
– 時間のかかる最適化が可能である
? ART固有の最適化が可能である
– LLVMを使うと最適化が難しいケースがある
? C++11を使っているためコードが簡略化
28
ARTのコンパイラの欠点
? 多くの最適化をMIRでやる
– CPUアーキテクチャ依存の機械語レベルの最
適化は皆無
– 機械語レベルの最適化はCPUアーキテクチャ
に依存しており、開発工数がかかる
– DalvikではLIRがCPUアーキテクチャ依存だっ
たがARTは非依存
– DalvikではIntelがx86向けの機械語の最適化
コードをコントリビュートしていた
29
まとめ
? 実行ファイル
– ELF形式である
– ART独自のデータが含まれる
– ART独自のリンカとローダ
? コンパイラ
– DalvikのJITコンパイラベース
– LLVMはつかっていない
– CPUアーキテクチャ依存の最適化は若干弱い
? コード変更が頻繁であり「進化してる」
30
まとめ
? 実行ファイル
– ELF形式である
– ART独自のデータが含まれる
– ART独自のリンカとローダ
? コンパイラ
– DalvikのJITコンパイラベース
– LLVMはつかっていない
– CPUアーキテクチャ依存の最適化は若干弱い
? コード変更が頻繁であり「進化してる」
31
マスターブランチとkitkat-mr1-releaseブランチの差分
$ git diff 21b2216e4aa3756b5f96a587e99ac4fd0b16b844 | wc -l
539703
ご清聴ありがとうございました
? 質問はありますか?
32

More Related Content

What's hot (20)

Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門
Ryosuke Uchitate
?
Systemd: the modern Linux init system you will learn to love
Systemd: the modern Linux init system you will learn to loveSystemd: the modern Linux init system you will learn to love
Systemd: the modern Linux init system you will learn to love
Alison Chaiken
?
奥别产础蝉蝉别尘产濒测の奥别产以外のことぜんぶ话す
奥别产础蝉蝉别尘产濒测の奥别产以外のことぜんぶ话す奥别产础蝉蝉别尘产濒测の奥别产以外のことぜんぶ话す
奥别产础蝉蝉别尘产濒测の奥别产以外のことぜんぶ话す
Takaya Saeki
?
Php and threads ZTS
Php and threads ZTSPhp and threads ZTS
Php and threads ZTS
julien pauli
?
LLVM Backend Porting
LLVM Backend PortingLLVM Backend Porting
LLVM Backend Porting
Shiva Chen
?
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
murachue
?
What Can Compilers Do for Us?
What Can Compilers Do for Us?What Can Compilers Do for Us?
What Can Compilers Do for Us?
National Cheng Kung University
?
???, ?? ??? ?? - ???? ????, NDC2019
???, ?? ??? ?? - ???? ????, NDC2019???, ?? ??? ?? - ???? ????, NDC2019
???, ?? ??? ?? - ???? ????, NDC2019
devCAT Studio, NEXON
?
Qemu Introduction
Qemu IntroductionQemu Introduction
Qemu Introduction
Chiawei Wang
?
Qemu JIT Code Generator and System Emulation
Qemu JIT Code Generator and System EmulationQemu JIT Code Generator and System Emulation
Qemu JIT Code Generator and System Emulation
National Cheng Kung University
?
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
?
いまさら闻けない补谤尘を使った狈贰翱狈の基础と活用事例
いまさら闻けない补谤尘を使った狈贰翱狈の基础と活用事例いまさら闻けない补谤尘を使った狈贰翱狈の基础と活用事例
いまさら闻けない补谤尘を使った狈贰翱狈の基础と活用事例
Fixstars Corporation
?
View Customize Pluginで出来ること
View Customize Pluginで出来ることView Customize Pluginで出来ること
View Customize Pluginで出来ること
onozaty
?
LLVM Register Allocation
LLVM Register AllocationLLVM Register Allocation
LLVM Register Allocation
Wang Hsiangkai
?
?? ??? ?? ?? ??? ?? ??? NDC2012
?? ??? ?? ?? ??? ?? ??? NDC2012?? ??? ?? ?? ??? ?? ??? NDC2012
?? ??? ?? ?? ??? ?? ??? NDC2012
Esun Kim
?
??? ?? - ???? ??? ???
??? ?? - ???? ??? ?????? ?? - ???? ??? ???
??? ?? - ???? ??? ???
Chris Ohk
?
???? ? ??? (2010? ??)
???? ? ??? (2010? ??)???? ? ??? (2010? ??)
???? ? ??? (2010? ??)
YEONG-CHEON YOU
?
レシピの作り方入门
レシピの作り方入门レシピの作り方入门
レシピの作り方入门
Nobuhiro Iwamatsu
?
systemd
systemdsystemd
systemd
nussbauml
?
Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門
Ryosuke Uchitate
?
Systemd: the modern Linux init system you will learn to love
Systemd: the modern Linux init system you will learn to loveSystemd: the modern Linux init system you will learn to love
Systemd: the modern Linux init system you will learn to love
Alison Chaiken
?
奥别产础蝉蝉别尘产濒测の奥别产以外のことぜんぶ话す
奥别产础蝉蝉别尘产濒测の奥别产以外のことぜんぶ话す奥别产础蝉蝉别尘产濒测の奥别产以外のことぜんぶ话す
奥别产础蝉蝉别尘产濒测の奥别产以外のことぜんぶ话す
Takaya Saeki
?
LLVM Backend Porting
LLVM Backend PortingLLVM Backend Porting
LLVM Backend Porting
Shiva Chen
?
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
murachue
?
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
?
いまさら闻けない补谤尘を使った狈贰翱狈の基础と活用事例
いまさら闻けない补谤尘を使った狈贰翱狈の基础と活用事例いまさら闻けない补谤尘を使った狈贰翱狈の基础と活用事例
いまさら闻けない补谤尘を使った狈贰翱狈の基础と活用事例
Fixstars Corporation
?
View Customize Pluginで出来ること
View Customize Pluginで出来ることView Customize Pluginで出来ること
View Customize Pluginで出来ること
onozaty
?
?? ??? ?? ?? ??? ?? ??? NDC2012
?? ??? ?? ?? ??? ?? ??? NDC2012?? ??? ?? ?? ??? ?? ??? NDC2012
?? ??? ?? ?? ??? ?? ??? NDC2012
Esun Kim
?
??? ?? - ???? ??? ???
??? ?? - ???? ??? ?????? ?? - ???? ??? ???
??? ?? - ???? ??? ???
Chris Ohk
?

Viewers also liked (20)

础苍诲谤辞颈诲学ふ?を君へ。生き抜くためのナレッシ?共有
础苍诲谤辞颈诲学ふ?を君へ。生き抜くためのナレッシ?共有础苍诲谤辞颈诲学ふ?を君へ。生き抜くためのナレッシ?共有
础苍诲谤辞颈诲学ふ?を君へ。生き抜くためのナレッシ?共有
Shinobu Okano
?
マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]
YUKI YAMAGUCHI
?
僕らのデータ同期プラクティス
僕らのデータ同期プラクティス僕らのデータ同期プラクティス
僕らのデータ同期プラクティス
Yukiya Nakagawa
?
Droid kaigiプレゼン
Droid kaigiプレゼンDroid kaigiプレゼン
Droid kaigiプレゼン
Suguru Oho
?
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Yuki Anzai
?
あるゲームアプリケーションの构成とアップデートサイクル
あるゲームアプリケーションの构成とアップデートサイクルあるゲームアプリケーションの构成とアップデートサイクル
あるゲームアプリケーションの构成とアップデートサイクル
Kentaro Iizuka
?
絶対落ちないアフ?リの作り方
絶対落ちないアフ?リの作り方絶対落ちないアフ?リの作り方
絶対落ちないアフ?リの作り方
Fumihiko Shiroyama
?
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
Makoto Yamazaki
?
础苍诲谤辞颈诲と厂贰尝颈苍耻虫
础苍诲谤辞颈诲と厂贰尝颈苍耻虫础苍诲谤辞颈诲と厂贰尝颈苍耻虫
础苍诲谤辞颈诲と厂贰尝颈苍耻虫
android sola
?
开発を効率的に进めるられるまでの道程
开発を効率的に进めるられるまでの道程开発を効率的に进めるられるまでの道程
开発を効率的に进めるられるまでの道程
Takao Sumitomo
?
CardboardのUXをカメラで向上する (droidkaigi 2015/04)
CardboardのUXをカメラで向上する (droidkaigi 2015/04)CardboardのUXをカメラで向上する (droidkaigi 2015/04)
CardboardのUXをカメラで向上する (droidkaigi 2015/04)
Kenichi Takahashi
?
DroidKaigi - Welcome talk
DroidKaigi - Welcome talkDroidKaigi - Welcome talk
DroidKaigi - Welcome talk
Masahiro Hidaka
?
Deep Leaningと超解像
Deep Leaningと超解像Deep Leaningと超解像
Deep Leaningと超解像
Takuya Matsunaga
?
Android lint-srp-practice
Android lint-srp-practiceAndroid lint-srp-practice
Android lint-srp-practice
cch-robo
?
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
Yukiya Nakagawa
?
DroidKaigi2016 windows環境での効率的なアプリ開発手法
DroidKaigi2016 windows環境での効率的なアプリ開発手法DroidKaigi2016 windows環境での効率的なアプリ開発手法
DroidKaigi2016 windows環境での効率的なアプリ開発手法
tkawashita
?
础苍诲谤辞颈诲のセキュア开発について考えてみた(明日、败诉しないためのセキュアコーテ?ィンク?.惫别谤2)
础苍诲谤辞颈诲のセキュア开発について考えてみた(明日、败诉しないためのセキュアコーテ?ィンク?.惫别谤2)础苍诲谤辞颈诲のセキュア开発について考えてみた(明日、败诉しないためのセキュアコーテ?ィンク?.惫别谤2)
础苍诲谤辞颈诲のセキュア开発について考えてみた(明日、败诉しないためのセキュアコーテ?ィンク?.惫别谤2)
Kengo Suzuki
?
Master of Canvas
Master of CanvasMaster of Canvas
Master of Canvas
Mima Yuki
?
用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法
Takao Sumitomo
?
パーミッションモデルの过渡期への対応
パーミッションモデルの过渡期への対応パーミッションモデルの过渡期への対応
パーミッションモデルの过渡期への対応
ak_shio_555
?
础苍诲谤辞颈诲学ふ?を君へ。生き抜くためのナレッシ?共有
础苍诲谤辞颈诲学ふ?を君へ。生き抜くためのナレッシ?共有础苍诲谤辞颈诲学ふ?を君へ。生き抜くためのナレッシ?共有
础苍诲谤辞颈诲学ふ?を君へ。生き抜くためのナレッシ?共有
Shinobu Okano
?
マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]
YUKI YAMAGUCHI
?
僕らのデータ同期プラクティス
僕らのデータ同期プラクティス僕らのデータ同期プラクティス
僕らのデータ同期プラクティス
Yukiya Nakagawa
?
Droid kaigiプレゼン
Droid kaigiプレゼンDroid kaigiプレゼン
Droid kaigiプレゼン
Suguru Oho
?
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Yuki Anzai
?
あるゲームアプリケーションの构成とアップデートサイクル
あるゲームアプリケーションの构成とアップデートサイクルあるゲームアプリケーションの构成とアップデートサイクル
あるゲームアプリケーションの构成とアップデートサイクル
Kentaro Iizuka
?
絶対落ちないアフ?リの作り方
絶対落ちないアフ?リの作り方絶対落ちないアフ?リの作り方
絶対落ちないアフ?リの作り方
Fumihiko Shiroyama
?
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
Makoto Yamazaki
?
础苍诲谤辞颈诲と厂贰尝颈苍耻虫
础苍诲谤辞颈诲と厂贰尝颈苍耻虫础苍诲谤辞颈诲と厂贰尝颈苍耻虫
础苍诲谤辞颈诲と厂贰尝颈苍耻虫
android sola
?
开発を効率的に进めるられるまでの道程
开発を効率的に进めるられるまでの道程开発を効率的に进めるられるまでの道程
开発を効率的に进めるられるまでの道程
Takao Sumitomo
?
CardboardのUXをカメラで向上する (droidkaigi 2015/04)
CardboardのUXをカメラで向上する (droidkaigi 2015/04)CardboardのUXをカメラで向上する (droidkaigi 2015/04)
CardboardのUXをカメラで向上する (droidkaigi 2015/04)
Kenichi Takahashi
?
Android lint-srp-practice
Android lint-srp-practiceAndroid lint-srp-practice
Android lint-srp-practice
cch-robo
?
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
Yukiya Nakagawa
?
DroidKaigi2016 windows環境での効率的なアプリ開発手法
DroidKaigi2016 windows環境での効率的なアプリ開発手法DroidKaigi2016 windows環境での効率的なアプリ開発手法
DroidKaigi2016 windows環境での効率的なアプリ開発手法
tkawashita
?
础苍诲谤辞颈诲のセキュア开発について考えてみた(明日、败诉しないためのセキュアコーテ?ィンク?.惫别谤2)
础苍诲谤辞颈诲のセキュア开発について考えてみた(明日、败诉しないためのセキュアコーテ?ィンク?.惫别谤2)础苍诲谤辞颈诲のセキュア开発について考えてみた(明日、败诉しないためのセキュアコーテ?ィンク?.惫别谤2)
础苍诲谤辞颈诲のセキュア开発について考えてみた(明日、败诉しないためのセキュアコーテ?ィンク?.惫别谤2)
Kengo Suzuki
?
Master of Canvas
Master of CanvasMaster of Canvas
Master of Canvas
Mima Yuki
?
用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法
Takao Sumitomo
?
パーミッションモデルの过渡期への対応
パーミッションモデルの过渡期への対応パーミッションモデルの过渡期への対応
パーミッションモデルの过渡期への対応
ak_shio_555
?

Similar to 进化する础谤迟 (20)

ソーシャルゲームにレコメンドエンジンを导入した话
ソーシャルゲームにレコメンドエンジンを导入した话ソーシャルゲームにレコメンドエンジンを导入した话
ソーシャルゲームにレコメンドエンジンを导入した话
Tokoroten Nakayama
?
顿尝搁言语による厂颈濒惫别谤濒颈驳丑迟プログラミング
顿尝搁言语による厂颈濒惫别谤濒颈驳丑迟プログラミング顿尝搁言语による厂颈濒惫别谤濒颈驳丑迟プログラミング
顿尝搁言语による厂颈濒惫别谤濒颈驳丑迟プログラミング
terurou
?
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作
terurou
?
闯别濒濒测叠别补苍のソースをとりあえず眺めてみた(手抜き)
闯别濒濒测叠别补苍のソースをとりあえず眺めてみた(手抜き)闯别濒濒测叠别补苍のソースをとりあえず眺めてみた(手抜き)
闯别濒濒测叠别补苍のソースをとりあえず眺めてみた(手抜き)
l_b__
?
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版
Takuya Matsunaga
?
ツイート滨顿生成とツイッターリアルタイム検索システムの话
ツイート滨顿生成とツイッターリアルタイム検索システムの话ツイート滨顿生成とツイッターリアルタイム検索システムの话
ツイート滨顿生成とツイッターリアルタイム検索システムの话
Preferred Networks
?
Android Dev Tools Knowledge
Android Dev Tools KnowledgeAndroid Dev Tools Knowledge
Android Dev Tools Knowledge
Shinobu Okano
?
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと
MITSUNARI Shigeo
?
Chipyardによるベイズニューラルネットワーク向け学習アクセラレータ開発 @ RISC-V Day Tokyo 2020 Virtual Booths
Chipyardによるベイズニューラルネットワーク向け学習アクセラレータ開発 @ RISC-V Day Tokyo 2020 Virtual BoothsChipyardによるベイズニューラルネットワーク向け学習アクセラレータ開発 @ RISC-V Day Tokyo 2020 Virtual Booths
Chipyardによるベイズニューラルネットワーク向け学習アクセラレータ開発 @ RISC-V Day Tokyo 2020 Virtual Booths
Keigo Nishida
?
SDSoC でストリーム
SDSoC でストリームSDSoC でストリーム
SDSoC でストリーム
ryos36
?
RISC-V introduction for SIG SDR in CQ 2019.07.29
RISC-V introduction for SIG SDR in CQ 2019.07.29RISC-V introduction for SIG SDR in CQ 2019.07.29
RISC-V introduction for SIG SDR in CQ 2019.07.29
Takefumi MIYOSHI
?
Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011 Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011
Hiro Yoshioka
?
ゆるふわLinux-HA ?PostgreSQL編?
ゆるふわLinux-HA ?PostgreSQL編?ゆるふわLinux-HA ?PostgreSQL編?
ゆるふわLinux-HA ?PostgreSQL編?
Taro Matsuzawa
?
罢测辫别厂肠谤颈辫迟への入口
罢测辫别厂肠谤颈辫迟への入口罢测辫别厂肠谤颈辫迟への入口
罢测辫别厂肠谤颈辫迟への入口
Sunao Tomita
?
基础から学ぶ组み込み础苍诲谤辞颈诲
基础から学ぶ组み込み础苍诲谤辞颈诲基础から学ぶ组み込み础苍诲谤辞颈诲
基础から学ぶ组み込み础苍诲谤辞颈诲
demuyan
?
[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?
Makoto SAKAI
?
翱蝉蝉で作成するチーム开発环境
翱蝉蝉で作成するチーム开発环境翱蝉蝉で作成するチーム开発环境
翱蝉蝉で作成するチーム开発环境
Tadahiro Ishisaka
?
ビッグデータと颈辞顿谤颈惫别の夕べ:ドリコムのデータ分析环境のお话
ビッグデータと颈辞顿谤颈惫别の夕べ:ドリコムのデータ分析环境のお话ビッグデータと颈辞顿谤颈惫别の夕べ:ドリコムのデータ分析环境のお话
ビッグデータと颈辞顿谤颈惫别の夕べ:ドリコムのデータ分析环境のお话
Tokoroten Nakayama
?
続?厂贰颁顿マシン
続?厂贰颁顿マシン続?厂贰颁顿マシン
続?厂贰颁顿マシン
t-sin
?
Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code reading
Hiro Yoshioka
?
ソーシャルゲームにレコメンドエンジンを导入した话
ソーシャルゲームにレコメンドエンジンを导入した话ソーシャルゲームにレコメンドエンジンを导入した话
ソーシャルゲームにレコメンドエンジンを导入した话
Tokoroten Nakayama
?
顿尝搁言语による厂颈濒惫别谤濒颈驳丑迟プログラミング
顿尝搁言语による厂颈濒惫别谤濒颈驳丑迟プログラミング顿尝搁言语による厂颈濒惫别谤濒颈驳丑迟プログラミング
顿尝搁言语による厂颈濒惫别谤濒颈驳丑迟プログラミング
terurou
?
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作
terurou
?
闯别濒濒测叠别补苍のソースをとりあえず眺めてみた(手抜き)
闯别濒濒测叠别补苍のソースをとりあえず眺めてみた(手抜き)闯别濒濒测叠别补苍のソースをとりあえず眺めてみた(手抜き)
闯别濒濒测叠别补苍のソースをとりあえず眺めてみた(手抜き)
l_b__
?
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版
Takuya Matsunaga
?
ツイート滨顿生成とツイッターリアルタイム検索システムの话
ツイート滨顿生成とツイッターリアルタイム検索システムの话ツイート滨顿生成とツイッターリアルタイム検索システムの话
ツイート滨顿生成とツイッターリアルタイム検索システムの话
Preferred Networks
?
Android Dev Tools Knowledge
Android Dev Tools KnowledgeAndroid Dev Tools Knowledge
Android Dev Tools Knowledge
Shinobu Okano
?
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと
MITSUNARI Shigeo
?
Chipyardによるベイズニューラルネットワーク向け学習アクセラレータ開発 @ RISC-V Day Tokyo 2020 Virtual Booths
Chipyardによるベイズニューラルネットワーク向け学習アクセラレータ開発 @ RISC-V Day Tokyo 2020 Virtual BoothsChipyardによるベイズニューラルネットワーク向け学習アクセラレータ開発 @ RISC-V Day Tokyo 2020 Virtual Booths
Chipyardによるベイズニューラルネットワーク向け学習アクセラレータ開発 @ RISC-V Day Tokyo 2020 Virtual Booths
Keigo Nishida
?
SDSoC でストリーム
SDSoC でストリームSDSoC でストリーム
SDSoC でストリーム
ryos36
?
RISC-V introduction for SIG SDR in CQ 2019.07.29
RISC-V introduction for SIG SDR in CQ 2019.07.29RISC-V introduction for SIG SDR in CQ 2019.07.29
RISC-V introduction for SIG SDR in CQ 2019.07.29
Takefumi MIYOSHI
?
Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011 Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011
Hiro Yoshioka
?
ゆるふわLinux-HA ?PostgreSQL編?
ゆるふわLinux-HA ?PostgreSQL編?ゆるふわLinux-HA ?PostgreSQL編?
ゆるふわLinux-HA ?PostgreSQL編?
Taro Matsuzawa
?
罢测辫别厂肠谤颈辫迟への入口
罢测辫别厂肠谤颈辫迟への入口罢测辫别厂肠谤颈辫迟への入口
罢测辫别厂肠谤颈辫迟への入口
Sunao Tomita
?
基础から学ぶ组み込み础苍诲谤辞颈诲
基础から学ぶ组み込み础苍诲谤辞颈诲基础から学ぶ组み込み础苍诲谤辞颈诲
基础から学ぶ组み込み础苍诲谤辞颈诲
demuyan
?
[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?
Makoto SAKAI
?
翱蝉蝉で作成するチーム开発环境
翱蝉蝉で作成するチーム开発环境翱蝉蝉で作成するチーム开発环境
翱蝉蝉で作成するチーム开発环境
Tadahiro Ishisaka
?
ビッグデータと颈辞顿谤颈惫别の夕べ:ドリコムのデータ分析环境のお话
ビッグデータと颈辞顿谤颈惫别の夕べ:ドリコムのデータ分析环境のお话ビッグデータと颈辞顿谤颈惫别の夕べ:ドリコムのデータ分析环境のお话
ビッグデータと颈辞顿谤颈惫别の夕べ:ドリコムのデータ分析环境のお话
Tokoroten Nakayama
?
続?厂贰颁顿マシン
続?厂贰颁顿マシン続?厂贰颁顿マシン
続?厂贰颁顿マシン
t-sin
?
Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code reading
Hiro Yoshioka
?

More from Takuya Matsunaga (9)

光コラボは契约してはいけない
光コラボは契约してはいけない光コラボは契约してはいけない
光コラボは契约してはいけない
Takuya Matsunaga
?
ソフトウェア组织マインド
ソフトウェア组织マインドソフトウェア组织マインド
ソフトウェア组织マインド
Takuya Matsunaga
?
ある製造业のチームトポロジー
ある製造业のチームトポロジーある製造业のチームトポロジー
ある製造业のチームトポロジー
Takuya Matsunaga
?
クリーンアーキテクチャを试してみた
クリーンアーキテクチャを试してみたクリーンアーキテクチャを试してみた
クリーンアーキテクチャを试してみた
Takuya Matsunaga
?
组込エンジニアのための深层学习
组込エンジニアのための深层学习组込エンジニアのための深层学习
组込エンジニアのための深层学习
Takuya Matsunaga
?
ここが変だよ顿补濒惫颈办仮想マシン
ここが変だよ顿补濒惫颈办仮想マシン ここが変だよ顿补濒惫颈办仮想マシン
ここが変だよ顿补濒惫颈办仮想マシン
Takuya Matsunaga
?
Design by contractとホーア論理
Design by contractとホーア論理Design by contractとホーア論理
Design by contractとホーア論理
Takuya Matsunaga
?
详解顿别虫ファイルフォーマット
详解顿别虫ファイルフォーマット详解顿别虫ファイルフォーマット
详解顿别虫ファイルフォーマット
Takuya Matsunaga
?
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
Takuya Matsunaga
?
光コラボは契约してはいけない
光コラボは契约してはいけない光コラボは契约してはいけない
光コラボは契约してはいけない
Takuya Matsunaga
?
ソフトウェア组织マインド
ソフトウェア组织マインドソフトウェア组织マインド
ソフトウェア组织マインド
Takuya Matsunaga
?
ある製造业のチームトポロジー
ある製造业のチームトポロジーある製造业のチームトポロジー
ある製造业のチームトポロジー
Takuya Matsunaga
?
クリーンアーキテクチャを试してみた
クリーンアーキテクチャを试してみたクリーンアーキテクチャを试してみた
クリーンアーキテクチャを试してみた
Takuya Matsunaga
?
组込エンジニアのための深层学习
组込エンジニアのための深层学习组込エンジニアのための深层学习
组込エンジニアのための深层学习
Takuya Matsunaga
?
ここが変だよ顿补濒惫颈办仮想マシン
ここが変だよ顿补濒惫颈办仮想マシン ここが変だよ顿补濒惫颈办仮想マシン
ここが変だよ顿补濒惫颈办仮想マシン
Takuya Matsunaga
?
Design by contractとホーア論理
Design by contractとホーア論理Design by contractとホーア論理
Design by contractとホーア論理
Takuya Matsunaga
?
详解顿别虫ファイルフォーマット
详解顿别虫ファイルフォーマット详解顿别虫ファイルフォーマット
详解顿别虫ファイルフォーマット
Takuya Matsunaga
?
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
Takuya Matsunaga
?

Recently uploaded (6)

分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】
分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】
分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】
Tomoharu ASAMI
?
(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿
(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿
(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿
leesubin14
?
What is RWA x DePIN - #Solana Developer Hub 14 #SolDevHub
What is RWA x DePIN - #Solana Developer Hub 14 #SolDevHubWhat is RWA x DePIN - #Solana Developer Hub 14 #SolDevHub
What is RWA x DePIN - #Solana Developer Hub 14 #SolDevHub
K Kinzal
?
ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.
ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.
ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.
FUSIONDRIVER, INC.
?
株式会社厂罢翱搁驰における惭补驳颈肠笔辞诲导入事例。开発?テスト环境で惭补驳颈肠笔辞诲を有効活用する
株式会社厂罢翱搁驰における惭补驳颈肠笔辞诲导入事例。开発?テスト环境で惭补驳颈肠笔辞诲を有効活用する株式会社厂罢翱搁驰における惭补驳颈肠笔辞诲导入事例。开発?テスト环境で惭补驳颈肠笔辞诲を有効活用する
株式会社厂罢翱搁驰における惭补驳颈肠笔辞诲导入事例。开発?テスト环境で惭补驳颈肠笔辞诲を有効活用する
ssuserd2c5cd
?
XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。
XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。
XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。
Toru Koido
?
分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】
分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】
分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】
Tomoharu ASAMI
?
(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿
(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿
(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿
leesubin14
?
What is RWA x DePIN - #Solana Developer Hub 14 #SolDevHub
What is RWA x DePIN - #Solana Developer Hub 14 #SolDevHubWhat is RWA x DePIN - #Solana Developer Hub 14 #SolDevHub
What is RWA x DePIN - #Solana Developer Hub 14 #SolDevHub
K Kinzal
?
ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.
ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.
ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.
FUSIONDRIVER, INC.
?
株式会社厂罢翱搁驰における惭补驳颈肠笔辞诲导入事例。开発?テスト环境で惭补驳颈肠笔辞诲を有効活用する
株式会社厂罢翱搁驰における惭补驳颈肠笔辞诲导入事例。开発?テスト环境で惭补驳颈肠笔辞诲を有効活用する株式会社厂罢翱搁驰における惭补驳颈肠笔辞诲导入事例。开発?テスト环境で惭补驳颈肠笔辞诲を有効活用する
株式会社厂罢翱搁驰における惭补驳颈肠笔辞诲导入事例。开発?テスト环境で惭补驳颈肠笔辞诲を有効活用する
ssuserd2c5cd
?
XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。
XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。
XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。
Toru Koido
?

进化する础谤迟

Editor's Notes

  • #2: 人が多いので緊張します。 発表時間が短いので話すペースは早めですが、スライドはあとで狠狠撸Shareにあげるのでご確認ください。 ベースとなる知識がないと難しい内容かも知れませんががんばりましょう。
  • #3: 他の登壇者が自己紹介見るとすごい人ばかり何ですが、自分はただのおっさんです。 仕事Android全然関係ありません。
  • #4: 今日はARTの発表が二本ありますが、今日の発表とこの本を読むことで誰でもARTのソースを読むベースになります。 断言しますがDalvikわかってないとART理解するのはかなり無理ゲーです。 一応ART編も書く予定です。
  • #5: 発表する内容としてはひたすらソースコードを読んで作った発表なので、むしろコードの臭いしかしない発表になります。 みなさんが興味のありそうなところをチョイスしました。 ガベージコレクションについてはこの次のセッション聴いてください。 今日のイベントは落ちないアプリの発表がいくつかありますが、一言 DalvikのときもそうだったんですがARTもVM側にバグがありそうなので、絶対落ちないアプリとかIt’s dreamと言っておきます。 お前たちハイレイヤーどものソフトの安定度は我々が支配している! はっはっはっは
  • #6: 発表する内容としてはひたすらソースコードを読んで作った発表なので、むしろコードの臭いしかしない発表になります。 みなさんが興味のありそうなところをチョイスしました。 ガベージコレクションについてはこの次のセッション聴いてください。 今日のイベントは落ちないアプリの発表がいくつかありますが、一言 DalvikのときもそうだったんですがARTもVM側にバグがありそうなので、絶対落ちないアプリとかIt’s dreamと言っておきます。 お前たちハイレイヤーどものソフトの安定度は我々が支配している! はっはっはっは
  • #10: 骋颈驳补锄颈苍别さんのサイトからの引用です
  • #13: 再配置とは実行ファイルをメモリに展開したときに展開したアドレスにあわせてプログラム中のメモリアドレスを書き換える処理です。実行ファイルは毎回同じメモリアドレスにロードされるとは限りません。 シンボルの解決は説明しない
  • #17: 先ほども説明しましたが再配置とは実行ファイルをメモリに展開したときに展開したアドレスにあわせてプログラム中のメモリアドレスを書き換える処理です。 昔はこれらのオブジェクトのインスタンスの生成は実際に必要とするまで遅延していました。 ARTではアプリケーション起動前に生成します。
  • #19: 通常のLinuxの使われ方と一緒なので割愛します。 興味のある人はネットで調べるかLinkers&Loadersをご覧ください
  • #23: たしかに础翱罢コンパイラになって最适化は増えているがすべてではない
  • #24: まずARTのコンパイラの構造について説明します。 構造としてはDalvikのJITコンパイラとかなり似通っています。 (説明する) 基本ブロック、SSA、制御フローダイアグラム、支配木とは何でしょうか?
  • #27: 制御フローダイアグラム、支配木、データフロー分析などはドラゴンブックのようなコンパイラの教科書や自分の本を読まないと理解できません。 アーキテクチャの解説は以上で終わりです。
  • #28: 顿齿は闯补惫补バイトコードから顿补濒惫颈办バイトコードにコンパイルするコンパイラで、ここでも最适化されています。
  • #29: 発表時間が短いので一個だけ解説します。 この中で最適化の例として反仮想化に注目して解説します。 Javaのメソッドは基本的に仮想メソッドでオーバーライドができます。 実行時にはvtableをつかってメソッドを検索する処理が入ります。 反仮想化ではぜったいこのメソッドが呼ばれてオーバーライドされないのが わかっている場合にそのメソッドを直接呼びます。 性能的には結構効く最適化のはずです。
  • #30: 顿补濒惫颈办では颁++じゃないせいで変なコードが结构ありました。
  • #31: CPUアーキテクチャ非依存とはx86、ARM、MIPすべて同じコードと言うことです。 Interlのライブラリはlibencode