diff options
author | Peter Johnson <peter@tortall.net> | 2008-04-03 06:45:49 +0000 |
---|---|---|
committer | Peter Johnson <peter@tortall.net> | 2008-04-03 06:45:49 +0000 |
commit | 33cc7a02551e852c69f7a99a3da984d6a59f2894 (patch) | |
tree | 1d331cc5c23fc51bbcf9bda1b6debbe8a1e65448 /modules | |
parent | 33746edaa4ba14f7bbab6fbd29c8245a5f2a3670 (diff) | |
download | yasm-33cc7a02551e852c69f7a99a3da984d6a59f2894.tar.gz |
Add mnenomic condition codes for SSE5 comparison opcodes.
There are 16 condition codes for COM and 8 condition codes for PCOM/PCOMU.
Noticed by: nasm64developer@users.sf.net
svn path=/trunk/yasm/; revision=2048
Diffstat (limited to 'modules')
-rwxr-xr-x | modules/arch/x86/gen_x86_insn.py | 49 | ||||
-rw-r--r-- | modules/arch/x86/tests/Makefile.inc | 2 | ||||
-rw-r--r-- | modules/arch/x86/tests/sse5-cc.asm | 37 | ||||
-rw-r--r-- | modules/arch/x86/tests/sse5-cc.hex | 192 |
4 files changed, 280 insertions, 0 deletions
diff --git a/modules/arch/x86/gen_x86_insn.py b/modules/arch/x86/gen_x86_insn.py index d850feed..da0f3012 100755 --- a/modules/arch/x86/gen_x86_insn.py +++ b/modules/arch/x86/gen_x86_insn.py @@ -5019,11 +5019,48 @@ for sz in [32, 64]: Operand(type="Mem", size=sz, relaxed=True, dest="EA"), Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +# Condition code versions +add_group("sse5comcc", + cpu=["SSE5"], + modifiers=["Op2Add", "Imm8"], + opcode=[0x0F, 0x25, 0x00], + drex_oc0=0, + operands=[Operand(type="SIMDReg", size=128, dest="DREX"), + Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) + +for sz in [32, 64]: + add_group("sse5comcc%d" % sz, + cpu=["SSE5"], + modifiers=["Op2Add", "Imm8"], + opcode=[0x0F, 0x25, 0x00], + drex_oc0=0, + operands=[Operand(type="SIMDReg", size=128, dest="DREX"), + Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) + add_group("sse5comcc%d" % sz, + cpu=["SSE5"], + modifiers=["Op2Add", "Imm8"], + opcode=[0x0F, 0x25, 0x00], + drex_oc0=0, + operands=[Operand(type="SIMDReg", size=128, dest="DREX"), + Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Mem", size=sz, relaxed=True, dest="EA")]) + add_insn("comps", "sse5com", modifiers=[0x2C]) add_insn("compd", "sse5com", modifiers=[0x2D]) add_insn("comss", "sse5com32", modifiers=[0x2E]) add_insn("comsd", "sse5com64", modifiers=[0x2F]) +for ib, cc in enumerate([ "eq", "lt", "le", "unord", + "uneq", "unlt", "unle", "ord", + "ueq", "ult", "ule", "false", + "neq", "nlt", "nle", "true"]): + add_insn("com"+cc+"ps", "sse5comcc", modifiers=[0x2C, ib]) + add_insn("com"+cc+"pd", "sse5comcc", modifiers=[0x2D, ib]) + add_insn("com"+cc+"ss", "sse5comcc32", modifiers=[0x2E, ib]) + add_insn("com"+cc+"sd", "sse5comcc64", modifiers=[0x2F, ib]) + add_insn("pcomb", "sse5com", modifiers=[0x4C]) add_insn("pcomw", "sse5com", modifiers=[0x4D]) add_insn("pcomd", "sse5com", modifiers=[0x4E]) @@ -5034,6 +5071,18 @@ add_insn("pcomuw", "sse5com", modifiers=[0x6D]) add_insn("pcomud", "sse5com", modifiers=[0x6E]) add_insn("pcomuq", "sse5com", modifiers=[0x6F]) +for ib, cc in enumerate(["lt", "le", "gt", "ge", + "eq", "neq", "false", "true"]): + add_insn("pcom"+cc+"b", "sse5comcc", modifiers=[0x4C, ib]) + add_insn("pcom"+cc+"w", "sse5comcc", modifiers=[0x4D, ib]) + add_insn("pcom"+cc+"d", "sse5comcc", modifiers=[0x4E, ib]) + add_insn("pcom"+cc+"q", "sse5comcc", modifiers=[0x4F, ib]) + + add_insn("pcomu"+cc+"b", "sse5comcc", modifiers=[0x6C, ib]) + add_insn("pcomu"+cc+"w", "sse5comcc", modifiers=[0x6D, ib]) + add_insn("pcomu"+cc+"d", "sse5comcc", modifiers=[0x6E, ib]) + add_insn("pcomu"+cc+"q", "sse5comcc", modifiers=[0x6F, ib]) + add_group("cvtph2ps", cpu=["SSE5"], opcode=[0x0F, 0x7A, 0x30], diff --git a/modules/arch/x86/tests/Makefile.inc b/modules/arch/x86/tests/Makefile.inc index b500f419..09256a7d 100644 --- a/modules/arch/x86/tests/Makefile.inc +++ b/modules/arch/x86/tests/Makefile.inc @@ -170,6 +170,8 @@ EXTRA_DIST += modules/arch/x86/tests/sse5-all.asm EXTRA_DIST += modules/arch/x86/tests/sse5-all.hex EXTRA_DIST += modules/arch/x86/tests/sse5-basic.asm EXTRA_DIST += modules/arch/x86/tests/sse5-basic.hex +EXTRA_DIST += modules/arch/x86/tests/sse5-cc.asm +EXTRA_DIST += modules/arch/x86/tests/sse5-cc.hex EXTRA_DIST += modules/arch/x86/tests/sse5-err.asm EXTRA_DIST += modules/arch/x86/tests/sse5-err.errwarn EXTRA_DIST += modules/arch/x86/tests/ssewidth.asm diff --git a/modules/arch/x86/tests/sse5-cc.asm b/modules/arch/x86/tests/sse5-cc.asm new file mode 100644 index 00000000..6d778a6b --- /dev/null +++ b/modules/arch/x86/tests/sse5-cc.asm @@ -0,0 +1,37 @@ +[bits 16] +comeqpd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 00 +comltpd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 01 +comlepd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 02 +comunordpd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 03 +comuneqpd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 04 +comunltpd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 05 +comunlepd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 06 +comordpd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 07 +comueqpd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 08 +comultpd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 09 +comulepd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 0A +comfalsepd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 0B +comneqpd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 0C +comnltpd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 0D +comnlepd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 0E +comtruepd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 0F + +pcomltb xmm1, xmm2, xmm3 ; 0F 25 4C 323 10 00 +pcomleb xmm1, xmm2, xmm3 ; 0F 25 4C 323 10 01 +pcomgtb xmm1, xmm2, xmm3 ; 0F 25 4C 323 10 02 +pcomgeb xmm1, xmm2, xmm3 ; 0F 25 4C 323 10 03 +pcomeqb xmm1, xmm2, xmm3 ; 0F 25 4C 323 10 04 +pcomneqb xmm1, xmm2, xmm3 ; 0F 25 4C 323 10 05 +pcomfalseb xmm1, xmm2, xmm3 ; 0F 25 4C 323 10 06 +pcomtrueb xmm1, xmm2, xmm3 ; 0F 25 4C 323 10 07 + +pcomultb xmm1, xmm2, xmm3 ; 0F 25 6C 323 10 00 +pcomuleb xmm1, xmm2, xmm3 ; 0F 25 6C 323 10 01 +pcomugtb xmm1, xmm2, xmm3 ; 0F 25 6C 323 10 02 +pcomugeb xmm1, xmm2, xmm3 ; 0F 25 6C 323 10 03 +pcomueqb xmm1, xmm2, xmm3 ; 0F 25 6C 323 10 04 +pcomuneqb xmm1, xmm2, xmm3 ; 0F 25 6C 323 10 05 +pcomufalseb xmm1, xmm2, xmm3 ; 0F 25 6C 323 10 06 +pcomutrueb xmm1, xmm2, xmm3 ; 0F 25 6C 323 10 07 + + diff --git a/modules/arch/x86/tests/sse5-cc.hex b/modules/arch/x86/tests/sse5-cc.hex new file mode 100644 index 00000000..f565535e --- /dev/null +++ b/modules/arch/x86/tests/sse5-cc.hex @@ -0,0 +1,192 @@ +0f +25 +2d +d3 +10 +00 +0f +25 +2d +d3 +10 +01 +0f +25 +2d +d3 +10 +02 +0f +25 +2d +d3 +10 +03 +0f +25 +2d +d3 +10 +04 +0f +25 +2d +d3 +10 +05 +0f +25 +2d +d3 +10 +06 +0f +25 +2d +d3 +10 +07 +0f +25 +2d +d3 +10 +08 +0f +25 +2d +d3 +10 +09 +0f +25 +2d +d3 +10 +0a +0f +25 +2d +d3 +10 +0b +0f +25 +2d +d3 +10 +0c +0f +25 +2d +d3 +10 +0d +0f +25 +2d +d3 +10 +0e +0f +25 +2d +d3 +10 +0f +0f +25 +4c +d3 +10 +00 +0f +25 +4c +d3 +10 +01 +0f +25 +4c +d3 +10 +02 +0f +25 +4c +d3 +10 +03 +0f +25 +4c +d3 +10 +04 +0f +25 +4c +d3 +10 +05 +0f +25 +4c +d3 +10 +06 +0f +25 +4c +d3 +10 +07 +0f +25 +6c +d3 +10 +00 +0f +25 +6c +d3 +10 +01 +0f +25 +6c +d3 +10 +02 +0f +25 +6c +d3 +10 +03 +0f +25 +6c +d3 +10 +04 +0f +25 +6c +d3 +10 +05 +0f +25 +6c +d3 +10 +06 +0f +25 +6c +d3 +10 +07 |