CLFLUSH - 快取線清除

操作碼

指令

說明

0F AE /7

CLFLUSH m8

清除包含 m8 的快取線。

說明

在處理器快取層次結構(數據與指令)的所有級別中,使包含源運算元指定的線性地址的快取線失效。失效會在整個快取一致性域中傳播。如果快取層次結構中任何級別的快取線與記憶體不一致(污損),則在使之失效之前將它寫入記憶體。源運算元是位元組記憶體位置。

CLFLUSH 可用與否取決於 CPUID 功能標誌 CLFSH 是否存在(請參閱 CPUID - CPU 標識)。受影響的對齊快取線大小也使用 CPUID 指令指明。

包含受影響的快取線的頁的記憶體屬性對這條指令的行為沒有任何影響。應該注意的是,對於指定為允許推測性讀取的記憶體型別(即 WB、WC 及 WT 記憶體型別)的系統記憶體區域,處理器可以隨意憑推測從該區域獲取與快取數據。“數據流單指令多數據擴充套件指令集”PREFETCHh 指令被視作此推測行為的提示。由於此推測性獲取隨時可能發生,並且與指令執行沒有聯繫,因此確定 CLFLUSH 的順序時,不考慮 PREFETCHh 或任何推測性獲取機制(也就是說,可以憑推測在執行 CLFLUSH 之前、當中或之後將數據載入到快取線)。

CLFLUSH 的順序僅根據 MFENCE 指令確定。確定它的順序時不保證會考慮其它任何邊界隔離、序列化或其它 CLFLUSH 指令。例如,軟體可以使用 MFENCE 指令確保先前的儲存指令都包含在寫回中。

CLFLUSH 指令可以在所有的特權級別使用,需要進行所有的許可權檢查,並可能發生同位元組載入關聯的所有錯誤(在僅限執行的段上使用 CLFLUSH 時除外)。與載入一樣,CLFLUSH 指令設定頁表中的 A 位而不是 D 位。

操作

Flush_Cache_Line(SRC)

英特爾(R) C++ 編譯器等價內部函式

CLFLUSH void_mm_clflush(void const *p)

保護模式異常

#GP(0) - CS、DS、ES、FS 或 GS 段中的記憶體運算元有效地址非法。

#SS(0) - SS 段中的地址非法。

#PF(錯誤程式碼) - 頁錯誤。

#UD - 如果 CPUID 功能標誌 CLFSH 為 0。

實地址模式異常

中斷 13 - 如果運算元的任何部分出現在從 0 到 0FFFFH 的有效地址空間之外。

#UD - 如果 CPUID 功能標誌 CLFSH 是 0。如果 CPUID 功能標誌 SSE2 是 0。

虛 8086 模式異常

與“實地址模式”中的異常相同。

#PF(錯誤程式碼) - 頁錯誤。