LDTILECFG
装入图纸配置
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
VEX.128.NP.0F38.W0 49 !(11):000:bbb | LDTILECFG m512 | A | 有效 | 不可编码 | 装入 m512 指定的瓦片配置 。 |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
A
modrm.rmlecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移
实测开销
正在从 arch-data 加载实测数据...
说明
LDTILECFG指令取一个包含指针的操作数到一个64字节的内存位置,包含要支持的瓷砖的描述. 为了配置瓷砖,必须设置 CPUID 中的 AMQTILE 位,操作系统必须启用瓷砖架构 。
内存区域包含调色板,并描述使用多少瓷砖,并用行和列字节定义每个瓷砖. 请求必须符合CPUID提供的限制;见下文表3-56。
字节名称表 3-56. 内存区域布局 0 调色板 描述 1 start row 调色板选择将使用的瓦片所支持的配置 。 2-15 保留, 必须是 0 start row 用于存储中断操作的重启值 。 16-17 tyle0. colsb 18-19 tyle1. colsb 拖动 0 字节/ 行. 20-21 tyle2. colsb Tile 1 字节/行. (顺序继续)每行2号平面图 30-31号平面图 32-47 保留,每行必须0号平面图 7号平面图 48号平面图 48号平面图 49号平面图 1号平面图 50号平面图 2号平面图... (顺序继续) 平面2排55瓦7. 平面56-63排预留,必须是零平面7排.
如果不使用瓦片行和列对来指定瓦片参数,它们必须具有数值0. 所有已启用的瓦片( 基于调色板) 必须配置 。 指定比执行限制或调色板限制多的瓦片参数导致#GP断层。
如果调色板 id为零,则表示INIT状态,既表示TILECFG,也表示TILEDATA. INIT州境内的提列斯被清零. 调色板 id的唯一合法非INIT值为1.
在 Intel TSX 交易中执行 LDTILECFG 指令的任何尝试都会导致交易中止.
行动
LDTILECFG mem
error := False
buf := read_memory(mem, 64)
temp_tilecfg.palette_id := buf.byte[0]
if temp_tilecfg.palette_id > max_palette:
error := True
if not xcr0_supports_palette(temp_tilecfg.palette_id):
error := True
if temp_tilecfg.palette_id !=0:
temp_tilecfg.start_row := buf.byte[1]
if buf.byte[2..15] is nonzero:
error := True
p := 16
# configure columns
for n in 0 ... palette_table[temp_tilecfg.palette_id].max_names-1:
temp_tilecfg.t[n].colsb:= buf.word[p/2]
p := p + 2
if temp_tilecfg.t[n].colsb > palette_table[temp_tilecfg.palette_id].bytes_per_row:
error := True
if nonzero(buf[p...47]):
error := True
# configure rows
p := 48
for n in 0 ... palette_table[temp_tilecfg.palette_id].max_names-1:
temp_tilecfg.t[n].rows:= buf.byte[p]
if temp_tilecfg.t[n].rows > palette_table[temp_tilecfg.palette_id].max_rows:
error := True
p := p + 1
if nonzero(buf[p...63]):
error := True
# validate each tile's row & col configs are reasonable and enable the valid tiles
for n in 0 ... palette_table[temp_tilecfg.palette_id].max_names-1:
if temp_tilecfg.t[n].rows !=0 and temp_tilecfg.t[n].colsb != 0:
temp_tilecfg.t[n].valid := 1
elif temp_tilecfg.t[n].rows == 0 and temp_tilecfg.t[n].colsb == 0:
temp_tilecfg.t[n].valid := 0
else:
error := True// one of rows or colsbwas 0 but not both.
if error:
#GP
elif temp_tilecfg.palette_id == 0:
TILES_CONFIGURED := 0// init state
tilecfg := 0// equivalent to 64B of zeros
zero_all_tile_data()
else:
tilecfg := temp_tilecfg
zero_all_tile_data()
TILES_CONFIGURED := 1Intel C/C++ 内在编译器
LDTILECFG void _tile_loadconfig(const void *);受影响的旗帜
None.
例外 AMX-E1;详见第2.10节,"Intel(R) AMX 指令例外类",详见.