
プロセッサに特定の機能があるかどうかはどうすればわかりますか? (64ビット命令セット、ハードウェアサポート仮想化、暗号化アクセラレータなど)ファイルの/proc/cpuinfo
行にこの情報があることを知っていますが、flags
これらすべての不思議な略語はどういう意味ですか?
たとえば、次の抜粋によれば、/proc/cpuinfo
64ビットCPUはありますか?ハードウェア仮想化はありますか?
model name : Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
…
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm tpr_shadow vnmi flexpriority
答え1
x86
(32 ビット、つまり i386–i686、64 ビット、つまり amd64。つまり、ワークステーション、ノートブック、またはサーバーです。)
よくある質問:私には…
- 64ビット(x86_64/AMD64/Intel64)?
lm
- ハードウェア仮想化(VMX/AMD-V)?
vmx
(インテル),svm
(AMD) - 加速AES(AES-NI)?
aes
- TXT(TPM)?
smx
- ハイパーバイザー(だから発表された)?
hypervisor
他のほとんどの機能は、コンパイラやカーネル作成者にのみ興味があります。
すべてのフラグ
完全なリストはカーネルソースコードファイルにあります。arch/x86/include/asm/cpufeatures.h
。
Intelで定義したCPU機能、CPUIDレベル0x00000001(edx)
また、見ることができますウィキペディア表2-27インテル Advanced Vector Extension プログラミングリファレンス
fpu
: 搭乗中浮動小数点単位(浮動小数点サポート)vme
:仮想8086モードの拡張de
:デバッグ拡張(CR4.DE)pse
:ページサイズの拡張(4MBメモリページ)tsc
:タイムスタンプカウンター(RDTSC)msr
:モデル別レジスタ(RDMSR、WRMSR)pae
:物理アドレス拡張(4GB以上のメモリをサポート)mce
:機械検査例外cx8
:CMPXCHG8 コマンド(64ビット比較して交換する)apic
: 搭乗中APICsep
:システムセンター/システムシャットダウンmtrr
:メモリタイプ範囲レジスタpge
:ページ全体を有効にする(PDEとPTEのグローバルビット)mca
:マシンチェックアーキテクチャcmov
:CMOVコマンド(条件付移動)(またFCMOV)pat
:ページ属性テーブルpse36
:36ビットPSE(大きなページ)pn
:プロセッサのシリアル番号clflush
:キャッシュラインフラッシュガイドラインdts
:デバッグストア(デバッグおよびプロファイリングガイドライン用のバッファ)acpi
:ACPIMSR(温度監視とクロック速度変調)を介してmmx
:マルチメディア拡張fxsr
:FXSAVE/FXRSTOR、CR4.OSFXSRsse
:インテルSSEベクトル命令sse2
:上海証券取引所2ss
:CPU自体探偵ht
:ハイパースレッディングおよび/またはマルチコアtm
:自動時計制御(熱モニタ)ia64
:インテルアイテニアムアーキテクチャx86-64
64ビット(フラグ付きのIntel 64ビットx86アーキテクチャまたはフラグとしてマークされた「AMD64」ビットと混同しないでくださいlm
)pbe
:保留中の割り込みが有効(PBE#ピン)ウェイクアップサポート
AMDで定義されたCPU特性、CPUIDレベル0x80000001
また、見ることができますウィキペディア表2-23インテル Advanced Vector Extension プログラミングリファレンス
syscall
:システムコール(高速システムコール)と姉妹(高速システムコールから復帰)mp
:多重処理有能な。nx
:実行を無効にするmmxext
:AMD MMX拡張fxsr_opt
:FXSAVE/FXRSTOR最適化pdpe1gb
:1GBページ(許可するhugepagesz=1G
)rdtscp
:タイムスタンプカウンタとプロセッサIDを読むlm
:長距離モード(x86-64:amd64(64ビットをサポートするIntel 64とも呼ばれる)3dnowext
:今AMD 3Dに会いましょう!拡大する3dnow
:今3Dで!(インテルのSSE1と競合するAMDベクトル命令)
Transmetaで定義されたCPU特性、CPUIDレベル0x80860001
recovery
:CPUが回復モードになっています。longrun
:長期電力制御lrti
:LongRunテーブルインタフェース
その他の機能、Linux定義マッピング
cxmmx
: Cyrix MMX 拡張k6_mtrr
:AMD K6非標準MTRRcyrix_arr
:サイリックスARR(=MTRR)centaur_mcr
: センタウリMCR(=MTRR)constant_tsc
:TSCが一定の速度でティックします。up
:SMPカーネルはUPで実行されます。art
: 常に実行されるタイマーarch_perfmon
: Intel アーキテクチャ PerfMonpebs
: 正確なイベントベースのサンプリングbts
: 支店追跡店rep_good
:マイクロコードが非常にうまく機能していることを示します。acc_power
:AMD電力蓄積メカニズムnopl
:NOPL(0F 1F)コマンドxtopology
: CPU トポロジ列挙拡張tsc_reliable
:TSC信頼できると知られているnonstop_tsc
:TSCC状態で止まらないでくださいcpuid
:CPU自体にはCPUID命令があります。extd_apicid
:拡張APICIDを含む(8ビット)amd_dcm
:マルチノードプロセッサaperfmperf
:APERFMPERFeagerfpu
: 非遅延FPUリカバリnonstop_tsc_s3
:TSCS3状態で停止しないtsc_known_freq
:TSC既知の周波数mce_recovery
:CPUには回復可能なマシンチェック機能があります。
Intel 定義 CPU 特性、CPUID レベル 0x00000001(ecx)
また、見ることができますウィキペディア表2-26インテル Advanced Vector Extension プログラミングリファレンス
pni
:SSE-3(「プレスコット新しいディレクティブ")pclmulqdq
:4ワードキャリーレス乗算を実行します。 ガイドライン- アクセラレータガスクロマトグラフィー)dtes64
:64ビットデバッグ保存monitor
:モニター/Mwaitサポート(インテルSSE3サプリメント)ds_cpl
:CPL資格。デバッグを保存vmx
:ハードウェア仮想化:インテル仮想MXsmx
:より安全なモード:txt(完全な生産管理サポートする)est
:強化速度ステップtm2
:サーマルモニタ2ssse3
:補足SSE-3cid
:コンテキストIDsdbg
: シリコンデバッグfma
:乗算と融合の追加cx16
:CMPXCHG16Bxtpr
:作業優先順位メッセージを送信するpdcm
:性能能力pcid
: プロセスコンテキスト識別子dca
:直接キャッシュアクセスsse4_1
:SSE-4.1sse4_2
:SSE-4.2x2apic
:x2APICmovbe
:バイト交換後のデータ移動ガイドラインpopcnt
:1 に設定された桁数を返します。 ガイドライン(ハミングウェイト、つまり桁数)tsc_deadline_timer
: Tsc 有効期限タイマーaes
/aes-ni
:高度な暗号化標準(新しいガイドライン)xsave
:プロセッサ拡張状態の保存:も可能XGETBY、XRSTOR、XSETBYavx
:高度なベクトル拡張f16c
:16ビットfp変換(連続可変速度16)rdrand
:乱数を読むハードウェア乱数ジェネレータでガイドラインhypervisor
: 動作中管理プログラム
VIA/Cyrix/Centaur、CPUIDレベル0xC0000001で定義されたCPU属性
rng
:乱数ジェネレータ今(xstore)rng_en
:乱数ジェネレータ有効ace
:CPU暗号化(xcrypt)ace_en
: CPU 内暗号化の有効化ace2
: 高度な暗号化エンジン v2ace2_en
: ACE v2 の有効化phe
: PadLockハッシュエンジンphe_en
:板状熱交換器の活性化pmm
:ロックモンゴメリー乗数pmm_en
:PMMが有効
より拡張されたAMDフラグ:CPUIDレベル0x80000001、ecx
lahf_lm
:ロングモードでは、フラグ(LAHF)からAHをロードし、フラグ(SAHF)にAHを保存します。cmp_legacy
:そうであれば、ハイパースレッディングは無効です。svm
:"セキュリティ仮想マシン":AMD-Vextapic
: APIC 空間拡張cr8_legacy
:32ビットモードのCR8abm
:高度なビット操作sse4a
:SSE-4Amisalignsse
:誤ってソートされたデータに対して機能しているときに、特定のレガシーSSE命令が一般保護例外(#GP)を生成するかどうかを示します。また、CR0とソートチェックビットによって異なります。3dnowprefetch
:3DNowプリフェッチガイドラインosvw
:表現するオペレーティングシステムに表示される回避策これにより、オペレーティングシステムはプロセッサエラーを解決できます。ibs
:命令ベースのサンプリングxop
:拡張AVXガイドラインskinit
:SKINIT/STGI説明wdt
:監視タイマーlwp
:軽量分析fma4
:4-オペランドMAC命令tce
: 翻訳キャッシュの拡張nodeid_msr
:ノードID MSRtbm
:末尾ビット演算topoext
:トポロジ拡張CPUIDリーフperfctr_core
:核性能カウンター拡張perfctr_nb
: NB パフォーマンスカウンター拡張bpext
:データブレークポイントの拡張ptsc
:パフォーマンスタイムスタンプカウンターperfctr_l2
:L2パフォーマンスカウンター拡張mwaitx
:MWAIT
拡張する(MONITORX
/MWAITX
)
補助フラグ:Linux定義 - さまざまなCPUIDレベルに分散された機能
ring3mwait
:リング3モニター/スタンバイcpuid_fault
:Intel CPUIDエラーcpb
: AMDコアの性能向上epb
:IA32_ENERGY_PERF_BIASのサポートcat_l3
: L3キャッシュ割り当て技術cat_l2
: L2キャッシュ割り当て技術cdp_l3
:コードとデータ優先順位L3invpcid_single
:効果的invpcid
にCR4.PCIDE=1
hw_pstate
:AMD HW-Pステータスproc_feedback
:AMD ProcFeedbackインターフェースsme
:AMDセキュアメモリ暗号化pti
:カーネルページテーブルの分離(シーザー)retpoline
:ライトボリン簡単幽霊変形2(間接分岐)retpoline_amd
:AMDレトポリン緩和intel_ppin
:インテルプロセッサー在庫番号avx512_4vnniw
: AVX-512ニューラルネットワークガイドラインavx512_4fmaps
:AVX-512乗算 - 累算単精度mba
: メモリ帯域幅の割り当てrsb_ctxsw
: コンテキストスイッチでRSBを埋める
仮想化フラグ:Linux定義
tpr_shadow
:インテルTPRシャドウvnmi
: Intel 仮想 NMIflexpriority
: Intel FlexPriorityept
:インテル拡張ページテーブルvpid
: Intel 仮想プロセッサ IDvmmcall
:VMMCALL
好むVMCALL
Intel 定義 CPU 機能、CPUID レベル 0x00000007:0(ebx)
fsgsbase
:{RD/WR}{FS/GS}BASE コマンドtsc_adjust
:TSCはMSRを調整します。bmi1
: 最初のビット演算拡張セットhle
:ハードウェアロックの取り外しavx2
:AVX2 ガイドラインsmep
: スーパーバイザモード実行保護bmi2
: ビット演算拡張の 2 番目のグループerms
:拡張REP MOVSB / STOSBinvpcid
:プロセッサコンテキストIDを無効にします。rtm
: 限られたトランザクションメモリcqm
: キャッシュ QoS モニタリングmpx
: メモリ保護拡張rdt_a
: リソースディレクター技術の構成avx512f
:AVX-512基本avx512dq
:AVX-512デュアル/クワッド命令rdseed
:RDSEEDコマンドadx
:ADCXおよびADOX命令smap
: 管理者モードのアクセス防止avx512ifma
:AVX-512 整数融合乗算および加算命令clflushopt
:CLFLUSHOPT
ガイドラインclwb
:CLWB
ガイドラインintel_pt
:インテルプロセッサートレースavx512pf
:AVX-512プリフェッチavx512er
:AVX-512指数と逆数avx512cd
:AVX-512衝突検出sha_ni
:SHA1/SHA256 コマンド拡張avx512bw
:AVX-512バイト/ワード命令avx512vl
: AVX-512 128/256 ベクトル長拡張
拡張ステータス機能、CPUIDレベル0x0000000d:1(eax)
xsaveopt
: 最適化XSAVE
xsavec
:XSAVEC
xgetbv1
:XGETBV
ECX = 1xsaves
:XSAVES
/XRSTORS
Intel 定義 CPU QoS サブリーフ、CPUID レベル 0x0000000F:0(edx)
cqm_llc
:有限責任会社サービス品質
Intel 定義 CPU QoS サブリーフ、CPUID レベル 0x0000000F:1(edx)
cqm_occup_llc
: LLC占有モニタリングcqm_mbm_total
: LLC フル MBM モニタリングcqm_mbm_local
: LLCローカルMBMモニタリング
AMD定義CPU機能、CPUIDレベル0x80000008(ebx)
clzero
:CLZERO
ガイドラインirperf
:廃棄性能カウンタを示します。xsaveerptr
:常にFPエラーポインタの保存/復元
熱および電力管理リーフ、CPUIDレベル0x00000006(eax)
dtherm
(前dts
):デジタルサーマルセンサーida
:インテル動的加速arat
:常にAPICタイマーの実行pln
:インテル電力制限のお知らせpts
:インテルパッケージの熱状態hwp
: Intel ハードウェア P ステータスhwp_notify
:HWP通知hwp_act_window
:HWPアクティブウィンドウhwp_epp
:HWPエネルギー性能の好みhwp_pkg_req
:HWPパッケージレベル要求
AMD SVM機能識別、CPUIDレベル0x8000000a(edx)
npt
: AMDネストしたページテーブルのサポートlbrv
: AMD LBR仮想化サポートsvm_lock
:AMD SVMロックされたMSRnrip_save
:AMD SVM next_ripを保存tsc_scale
: AMD TSCスケーリングサポートvmcb_clean
:AMD VMCBクリーンビットサポートflushbyasid
: ASID による AMD リフレッシュのサポートdecodeassists
: AMDデコードサポートのサポートpausefilter
:AMDフィルタリングの一時停止をブロックpfthreshold
:AMD一時停止フィルタしきい値avic
:仮想割り込みコントローラvmsave_vmload
:仮想VMSAVE VMLOADvgif
: 仮想GIF
Intelで定義したCPU機能、CPUIDレベル0x00000007:0(ecx)
avx512vbmi
: AVX512ベクトルビット演算命令umip
:ユーザーモードコマンド保護pku
: ユーザー空間保護キーospke
: オペレーティングシステム保護キーが有効になっています。avx512_vbmi2
: 追加 AVX512 ベクトルビット演算命令gfni
: ガロアフィールドの新しい命令vaes
: ベクトル AESvpclmulqdq
: キャリプリ乗算ダブルクワッドワードavx512_vnni
: ベクトルニューラルネットワークガイドラインavx512_bitalg
:VPOPCNT[B,W]およびVPSHUF-BITQMB命令avx512_vpopcntdq
:DW/QWベクトルのPOPCNTla57
: レベル 5 ページテーブルrdpid
:RDPIDコマンド
AMD定義CPU機能、CPUIDレベル0x80000007(ebx)
overflow_recov
:MCA オーバーフロー回復サポートsuccor
: 修正不可能なエラー抑制と回復smca
: 拡張可能な MCA
CPUエラー検出(Linux定義)
f00f
:インテルF00Ffdiv
:CPUFDIVcoma
:サイリックス6x86コマamd_tlb_mmatch
:tlb_mmatch
AMD正誤表383amd_apic_c1e
:apic_c1e
AMD正誤表40011ap
:無効なローカルAPIC(別名11AP)fxsave_leak
:FXSAVEからFOP / FIP / FOP流出clflush_monitor
:MONITORの前にAAI65とCLFLUSHが必要です。sysret_ss_attrs
:SYSRETはSS属性を回復できません。espfix
: "" IRETから16ビットSSへのESP / RSP上位ビットの破損null_seg
:セレクタをクリアするとベースが保存されます。swapgs_fence
:SWAPGSはGS入力に依存しません。monitor
:リモートCPUを起動するにはIPIが必要です。amd_e400
:Eratum 400の影響を受けるCPUcpu_meltdown
:CPUが影響を受ける衝突攻撃カーネルページテーブルの分離が必要です。spectre_v1
:CPUが影響を受ける幽霊条件付分岐を用いた変種1攻撃spectre_v2
:CPUが影響を受ける幽霊間接分岐を用いた変種2攻撃spec_store_bypass
:影響を受けるCPU投機店バイパス脆弱性(スペクター変種4)。
arch/x86/include/asm/cpufeatures.h
PSこのリストはカーネルソースコードから派生しています。フラグはソースコードと同じ順序でリストされます。機能が欠落している場合は、機能の説明へのリンクを追加し、名前があいまいな機能の簡単な説明を作成し、新しいカーネルバージョンのリストを更新して助けてください。現在のリストのソースは次のとおりです。Linux 4.15さらに、後で追加された内容もあります。
答え2
腕
ARMプロセッサの場合、この行ではいくつかの機能について説明しますfeatures:
。チップメーカーやシステムオンチップ固有の機能ではなく、ARMアーキテクチャに直接関連する機能のみが言及されています。
これらの特性は、CPU IDを照会することによって得られます。read_cpuid()
そして検索してみてくださいプロセッサタイプの定義機能がマスクとして表示されるコンパイル時に知られていますHWCAP_xxx
バナー。その文字列はhwcap_str
待機中setup.c
。
以下のリストでは、ARMv6はSIMD命令とデータ型を導入しました。 ARMv7は高度なSIMD命令とデータ型を提供します。 32ビットARMシステムではneon
高度なSIMDを表し、asimd
64ビットARMシステムでは高度なSIMDを表します。
swp
:SWP
ガイドライン(アトミック読み取り - 修正 - 書き込み)half
:ハーフワードのロードと保存thumb
:無知(16ビット命令セット)26bit
:「26ビット」モデル(プロセッサステータスレジスタがプログラムカウンタにマージされています)fastmult
:32×32→64ビット乗算fpa
:浮動小数点加速器vfp
:VFP(早いシングルコマンドマルチデータストリームベクトル浮動小数点命令)edsp
:DSP拡張(ARM9 CPUの「e」バリアントと上記の他のすべてのCPU)java
:ジャーゼル(Javaバイトコードアクセラレータ)iwmmxt
:シングルコマンドマルチデータストリーム指示するインテルMMXに似ていますcrunch
:ユニークな緊縮セカンダリプロセッサ(カーネルサポートが有効な場合)thumbee
:親指の電子版neon
:高度なSIMD/NEON(asimd
以前の AArch64 カーネルから)vfpv3
:VFPバージョン3vfpv3d16
:16個のDレジスタを持つVFPバージョン3tls
:トランスポート層セキュリティプロトコル登録するvfpv4
: 高速コンテキスト切り替え機能を備えたVFPバージョン4idiva
:SDIV
およびUDIV
ARMモードのハードウェア分割idivt
:SDIV
とUDIV
Thumb モードのハードウェア分割vfpd32
:32個のDレジスタを備えたVFPlpae
:大規模な物理アドレス拡張(32ビットアーキテクチャで> 4GBの物理メモリ)evtstrm
: 共通アーキテクチャタイマーを使用したカーネルイベントのストリーミングaes
:ハードウェアアクセラレーションAES(秘密鍵暗号化)pmull{2}
:64×64→128ビットF 2m乗算- 認証と暗号化を加速するGCMモードsha1
:ハードウェアアクセラレーションSHA-1sha2
:ハードウェアアクセラレーションSHA-256sha512
:ハードウェアアクセラレーションSHA-512sha3
:ハードウェアアクセラレーションSHA-3sm3
:ハードウェアアクセラレーションSM3sm4
:ハードウェアアクセラレーションSM4crc32
:ハードウェアアクセラレーションCRC-32
とりわけ、このHardware:
行はプロセッサモデルを表します。モデルによっては、起動時にカーネルログメッセージ/proc
の下にある他のファイルまたは/sys
カーネルログメッセージに追加情報が含まれる場合があります。残念ながら、各ARM CPUメーカーには、プロセッサ機能(存在する場合)を報告する独自の方法があります。
答え3
x86
4.1.3 x86およびIntelのマニュアルで直接参照してください。
arch/x86/include/asm/cpufeature.h
完全なリストが含まれています。
定義された値の種類は次のとおりです。
X*32 + Y
たとえば、
#define X86_FEATURE_FPU ( 0*32+ 0) /* Onboard FPU */
CPUIDから抽出された機能フラグは、次の場所に保存されます。
__u32 x86_capability[NCAPINTS + NBUGINTS];
大地- ~の
struct cpuinfo_x86 boot_cpu_data
- で定義
x86/kernel/setup.c
関数によって初期化されます__init
。
各x86_capability
配列要素のソースはどこですか?
| index | eax | ecx | output | file |
|-------|----------|-----|--------|-------------|
| 0 | 1 | 0 | edx | common.c |
| 1 | 80000001 | | edx | common.c |
| 2 | 80860001 | | edx | transmeta.c |
| 3 | | | | |
| 4 | 1 | 0 | ecx | common.c |
| 5 | C0000001 | | edx | centaur.c |
| 6 | 80000001 | | ecx | common.c |
| 7 | | | | scattered.c |
| 8 | | | | |
| 9 | 7 | 0 | ebx | common.c |
| 10 | D | 1 | eax | common.c |
| 11 | F | 0 | edx | common.c |
| 12 | F | 1 | edx | common.c |
メモ:
- 空の項目は、「別の場所で」または「使用できない」を意味します。
index
:はインデックスですx86_capability
。例:x86_capability[0]
eax
およびexc
:は16進CPUIDの入力値です。入力を少なく使用してexc
呼び出されます。子葉eax
(根の2階の木)。output
:CPUID出力を取得するレジスタです。file
: はこれらのフィールドを定義するファイルです。パスは相対的ですarch/x86/kernel/cpu/
。transmeta
:CPUベンダーの名前。https://en.wikipedia.org/wiki/Transmetaノバポラに買収https://www.crunchbase.com/organization/novaforacentaur
:CPUベンダーの名前。https://en.wikipedia.org/wiki/Centaur_TechnologyVIAに買収https://en.wikipedia.org/wiki/VIA_Technologies。シリックスは別の人でした。
結論として:
common.c
ほとんどの項目はCPUID出力レジスタから直接出て、次のように設定されます。c->x86_capability[0] = edx;
これは、IntelのCPUIDマニュアルで簡単に見つけることができます。
他のものはソースコード全体に散在しており、ビット単位で設定されています
set_cpu_cap
。これを見つけるには
git grep X86_FEATURE_XXX
insideを使用してくださいarch/x86
。通常、周辺コードから対応するCPUIDビットを推論できます。
その他の興味深い事実
フラグは実際に
arch/x86/kernel/cpu/proc.c
コードで印刷されます。seq_puts(m, "flags\t\t:"); for (i = 0; i < 32*NCAPINTS; i++) if (cpu_has(c, i) && x86_cap_flags[i] != NULL) seq_printf(m, " %s", x86_cap_flags[i]);
どこ:
cpu_has
主にこの機能を確認してください。x86_cap_flags[i]
各フラグに対応する文字列を含みます。
proc
これはシステム設定にコールバックとして渡されます。エントリポイントはにありますfs/proc/cpuinfo.c
。x86_cap_flags
文字列は「解析」によってarch/x86/kernel/cpu/mkcapflags.h
直接生成されます。arch/x86/include/asm/cpufeature.h
sed
出力はビルドディレクトリに移動し
arch/x86/kernel/cpu/capflags.c
、結果の配列は次のようになります。const char * const x86_cap_flags[NCAPINTS*32] = { [X86_FEATURE_FPU] = "fpu", [X86_FEATURE_VME] = "vme",
たとえば、対応する
X86_FEATURE_FPU
文字列"fpu"
などがあります。cpu_has
コードは2つの状況に分けられます。#define cpu_has(c, bit) \ (__builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit) ? 1 : \ test_cpu_cap(c, bit))
彼らは:
__builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit)
:このフラグはカーネル操作に必要です。これは、次の説明を含む内部データによって決まります
required-features.h
。Define minimum CPUID feature set for kernel These bits are checked really early to actually display a visible error message before the kernel dies. Make sure to assign features to the proper mask!
これらはコンパイル時(カーネル要件)に知られており、起動時にすでに確認されているため、コンパイル時に既知の
bit
場合はコンパイル時に確認を解決できます。したがって、コンパイル時定数であることを
__builtin_constant_p(bit)
確認してください。bit
test_cpu_cap
CPUID
:世界中のデータを消費します。struct cpuinfo_x86 boot_cpu_data
答え4
@Gillesの最高の答えに触発され、現在のCPUフラグにコメントを追加するbashスクリプト(bash v4以降、ネットワーク接続、および最近のwgetが必要)は次のとおりです。
#! /bin/bash
CPUFEATURES="$(wget -qO- "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/plain/arch/x86/include/asm/cpufeatures.h")"
grep "^flags" /proc/cpuinfo |
uniq |
sed 's/^.*: //' |
tr ' ' '\n' |
while read line; do
echo -n "${line}: "
echo "$CPUFEATURES" |
grep "FEATURE_${line^^}" |
sed 's|.*) /\* ||' |
sed 's| \*/$||'
done