このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。
前回の記事では、Rustを使用したHello, Worldについて紹介しました。今回も同じ題材を使用して、Rustで低レイヤプログラミングを行うための細かなテクニックについて紹介します。
実は、そんな時のために、Rustではインラインアセンブリが書けるようになっています。
<span class="macro" style="box-sizing: border-box; color: #3e999f;">asm</span><span class="macro" style="box-sizing: border-box; color: #3e999f;">!</span>(<span class="ident" style="box-sizing: border-box;">assembly</span> <span class="ident" style="box-sizing: border-box;">template</span>
: <span class="ident" style="box-sizing: border-box;">output</span> <span class="ident" style="box-sizing: border-box;">operands</span>
: <span class="ident" style="box-sizing: border-box;">input</span> <span class="ident" style="box-sizing: border-box;">operands</span>
: <span class="ident" style="box-sizing: border-box;">clobbers</span>
: <span class="ident" style="box-sizing: border-box;">options</span>
);
assembly templateにアセンブリを文字列リテラルで書きます。output/input operandsは、コード中の変数とのインタフェースになります。clobbersには破壊されるレジスタを指定します。optionsには必要であれば”volatile”や”intel”のようなオプションを渡すことが出来ます。
<span class="attribute" style="box-sizing: border-box; color: #c82829;">#[link_section="foo"]</span>
<span class="kw" style="box-sizing: border-box; color: #8959a8;">fn <span class="ident" style="box-sizing: border-box;">foo</span>() {
<span class="comment" style="box-sizing: border-box; color: #8e908c;"><...snip...></span>
}
rustc –target=arm-unknown-linux-gnueabi -C target-cpu=cortex-a9 -C no-stack-check -o hello.o hello.rs
arm-none-eabi-ld -T linker.ld -o hello.elf hello.o
続く?
コンピュータビジョンセミナーvol.2 開催のお知らせ - ニュース一覧 - 株式会社フィックスターズ in Realizing Self-Driving Cars with General-Purpose Processors 日本語版
[…] バージョンアップに伴い、オンラインセミナーを開催します。 本セミナーでは、...
【Docker】NVIDIA SDK Managerでエラー無く環境構築する【Jetson】 | マサキノート in NVIDIA SDK Manager on Dockerで快適なJetsonライフ
[…] 参考:https://proc-cpuinfo.fixstars.com/2019/06/nvidia-sdk-manager-on-docker/ […]...
Windowsカーネルドライバを自作してWinDbgで解析してみる① - かえるのほんだな in Windowsデバイスドライバの基本動作を確認する (1)
[…] 参考:Windowsデバイスドライバの基本動作を確認する (1) - Fixstars Tech Blog /proc/cpuinfo ...
2021年版G検定チートシート | エビワークス in ニューラルネットの共通フォーマット対決! NNEF vs ONNX
[…] ONNX(オニキス):Open Neural Network Exchange formatフレームワーク間のモデル変換ツー...
YOSHIFUJI Naoki in CUDAデバイスメモリもスマートポインタで管理したい
ありがとうございます。別に型にこだわる必要がないので、ユニバーサル参照を受けるよ...