]> granicus.if.org Git - yasm/commitdiff
PCOMUcc should have been PCOMccU.
authorPeter Johnson <peter@tortall.net>
Fri, 4 Apr 2008 02:10:24 +0000 (02:10 -0000)
committerPeter Johnson <peter@tortall.net>
Fri, 4 Apr 2008 02:10:24 +0000 (02:10 -0000)
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

modules/arch/x86/gen_x86_insn.py
modules/arch/x86/tests/sse5-cc.asm
modules/arch/x86/tests/sse5-cc.hex

index da0f3012c75ef030d91eb59fffba7fa85961452b..815dfcab7a4f011462cb4ce35a40ea95207ae96b 100755 (executable)
@@ -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"],
index 6d778a6bb83089eca343524e560e5590354d9265..309f5005806f009893bb91035b5e61c03f4872c6 100644 (file)
@@ -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
 
 
index f565535ef63212e488b284f680606f98a0ea6815..d41b9cf8dd8132b028bb094c896ba0ab5e72634f 100644 (file)
@@ -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