言語: English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Русский | العربية
CPU 実行はゲスト OS、イメージローダー、呼び出し規約から独立しています。NEVERD_ENABLE_CPU_EMULATION で単独ビルドでき、NEVERD_ENABLE_DRIVER_EMULATION は Windows ドライバーモデルも含めます。アーキテクチャガイドでは所有境界、バックエンド選択、プラットフォーム上の制限を説明します。
NEVERD_ENABLE_SEMANTIC_TESTS の既定値は ON で、unittests/semantic のテスト群と集約実行ターゲットを制御します。Unicorn を使わずにネイティブ CPU テストを構築するには、BUILD_TESTING=ON を維持し、NEVERD_ENABLE_SEMANTIC_TESTS=OFF と NEVERD_EMULATION_BACKEND_UNICORN=OFF を指定します。適切な SDK ヘッダーを備えた Windows ARM64/MSVC を含め、KVM/WHP のネイティブテストは引き続き構築できます。Windows ARM64 で Unicorn を有効にする場合は ARM64 LLVM-MinGW ツールチェーンが必要です。このビルド分離は ARM64 の実機実行を検証するものではありません。
公開 ExecutionConfiguration は CPU ファクトリーと機能レポートで共有されます。CPU の割り当てやアドレス空間への接続より前に要件を検証します。省略値は契約固有の固定プロファイルを使い、明示された未対応値は失敗します。
| JSON フィールド | 既定値 | 意味 |
|---|---|---|
backend |
auto |
auto、unicorn、kvm、whp |
contract |
software-cpu-v1 |
バージョン付き実行セマンティクス |
architecture |
x86_64 |
x86_64 または aarch64 |
privilege |
契約プロファイル | flat、supervisor、user。契約と一致する必要があります |
virtual_address_bits |
契約プロファイル | checked は48ビット、flat は64ビット直接マッピング空間 |
page_size |
4096 | ゲストマッピング粒度。ほかの値は拒否 |
required_features |
[] |
ExecutionConfiguration.def の必須機能名 |
driver-strict は x64、software-cpu-v1 は x64 と ARM64 を受け付けます。checked-x64-v1 と checked-aarch64-v1 は指定 ISA と supervisor 権限を要求します。checked-user-x64-v1 と checked-user-aarch64-v1 は契約に対応する限定命令群をそれぞれ CPL3/EL0 で実行し、MMU 分離と明示的なサービス要求 exit を提供します。Unicorn とホストに一致する KVM/WHP をサポートし、auto は既存のホスト選択に従います。direct-user-x64-v1 は、起動に数十億命令を要するワークロード向けに、x64 user 命令群をシングルステップせずUnicorn またはホストが一致する KVM/WHP のトランスポート上でアーキテクチャイベント間だけ実行します。命令を一切 admit せず、命令もメモリアクセスも観測しません。CPL3 分離はゲストページテーブルだけが担います。サービス境界は checked-user-x64-v1 と同じで、システムコール拡張は無効のままのため、サービス命令はゲストが要求したアドレスで未定義オペコードイベントとなり、同じ保留サービスとして報告されます。実行は命令予算やクォンタムではなく時間予算に従います。KVM とホスト一致の WHP が実装します。 Unicorn も対応し、HVF は未対応です。Unicorn はサービス命令フックを同じ元の PC 境界へ変換し、中断時には停止地点の CPU 状態を保存します。実行ウォッチは引き続き有効です。対象ページは実行不可にされるため、監視範囲への最初のフェッチは、checked の命令ウォッチが停止するのと同じ境界でフォールトします。観測に基づくアンパックは、明示的な監視境界の間でエントリを復元します。flat プロファイルにユーザー/supervisor の MMU 分離保証はありません。checked ARM64 と x64 は、以下に示す限定的な FP/SIMD 命令群を許可します。supervisor x64 は限定 MMIO と prepared-read の文字列転送を追加し、user profile は device mapping を拒否します。port I/O は未対応です。service_traps を通知するのは user プロファイルだけです。
ExecutionSession::watchMemoryWrites は命令効果のコミット後に RAM 記録の無効化を通知します。checked CPU は物理バイト範囲を照合し、x64 direct 実行は同じ物理ページ内の別の書き込みも通知できます。通知はバイトの変更を証明せず、次の命令を課金しません。ゲストフォールトと保留サービスが優先します。監視は現在のマッピングとエイリアスに従い、非対応 CPU は空でない集合を拒否します。instructionSize は実行用デコーダーで停止中の命令を検査し、ゲストフォールトを発行しません。
x64 の部分ページ監視では、デコードした制御フロー領域と内部の実行停止点を使います。KVM/WHP はハードウェア実行ブレークポイント、Unicorn はアドレスを限定したフックを使います。未知の制御フローや停止点の過多にはプロセッサの単一ステップを維持します。物理コードページの書き込み保護により、コード変更前に計画を無効化します。PUSHF/POPF の再開では TF を注入せず、ゲスト本来の #DB はゲスト例外として報告します。監視だけの変更では関連するページテーブルの葉を更新し RAM 参照を維持します。マッピング、特権、例外モニター、転送物理ウィンドウの変更はレイアウトキャッシュを無効化します。 サイズ制限付きキャッシュは、非アクティブなページの別名経由の変更も含め、デコードに使った全バイトを再検証してから制御フロー計画を再利用します。命令検査はアクセス可能な接頭部を一度に読み取り、障害を起こす末尾は読み取りません。
user 実行には、マップされた各ページで UserAccessible と適切な Read、Write または Execute 権限が必要です。既存マッピングは既定で supervisor 用です。同じ物理バイトを共有する alias でも権限は独立し、UserAccessible だけではアクセスを許可しません。信頼されたホスト操作と supervisor CPU は RWX を使います。例:
Configuration.Contract = ExecutionContract::CheckedUserX64;
Configuration.Privilege = ExecutionPrivilege::User;
auto CPU = llvm::cantFail(createExecutionBackend(Configuration, Space)).CPU;
llvm::cantFail(CPU->map(Code, 4096, Read | Write | Execute | UserAccessible));権限は契約で固定されます。コンテキスト復元やアドレス空間の切替では変化せず、x64 セグメントセレクターでも昇格できません。回復可能なデータアクセス fault は、所有者が処理するまで元の命令とレジスターを保持します。canAccess は要求された権限だけを正確に検査し、user 可視性の照会には UserAccessible を含めます。ページテーブルは CPU 内部の投影であり、変更可能なゲストページテーブルや権限切替 API は公開しません。ARM64 では user ページは EL1 でも実行不可です。
未知/null フィールド、無効な名前や数値幅、必須機能の重複、未対応の組み合わせは失敗します。入力上限は64 KiBです。従来の CPU factory とドライバー C オプションは互換性を維持します。
KVM、WHP、Unicorn の checked x64/ARM64 は ExecutionFeature::ParallelCPUs(parallel_cpus)を明示要求できます。独立した CPU が別々のホストスレッドで物理 RAM を共有し、RAM を書かないと証明されたネイティブ命令は並行実行できます。書き込み待ちは新規命令を止め、既存の読み取りが終了してから公開します。効果は逐次一貫で、待機のキャンセルとロールバックに対応します。全実行が終了するまでマッピング変更とホスト書き込みは禁止されます。同一 CPU へのスレッド間操作は stop() のみです。既定の CPU 実行は協調式です。OS スケジューリングと弱いメモリ順序の探索は別契約です。
並列 WHP CPU は共有パーティション内の独立した VP を使い、協調実行用 VP に加えて最大 31 個の並列 CPU を保持できます。専用 GPA 領域と転送 RAM が投影を分離し、ARM64 は異なる ASID と非グローバル変換を使います。各ネイティブ実行前にコードと宣言済みオペランドをコピーし、宣言済み出力だけを共有 RAM トランザクションに渡します。オブザーバーは正本の RAM を読みます。KVM と checked Unicorn は共有メモリーを直接使います。HVF と Unicorn の Software 契約はこの機能を提供しません。
MMIOAtomics(mmio_atomics)は明示的な GuestMMIOCallbacks::PrepareAtomic を要求します。checked supervisor x64 は許可された交換、比較交換、整数更新、変更型ビット操作、ARM64 は CASP を含む LSE に対応します。自然整列された 1/2/4/8/16 バイトに限定します。x64 は私有領域で原命令を実行してレジスタと FLAGS を計算し、ARM64 は共通 LSE 意味論を使います。準備は副作用なし、コミットは寿命と版を検証し一度だけ公開します。コミット前の停止や失敗は CPU/デバイスを保持し、成功済みコミットは競合する停止に優先します。通常の Read+Write への代替は禁止です。カーネルのレジスタバンクは宣言済み 1/2/4 バイトに限定し、同値書き込み、電源変更、所有者破棄による古いプレビューを拒否します。ARM64 の通常デバイス転送とデバイス排他モニター、ユーザー MMIO、任意の実機デバイスは対象外です。
neverd cpu-capabilities
neverd cpu-capabilities \
--configuration='{"contract":"checked-aarch64-v1","architecture":"aarch64"}' \
--probe-hostスキーマは version 1 です。レポートは、既定値補完前の requested_configuration、正規化済み configuration、静的意味論の capabilities、adapter build/ABI の build、および --probe-host 指定時のみ返る host(未指定なら null)を分離します。host probe は専用 RAM 上で一時 CPU を初期化するだけで、任意のワークロードの互換性を証明しません。利用可能性は変化し、未対応 backend への暗黙 fallback はありません。CLI は backend 不在でも有効なレポートなら 0、無効な設定・照会なら 1 を返します。
neverd_cpu_capabilities_json は既存 session、任意の設定 JSON、0/1 の ProbeHost を受け取ります。ロード済み image は不要です。結果は neverd_free_string で解放し、NULL の場合は neverd_last_error を確認します。CPU 無効ビルドも同じ関数を公開し、無効状態を明示します。Python plugin は session.cpu_capabilities(...) を使います。C++ では executionCapabilities、resolveExecutionConfiguration、queryExecutionBackendBuild、probeExecutionBackend を個別に利用でき、createExecutionBackend は既存空間に CPU を接続するか専用 RAM と既定空間を作ります。
CPU.runUntilExit(PC, TimeoutMicroseconds) は型付き ExecutionExit を返します。実行開始前の設定エラーは llvm::Error、開始後は stop/deadline/service request/回復可能 fault/guest fault・trap/未対応操作/device・backend failure/説明できない engine stop を明示します。CPU/device/backend fault は同時 stop/deadline より優先され、独立した事実と詳細は保持されます。timeout は正で、duration と絶対 deadline の両方に表現可能でなければなりません。無効なら CPU 状態を変更する前に失敗します。各呼出しには有限予算が必要で、0 は無制限でも有効な即時 timeout でもありません。制御は協調的で、厳密な実時間期限ではありません。戻り値は回復可能 fault を消費しません。OS owner が取得し、再開前に検証済み例外遷移を設定します。既存の run、fault、timedOut は維持されますが、run だけを override する外部 CPU 実装は新しい型付き境界を拒否します。
checked user x64 は正確な prefix なしの SYSCALL encoding のみを intercept し、checked user ARM64 は SVC #imm16 を intercept します。SYSENTER、INT、HVC、BRK などは未対応です。命令 observer を先に実行し、stop/fault がなければ backend に入る前、命令実行前に ExecutionExitKind::ServiceRequest を返します。結果には種類、元の PC、順次 NextPC、SVC immediate が含まれます。レジスター、flags、stack、権限は変わりません。x64 の RCX/R11 clobber も、ARM64 の例外 vector への移行も発生していません。SVC immediate は汎用 service 番号ではありません。
request は pending のまま実行、CPU 変更、空間 binding、context capture/restore をブロックします。停止中に OS owner が takeServiceRequest() で一度だけ消費します。owner が OS ABI を解釈し、service を処理して、結果レジスターと次の PC/例外遷移を明示的に選択します。未対応 service はその owner で失敗し、元の PC を再実行すれば新しい request が発生します。暗黙の NOP や成功結果はありません。service event は同時 stop/deadline より優先されますが、guest/backend failure はさらに優先です。CPU stop、software HLT、deadline、trap は workload 成功を意味しません。Linux process profile は独立した OS model を使い、Windows/Android/Darwin の動作を証明しません。Windows と ARM64 の native 実行は実機での検証が必要です。
例外をマスクした x64 命令の説明は移植可能な基準です。KVM/WHP は driver-strict、checked-x64-v1、checked-user-x64-v1 に precise_simd_exceptions を追加します。ネイティブ起動検証が正確な #XM と両方の再試行を確認してから、非マスク MXCSR 書き込み、LDMXCSR、Windows CONTEXT 復元を許可します。選択は ExecutionProfiles.def が管理し、supportsSIMDExceptions が実際のインスタンス能力を示します。checked Unicorn はマスクを要求し、ARM64 と HVF の例外能力は変更しません。
ネイティブ x64 KVM/WHP は実際の #XM を X64SIMDException 経由でドライバーの C SEH に渡します。ハードウェア例外の CONTEXT は XMM0–15 と MXCSR を保持します。フィルター、例外アンワインド中の finally、選択されたハンドラーは MXCSR 0x1f80 と DF クリアで実行されます。負のフィルターは XMM と最上位の CONTEXT.MxCsr を変更して元の命令を再試行できます。後者にはゲスト CPU のマスクを適用し、FltSave.MxCsr はカーネル復元に使用しません。モデル API の例外は整数/制御レコードを維持し、x87/AVX コンテキスト変更は引き続き拒否します。
checked x64 は限定された legacy SSE/SSE2 move/logical、MOVLHPS/MOVHLPS、mask 付き scalar CVTTSS2SI/CVTTSD2SI/SUBSS/SUBSD を許可します。MXCSR は sticky status、rounding、FTZ を保持し、移植可能な実行では unmasked exception を拒否します。KVM/WHP は16個すべての XMM register と MXCSR を同期します。列挙されていない encoding/operand は許可されません。
checked x64 は mask 付き legacy ADD、SUB、MUL、DIV、SQRT、MIN、MAX の SS、SD、PS、PD 形式も許可します。X64SSEInstructions.def が operand 幅、alignment、admission を一元管理します。MaskedSSEArithmeticMatchesIndependentHostExecution は独立した host CPU oracle で register/RAM 形式、4 種の rounding、FTZ、signed zero、subnormal、NaN を検証し、SSEMemoryObserverStopsBeforeResultAndStatusChanges は効果反映前の停止を検証します。x87、AVX は許可しません。
可搬ソフトウェアプロファイルでは、Unicorn は従来の MINSS/MINSD/MINPS/MINPD と MAXSS/MAXSD/MAXPS/MAXPD が選択した値に DAZ を適用します。選択された非正規化入力は符号付きゼロになり、NaN ペイロードと既存の MXCSR 状態は保持されます。test_x86_sse_minmax_daz はレジスタ、RAM、同一レジスタの形式について、DAZ の有効・無効、全丸めモード、FTZ、累積状態を検証します。
KVM/WHP は非公開の FXSAVE64 実行で MXCSR_MASK を調べ、符号付き非正規化数の演算で DAZ 能力を検証します。checked Unicorn はソフトウェアのマスクを提供します。supportedControlBits は CPU 固有の不変マスクを返し、FX/XSAVE、スナップショット、Windows CONTEXT が同じ能力を使用します。checked LDMXCSR/STMXCSR は m32 全体の RAM 権限を確認し、障害や観測コールバックの中止時には状態を保持します。予約ビットのロードは #GP、移植可能な実行では非マスク SIMD 例外を拒否します。X64MXCSRTests.cpp は制御と再試行を検証し、X64DAZData は許可された全 28 種の SSE 演算を実機の元命令と比較し、DAZ、丸め、FTZ を確認します。HVF の DAZ 対応は拡張しません。
ネイティブ x64 の起動検証は、転送層のコールドスタート準備と全プローブ手順に単一の 5 s 予算を使用します。ゲスト実行予算は独立です。初期化の中断時には命令段階、stop_requested、deadline_reached を報告し、中断型と転送層の診断を保持します。再試行や検証未完了の CPU の受け入れは行いません。
PAUSE(F3 90)は、ネイティブの driver-strict を含む KVM/WHP と checked Unicorn で、共通の x64 マシン境界を通して実行されます。X64PauseTests.cpp は全状態の保持、実行前の停止、コンテキストの復元、不正な LOCK の拒否、スピンループの期限切れと再開を検証します。このプロセッサヒントはゲストスレッドをスケジュールせず、特定の遅延も保証しません。
PUSHFQ(9C)と16ビットの PUSHF(66 9C)は、driver-strict を含むネイティブ KVM/WHP と checked Unicorn で実行されます。共有 ISA 層は RAM トランザクションの確定前に、スタックに保存された内部の単一ステップ用 TF を除去します。暗黙のスタックアドレスには RSP 全体を使用し、プレフィックスの順序がオペランド幅を決めます。全範囲の権限検査、オブザーバーによる停止、障害後の再試行は原子性を保持します。X64PushFlagsTests.cpp は許可された全256通りのフラグ、9種類のエンコード、ページ境界をまたぐエイリアス、ユーザー権限、中断、コンテキスト復元を検査します。
POPFQ(9D)と16ビット POPF(66 9D)は共有 x64 ISA 層でフラグを復元し、KVM、WHP、checked Unicorn、driver-strict に適用されます。プロファイルの IOPL はゼロに固定され、CPL0 は IF を変更でき、CPL3 は IF と IOPL を保持します。予約ビットと VM/VIF/VIP は無視され、RF はクリアされます。ゲスト TF、NT、AC、ID、または CPL0 IOPL の有効な変更は未対応で、状態公開前に明示的に失敗します。スタック全体の読み取り後に FLAGS/RSP/RIP を原子的に更新し、完全な RSP と有効なプレフィックス順序からオペランドを決めます。スタックは読み取り専用でも実行メモリの別名でも構いません。共有層で完了するため転送層の内部 TF を消去しません。X64PopFlagsTests.cpp は独立したネイティブ CPL3 命令との比較、全入力ビット、障害、オブザーバー、後続のネイティブ実行を検査します。
checked x64 は CLC/STC/CMC と LAHF/SAHF を受け入れます。キャリー命令は転送層で実行し、AH 転送は KVM、WHP、checked Unicorn、ネイティブ driver-strict で共通の ISA 処理を使います。LAHF は5つの状態フラグと固定ビットを AH に書き、SAHF は CF/PF/AF/ZF/SF のみ変更します。OF/IF/DF と他のレジスタは保持します。全 REX 値を含む無視されるプレフィックスでも暗黙の AH を使います。X64StatusFlagsTests.cpp は元のホスト命令、全状態、キャンセル、継続を検証します。固定版 Unicorn の変換器も移植可能なプロファイルで REX 下の暗黙の AH を保持し、これら5命令の LOCK 形式を状態変更前に拒否します。
checked x64 は KVM、WHP、Unicorn で SHLD/SHRD の16/32/64ビット宛先と imm8/CL カウントを実行します。カウントは ISA のマスクを使い、16ビット形式で16を超える未定義値は副作用前に拒否します。RAM は正確な幅で読み書きを検証し、既存トランザクションで公開前に結果を観測します。キャンセルは CPU とメモリを戻します。LOCK とデバイスオペランドは未対応です。
X64ScalarShiftInstructions.def が SHL/SHR/SAR、ROL/ROR、RCL/RCR の 8/16/32/64 ビット宛先への作用を定義します。レジスタ形式と RAM 形式は暗黙の 1、imm8、CL によるカウントに対応し、マスク後にゼロとなるカウントと SAL 別名も含みます。RAM 書き込みは権限検査、結果観測コールバック、共有トランザクションを経由し、停止やコールバックエラーでは CPU とメモリを復元します。KVM、WHP、Unicorn の検査モードはこの境界を共有します。LOCK と MMIO 形式は引き続き未対応です。
X64LoopInstructions.def はプロセッサ実行経路で LOOP/LOOPE/LOOPNE を許可します。アドレスサイズは RCX またはゼロ拡張される ECX を選び、FLAGS は変わりません。分岐先の幅は CPU モデルに従い、長モードの Intel は 66H を無視し、AMD は 16 ビットへの変更を保持します。REX.W が優先します。ネイティブ KVM/WHP はホスト CPU、Unicorn は既定の Intel Haswell モデルを使います。共有の許可規則は、デコーダが省略した場合も LOCK と REP を副作用の前に拒否します。
X64BranchModel は相対 JMP/Jcc のデコードを実行と一致させます。ネイティブ KVM/WHP は時間制限付きの初期化で、不成立の 66H 分岐と REX.W の優先順位を測定します。チェック付き Unicorn は Intel モデルを使います。不変の結果を命令オブザーバーと Windows ドライバーポリシーの双方に適用します。ロングモードの Intel は近分岐の rel32 と完全な宛先幅を保ち、AMD は 16 ビットの上書きを反映します。命令バイトが不足すれば、オブザーバーや CPU の実行前に失敗します。
X64StackInstructions.def は KVM、WHP、チェック付き Unicorn(driver-strict を含む)で、汎用レジスターと通常 RAM を使う 16/64 ビットの PUSH/POP、および即値 PUSH を許可します。PUSH は RSP を減らす前にソースを読み、POP は RSP を増やした後で RSP/ESP ベースの宛先を計算します。アドレス幅の切り詰めは明示オペランドだけに適用します。全範囲の権限検査、順序付き観察、単一 RAM トランザクションにより、障害・取消・コールバックエラーで CPU とメモリーが部分更新されることを防ぎます。LOCK とデバイスオペランドは未対応です。
KVM、WHP、checked Unicorn は 16/64 ビットの LEAVE も受け入れます。67H があっても RBP 全体で保存済みフレームを読み、16 ビット形式では RBP の対象外ビットを保持します。フォールトや読み出し取消時は元の RSP と CPU コンテキストを保持します。LOCK、REP、デバイス上のフレームは未対応です。
KVM、WHP、checked Unicorn は 16/64 ビットの ENTER を扱います。割り当て量は符号なし 16 ビット、ネスト値は 32 を法として解釈し、完全な RSP/RBP と有効なプレフィックス順序を使います。ゲストフォルトでは完了済みのスタック書き込みを保持し、RSP、RBP、PC は入口値のままです。最終スタック検査はオペランド幅全体の書き込み権限を調べ、データは書き込みません。LOCK、REP、APX プレフィックスとデバイスフレームは未対応です。
検査付き x64 は 2 バイトの近リターン F3 C3 を受理します。コンパイラは分岐先となるリターンの前にリピートプレフィックスを置き、プロセッサはそれを無視するため、この命令は受理済みの C3 による転送そのものであり、スタックの読み取りも同じです。F2 C3、2 つ目のプレフィックス、オペランドサイズの上書き、F3 C2 iw を含むその他のプレフィックス付きリターンは、引き続き契約の対象外です。X64ReturnPrefixTests.cpp は KVM、WHP、検査付き Unicorn を検査します。
X64PackedIntegerInstructions.def は、桁あふれを切り捨てる加減算と飽和加減算、比較、乗算、平均、最小・最大、バイト差、パックとアンパックを含む 45 個の legacy SSE2 packed integer 命令を許可します。XMM と整列した 128 ビット RAM の入力は KVM、WHP、Unicorn の既存 checked 経路を共有します。FLAGS と MXCSR は変化せず、障害や監視コールバックによるキャンセル時は状態を保持します。MMX、VEX/EVEX、デバイスオペランドは対象外です。
X64PackedShiftInstructions.def は十種類の legacy SSE2 パックシフトを受け入れます。要素シフトの回数は imm8 または XMM/整列済み m128、バイトシフトは imm8 のみです。可変回数は符号なし下位 64 ビットを使い、スカラーシフトのマスクを適用せず、上位 64 ビットを無視します。ゼロや範囲外の回数でもメモリから 16 バイト全体を読み取ります。FLAGS と MXCSR は不変で、MMX、VEX/EVEX、デバイスオペランドは対象外です。
X64VectorOperands.def が従来の SSE 転送、演算、シフト、変換、マスクの完全なオペランド規則を定義します。MOVMSKPS、MOVMSKPD、PMOVMSKB は XMM の符号ビットを r32/r64 に抽出し、宛先の残りのビットをゼロにします。KVM、WHP、checked Unicorn はこの受け入れ規則を共有し、FLAGS、MXCSR、ソースレジスタを保持します。マスクのメモリオペランド、MMX、VEX/EVEX 形式は未対応です。
X64ShuffleInstructions.def は PSHUFD、PSHUFHW、PSHUFLW、SHUFPS、SHUFPD を追加します。X64VectorOperands.def は XMM 宛先、XMM または整列済み m128 ソース、imm8 の完全な3オペランド形式を要求します。元の命令は FLAGS と MXCSR を保持し、ビット列としてレーンを選択します。メモリ形式は16バイト全体を検証し、整列違反はデータ観察より先に発生します。KVM、WHP、checked Unicorn はこの規則を共有します。 同じ一覧は2オペランド形式の UNPCKLPS、UNPCKHPS、UNPCKLPD、UNPCKHPD も受け入れ、元の宛先とソースのビット列を交互に配置します。ハードウェアは選択された64ビットだけを取得できます。checked RAM は整列済み m128 オペランドを検証します。
MOVLPS、MOVHPS、MOVLPD、MOVHPD は、アラインメントを要求せず RAM の正確に 8 バイトを転送します。X64VectorInstructions.def がストアする半分を宣言し、X64VectorOperands.def が XMM/m64 の組を要求します。ロードは残りの 64 ビットを保持し、上位半分のストア監視には上位データを渡します。KVM、WHP、checked Unicorn は全範囲の権限検査と RAM ロールバックを共有します。レジスタ専用の MOVHLPS/MOVLHPS は固有の意味を維持します。
CVTSI2SS と CVTSI2SD は MXCSR の丸め規則で符号付き 32/64 ビット整数を変換し、精度状態を保持します。共有の IntegerSource 規則は XMM 出力と r32/r64 または m32/m64 入力のみを許可します。従来形式は出力の上位 96/64 ビットを保持し、メモリ検査には整数幅を使います。KVM、WHP、checked Unicorn は元の命令を実行します。MMX、VEX/EVEX は対象外です。
CVTSS2SI と CVTSD2SI は共有の IntegerResult 規則で MXCSR の丸めに従い符号付き 32/64 ビット整数を生成し、CVTTSS2SI と CVTTSD2SI は常にゼロ方向へ切り捨てます。例外をマスクした NaN・範囲外変換は整数不定値を返して無効状態を設定し、有効な不正確結果は精度状態を設定します。既存の累積状態、FLAGS、XMM 入力は保持されます。r32 出力は汎用レジスタの上位半分をゼロにします。RAM 読み取り幅は出力幅に関係なく浮動小数点入力幅で決まり、FTZ は非正規化入力を破棄しません。KVM、WHP、checked Unicorn に共通の規則です。
COMISS、COMISD、UCOMISS、UCOMISD は共有 Source 規則でスカラー XMM または m32/m64 を比較します。CF/PF/ZF を設定し OF/SF/AF を消去し、他の FLAGS と入力レーンを保持します。COMIS は全 NaN、UCOMIS は signaling NaN のみで無効状態を設定し、NaN 処理は非正規化状態より優先します。MXCSR の累積ビットは保持され、丸めと FTZ は比較に影響しません。KVM、WHP、checked Unicorn は正確なメモリ検査を共有します。固定版 Unicorn の比較関数は既存の非正規化入力分類を再利用します。
CMPSS、CMPSD、CMPPS、CMPPD は KVM、WHP、checked Unicorn で従来の8条件を実行します。共有 Source 規則はデコード済み別名を受け入れ、予約値は非対応です。スカラー形式は上位レーンを保持して m32/m64 を読み、パック形式は整列した m128 を要求します。FLAGS と既存 MXCSR 状態を保持し、有効レーンごとに無効・非正規化状態を累積します。Capstone が命令族 ID と SSE 条件を管理し、lifter 内だけの ID 修正を置き換えます。Unicorn は各比較関数内で非正規化入力を分類します。
CVTSS2SD、CVTSD2SS、CVTPS2PD、CVTPD2PS は共有 Source 規則で従来の SSE 精度を変換します。スカラー結果は宛先の上位 64/96 ビットを保持します。パック拡張は m64 から倍精度2要素へ、縮小は整列した m128 から単精度2要素へ変換し上位64ビットをゼロにします。KVM、WHP、checked Unicorn の元の命令実行は FLAGS を保持し、丸めと FTZ に従ってマスクされた MXCSR 状態を累積します。Unicorn は変換関数で有効な非正規化入力を個別に分類します。VEX/EVEX は対象外です。
CVTDQ2PS と CVTDQ2PD は共有 Source 規則で符号付き32ビット整数をパック変換します。単精度は整列した m128 と MXCSR の丸めを使用し、倍精度は非整列も可能な m64 を読み正確に変換します。宛先 XMM 全体を置換し、FLAGS と既存の MXCSR 状態を保持し、不正確な単精度結果は精度フラグを蓄積します。KVM、WHP、checked Unicorn は元の命令を実行します。Unicorn は両パック拡張を識別して8バイト読取を選択します。MMX、VEX/EVEX は対象外です。
CVTPS2DQ と CVTPD2DQ は MXCSR の丸めを使用し、CVTTPS2DQ と CVTTPD2DQ はゼロ方向へ切り捨てます。共有 Source 規則は整列した m128 または XMM 入力を要求します。NaN や範囲外のレーンは signed32 indefinite と無効フラグを生成し、他の有効な不正確レーンは独立して精度フラグを加えます。単精度入力は整数4個、倍精度入力は2個となり上位64ビットをクリアします。FLAGS と既存の MXCSR 状態を保持し、FTZ は非正規化入力を破棄しません。KVM、WHP、checked Unicorn は元の命令を実行します。MMX、VEX/EVEX は対象外です。
X64AlignmentTests.cpp は、許可された aligned SSE 命令の非整列オペランドがデータ監視、権限検査、デバイスコールバックより前に回復可能または終端の #GP(0) を報告することを検証します。障害時は公開 x64 レジスタ全体、PC、RAM を保持します。アドレス幅の折り返し後に FS/GS ベースを加算し、アドレス修復後は元の命令を再試行します。直接の KVM/WHP マシンテストがハードウェア境界を独立に検証します。Windows ring3 は分類済みの operand_alignment 障害を配送します。他の原因の #GP は未対応です。
thread pointer は x64 FS/GS base と ARM64 TPIDR_EL0 を正確な MRS/MSR encoding で扱います。native transport と CPU snapshot は memory とは独立してこの状態を保持しますが、OS thread や TLS block を作るものではありません。supervisor x64 は1/2/4 byte の aligned scalar MMIO と restart boundary ごとに1要素の MOVS を許可します。device read には effect のない prepared preview と最大一度の commit が必要です。user profile は device mapping を拒否し、RMW、wide MMIO、port I/O も未対応です。
KVM/WHP は active native entry を cancel し、実行資源を解放する前に acknowledgement を待ちます。KVM は専用 execution thread と一時的に unblock する realtime signal を使います。entry 中、選択した signal は ignored であってはなりません。caller の signal mask/handler は変更しません。guest の進行が不確かな中断は terminal failure であり、厳密な wall-clock deadline は保証しません。
checked x64 の DIV/IDIV は実際のプロセッサ結果と #DE を使用します。KVM は非公開の supervisor IDT/IST、WHP は明示的な例外ビットマップを使用し、元のコンテキストと利用可能なエラーコードを転送エラーと区別します。OS は回復可能なイベントを消費してから継続コンテキストを設定します。Windows ドライバはゼロ除算と商のオーバーフローを STATUS_INTEGER_DIVIDE_BY_ZERO に変換し、実際の SEH filter、__finally、再試行を実行します。NeverDX64ExceptionTests は Unicorn 無効でも構築でき、DriverWDMCPUException は元の WDK 用例を検証します。利用できない ARM64 ホストは明示的にスキップします。
RAMTransaction は物理実行リースの下で、命令が宣言した書き込み範囲の物理的な和集合だけを保持します。結果観測器を呼ぶ前に元の RAM を復元し、取消し、転送エラー、観測器の例外では部分的な RAM やレジスタを公開しません。CPU 例外では RAM を戻した後もアーキテクチャの例外状態を保持します。ARM64 の単一・ペアストアも同じ管理層を使います。x64 は 8/16/32/64 ビットの XCHG、XADD、CMPXCHG を実行し、LOCK または暗黙のロックを持つ形式には自然整列を要求します。NeverDRAMTransactionTests はホスト CPU との結果比較、復元、エイリアス、権限を検証し、利用できないプラットフォームを明示的にスキップします。デバイスのアトミック処理は独立したプロバイダーを使い、CPU スナップショットは確定済み RAM を戻しません。
CMPXCHG8B と CMPXCHG16B は、KVM、WHP、checked Unicorn のドライバーおよびユーザープロファイルで元の命令を実行します。比較の成否にかかわらず読み書き権限が必要で、障害は書き込みアクセスとして分類します。CMPXCHG16B はメモリアクセス前に 16 バイト境界を検査し、不整列なら #GP(0) を報告します。2 回の結果通知は同じ RAM トランザクションに属し、いずれかで停止または例外が発生すると、レジスターも RAM も変更を公開しません。ロックなしの CMPXCHG8B はページをまたげますが、ロック付きは自然アラインメントが必要です。X64WideAtomicTests.cpp はホストの元命令とネイティブ障害を比較し、エイリアス、プレフィックス、アドレス計算、修復後の再試行、キャンセルを検証します。独自の Windows ドライバーと ring3 PE フィクスチャが両幅を実行し、WDK フィクスチャは _InterlockedCompareExchange128 も実行します。CPU モデルには CMPXCHG16B の対応が必要です。
NeverDEmulationArch は ISA、ページテーブル、FP 状態の配置を所有し、ネイティブと Unicorn の転送が共有します。x64 コンテキストは x87 制御、状態、TOP、物理タグ、オペコード、命令/データポインター、8 個の 80 ビットレジスターを保持します。FP0–FP7 は RegisterValue を使い、スカラーアクセスによる切り捨ては拒否します。FPTag は物理レジスターの非空ビットマップです。NeverDX64FPTests は全 TOP、正確な演算のホスト FXSAVE/FXRSTOR 比較と復元を検証します。checked x87 命令や全丸め意味論の証明を追加するものではなく、利用できないネイティブホストは明示的にスキップします。
driver-strict は一致する Linux x64 host の KVM と Windows x64 host の WHP を許可します。auto は対応する native transport を選び、cross-ISA は Unicorn を選びます。明示的な Unicorn と従来の V1 API は portable software profile を保持します。native 実行は entry 前に canonical address と instruction effect を検証し、hardware 不可用時は fallback なしで失敗します。未対応 instruction/OS behavior は明示的な error です。Windows x64 のネイティブ CI は Unicorn を無効にして必須の 359 検査すべてに合格します。内訳は CPU 検査 131 件、組み込みイメージ 26 個・WDK イメージ 46 個・シナリオケース 40 件を優先アドレスと再配置先で実行したドライバー結果 224 件、および SEH 境界検査 4 件です (9d4c130c). native ARM64 の実機証拠は未取得で、任意 driver や Android/Darwin の互換性を保証しません。
選択したバックエンドの機能は executionCapabilities(Contract, ISA, Backend) で照会します。NativeLegacyX64 はネイティブ x64 ドライバー実行を表し、NeverDNativeDriverTests は既存のドライバー群を検証します。このテストは Unicorn を無効にしたビルドでも実行できます。
Checked ARM64 の完全な状態は一つの境界で確定します。Registers.def が39個のスカラー項目と32個の128ビットベクトルを定義し、captureAArch64State が全読み取り、ビット幅、NZCV 正規化を検証して一度だけ公開します。Unicorn、KVM、WHP、HVF は TPIDR_EL0、TPIDRRO_EL0、TPIDR_EL1、FPCR、FPSR を含む同じ状態を転送します。native adapter は CPACR_EL1 で FP/SIMD を有効化します。読み取り失敗や entry の取消では呼び出し側の全状態を保持します。
ARM64 KVM/WHP/HVF の初期化は専用の AArch64MachineProbe.def を実行します。NOP、正の無限大へ丸める FP32 加算、2レーンの SIMD 加算です。各ステップで39個のスカラー値と32個のベクトルを比較し、TLS、NZCV、結果の上位ビット消去、FPCR/FPSR の保持と累積状態を確認します。監視用メモリは supervisor 専用で、全体の期限は共通です。この検査が証明するのは限定された初期化のみです。Linux ARM64 KVM と Windows ARM64 WHP のワークロード検証は未完了です。macOS のネイティブ検証結果は HVF ガイド に記録されています。 このプログラムには、鍵を無効にした A/B リターンアドレス署名・認証と、保護されていないページでの4種類の BTI 命令も含まれます。
プローブは MRS CTR_EL0 を2回実行し、DC CVAU、DSB ISH、IC IVAU、ISB とともにキャッシュ構成の安定性と完全な状態を検証します。Checked EL0/EL1 は元の命令、名前付きの基本 DSB オプション、ISB SY を許可します。CTR は選択した仮想 CPU に由来し、転送方式によって異なる場合があります。対象は現在の権限で読み取り可能な通常 RAM に限り、非整列アドレスと別名も許可します。それ以外は未対応として拒否し、保守操作によるデータ読み書きの観測イベントは生成しません。投影は命令実行の整合性を保ちますが、プライベートキャッシュの内容や並列ハードウェア SMP はモデル化しません。NeverDAArch64CacheTests は完全な状態、読み取り専用ページ末尾、拒否、停止、コンテキスト、予算、ページ境界をまたぐ RW/RX 別名による guest コード更新を検証します。利用できない KVM/WHP ホストは明示的にスキップします。
x64 KVM/WHP/HVF のネイティブ初期化は、非公開の supervisor ページで X64MachineProbe.def を実行します。単一の期限内で NOP、正の無限大方向に丸める FP32 加算、2 レーンの SIMD 加算、FS/GS ロード、CS/SS/CR8 読み出しを行い、各ステップで全スカラー、XMM、物理 x87、制御状態を比較します。x64 と ARM64 の検査には物理メモリの排他的実行リースが必要です。MemoryProjection がキャッシュ識別子(ISA、アドレス空間、マッピング世代、権限、モニター構成)と ISA ごとの確定済みページテーブルルート履歴を所有します。非公開バイトを書き換える前にキャッシュを無効化するため、再構築失敗時の不完全なテーブルや呼び出し側の古いルートを再利用しません。この検査が証明するのは限定された初期化のみです。Linux ARM64 KVM と Windows ARM64 WHP のワークロード検証は未完了です。macOS のネイティブ検証結果は HVF ガイド に記録されています。
共有 XSAVE デコーダーは標準形式と圧縮形式の SSE 初期状態を区別します。XSTATE_BV[1] が 0 の場合、どちらも XMM を初期化しますが、標準形式は MXCSR を読み取り検証し、圧縮形式は MXCSR を初期化します。X64XsaveCases.def は独立したデータ配置と独自のホスト XRSTOR プログラムを提供します。X64XsaveTests.cpp は拒否時の状態の原子性を検証し、呼び出し元の FP/SSE 状態を保存しながら、両形式を実ホストの実行結果と比較します。ホストのアーキテクチャーや必要な命令機能が利用できなければ明示的にスキップします。
X64FPState.def は圧縮 AVX、AVX-512、CET_U/CET_S、AMX の転送配置と成分の 64 バイト境界を宣言します。存在する拡張成分は全ゼロの初期状態に限り、欠落成分のデータと境界調整領域は状態を定義しません。配置ビットがオフセットを決め、未知の配置、非初期値、不正な長さは公開前に失敗します。CompactedOffsetsFollowLayoutRatherThanPresentBits、WideLayoutIgnoresAbsentComponentsAndAlignmentPadding、InitialCETComponentsDoNotHideFPState、InitialWideComponentsDoNotHideFPState は 872 バイトと 10752 バイトの WHP パケットを検証します。これらの拡張命令の実行を許可するものではありません。
WhpXsaveRegisters.def は完全な XSAVE パケットを名前付き x87/SSE 制御レジスターで補完します。最終オペコードと命令・データポインターを明示的に書き込み、ホストから取得します。ゼロのパケット項目は補完できますが、非ゼロのメタデータ衝突や共通制御値の不一致は状態公開前に失敗します。NamedMetadataRestoresOmittedPacketFields は FP ペイロードを保持したまま欠落項目を検証します。
ネイティブの FOP/FIP/FDP はホストの x87 保存・復元規則に従います。マスクされていない保留例外がなければ AMD はこれらをゼロにでき、スナップショットは観測値を保持します。X64MachineProbe.def と厳密な NOP/コンテキストテストは整合する保留例外を設定し、全フィールドを有効な状態で差分を隠さず比較します。ホストプロセスの FXRSTOR64/FXSAVE64 参照は両状態を検証し、バックエンドはホストの結果を入力メタデータで置き換えません。
共通の encodeX64XsaveState / decodeX64XsaveState が標準・圧縮 FP/SSE パケット、物理 TOP の回転、欠落成分の初期状態、アトミックな検証を所有します。WHP は完全な XSAVE API を使い、WHvGetVirtualProcessorState / WHvSetVirtualProcessorState を優先し、旧 XSAVE API を互換経路とします。旧式の個別 x87 レジスター転送は完全なパケットを代替できません。非初期状態の拡張成分、不正なヘッダー、制御値、切り詰められた取得結果は明示的に失敗します。WHP マッピングエラーは診断用に HRESULT、GPA、サイズを保持します。
CheckedX64Instructions.def は既存の CPU バックエンドで 8/16/32/64 ビットの符号なし MUL と CBW/CWDE/CDQE/CWD/CDQ/CQO を許可します。NeverDX64IntegerTests は独立した X64IntegerCases.def の命令列と期待値を使い、両特権レベルで部分レジスターの保持、32 ビットのゼロ拡張、積の上位・下位、定義された CF/OF、符号拡張によるフラグの不変性を検証します。通常 RAM の乗算はアクセス範囲全体の権限検査と読み取り観測を維持し、障害や観測コールバックによる停止では暗黙の出力レジスターと PC を保持します。デバイスオペランドは未対応です。checked Unicorn でも実行し、利用できないネイティブバックエンドは明示的にスキップします。
X64BitInstructions.def は 16/32/64 ビットのレジスタと通常 RAM の BT/BTS/BTR/BTC を許可します。レジスタのビット索引はオペランド幅の符号付き値としてワード全体を選択し、即値は基底ワード内に限定されます。アドレス幅による切り詰めは FS/GS 基底の加算より前に行います。CF と書き込み値はプロセッサが生成し、RAMTransaction は観測コールバックの承認まで結果を非公開に保ちます。全範囲の権限検査は独立したページ割り当てとエイリアスを対象とし、停止、コールバック失敗、アクセス拒否では元の CPU と RAM を保持します。LOCK は自然整列を要求し、変更型 MMIO は明示的な準備付きアトミックプロバイダーを要求します。X64BitStringTests.cpp は独立した符号化を x64 ホストの実行と比較し、負の索引、幅の切り詰め、ページ境界、キャンセル、不正な LOCK 形式を検証します。Intel 命令リファレンスを参照してください。
X64StringInstructions.def は通常 RAM の 8/16/32/64 ビット MOVS/STOS/LODS を管理し、CLD/STD は他のフラグを変えずに方向を制御します。REP は各要素の全範囲を観測前に検証し、再開可能な境界で確定します。後続の障害でも完了済み要素は残り、停止やコールバック例外は現在の要素を変更しません。FS/GS はアドレス幅の切り詰め後にソースだけへ加算します。AL/AX のロードは上位ビットを保持し、EAX はゼロ拡張します。32 ビットアドレスのゼロ回 REP はカウントの上位ビットがゼロである必要があり、MOVS/STOS では使用するアドレスレジスタも同様です。それ以外は実 CPU ごとに結果が異なります。MOVS/STOS/LODS の REPNE 形式と STOS/LODS のデバイス操作数は未対応です。X64StringTransferTests.cpp は独立したホスト命令で幅、方向、重なり、ゼロ回を照合し、権限、エイリアス、折り返し、障害、再開も検証します。独自の WDK リソースドライバは driver_resource_strings.def を使い STOS/LODS の全四幅を実行します。
X64StringInstructions.def は通常 RAM 上の 8/16/32/64 ビット CMPS/SCAS と REPE/REPNE も管理します。各要素は観測前に読み取り範囲全体を検証し、六つの算術フラグを更新して最初の終了条件で停止します。データ障害では、この連続した REP の開始時のフラグを復元し、完了済みのポインタとカウント更新は保持します。公開 API からの再開は公開済み CPU 状態を出発点とします。停止や観測例外は現在の要素を変更せず、早期終了後は次の要素を読みません。FS/GS は CMPS のソースだけに作用し、SCAS は累算器と未使用のソースレジスタを保持します。デバイス操作数と曖昧な 32 ビットゼロ回実行時の上位ビットは対象外です。X64StringComparisonTests.cpp は独立したホスト命令とフラグ、方向、エイリアス、折り返し、権限、再開を照合し、Linux x64 シグナルで実際の障害時レジスタも検証します。独自 WDK リソースドライバは driver_resource_strings.def で全四幅の両条件反復を実行します。Intel 命令リファレンスを参照してください。 Linux のネイティブ検証は最初の要素の実行前後の障害を対象とし、Intel の開始時 flags 復元と Hyper-V 上の AMD EPYC 7763 で観測された直前の比較 flags の保持を区別します(ネイティブ観測)。未知の CPU ベンダーは明示的に失敗します。checked ゲストは全バックエンドで開始時 flags を復元します。
存続中の WHP CPU は一つのネイティブパーティションを共有し、最終解放と再作成を同じレジストリロックで直列化します。WhpResourceCache.h は協調実行用 VP 0 を再利用し、論理 CPU の切り替え前にその VP とマッピングを破棄します。並列 CPU は専用 VP と GPA 領域を保持します。レジスター転送、XSAVE、キャンセルは各 VP を対象にします。x64 はホスト既定の XSAVE 機能セットを保持し、WHvGetPartitionProperty で実際の設定を検証します。既定のスケジューリングは協調式です。
CheckedBackend は CPU ごとに命令フェッチ用バッファと cs_disasm_iter の命令レコードを保持します。各ステップで実行権限のあるバイトを読み直して再デコードし、コード書き込み、エイリアス変更、再開後に古いデコード結果を使いません。実行リースは再利用領域に触れる前に再帰実行を拒否します。命令ごとの領域確保をなくしつつ、命令観測、システムサービスの捕捉、正確な障害処理を維持します。 固定版 Unicorn の単一ステップは間接変換検索も含めて後続命令のフェッチ前に終了し、内部のコード書き込み再試行を完了済み命令として数えません。
WhpX64Processor.h は仮想プロセッサーごとに x64 WHP のレジスタ再利用を管理します。固定パケットは WhpX64Registers.def と X64HostRegisters.def を使用し、成功した各ステップで汎用・制御・セグメントレジスタと完全な FP/SSE 状態を取得します。完了確認済みのデバッグ終了だけが未変更入力の省略を許可し、比較では予約ビットと共用体のパディングを無視します。CR3、CPL、TLS、汎用または FP 入力の変更は再設定され、部分失敗、キャンセル、例外は再利用を無効化します。VP 再作成時は全状態を設定します。命令の許可範囲を広げず、処理全体の高速化も主張しません。
WHP は WhpXsaveRegisters.def の x87/SSE メタデータを通常のレジスタと同じ WHvGetVirtualProcessorRegisters 呼び出しで取得します。停止中の vCPU は同じ区画リースで保護されます。公開前の完全な XSAVE 取得とすべてのメタデータ整合性検査は維持します。ステップごとのホスト API 呼び出しを一つ削減しますが、スループット向上の測定結果を示すものではありません。
CheckedAArch64Instructions.def と AArch64InstructionEffects は EL0/EL1 で範囲を限定した基本 FP32/FP64 演算、比較、転送、固定幅 SIMD を許可します。FPCR は4種類の丸め、FZ、DN に対応し、FPSR は累積状態と QC を保持します。未対応の制御・状態ビットは変更前に拒否します。FP16 演算、SVE/SME、非マスク例外、追加拡張、未列挙の形式は明示的なエラーです。Windows ARM64 ドライバーのロードや新しい OS 環境は追加しません。
AArch64InstructionEffects が最大128ビットの scalar/FP/SIMD 単一・ペア RAM 範囲を所有します。共有 address space は CPU entry 前に全ページを検証し、RAMTransaction は宣言された完全な物理書き込みのみを確定します。128ビット書き込みは実行前に二つの64ビット値として順序付きで観測されます。停止・fault は RAM、vector、writeback を保持します。Xn/Vn の番号重複は有効で、pair 範囲のアドレス wrap は拒否します。NeverDAArch64MemoryTests は独立した AArch64CrossPageCases.def と AArch64VectorMemoryCases.def を使用します。
KVM x64/ARM64 は KvmRunControl により同じ専用 vCPU worker で状態準備、KVM_RUN、状態取得を実行します。EINTR の再試行でも準備は一度で、取消や取得失敗は状態を公開しません。KvmAArch64Machine.cpp の変換維持と全スカラー・ベクトル転送も一つの step deadline を共有します。呼び出し側は完了確認後に確定し、ISA decode、RAM transaction、OS policy、observer は呼び出し側に残ります。native ARM64 の実機証拠は未取得です。
KVM は X64HostRegisters.def と X64FPState.def に従い、汎用レジスタと完全な FP/SSE 状態を直前に完了確認したデバッグ終了状態と比較し、変更された入力を再設定します。ホスト側の書き込みとコンテキスト復元も比較対象です。例外、キャンセル、失敗は再利用を無効にします。単一ステップの設定と実際の汎用・FP 状態の読み取りは各命令で行います。
x64 KVM は KVM_CAP_SYNC_REGS を照会し、対応する KVM_SYNC_X86_REGS と KVM_SYNC_X86_SREGS を個別に使用します。完了確認済みの KVM_RUN は共有領域に実際のレジスタを返すため、連続して成功するステップでは KVM_GET_REGS と KVM_GET_SREGS を省略できます。非対応の集合や任意の照会の失敗では ioctl 経路を維持します。変更された入力は引き続き KVM_SET_GUEST_DEBUG より前に設定し、共有 dirty ビットはゼロのままです。例外、キャンセル、取得失敗は再利用を無効にします。完全な FP/SSE 取得は必須ですが、変更のない FP 入力の XSAVE 再エンコードは省略します。転送呼び出しの削減であり、処理全体の高速化を実証したものではありません。KVM API。
ハードウェア実行だけでは、処理全体の待ち時間が短くなるとは限りません。現在のネイティブ実行は命令ごとに許可判定、観測、状態転送と VM 終了を行います。同じ元のイメージとシナリオを同じ命令・イベント予算で比較し、時間と結果の一致を併記してください。CLI の待ち時間には起動とロードも含めます。
checked Unicorn は MachineRunControl を使い、ARM64 の保守、ゲスト実行、完全な状態読み出しを一つのステップ時間枠で処理します。UC_HOOK_CODE は命令入口で借用した停止トークンと期限を確認します。同期エンジン呼び出しは戻る前に hook の借用を解除しますが、マシンステップは状態公開まで制御を保持します。Unicorn と WHP は完全な CPU 状態を一時保存し、成功したステップの公開直前に同じ制御を確認します。WHP は準備前に時間枠を一度だけ作ります。確認済みの x64 CPU 例外は読み出し中の停止要求に優先します。読み出しが中止されると checked RAM トランザクションは投機的な書き込みを破棄し、非制限ソフトウェア契約は変わりません。 MachineInterruptedError は確認済みの中止をホストや状態読み出しの失敗と区別します。共通 checked CPU は Stopped または Deadline を返し、CPU/RAM を保持して再試行を許可します。同時に停止要求があっても実際の失敗は BackendFailure のままです。
RunDeadline::invoke は WHP の停止済み・期限切れの実行をホスト呼び出し前に拒否し、キャンセル中も実際のホスト結果を保持し、借用した停止トークンを解放する前に割り込みコールバックの完了を確認します。KVM と WHP は、完全に取得した非公開状態を実行リースの所有スレッドで検証してから、同時に到着した停止や期限を分類します。実際のホスト・取得エラーと認証済み x64 CPU 例外が優先されます。通常の成功状態はキャンセル確認が終わるまで公開せず、確認済みの中断では投機的な CPU/RAM 効果を破棄して再試行を許可します。準備、ネイティブ実行、状態取得には単一のステップ猶予を使います。協調キャンセルを提供しますが、厳密な実時間上限は保証しません。
hvf · Hypervisor.framework · Apple Silicon → ARM64 · Intel Mac → x86-64.
Setup, signing and native hardware validation (English)
checked ARM64 は 8/16/32/64 ビットの LDXR/STXR、32/64 ビットのレジスタ対 LDXP/STXP、acquire/release 形式、CLREX をサポートします。KVM、WHP、checked Unicorn は ISA 層の排他モニターを共有し、16 バイトの物理範囲で予約を管理します。転送層のシングルステップ終了でループの進行を妨げません。同じ値の書き込みも、エイリアスや保持ビューを含め、コミット時に予約を無効化します。停止は未公開状態を保ち、スナップショットは途中の書き込みを取り消せません。checked 排他命令は FEAT_LSE2 の整列規則を使います。16 バイト境界内の非整列アクセスは実行でき、境界を越えると alignment 障害になります。同じ幅の条件付きストアは予約された物理粒度で照合します。予約が失効していても、条件付きストアの判定前に整列と権限を検査します。排他命令は引き続き通常 RAM のみを対象とします。 ARM64 Unicorn の Software 契約もこのモニターを使用し、ソフトウェア CPU と checked CPU が物理 RAM を共有する場合にも対応します。 Unicorn の Software 契約はエンジンの自然整列モデルを維持します。
同じ ISA 層は FEAT_LSE の CAS/CASP、SWP、LDADD/LDCLR/LDEOR/LDSET、符号付き・符号なし min/max を、バイト・半語・語・倍語および acquire/release 形式でサポートします。checked は上記の整列方針を、Unicorn Software は自然整列を使います。比較はオペランド幅に従い、返す旧値はゼロ拡張します。CAS の比較失敗でも書き込み権限を確認し、Arm が認める旧値の書き戻しを選択して物理予約を無効化します。コールバックはコミット前の CPU/RAM を参照し、取消しや同期障害で部分結果を公開しません。並列 CPU と MMIO アトミックの確定は並行確定の契約に従います。MRS/MSR NZCV は予約ビットとゼロレジスタの規則に従い、4 個の条件フラグを転送します。 読み取り権限を先に検査します。読み取り不可なら読み取り障害、読み取り専用なら書き込み障害となり、元の Windows ARM64 観測と一致します。
CPU0 の明示的プリエンプション、仮想時計と制約はドライバースケジューリングを参照してください。