CLFLUSHOPT
Flush 缓存线优化
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
NFx 66 0F AE /7 | CLFLUSHOPT m8 | M | 有效 | 有效 | 含有 m8 的 Flushes 缓存行 。 |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
M
modrm.rmescrituraModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移
实测开销
正在从 arch-data 加载实测数据...
说明
将缓存一致性域中缓存层次的每一个级别,包含内存操作数指定线性地址的缓存行无效. 如果该缓存行包含缓存层次中任何级别的修改数据,则该数据会被写回内存. 源操作数是一个字节内存位置.
CLFLUSHOPT的可用性表现为CPUID特征旗CLFLUSHOPT(CPUID.07H.00H:EBX[23])的存在. 受影响的对齐缓存行大小也用CPUID.01H:EBX[15:8]中的值表示.
包含受影响行的页面的内存属性对本指令的行为没有影响. 应当指出的是,处理器可以自由地从系统内存区域以投机方式获取和缓存数据,指定一种内存类型,允许进行投机读取(如WB、WC和WT内存类型)。 PREFETCHh 指令可用于为处理器提供这种投机行为的提示. 由于这种投机性抓取可以随时发生,并且不与指令执行捆绑,CLFLUSH指令没有针对PREFETCHh指令或任何投机性抓取机制(即数据可以在CLFLUSH指令执行之前,期间或执行之后被投机性地加载到缓存行中,引用缓存行)的命令.
CLFLUSHOPT指令的执行命令涉及栅栏指示和锁定的重新修改-写入指示;对于向缓存行无效的旧写,也命令执行。 对CLFLUSHOPT的其他处决,对CLFLUSH和CLWB的处决,或对小于被撤销的缓存行的书写,都没有下达命令。 软件可以使用SFENCE指令命令执行CLFLUSHOPT相对于其中一项操作.
CLFLUSHOPT指令可以在所有特权级别使用,并受所有权限检查和与字节负载相关的断层(此外,CLFLUSHOPT指令允许在只执行部分中冲出线性地址). 像负载一样,CLFLUSHOPT指令设置了页面表格中的A位而不是D位.
在一些执行中,CLFLUSHOPT指令可能总是用交易同步扩展(TSX)导致交易中止. CLFLUSHOPT指令预计不会在典型的交易区域内被普遍使用. 然而,程序员不得依赖CLFLUSHOPT指令强制交易中止,因为他们是否导致交易中止取决于执行.
CLFLUSHOPT操作在非64位模式和64位模式中是相同的.
行动
Flush_Cache_Line_Optimized(SRC);Intel C/C++ 内在编译器
CLFLUSHOPT void _mm_clflushopt(void const *p);异常
保护模式
#GP(0) | 对于非法的内存操作数在CS,DS,ES,FS或GS部分的有效地址. |
#SS(0) | 用于在党卫军部分的一个非法地址. #PF(fault-code) for a 页面错误. |
#UD | 如果 CPUID.07H.00H: EBX.CLFLUSHOPT[23] = 0. 如果使用 LOCK 前缀,如果使用指令前缀 F2H 或 F3H 。 |
实地址模式
#GP | 如果操作数的任何部分位于有效地址空间之外,从0到FFFFH. |
#UD | 如果 CPUID.07H.00H: EBX.CLFLUSHOPT[23] = 0. 如果使用 LOCK 前缀,如果使用指令前缀 F2H 或 F3H 。 |
虚拟 8086 模式
| 与真实地址模式相同的例外 。 |
兼容模式
| 与保护模式中的例外相同. |
64 位模式
#SS(0) | 如果引用SS部分的内存地址是非冠状的. |
#GP(0) | 如果内存地址为非冠状形式. #PF(fault-code) for a 页面错误. |
#UD | 如果 CPUID.07H.00H: EBX.CLFLUSHOPT[23] = 0. 如果使用 LOCK 前缀,如果使用指令前缀 F2H 或 F3H 。 |