From: Peter Johnson Date: Fri, 4 Apr 2008 02:10:24 +0000 (-0000) Subject: PCOMUcc should have been PCOMccU. X-Git-Tag: v0.7.0~9 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=120c28e2d317ab874dedc5948e64a63b94f3166d;p=yasm PCOMUcc should have been PCOMccU. Fix up condition code naming and add aliases to match SSE5 added to GNU binutils as follows: COMcc: - swapped uneq, unlt, and unle with neq, nlt, and nle - added unge, ungt, ne, uge, ugt, nge, ngt, une, ge, and gt aliases PCOMcc: - added ne alias (for neq) svn path=/trunk/yasm/; revision=2049 --- diff --git a/modules/arch/x86/gen_x86_insn.py b/modules/arch/x86/gen_x86_insn.py index da0f3012..815dfcab 100755 --- a/modules/arch/x86/gen_x86_insn.py +++ b/modules/arch/x86/gen_x86_insn.py @@ -5047,41 +5047,51 @@ for sz in [32, 64]: 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]) -add_insn("pcomq", "sse5com", modifiers=[0x4F]) - -add_insn("pcomub", "sse5com", modifiers=[0x6C]) -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]) +sse5coms = [(0, ""), + (0x0, "eq"), + (0x1, "lt"), (0x1, "unge"), + (0x2, "le"), (0x2, "ungt"), + (0x3, "unord"), + (0x4, "ne"), (0x4, "neq"), + (0x5, "nlt"), (0x5, "uge"), + (0x6, "nle"), (0x6, "ugt"), + (0x7, "ord"), + (0x8, "ueq"), + (0x9, "ult"), (0x9, "nge"), + (0xa, "ule"), (0xa, "ngt"), + (0xb, "false"), + (0xc, "une"), (0xc, "uneq"), + (0xd, "unlt"), (0xd, "ge"), + (0xe, "unle"), (0xe, "gt"), + (0xf, "true")] +for ib, cc in sse5coms: + if cc: + iname = "sse5comcc" + else: + iname = "sse5com" + add_insn("com"+cc+"ps", iname, modifiers=[0x2C, ib]) + add_insn("com"+cc+"pd", iname, modifiers=[0x2D, ib]) + add_insn("com"+cc+"ss", iname+"32", modifiers=[0x2E, ib]) + add_insn("com"+cc+"sd", iname+"64", modifiers=[0x2F, ib]) + +sse5coms = list(enumerate(["lt", "le", "gt", "ge", + "eq", "neq", "false", "true"])) +sse5coms.append((5, "ne")) +sse5coms.append((0, "")) +for ib, cc in sse5coms: + if cc: + iname = "sse5comcc" + else: + iname = "sse5com" + add_insn("pcom"+cc+"b", iname, modifiers=[0x4C, ib]) + add_insn("pcom"+cc+"w", iname, modifiers=[0x4D, ib]) + add_insn("pcom"+cc+"d", iname, modifiers=[0x4E, ib]) + add_insn("pcom"+cc+"q", iname, modifiers=[0x4F, ib]) + + add_insn("pcom"+cc+"ub", iname, modifiers=[0x6C, ib]) + add_insn("pcom"+cc+"uw", iname, modifiers=[0x6D, ib]) + add_insn("pcom"+cc+"ud", iname, modifiers=[0x6E, ib]) + add_insn("pcom"+cc+"uq", iname, modifiers=[0x6F, ib]) add_group("cvtph2ps", cpu=["SSE5"], diff --git a/modules/arch/x86/tests/sse5-cc.asm b/modules/arch/x86/tests/sse5-cc.asm index 6d778a6b..309f5005 100644 --- a/modules/arch/x86/tests/sse5-cc.asm +++ b/modules/arch/x86/tests/sse5-cc.asm @@ -1,19 +1,29 @@ [bits 16] comeqpd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 00 comltpd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 01 +comungepd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 01 comlepd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 02 +comungtpd 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 +comnepd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 04 +comneqpd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 04 +comnltpd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 05 +comugepd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 05 +comnlepd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 06 +comugtpd 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 +comngepd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 09 comulepd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 0A +comngtpd 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 +comunepd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 0C +comuneqpd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 0C +comunltpd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 0D +comgepd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 0D +comunlepd xmm1, xmm2, xmm3 ; 0F 25 2D 323 10 0E +comgtpd 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 @@ -22,16 +32,18 @@ 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 +pcomneb 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 +pcomltub xmm1, xmm2, xmm3 ; 0F 25 6C 323 10 00 +pcomleub xmm1, xmm2, xmm3 ; 0F 25 6C 323 10 01 +pcomgtub xmm1, xmm2, xmm3 ; 0F 25 6C 323 10 02 +pcomgeub xmm1, xmm2, xmm3 ; 0F 25 6C 323 10 03 +pcomequb xmm1, xmm2, xmm3 ; 0F 25 6C 323 10 04 +pcomnequb xmm1, xmm2, xmm3 ; 0F 25 6C 323 10 05 +pcomneub xmm1, xmm2, xmm3 ; 0F 25 6C 323 10 05 +pcomfalseub xmm1, xmm2, xmm3 ; 0F 25 6C 323 10 06 +pcomtrueub 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 index f565535e..d41b9cf8 100644 --- a/modules/arch/x86/tests/sse5-cc.hex +++ b/modules/arch/x86/tests/sse5-cc.hex @@ -15,6 +15,18 @@ d3 2d d3 10 +01 +0f +25 +2d +d3 +10 +02 +0f +25 +2d +d3 +10 02 0f 25 @@ -33,12 +45,30 @@ d3 2d d3 10 +04 +0f +25 +2d +d3 +10 05 0f 25 2d d3 10 +05 +0f +25 +2d +d3 +10 +06 +0f +25 +2d +d3 +10 06 0f 25 @@ -63,6 +93,18 @@ d3 2d d3 10 +09 +0f +25 +2d +d3 +10 +0a +0f +25 +2d +d3 +10 0a 0f 25 @@ -81,6 +123,18 @@ d3 2d d3 10 +0c +0f +25 +2d +d3 +10 +0d +0f +25 +2d +d3 +10 0d 0f 25 @@ -93,6 +147,12 @@ d3 2d d3 10 +0e +0f +25 +2d +d3 +10 0f 0f 25 @@ -135,6 +195,12 @@ d3 4c d3 10 +05 +0f +25 +4c +d3 +10 06 0f 25 @@ -183,6 +249,12 @@ d3 6c d3 10 +05 +0f +25 +6c +d3 +10 06 0f 25