| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| Copyright © 2023 Igalia S.L. |
| SPDX-License-Identifier: MIT |
| --> |
| |
| <isa> |
| |
| <template name="INSTR_ALU"> |
| {NAME}{SAT}{COND}{TYPE}{PMODE}{THREAD}{RMODE} |
| </template> |
| |
| <template name="INSTR_TEX"> |
| {NAME} |
| </template> |
| |
| <template name="INSTR_CF"> |
| {NAME}{COND}{TYPE} |
| </template> |
| |
| <template name="INSTR_LOAD_STORE"> |
| {NAME}{COND}{SKPHP}{DENORM}{LOCAL}{TYPE}{PMODE} |
| </template> |
| |
| <template name="INSTR_LOAD_STORE_WITH_LEFT_SHIFT"> |
| {NAME}{COND}{SKPHP}{DENORM}{LOCAL}.ls{LEFT_SHIFT}{TYPE}{PMODE} |
| </template> |
| |
| <enum name="#cond"> |
| <value val="0" name=".true" display=""/> |
| <value val="1" display=".gt"/> |
| <value val="2" display=".lt"/> |
| <value val="3" display=".ge"/> |
| <value val="4" display=".le"/> |
| <value val="5" display=".eq"/> |
| <value val="6" display=".ne"/> |
| <value val="7" display=".and"/> |
| <value val="8" display=".or"/> |
| <value val="9" display=".xor"/> |
| <value val="10" display=".not"/> |
| <value val="11" display=".nz"/> |
| <value val="12" display=".gez"/> |
| <value val="13" display=".gz"/> |
| <value val="14" display=".lez"/> |
| <value val="15" display=".lz"/> |
| <value val="22" display=".selmsb"/> |
| </enum> |
| |
| <enum name="#swiz"> |
| <value val="0" display="x"/> |
| <value val="1" display="y"/> |
| <value val="2" display="z"/> |
| <value val="3" display="w"/> |
| </enum> |
| |
| <enum name="#type"> |
| <value val="0" name=".f32" display=""/> |
| <value val="1" display=".s32"/> |
| <value val="2" display=".s8"/> |
| <value val="3" display=".u16"/> |
| <value val="4" display=".f16"/> |
| <value val="5" display=".s16"/> |
| <value val="6" display=".u32"/> |
| <value val="7" display=".u8"/> |
| </enum> |
| |
| <enum name="#reg_group"> |
| <value val="0" display="t"/> |
| <value val="1" display="i"/> |
| <value val="2" display="u"/> |
| <value val="3" display="u"/> |
| <value val="4" display="th"/> |
| <value val="7" name="immed" display=""/> |
| </enum> |
| |
| <enum name="#reg_addressing_mode"> |
| <value val="0" display=""/> |
| <value val="1" display="[a.x]"/> |
| <value val="2" display="[a.y]"/> |
| <value val="3" display="[a.z]"/> |
| <value val="4" display="[a.w]"/> |
| </enum> |
| |
| <enum name="#rounding"> |
| <value val="0" display=""/> |
| <value val="1" display=".rtz"/> |
| <value val="2" display=".rtne"/> |
| <value val="3" display=".unkown"/> |
| <value val="4" display=".unkown2"/> |
| </enum> |
| |
| <enum name="#wrmask"> |
| <value val="0" display=".____"/> |
| <value val="1" display=".x___"/> |
| <value val="2" display="._y__"/> |
| <value val="3" display=".xy__"/> |
| <value val="4" display=".__z_"/> |
| <value val="5" display=".zx"/> |
| <value val="6" display=".zy"/> |
| <value val="7" display=".xyz_"/> |
| <value val="8" display=".___w"/> |
| <value val="9" display=".x__w"/> |
| <value val="10" display="._y_w"/> |
| <value val="11" display=".xy_w"/> |
| <value val="12" display=".__zw"/> |
| <value val="13" display=".x_zw"/> |
| <value val="14" display="._yzw"/> |
| <value val="15" display=""/> <!-- xyzw --> |
| </enum> |
| |
| <bitset name="#instruction-dst" size="14"> |
| <override> |
| <expr> |
| {DST_USE} == 0 |
| </expr> |
| <display> |
| void |
| </display> |
| </override> |
| |
| <display> |
| t{REG}{AMODE}{COMPS} |
| </display> |
| |
| <field name="AMODE" low="0" high="2" type="#reg_addressing_mode"/> |
| <field name="REG" low="3" high="9" type="uint"/> |
| <field name="COMPS" low="10" high="13" type="#wrmask"/> |
| </bitset> |
| |
| <bitset name="#instruction" size="128"> |
| <field name="COND" low="6" high="10" type="#cond"/> |
| <field name="SAT" pos="11" type="bool" display=".sat"/> |
| |
| <field name="TYPE_BIT2" pos="53" type="uint"/> |
| <field name="TYPE_BIT01" low="94" high="95" type="int"/> |
| |
| <derived name="TYPE" type="#type"> |
| <expr>{TYPE_BIT2} << 2 | {TYPE_BIT01}</expr> |
| </derived> |
| </bitset> |
| |
| <bitset name="#src-swizzle" size="8"> |
| <display> |
| .{SWIZ_X}{SWIZ_Y}{SWIZ_Z}{SWIZ_W} |
| </display> |
| |
| <field name="SWIZ_X" low="0" high="1" type="#swiz"/> |
| <field name="SWIZ_Y" low="2" high="3" type="#swiz"/> |
| <field name="SWIZ_Z" low="4" high="5" type="#swiz"/> |
| <field name="SWIZ_W" low="6" high="7" type="#swiz"/> |
| </bitset> |
| |
| <enum name="#thread"> |
| <value val="0" display=""/> |
| <value val="1" display=".t0"/> |
| <value val="2" display=".t1"/> |
| </enum> |
| |
| <bitset name="#instruction-alu-base" extends="#instruction"> |
| <field name="DST_USE" pos="12" type="bool"/> |
| <field name="DST" low="13" high="26" type="#instruction-dst"> |
| <param name="DST_USE"/> |
| <param name="COMPS"/> |
| </field> |
| <pattern low="27" high="31">00000</pattern> <!-- TEX_ID --> |
| <field name="RMODE" low="32" high="33" type="#rounding"/> |
| <field name="PMODE" pos="34" type="bool_inv" display=".pack"/> |
| |
| <field name="LOW_HALF" pos="109" type="bool"/> |
| <field name="HIGH_HALF" pos="120" type="bool"/> |
| |
| <derived name="THREAD" type="#thread"> |
| <expr>{HIGH_HALF} << 1 | {LOW_HALF}</expr> |
| </derived> |
| |
| <field name="DST_FULL" pos="127" type="bool" display=".hp"/> |
| </bitset> |
| |
| <bitset name="#instruction-alu" extends="#instruction-alu-base"> |
| <pattern low="35" high="42">00000000</pattern><!-- TEX_SWIZ --> |
| </bitset> |
| |
| <bitset name="#instruction-src" size="10"> |
| <display> |
| {SRC_NEG}{SRC_ABS}{SRC_RGROUP}{SRC_REG}{SRC_AMODE}{SRC_SWIZ}{SRC_ABS} |
| </display> |
| |
| <field name="SRC_SWIZ" low="0" high="7" type="#src-swizzle"/> |
| <field name="SRC_NEG" pos="8" type="bool" display="-"/> |
| <field name="SRC_ABS" pos="9" type="bool" display="|"/> |
| |
| <derived name="IMMED_TYPE" type="uint"> |
| <expr>({SRC_AMODE} >> 1)</expr> <!-- lowest bit is the sign bit --> |
| </derived> |
| |
| <override> |
| <expr> |
| (({SRC_RGROUP} == 7) & ({IMMED_TYPE} == 0)) |
| </expr> |
| |
| <display> |
| {IMMED} |
| </display> |
| |
| <derived name="IMMED" type="float" width="32"> |
| <expr> |
| (((({SRC_AMODE} & 0x1) << 19) | |
| ({SRC_ABS} << 18) | |
| ({SRC_NEG} << 17) | |
| ({SRC_SWIZ} << 9) | |
| {SRC_REG}) << 12) |
| </expr> |
| </derived> |
| </override> |
| |
| <override> |
| <expr> |
| (({SRC_RGROUP} == 7) & ({IMMED_TYPE} == 1)) |
| </expr> |
| |
| <display> |
| {IMMED} |
| </display> |
| |
| <derived name="IMMED" type="int" width="20"> |
| <expr> |
| ((({SRC_AMODE} & 0x1) << 19) | |
| ({SRC_ABS} << 18) | |
| ({SRC_NEG} << 17) | |
| ({SRC_SWIZ} << 9) | |
| {SRC_REG}) |
| </expr> |
| </derived> |
| </override> |
| |
| <override> |
| <expr> |
| (({SRC_RGROUP} == 7) & ({IMMED_TYPE} == 2)) |
| </expr> |
| |
| <display> |
| {IMMED} |
| </display> |
| |
| <derived name="IMMED" type="uint" width="20"> |
| <expr> |
| ((({SRC_AMODE} & 0x1) << 19) | |
| ({SRC_ABS} << 18) | |
| ({SRC_NEG} << 17) | |
| ({SRC_SWIZ} << 9) | |
| {SRC_REG}) |
| </expr> |
| </derived> |
| </override> |
| |
| <override> |
| <expr> |
| (({SRC_RGROUP} == 7) & ({IMMED_TYPE} == 3)) |
| </expr> |
| |
| <display> |
| {IMMED} |
| </display> |
| |
| <derived name="IMMED" type="float" width="16"> |
| <expr> |
| ((({SRC_AMODE} & 0x1) << 19) | |
| ({SRC_ABS} << 18) | |
| ({SRC_NEG} << 17) | |
| ({SRC_SWIZ} << 9) | |
| {SRC_REG}) |
| </expr> |
| </derived> |
| </override> |
| </bitset> |
| |
| <bitset name="#instruction-alu-atomic" extends="#instruction-alu-base"> |
| <display> |
| {INSTR_ALU} {DST:align=18}, {SRC0}, {SRC1}, {SRC2} |
| </display> |
| |
| <pattern low="35" high="42">xxxxxxxx</pattern><!-- TEX_SWIZ --> |
| |
| <!-- SRC0 --> |
| <pattern pos="43">1</pattern> <!-- SRC0_USE --> |
| <field name="SRC0_REG" low="44" high="52" type="uint"/> |
| <field name="SRC0" low="54" high="63" type="#instruction-src"> |
| <param name="SRC0_REG" as="SRC_REG"/> |
| <param name="SRC0_AMODE" as="SRC_AMODE"/> |
| <param name="SRC0_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC0_AMODE" low="64" high="66" type="#reg_addressing_mode"/> |
| <field name="SRC0_RGROUP" low="67" high="69" type="#reg_group"/> |
| |
| <!-- SRC1 --> |
| <pattern pos="70">1</pattern> <!-- SRC1_USE --> |
| <field name="SRC1_REG" low="71" high="79" type="uint"/> |
| <field name="SRC1" low="81" high="90" type="#instruction-src"> |
| <param name="SRC1_REG" as="SRC_REG"/> |
| <param name="SRC1_AMODE" as="SRC_AMODE"/> |
| <param name="SRC1_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC1_AMODE" low="91" high="93" type="#reg_addressing_mode"/> |
| <field name="SRC1_RGROUP" low="96" high="98" type="#reg_group"/> |
| |
| <!-- SRC2 --> |
| <pattern pos="99">1</pattern> <!-- SRC2_USE --> |
| <field name="SRC2_REG" low="100" high="108" type="uint"/> |
| <field name="SRC2" low="110" high="119" type="#instruction-src"> |
| <param name="SRC2_REG" as="SRC_REG"/> |
| <param name="SRC2_AMODE" as="SRC_AMODE"/> |
| <param name="SRC2_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC2_AMODE" low="121" high="123" type="#reg_addressing_mode"/> |
| <field name="SRC2_RGROUP" low="124" high="126" type="#reg_group"/> |
| </bitset> |
| |
| <bitset name="#instruction-alu-no-src" extends="#instruction-alu"> |
| <display> |
| {NAME} {DST:align=18}{DST_FULL}, void, void, void |
| </display> |
| |
| <!-- SRC0 --> |
| <pattern pos="43">0</pattern> <!-- SRC0_USE --> |
| <pattern low="44" high="52">000000000</pattern> <!-- SRC0_REG --> |
| <pattern low="54" high="61">00000000</pattern> <!-- SRC0_SWIZ --> |
| <pattern pos="62">0</pattern> <!-- SRC0_NEG --> |
| <pattern pos="63">0</pattern> <!-- SRC0_ABS --> |
| <pattern low="64" high="66">000</pattern> <!-- SRC0_AMODE --> |
| <pattern low="67" high="69">000</pattern> <!-- SRC0_RGROUP --> |
| |
| <!-- SRC1 --> |
| <pattern pos="70">0</pattern> <!-- SRC1_USE --> |
| <pattern low="71" high="79">000000000</pattern> <!-- SRC1_REG --> |
| <pattern low="81" high="88">00000000</pattern> <!-- SRC1_SWIZ --> |
| <pattern pos="89">0</pattern> <!-- SRC1_NEG --> |
| <pattern pos="90">0</pattern> <!-- SRC1_ABS --> |
| <pattern low="91" high="93">000</pattern> <!-- SRC1_AMODE --> |
| <pattern low="96" high="98">000</pattern> <!-- SRC1_RGROUP --> |
| |
| <!-- SRC2 --> |
| <pattern pos="99">0</pattern> <!-- SRC2_USE --> |
| <pattern low="100" high="108">000000000</pattern> <!-- SRC2_REG --> |
| <pattern low="110" high="117">00000000</pattern> <!-- SRC2_SWIZ --> |
| <pattern pos="118">0</pattern> <!-- SRC2_NEG --> |
| <pattern pos="119">0</pattern> <!-- SRC2_ABS --> |
| <pattern low="121" high="123">000</pattern> <!-- SRC2_AMODE --> |
| <pattern low="124" high="126">000</pattern> <!-- SRC2_RGROUP --> |
| </bitset> |
| |
| <expr name="#instruction-has-src0-src1"> |
| ({SRC0_USE} != 0) && ({SRC1_USE} != 0) |
| </expr> |
| |
| <bitset name="#instruction-alu-no-dst-maybe-src0-src1" extends="#instruction-alu"> |
| <doc>Needed for texkill</doc> |
| <display> |
| {NAME}{COND}{TYPE}{PMODE}{THREAD}{RMODE} {DST:align=18}{DST_FULL}, void, void, void |
| </display> |
| |
| <override expr="#instruction-has-src0-src1"> |
| <display> |
| {NAME}{COND}{TYPE}{PMODE}{THREAD}{RMODE} {DST:align=18}, {SRC0}, {SRC1}, void |
| </display> |
| </override> |
| |
| <override expr="#instruction-has-src0"> |
| <display> |
| {NAME}{COND}{TYPE}{PMODE}{THREAD}{RMODE} {DST:align=18}, {SRC0}, void, void |
| </display> |
| </override> |
| |
| <!-- SRC0 --> |
| <field name="SRC0_USE" pos="43" type="bool"/> |
| <field name="SRC0_REG" low="44" high="52" type="uint"/> |
| <field name="SRC0" low="54" high="63" type="#instruction-src"> |
| <param name="SRC0_REG" as="SRC_REG"/> |
| <param name="SRC0_AMODE" as="SRC_AMODE"/> |
| <param name="SRC0_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC0_AMODE" low="64" high="66" type="#reg_addressing_mode"/> |
| <field name="SRC0_RGROUP" low="67" high="69" type="#reg_group"/> |
| |
| <!-- SRC1 --> |
| <field name="SRC1_USE" pos="70" type="bool"/> |
| <field name="SRC1_REG" low="71" high="79" type="uint"/> |
| <field name="SRC1" low="81" high="90" type="#instruction-src"> |
| <param name="SRC1_REG" as="SRC_REG"/> |
| <param name="SRC1_AMODE" as="SRC_AMODE"/> |
| <param name="SRC1_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC1_AMODE" low="91" high="93" type="#reg_addressing_mode"/> |
| <field name="SRC1_RGROUP" low="96" high="98" type="#reg_group"/> |
| |
| <!-- SRC2 --> |
| <pattern pos="99">0</pattern> <!-- SRC2_USE --> |
| <pattern low="100" high="108">000000000</pattern> <!-- SRC2_REG --> |
| <pattern low="110" high="117">00000000</pattern> <!-- SRC2_SWIZ --> |
| <pattern pos="118">0</pattern> <!-- SRC2_NEG --> |
| <pattern pos="119">0</pattern> <!-- SRC2_ABS --> |
| <pattern low="121" high="123">000</pattern> <!-- SRC2_AMODE --> |
| <pattern low="124" high="126">000</pattern> <!-- SRC2_RGROUP --> |
| </bitset> |
| |
| <bitset name="#instruction-alu-src0" extends="#instruction-alu"> |
| <display> |
| {INSTR_ALU} {DST:align=18}, {SRC0}, void, void |
| </display> |
| |
| <!-- SRC0 --> |
| <pattern pos="43">1</pattern> <!-- SRC0_USE --> |
| <field name="SRC0_REG" low="44" high="52" type="uint"/> |
| <field name="SRC0" low="54" high="63" type="#instruction-src"> |
| <param name="SRC0_REG" as="SRC_REG"/> |
| <param name="SRC0_AMODE" as="SRC_AMODE"/> |
| <param name="SRC0_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC0_AMODE" low="64" high="66" type="#reg_addressing_mode"/> |
| <field name="SRC0_RGROUP" low="67" high="69" type="#reg_group"/> |
| |
| <!-- SRC1 --> |
| <pattern pos="70">0</pattern> <!-- SRC1_USE --> |
| <pattern low="71" high="79">000000000</pattern> <!-- SRC1_REG --> |
| <pattern low="81" high="88">00000000</pattern> <!-- SRC1_SWIZ --> |
| <pattern pos="89">0</pattern> <!-- SRC1_NEG --> |
| <pattern pos="90">0</pattern> <!-- SRC1_ABS --> |
| <pattern low="91" high="93">000</pattern> <!-- SRC1_AMODE --> |
| <pattern low="96" high="98">000</pattern> <!-- SRC1_RGROUP --> |
| |
| <!-- SRC2 --> |
| <pattern pos="99">0</pattern> <!-- SRC2_USE --> |
| <pattern low="100" high="108">000000000</pattern> <!-- SRC2_REG --> |
| <pattern low="110" high="117">00000000</pattern> <!-- SRC2_SWIZ --> |
| <pattern pos="118">0</pattern> <!-- SRC2_NEG --> |
| <pattern pos="119">0</pattern> <!-- SRC2_ABS --> |
| <pattern low="121" high="123">000</pattern> <!-- SRC2_AMODE --> |
| <pattern low="124" high="126">000</pattern> <!-- SRC2_RGROUP --> |
| </bitset> |
| |
| <bitset name="#instruction-alu-src2" extends="#instruction-alu"> |
| <display> |
| {INSTR_ALU} {DST:align=18}, void, void, {SRC2} |
| </display> |
| |
| <!-- SRC0 --> |
| <pattern pos="43">0</pattern> <!-- SRC0_USE --> |
| <pattern low="44" high="52">000000000</pattern> <!-- SRC0_REG --> |
| <pattern low="54" high="61">00000000</pattern> <!-- SRC0_SWIZ --> |
| <pattern pos="62">0</pattern> <!-- SRC0_NEG --> |
| <pattern pos="63">0</pattern> <!-- SRC0_ABS --> |
| <pattern low="64" high="66">000</pattern> <!-- SRC0_AMODE --> |
| <pattern low="67" high="69">000</pattern> <!-- SRC0_RGROUP --> |
| |
| <!-- SRC1 --> |
| <pattern pos="70">0</pattern> <!-- SRC1_USE --> |
| <pattern low="71" high="79">000000000</pattern> <!-- SRC1_REG --> |
| <pattern low="81" high="88">00000000</pattern> <!-- SRC1_SWIZ --> |
| <pattern pos="89">0</pattern> <!-- SRC1_NEG --> |
| <pattern pos="90">0</pattern> <!-- SRC1_ABS --> |
| <pattern low="91" high="93">000</pattern> <!-- SRC1_AMODE --> |
| <pattern low="96" high="98">000</pattern> <!-- SRC1_RGROUP --> |
| |
| <!-- SRC2 --> |
| <pattern pos="99">1</pattern> <!-- SRC2_USE --> |
| <field name="SRC2_REG" low="100" high="108" type="uint"/> |
| <field name="SRC2" low="110" high="119" type="#instruction-src"> |
| <param name="SRC2_REG" as="SRC_REG"/> |
| <param name="SRC2_AMODE" as="SRC_AMODE"/> |
| <param name="SRC2_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC2_AMODE" low="121" high="123" type="#reg_addressing_mode"/> |
| <field name="SRC2_RGROUP" low="124" high="126" type="#reg_group"/> |
| </bitset> |
| |
| <bitset name="#instruction-alu-src0-src1" extends="#instruction-alu"> |
| <display> |
| {INSTR_ALU} {DST:align=18}, {SRC0}, {SRC1}, void |
| </display> |
| |
| <!-- SRC0 --> |
| <pattern pos="43">1</pattern> <!-- SRC0_USE --> |
| <field name="SRC0_REG" low="44" high="52" type="uint"/> |
| <field name="SRC0" low="54" high="63" type="#instruction-src"> |
| <param name="SRC0_REG" as="SRC_REG"/> |
| <param name="SRC0_AMODE" as="SRC_AMODE"/> |
| <param name="SRC0_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC0_AMODE" low="64" high="66" type="#reg_addressing_mode"/> |
| <field name="SRC0_RGROUP" low="67" high="69" type="#reg_group"/> |
| |
| <!-- SRC1 --> |
| <pattern pos="70">1</pattern> <!-- SRC1_USE --> |
| <field name="SRC1_REG" low="71" high="79" type="uint"/> |
| <field name="SRC1" low="81" high="90" type="#instruction-src"> |
| <param name="SRC1_REG" as="SRC_REG"/> |
| <param name="SRC1_AMODE" as="SRC_AMODE"/> |
| <param name="SRC1_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC1_AMODE" low="91" high="93" type="#reg_addressing_mode"/> |
| <field name="SRC1_RGROUP" low="96" high="98" type="#reg_group"/> |
| |
| <!-- SRC2 --> |
| <pattern pos="99">0</pattern> <!-- SRC2_USE --> |
| <pattern low="100" high="108">000000000</pattern> <!-- SRC2_REG --> |
| <pattern low="110" high="117">00000000</pattern> <!-- SRC2_SWIZ --> |
| <pattern pos="118">0</pattern> <!-- SRC2_NEG --> |
| <pattern pos="119">0</pattern> <!-- SRC2_ABS --> |
| <pattern low="121" high="123">000</pattern> <!-- SRC2_AMODE --> |
| <pattern low="124" high="126">000</pattern> <!-- SRC2_RGROUP --> |
| </bitset> |
| |
| <bitset name="#instruction-alu-src0-src2" extends="#instruction-alu"> |
| <display> |
| {INSTR_ALU} {DST:align=18}, {SRC0}, void, {SRC2} |
| </display> |
| |
| <!-- SRC0 --> |
| <pattern pos="43">1</pattern> <!-- SRC0_USE --> |
| <field name="SRC0_REG" low="44" high="52" type="uint"/> |
| <field name="SRC0" low="54" high="63" type="#instruction-src"> |
| <param name="SRC0_REG" as="SRC_REG"/> |
| <param name="SRC0_AMODE" as="SRC_AMODE"/> |
| <param name="SRC0_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC0_AMODE" low="64" high="66" type="#reg_addressing_mode"/> |
| <field name="SRC0_RGROUP" low="67" high="69" type="#reg_group"/> |
| |
| <!-- SRC1 --> |
| <pattern pos="70">0</pattern> <!-- SRC1_USE --> |
| <pattern low="71" high="79">000000000</pattern> <!-- SRC1_REG --> |
| <pattern low="81" high="88">00000000</pattern> <!-- SRC1_SWIZ --> |
| <pattern pos="89">0</pattern> <!-- SRC1_NEG --> |
| <pattern pos="90">0</pattern> <!-- SRC1_ABS --> |
| <pattern low="91" high="93">000</pattern> <!-- SRC1_AMODE --> |
| <pattern low="96" high="98">000</pattern> <!-- SRC1_RGROUP --> |
| |
| <!-- SRC2 --> |
| <pattern pos="99">1</pattern> <!-- SRC2_USE --> |
| <field name="SRC2_REG" low="100" high="108" type="uint"/> |
| <field name="SRC2" low="110" high="119" type="#instruction-src"> |
| <param name="SRC2_REG" as="SRC_REG"/> |
| <param name="SRC2_AMODE" as="SRC_AMODE"/> |
| <param name="SRC2_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC2_AMODE" low="121" high="123" type="#reg_addressing_mode"/> |
| <field name="SRC2_RGROUP" low="124" high="126" type="#reg_group"/> |
| </bitset> |
| |
| <bitset name="#instruction-alu-src1-src2" extends="#instruction-alu"> |
| <display> |
| {INSTR_ALU} {DST:align=18}, void, {SRC1}, {SRC2} |
| </display> |
| |
| <!-- SRC0 --> |
| <pattern pos="43">0</pattern> <!-- SRC0_USE --> |
| <pattern low="44" high="52">000000000</pattern> <!-- SRC0_REG --> |
| <pattern low="54" high="61">00000000</pattern> <!-- SRC0_SWIZ --> |
| <pattern pos="62">0</pattern> <!-- SRC0_NEG --> |
| <pattern pos="63">0</pattern> <!-- SRC0_ABS --> |
| <pattern low="64" high="66">000</pattern> <!-- SRC0_AMODE --> |
| <pattern low="67" high="69">000</pattern> <!-- SRC0_RGROUP --> |
| |
| <!-- SRC1 --> |
| <pattern pos="70">1</pattern> <!-- SRC1_USE --> |
| <field name="SRC1_REG" low="71" high="79" type="uint"/> |
| <field name="SRC1" low="81" high="90" type="#instruction-src"> |
| <param name="SRC1_REG" as="SRC_REG"/> |
| <param name="SRC1_AMODE" as="SRC_AMODE"/> |
| <param name="SRC1_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC1_AMODE" low="91" high="93" type="#reg_addressing_mode"/> |
| <field name="SRC1_RGROUP" low="96" high="98" type="#reg_group"/> |
| |
| <!-- SRC2 --> |
| <pattern pos="99">1</pattern> <!-- SRC2_USE --> |
| <field name="SRC2_REG" low="100" high="108" type="uint"/> |
| <field name="SRC2" low="110" high="119" type="#instruction-src"> |
| <param name="SRC2_REG" as="SRC_REG"/> |
| <param name="SRC2_AMODE" as="SRC_AMODE"/> |
| <param name="SRC2_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC2_AMODE" low="121" high="123" type="#reg_addressing_mode"/> |
| <field name="SRC2_RGROUP" low="124" high="126" type="#reg_group"/> |
| </bitset> |
| |
| <bitset name="#instruction-alu-src0-src1-src2" extends="#instruction-alu"> |
| <display> |
| {INSTR_ALU} {DST:align=18}, {SRC0}, {SRC1}, {SRC2} |
| </display> |
| |
| <!-- SRC0 --> |
| <pattern pos="43">1</pattern> <!-- SRC0_USE --> |
| <field name="SRC0_REG" low="44" high="52" type="uint"/> |
| <field name="SRC0" low="54" high="63" type="#instruction-src"> |
| <param name="SRC0_REG" as="SRC_REG"/> |
| <param name="SRC0_AMODE" as="SRC_AMODE"/> |
| <param name="SRC0_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC0_AMODE" low="64" high="66" type="#reg_addressing_mode"/> |
| <field name="SRC0_RGROUP" low="67" high="69" type="#reg_group"/> |
| |
| <!-- SRC1 --> |
| <pattern pos="70">1</pattern> <!-- SRC1_USE --> |
| <field name="SRC1_REG" low="71" high="79" type="uint"/> |
| <field name="SRC1" low="81" high="90" type="#instruction-src"> |
| <param name="SRC1_REG" as="SRC_REG"/> |
| <param name="SRC1_AMODE" as="SRC_AMODE"/> |
| <param name="SRC1_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC1_AMODE" low="91" high="93" type="#reg_addressing_mode"/> |
| <field name="SRC1_RGROUP" low="96" high="98" type="#reg_group"/> |
| |
| <!-- SRC2 --> |
| <pattern pos="99">1</pattern> <!-- SRC2_USE --> |
| <field name="SRC2_REG" low="100" high="108" type="uint"/> |
| <field name="SRC2" low="110" high="119" type="#instruction-src"> |
| <param name="SRC2_REG" as="SRC_REG"/> |
| <param name="SRC2_AMODE" as="SRC_AMODE"/> |
| <param name="SRC2_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC2_AMODE" low="121" high="123" type="#reg_addressing_mode"/> |
| <field name="SRC2_RGROUP" low="124" high="126" type="#reg_group"/> |
| </bitset> |
| |
| <bitset name="#instruction-tex" extends="#instruction"> |
| <field name="DST_USE" pos="12" type="bool"/> |
| <field name="DST" low="13" high="26" type="#instruction-dst"> |
| <param name="DST_USE"/> |
| <param name="COMPS"/> |
| </field> |
| <field name="TEX_ID" low="27" high="31" type="uint"/> |
| <field name="RMODE" low="32" high="34" type="#reg_addressing_mode"/> |
| <field name="TEX_SWIZ" low="35" high="42" type="#src-swizzle"/> |
| |
| <pattern pos="109">0</pattern> |
| <pattern pos="120">0</pattern> |
| <pattern pos="127">0</pattern> |
| </bitset> |
| |
| <bitset name="#instruction-tex-src0" extends="#instruction-tex"> |
| <display> |
| {INSTR_TEX} {DST:align=18}, tex{TEX_ID}{TEX_SWIZ}, {SRC0}, void, void |
| </display> |
| |
| <!-- SRC0 --> |
| <pattern pos="43">1</pattern> <!-- SRC0_USE --> |
| <field name="SRC0_REG" low="44" high="52" type="uint"/> |
| <field name="SRC0" low="54" high="63" type="#instruction-src"> |
| <param name="SRC0_REG" as="SRC_REG"/> |
| <param name="SRC0_AMODE" as="SRC_AMODE"/> |
| <param name="SRC0_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC0_AMODE" low="64" high="66" type="#reg_addressing_mode"/> |
| <field name="SRC0_RGROUP" low="67" high="69" type="#reg_group"/> |
| |
| <!-- SRC1 --> |
| <pattern pos="70">0</pattern> <!-- SRC1_USE --> |
| <pattern low="71" high="79">000000000</pattern> <!-- SRC1_REG --> |
| <pattern low="81" high="88">00000000</pattern> <!-- SRC1_SWIZ --> |
| <pattern pos="89">0</pattern> <!-- SRC1_NEG --> |
| <pattern pos="90">0</pattern> <!-- SRC1_ABS --> |
| <pattern low="91" high="93">000</pattern> <!-- SRC1_AMODE --> |
| <pattern low="96" high="98">000</pattern> <!-- SRC1_RGROUP --> |
| |
| <!-- SRC2 --> |
| <pattern pos="99">0</pattern> <!-- SRC2_USE --> |
| <pattern low="100" high="108">000000000</pattern> <!-- SRC2_REG --> |
| <pattern low="110" high="117">00000000</pattern> <!-- SRC2_SWIZ --> |
| <pattern pos="118">0</pattern> <!-- SRC2_NEG --> |
| <pattern pos="119">0</pattern> <!-- SRC2_ABS --> |
| <pattern low="121" high="123">000</pattern> <!-- SRC2_AMODE --> |
| <pattern low="124" high="126">000</pattern> <!-- SRC2_RGROUP --> |
| </bitset> |
| |
| <bitset name="#instruction-tex-src0-src1-src2" extends="#instruction-tex"> |
| <display> |
| {INSTR_TEX} {DST:align=18}, tex{TEX_ID}{TEX_SWIZ}, {SRC0}, {SRC1}, {SRC2} |
| </display> |
| |
| <!-- SRC0 --> |
| <pattern pos="43">1</pattern> <!-- SRC0_USE --> |
| <field name="SRC0_REG" low="44" high="52" type="uint"/> |
| <field name="SRC0" low="54" high="63" type="#instruction-src"> |
| <param name="SRC0_REG" as="SRC_REG"/> |
| <param name="SRC0_AMODE" as="SRC_AMODE"/> |
| <param name="SRC0_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC0_AMODE" low="64" high="66" type="#reg_addressing_mode"/> |
| <field name="SRC0_RGROUP" low="67" high="69" type="#reg_group"/> |
| |
| <!-- SRC1 --> |
| <pattern pos="70">1</pattern> <!-- SRC1_USE --> |
| <field name="SRC1_REG" low="71" high="79" type="uint"/> |
| <field name="SRC1" low="81" high="90" type="#instruction-src"> |
| <param name="SRC1_REG" as="SRC_REG"/> |
| <param name="SRC1_AMODE" as="SRC_AMODE"/> |
| <param name="SRC1_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC1_AMODE" low="91" high="93" type="#reg_addressing_mode"/> |
| <field name="SRC1_RGROUP" low="96" high="98" type="#reg_group"/> |
| |
| <!-- SRC2 --> |
| <pattern pos="99">1</pattern> <!-- SRC2_USE --> |
| <field name="SRC2_REG" low="100" high="108" type="uint"/> |
| <field name="SRC2" low="110" high="119" type="#instruction-src"> |
| <param name="SRC2_REG" as="SRC_REG"/> |
| <param name="SRC2_AMODE" as="SRC_AMODE"/> |
| <param name="SRC2_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC2_AMODE" low="121" high="123" type="#reg_addressing_mode"/> |
| <field name="SRC2_RGROUP" low="124" high="126" type="#reg_group"/> |
| </bitset> |
| |
| <bitset name="#instruction-tex-maybe-src0-src1" extends="#instruction-tex"> |
| <display> |
| {INSTR_TEX} {DST:align=18}, tex{TEX_ID}{TEX_SWIZ}, {SRC0}, {SRC1}, void |
| </display> |
| |
| <override expr="#instruction-has-src0"> |
| <display> |
| {INSTR_TEX} {DST:align=18}, tex{TEX_ID}{TEX_SWIZ}, {SRC0}, void, void |
| </display> |
| </override> |
| |
| <!-- SRC0 --> |
| <field name="SRC0_USE" pos="43" type="bool"/> |
| <field name="SRC0_REG" low="44" high="52" type="uint"/> |
| <field name="SRC0" low="54" high="63" type="#instruction-src"> |
| <param name="SRC0_REG" as="SRC_REG"/> |
| <param name="SRC0_AMODE" as="SRC_AMODE"/> |
| <param name="SRC0_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC0_AMODE" low="64" high="66" type="#reg_addressing_mode"/> |
| <field name="SRC0_RGROUP" low="67" high="69" type="#reg_group"/> |
| |
| <!-- SRC1 --> |
| <field name="SRC1_USE" pos="70" type="bool"/> |
| <field name="SRC1_REG" low="71" high="79" type="uint"/> |
| <field name="SRC1" low="81" high="90" type="#instruction-src"> |
| <param name="SRC1_REG" as="SRC_REG"/> |
| <param name="SRC1_AMODE" as="SRC_AMODE"/> |
| <param name="SRC1_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC1_AMODE" low="91" high="93" type="#reg_addressing_mode"/> |
| <field name="SRC1_RGROUP" low="96" high="98" type="#reg_group"/> |
| |
| <!-- SRC2 --> |
| <pattern pos="99">0</pattern> <!-- SRC2_USE --> |
| <pattern low="100" high="108">000000000</pattern> <!-- SRC2_REG --> |
| <pattern low="110" high="117">00000000</pattern> <!-- SRC2_SWIZ --> |
| <pattern pos="118">0</pattern> <!-- SRC2_NEG --> |
| <pattern pos="119">0</pattern> <!-- SRC2_ABS --> |
| <pattern low="121" high="123">000</pattern> <!-- SRC2_AMODE --> |
| <pattern low="124" high="126">000</pattern> <!-- SRC2_RGROUP --> |
| </bitset> |
| |
| <bitset name="#instruction-cf" extends="#instruction"> |
| <pattern low="12" high="31">00000000000000000000</pattern> |
| |
| <pattern low="32" high="33">00</pattern> <!-- RMODE --> |
| <pattern pos="34">x</pattern><!-- PMODE --> |
| <pattern low="35" high="42">00000000</pattern><!-- TEX_SWIZ --> |
| |
| <pattern low="99" high="102">0000</pattern> |
| <field name="TARGET" low="103" high="117" type="absbranch"/> |
| <pattern low="118" high="127">0000000000</pattern> |
| </bitset> |
| |
| <bitset name="#instruction-cf-no-src" extends="#instruction-cf"> |
| <display> |
| {INSTR_CF} {:align=18}void, void, void, {TARGET} |
| </display> |
| |
| <pattern low="43" high="52">0000000000</pattern> |
| <pattern low="54" high="63">0000000000</pattern> |
| <pattern low="64" high="66">000</pattern> |
| <pattern low="67" high="79">0000000000000</pattern> |
| <pattern low="81" high="93">0000000000000</pattern> |
| <pattern low="96" high="98">000</pattern> |
| </bitset> |
| |
| <expr name="#instruction-has-src0"> |
| ({SRC0_USE} != 0) && ({SRC1_USE} == 0) |
| </expr> |
| |
| <bitset name="#instruction-cf-maybe-src0-src1" extends="#instruction-cf"> |
| <display> |
| {INSTR_CF} {:align=18}void, void, void, {TARGET} |
| </display> |
| |
| <override expr="#instruction-has-src0-src1"> |
| <display> |
| {INSTR_CF} {:align=18}void, {SRC0}, {SRC1}, {TARGET} |
| </display> |
| </override> |
| |
| <override expr="#instruction-has-src0"> |
| <display> |
| {INSTR_CF} {:align=18}void, {SRC0}, void, {TARGET} |
| </display> |
| </override> |
| |
| <!-- SRC0 --> |
| <field name="SRC0_USE" pos="43" type="bool"/> |
| <field name="SRC0_REG" low="44" high="52" type="uint"/> |
| <field name="SRC0" low="54" high="63" type="#instruction-src"> |
| <param name="SRC0_REG" as="SRC_REG"/> |
| <param name="SRC0_AMODE" as="SRC_AMODE"/> |
| <param name="SRC0_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC0_AMODE" low="64" high="66" type="#reg_addressing_mode"/> |
| <field name="SRC0_RGROUP" low="67" high="69" type="#reg_group"/> |
| |
| <!-- SRC1 --> |
| <field name="SRC1_USE" pos="70" type="bool"/> |
| <field name="SRC1_REG" low="71" high="79" type="uint"/> |
| <field name="SRC1" low="81" high="90" type="#instruction-src"> |
| <param name="SRC1_REG" as="SRC_REG"/> |
| <param name="SRC1_AMODE" as="SRC_AMODE"/> |
| <param name="SRC1_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC1_AMODE" low="91" high="93" type="#reg_addressing_mode"/> |
| <field name="SRC1_RGROUP" low="96" high="98" type="#reg_group"/> |
| </bitset> |
| |
| <expr name="#instruction-has-left-shift"> |
| ({LEFT_SHIFT} != 0) |
| </expr> |
| |
| <bitset name="#instruction-load" extends="#instruction"> |
| <field name="DST_USE" pos="12" type="bool"/> |
| <field name="DST" low="13" high="26" type="#instruction-dst"> |
| <param name="DST_USE"/> |
| <param name="COMPS"/> |
| </field> |
| |
| <pattern low="27" high="31">00000</pattern> <!-- TEX_ID --> |
| <pattern low="32" high="33">00</pattern> <!-- RMODE --> |
| <field name="PMODE" pos="34" type="bool_inv" display=".pack"/> |
| <field name="LEFT_SHIFT" low="35" high="36" type="uint"/> |
| <pattern low="37" high="38">00</pattern> |
| <field name="SKPHP" pos="39" type="bool" display=".skpHp"/> |
| <field name="LOCAL" pos="40" type="bool" display=".local"/> |
| <pattern pos="41">0</pattern> |
| <field name="DENORM" pos="42" type="bool" display=".denorm"/> |
| |
| <field name="LOW_HALF" pos="109" type="bool"/> |
| <field name="HIGH_HALF" pos="120" type="bool"/> |
| |
| <derived name="THREAD" type="#thread"> |
| <expr>{HIGH_HALF} << 1 | {LOW_HALF}</expr> |
| </derived> |
| |
| <field name="DST_FULL" pos="127" type="bool" display=".hp"/> |
| |
| <display> |
| {INSTR_LOAD_STORE} {DST:align=18}, {SRC0}, {SRC1}, void |
| </display> |
| |
| <override expr="#instruction-has-left-shift"> |
| <display> |
| {INSTR_LOAD_STORE_WITH_LEFT_SHIFT} {DST:align=18}, {SRC0}, {SRC1}, void |
| </display> |
| </override> |
| |
| <!-- SRC0 --> |
| <pattern pos="43">1</pattern> <!-- SRC0_USE --> |
| <field name="SRC0_REG" low="44" high="52" type="uint"/> |
| <field name="SRC0" low="54" high="63" type="#instruction-src"> |
| <param name="SRC0_REG" as="SRC_REG"/> |
| <param name="SRC0_AMODE" as="SRC_AMODE"/> |
| <param name="SRC0_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC0_AMODE" low="64" high="66" type="#reg_addressing_mode"/> |
| <field name="SRC0_RGROUP" low="67" high="69" type="#reg_group"/> |
| |
| <!-- SRC1 --> |
| <pattern pos="70">1</pattern> <!-- SRC1_USE --> |
| <field name="SRC1_REG" low="71" high="79" type="uint"/> |
| <field name="SRC1" low="81" high="90" type="#instruction-src"> |
| <param name="SRC1_REG" as="SRC_REG"/> |
| <param name="SRC1_AMODE" as="SRC_AMODE"/> |
| <param name="SRC1_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC1_AMODE" low="91" high="93" type="#reg_addressing_mode"/> |
| <field name="SRC1_RGROUP" low="96" high="98" type="#reg_group"/> |
| |
| <!-- SRC2 --> |
| <pattern pos="99">0</pattern> <!-- SRC2_USE --> |
| <pattern low="100" high="108">000000000</pattern> <!-- SRC2_REG --> |
| <pattern low="110" high="117">00000000</pattern> <!-- SRC2_SWIZ --> |
| <pattern pos="118">0</pattern> <!-- SRC2_NEG --> |
| <pattern pos="119">0</pattern> <!-- SRC2_ABS --> |
| <pattern low="121" high="123">000</pattern> <!-- SRC2_AMODE --> |
| <pattern low="124" high="126">000</pattern> <!-- SRC2_RGROUP --> |
| </bitset> |
| |
| <bitset name="#instruction-store" extends="#instruction"> |
| <pattern low="12" high="16">xxxxx</pattern> |
| <pattern pos="17">x</pattern> |
| <pattern low="18" high="22">xxxxx</pattern> |
| <field name="COMPS" low="23" high="26" type="#wrmask"/> |
| <pattern low="27" high="31">xxxxx</pattern> |
| <pattern low="32" high="33">xx</pattern> |
| <field name="PMODE" pos="34" type="bool_inv" display=".pack"/> |
| <field name="LEFT_SHIFT" low="35" high="36" type="uint"/> |
| <pattern low="37" high="38">00</pattern> |
| <field name="SKPHP" pos="39" type="bool" display=".skpHp"/> |
| <field name="LOCAL" pos="40" type="bool" display=".local"/> |
| <pattern low="41" high="41">x</pattern> |
| <field name="DENORM" pos="42" type="bool" display=".denorm"/> |
| |
| <field name="LOW_HALF" pos="109" type="bool"/> |
| <field name="HIGH_HALF" pos="120" type="bool"/> |
| |
| <derived name="THREAD" type="#thread"> |
| <expr>{HIGH_HALF} << 1 | {LOW_HALF}</expr> |
| </derived> |
| |
| <field name="DST_FULL" pos="127" type="bool" display=".hp"/> |
| |
| <display> |
| {INSTR_LOAD_STORE} {:align=18}mem{COMPS}, {SRC0}, {SRC1}, {SRC2} |
| </display> |
| |
| <override expr="#instruction-has-left-shift"> |
| <display> |
| {INSTR_LOAD_STORE_WITH_LEFT_SHIFT} {:align=18}mem{COMPS}, {SRC0}, {SRC1}, {SRC2} |
| </display> |
| </override> |
| |
| <!-- SRC0 --> |
| <pattern pos="43">1</pattern> <!-- SRC0_USE --> |
| <field name="SRC0_REG" low="44" high="52" type="uint"/> |
| <field name="SRC0" low="54" high="63" type="#instruction-src"> |
| <param name="SRC0_REG" as="SRC_REG"/> |
| <param name="SRC0_AMODE" as="SRC_AMODE"/> |
| <param name="SRC0_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC0_AMODE" low="64" high="66" type="#reg_addressing_mode"/> |
| <field name="SRC0_RGROUP" low="67" high="69" type="#reg_group"/> |
| |
| <!-- SRC1 --> |
| <pattern pos="70">1</pattern> <!-- SRC1_USE --> |
| <field name="SRC1_REG" low="71" high="79" type="uint"/> |
| <field name="SRC1" low="81" high="90" type="#instruction-src"> |
| <param name="SRC1_REG" as="SRC_REG"/> |
| <param name="SRC1_AMODE" as="SRC_AMODE"/> |
| <param name="SRC1_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC1_AMODE" low="91" high="93" type="#reg_addressing_mode"/> |
| <field name="SRC1_RGROUP" low="96" high="98" type="#reg_group"/> |
| |
| <!-- SRC2 --> |
| <pattern pos="99">1</pattern> <!-- SRC2_USE --> |
| <field name="SRC2_REG" low="100" high="108" type="uint"/> |
| <field name="SRC2" low="110" high="119" type="#instruction-src"> |
| <param name="SRC2_REG" as="SRC_REG"/> |
| <param name="SRC2_AMODE" as="SRC_AMODE"/> |
| <param name="SRC2_RGROUP" as="SRC_RGROUP"/> |
| </field> |
| <field name="SRC2_AMODE" low="121" high="123" type="#reg_addressing_mode"/> |
| <field name="SRC2_RGROUP" low="124" high="126" type="#reg_group"/> |
| </bitset> |
| |
| <!-- opcocdes sorted by opc number --> |
| |
| <bitset name="nop" extends="#instruction-alu-no-src"> |
| <pattern low="0" high="5">000000</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="add" extends="#instruction-alu-src0-src2"> |
| <pattern low="0" high="5">000001</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="mad" extends="#instruction-alu-src0-src1-src2"> |
| <pattern low="0" high="5">000010</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="mul" extends="#instruction-alu-src0-src1"> |
| <pattern low="0" high="5">000011</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <!-- dst --> |
| |
| <bitset name="dp3" extends="#instruction-alu-src0-src1"> |
| <pattern low="0" high="5">000101</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="dp4" extends="#instruction-alu-src0-src1"> |
| <pattern low="0" high="5">000110</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="dsx" extends="#instruction-alu-src0-src2"> |
| <pattern low="0" high="5">000111</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="dsy" extends="#instruction-alu-src0-src2"> |
| <pattern low="0" high="5">001000</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="mov" extends="#instruction-alu-src2"> |
| <pattern low="0" high="5">001001</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="movar" extends="#instruction-alu-src2"> |
| <pattern low="0" high="5">001010</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <!-- movaf --> |
| |
| <bitset name="rcp" extends="#instruction-alu-src2"> |
| <pattern low="0" high="5">001100</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="rsq" extends="#instruction-alu-src2"> |
| <pattern low="0" high="5">001101</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <!-- litp --> |
| |
| <bitset name="select" extends="#instruction-alu-src0-src1-src2"> |
| <pattern low="0" high="5">001111</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="set" extends="#instruction-alu-src0-src1"> |
| <pattern low="0" high="5">010000</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="exp" extends="#instruction-alu-src2"> |
| <pattern low="0" high="5">010001</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="log" extends="#instruction-alu-src2"> |
| <pattern low="0" high="5">010010</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="frc" extends="#instruction-alu-src2"> |
| <pattern low="0" high="5">010011</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="call" extends="#instruction-cf-no-src"> |
| <pattern low="0" high="5">010100</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="ret" extends="#instruction-alu-no-src"> |
| <pattern low="0" high="5">010101</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="branch" extends="#instruction-cf-maybe-src0-src1"> |
| <pattern low="0" high="5">010110</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="texkill" extends="#instruction-alu-no-dst-maybe-src0-src1"> |
| <pattern low="0" high="5">010111</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="texld" extends="#instruction-tex-src0"> |
| <pattern low="0" high="5">011000</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="texldb" extends="#instruction-tex-maybe-src0-src1"> |
| <pattern low="0" high="5">011001</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="texldd" extends="#instruction-tex-src0-src1-src2"> |
| <pattern low="0" high="5">011010</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="texldl" extends="#instruction-tex-maybe-src0-src1"> |
| <pattern low="0" high="5">011011</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <!-- 0x7800000f 0x9011007c 0x00200804 0x0100100c --> |
| |
| <!-- texldpcf --> |
| <!-- rep --> |
| <!-- endrep --> |
| <!-- loop --> |
| <!-- endloop --> |
| |
| <bitset name="sqrt" extends="#instruction-alu-src2"> |
| <pattern low="0" high="5">100001</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="sin" extends="#instruction-alu-src2"> |
| <pattern low="0" high="5">100010</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="cos" extends="#instruction-alu-src2"> |
| <pattern low="0" high="5">100011</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="branch_any" extends="#instruction-cf-maybe-src0-src1"> |
| <pattern low="0" high="5">100100</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="floor" extends="#instruction-alu-src2"> |
| <pattern low="0" high="5">100101</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="ceil" extends="#instruction-alu-src2"> |
| <pattern low="0" high="5">100110</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="sign" extends="#instruction-alu-src2"> |
| <pattern low="0" high="5">100111</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <!-- addlo --> |
| <!-- mullo --> |
| |
| <bitset name="barrier" extends="#instruction-alu-no-src"> |
| <pattern low="0" high="5">101010</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <!-- swizzle --> |
| |
| <bitset name="i2i" extends="#instruction-alu-src0-src1"> |
| <pattern low="0" high="5">101100</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="i2f" extends="#instruction-alu-src0"> |
| <pattern low="0" high="5">101101</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="f2i" extends="#instruction-alu-src0"> |
| <pattern low="0" high="5">101110</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="f2irnd" extends="#instruction-alu-src0"> |
| <pattern low="0" high="5">101111</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <!-- f2i7 --> |
| |
| <bitset name="cmp" extends="#instruction-alu-src0-src1-src2"> |
| <pattern low="0" high="5">110001</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="load" extends="#instruction-load"> |
| <pattern low="0" high="5">110010</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="store" extends="#instruction-store"> |
| <pattern low="0" high="5">110011</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="iaddsat" extends="#instruction-alu-src0-src2"> |
| <pattern low="0" high="5">111011</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="imullo0" extends="#instruction-alu-src0-src1"> |
| <pattern low="0" high="5">111100</pattern> <!-- OPC --> |
| <pattern pos="80">0</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <!-- imullo1 --> |
| <!-- imullosat0 --> |
| <!-- imullosat1 --> |
| |
| <bitset name="imulhi0" extends="#instruction-alu-src0-src1"> |
| <pattern low="0" high="5">000000</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <!-- imulhi1 --> |
| |
| <bitset name="idiv0" extends="#instruction-alu-src0-src1"> |
| <pattern low="0" high="5">000100</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="imod" extends="#instruction-alu-src0-src1"> |
| <pattern low="0" high="5">001000</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="imadlo0" extends="#instruction-alu-src0-src1-src2"> |
| <pattern low="0" high="5">001100</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="imadlosat0" extends="#instruction-alu-src0-src1-src2"> |
| <pattern low="0" high="5">001110</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="movai" extends="#instruction-alu-src2"> |
| <pattern low="0" high="5">010110</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="iabs" extends="#instruction-alu-src2"> |
| <pattern low="0" high="5">010111</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="leadzero" extends="#instruction-alu-src2"> |
| <pattern low="0" high="5">011000</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="lshift" extends="#instruction-alu-src0-src2"> |
| <pattern low="0" high="5">011001</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="rshift" extends="#instruction-alu-src0-src2"> |
| <pattern low="0" high="5">011010</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="rotate" extends="#instruction-alu-src0-src2"> |
| <pattern low="0" high="5">011011</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="or" extends="#instruction-alu-src0-src2"> |
| <pattern low="0" high="5">011100</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="and" extends="#instruction-alu-src0-src2"> |
| <pattern low="0" high="5">011101</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="xor" extends="#instruction-alu-src0-src2"> |
| <pattern low="0" high="5">011110</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="not" extends="#instruction-alu-src2"> |
| <pattern low="0" high="5">011111</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="bit_extract" extends="#instruction-alu-src0-src1-src2"> |
| <pattern low="0" high="5">100000</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="popcount" extends="#instruction-alu-src2"> |
| <pattern low="0" high="5">100001</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="div" extends="#instruction-alu-src1-src2"> |
| <pattern low="0" high="5">100100</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="atomic_add" extends="#instruction-alu-atomic"> |
| <pattern low="0" high="5">100101</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="atomic_xchg" extends="#instruction-alu-atomic"> |
| <pattern low="0" high="5">100110</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="atomic_cmp_xchg" extends="#instruction-alu-atomic"> |
| <pattern low="0" high="5">100111</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="atomic_min" extends="#instruction-alu-atomic"> |
| <pattern low="0" high="5">101000</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="atomic_max" extends="#instruction-alu-atomic"> |
| <pattern low="0" high="5">101001</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="atomic_or" extends="#instruction-alu-atomic"> |
| <pattern low="0" high="5">101010</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="atomic_and" extends="#instruction-alu-atomic"> |
| <pattern low="0" high="5">101011</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="atomic_xor" extends="#instruction-alu-atomic"> |
| <pattern low="0" high="5">101100</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="bit_rev" extends="#instruction-alu-src0"> |
| <pattern low="0" high="5">101101</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="texldlpcf" extends="#instruction-tex-src0-src1-src2"> |
| <pattern low="0" high="5">101111</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="dp2" extends="#instruction-alu-src0-src1"> |
| <pattern low="0" high="5">110011</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="norm_dp2" extends="#instruction-alu-src0"> |
| <pattern low="0" high="5">110100</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="norm_dp3" extends="#instruction-alu-src0"> |
| <pattern low="0" high="5">110101</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| |
| <bitset name="norm_dp4" extends="#instruction-alu-src0"> |
| <pattern low="0" high="5">110110</pattern> <!-- OPC --> |
| <pattern pos="80">1</pattern> <!-- OPCODE_BIT6 --> |
| </bitset> |
| </isa> |