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"],
[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
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