はじめに
Rider2025.3の新機能として、Unityにより生成されたILを表示できるようになりました。
ILに加えて、Rider 2026.1よりstandard JIT・ReadyToRun (crossgen2)・NativeAOT (ilc)によってコンパイルされたネイティブアセンブリまで見れるようになる新機能が登場しました。
概要やインストール方法、実際に実験してみた結果まで書き残しておきたいと思います。
概要
ILではメソッド呼び出しとして残っていてもアセンブリではインライン化されていたり、SIMDの適応だったりと、ILを見るだけでは分からないような最適化がなされていることがあります。
それを調べるためにはIL Viewerだけでは実現することはできません。今回紹介するASM Viewerを用いることで、Rider上で調べることが可能になります。
インストール方法
デフォルトでは入っていないので、dotnet-disassembler-pluginというプラグインを導入する必要があります。
設定 -> プラグイン -> Marketplaceにて.NET Disassemblerをインストールして再起動すればOKです。

使い方
調べ方
メニューバーの表示 -> ツールウィンドウ -> ASMで調べられます。またエディタ右側にASMのアイコンをタップしても開きました。


コンパイラの切り替え
ASM Viewerの歯車アイコンを選択し、Code Generatorから以下のどれかを選択することができます。
- clrjit.dll
- crossgen2.dll (R2R)
- ilc (NativeAOT)

スナップショット
カメラアイコンを選択するとスナップショットをとることができ、差分の表示ができます。

実験
SIMDが適応されているか確認してみます。
C#
using System.Runtime.Intrinsics; public class Program { public static void Main(string[] args) { var v1 = Vector128.Create(1.0f, 2.0f, 3.0f, 4.0f); var v2 = Vector128.Create(5.0f, 6.0f, 7.0f, 8.0f); _ = AddVectors(v1, v2); } public static Vector128<float> AddVectors(Vector128<float> left, Vector128<float> right) { return Vector128.Add(left, right); } }
ASM Viewer
G_M000_IG01:
stp fp, lr, [sp, #-0x10]!
mov fp, sp
G_M000_IG02:
fadd v0.4s, v0.4s, v1.4s
G_M000_IG03:
ldp fp, lr, [sp], #0x10
ret lrよく見ると.4sがついていることが分かります。これは128ビットのレジスタを「32ビットの単精度浮動小数点(float)4つ分」として扱うことを表しているので、SIMDが利用されていることが伺えます。
fadd v0.4s, v0.4s, v1.4s