]> granicus.if.org Git - yasm/commitdiff
Merge [2069], [2070], [2071], and [2072] from trunk to 0.7.x branch.
authorPeter Johnson <peter@tortall.net>
Fri, 25 Apr 2008 03:25:12 +0000 (03:25 -0000)
committerPeter Johnson <peter@tortall.net>
Fri, 25 Apr 2008 03:25:12 +0000 (03:25 -0000)
svn path=/branches/yasm-0.7.x/; revision=2073

modules/arch/x86/gen_x86_insn.py
modules/arch/x86/tests/avx.asm
modules/arch/x86/tests/avx.hex
modules/arch/x86/tests/fma.hex
tools/re2c/dfa.c
tools/re2c/scanner.c
tools/re2c/scanner.re

index 113d64a23b2673ea1e696e4faf7958fcd5e13202..e52ca64191b319a90725d5b9494e073773dc50c3 100755 (executable)
@@ -4131,7 +4131,7 @@ add_insn("subss",   "xmm_xmm32", modifiers=[0xF3, 0x5C])
 add_insn("ucomiss", "xmm_xmm32", modifiers=[0, 0x2E])
 
 add_insn("vaddss",   "xmm_xmm32", modifiers=[0xF3, 0x58, VEXL0], avx=True)
-add_insn("vcomiss",  "xmm_xmm32", modifiers=[0, 0x2F, VEXL0], avx=True)
+# vcomiss and vucomiss are only two operand
 add_insn("vdivss",   "xmm_xmm32", modifiers=[0xF3, 0x5E, VEXL0], avx=True)
 add_insn("vmaxss",   "xmm_xmm32", modifiers=[0xF3, 0x5F, VEXL0], avx=True)
 add_insn("vminss",   "xmm_xmm32", modifiers=[0xF3, 0x5D, VEXL0], avx=True)
@@ -4140,7 +4140,6 @@ add_insn("vrcpss",   "xmm_xmm32", modifiers=[0xF3, 0x53, VEXL0], avx=True)
 add_insn("vrsqrtss", "xmm_xmm32", modifiers=[0xF3, 0x52, VEXL0], avx=True)
 add_insn("vsqrtss",  "xmm_xmm32", modifiers=[0xF3, 0x51, VEXL0], avx=True)
 add_insn("vsubss",   "xmm_xmm32", modifiers=[0xF3, 0x5C, VEXL0], avx=True)
-add_insn("vucomiss", "xmm_xmm32", modifiers=[0, 0x2E, VEXL0], avx=True)
 
 add_group("ssecmp_128",
     cpu=["SSE"],
@@ -4790,7 +4789,7 @@ add_insn("sqrtsd",   "xmm_xmm64", modifiers=[0xF2, 0x51])
 add_insn("ucomisd",  "xmm_xmm64", modifiers=[0x66, 0x2E])
 
 add_insn("vaddsd",    "xmm_xmm64", modifiers=[0xF2, 0x58, VEXL0], avx=True)
-add_insn("vcomisd",   "xmm_xmm64", modifiers=[0x66, 0x2F, VEXL0], avx=True)
+# vcomisd and vucomisd are only two operand
 # vcvtdq2pd and vcvtps2pd can take ymm, xmm version
 add_insn("vcvtsd2ss", "xmm_xmm64", modifiers=[0xF2, 0x5A, VEXL0], avx=True)
 add_insn("vdivsd",    "xmm_xmm64", modifiers=[0xF2, 0x5E, VEXL0], avx=True)
@@ -4799,7 +4798,6 @@ add_insn("vminsd",    "xmm_xmm64", modifiers=[0xF2, 0x5D, VEXL0], avx=True)
 add_insn("vmulsd",    "xmm_xmm64", modifiers=[0xF2, 0x59, VEXL0], avx=True)
 add_insn("vsubsd",    "xmm_xmm64", modifiers=[0xF2, 0x5C, VEXL0], avx=True)
 add_insn("vsqrtsd",   "xmm_xmm64", modifiers=[0xF2, 0x51, VEXL0], avx=True)
-add_insn("vucomisd",  "xmm_xmm64", modifiers=[0x66, 0x2E, VEXL0], avx=True)
 
 add_insn("addpd",    "xmm_xmm128", modifiers=[0x66, 0x58], cpu=["SSE2"])
 add_insn("andnpd",   "xmm_xmm128", modifiers=[0x66, 0x55], cpu=["SSE2"])
@@ -5277,9 +5275,7 @@ add_insn("vpsignb",    "ssse3", modifiers=[0x08, VEXL0], avx=True)
 add_insn("vpsignw",    "ssse3", modifiers=[0x09, VEXL0], avx=True)
 add_insn("vpsignd",    "ssse3", modifiers=[0x0A, VEXL0], avx=True)
 add_insn("vpmulhrsw",  "ssse3", modifiers=[0x0B, VEXL0], avx=True)
-add_insn("vpabsb",     "ssse3", modifiers=[0x1C, VEXL0], avx=True)
-add_insn("vpabsw",     "ssse3", modifiers=[0x1D, VEXL0], avx=True)
-add_insn("vpabsd",     "ssse3", modifiers=[0x1E, VEXL0], avx=True)
+# vpabsb/vpabsw/vpabsd are 2 operand only
 
 add_group("ssse3imm",
     cpu=["SSSE3"],
@@ -5340,7 +5336,7 @@ add_insn("ptest",      "sse4", modifiers=[0x17])
 add_insn("vpackusdw",   "ssse3", modifiers=[0x2B, VEXL0], avx=True)
 add_insn("vpcmpeqq",    "ssse3", modifiers=[0x29, VEXL0], avx=True)
 add_insn("vpcmpgtq",    "ssse3", modifiers=[0x37, VEXL0], avx=True)
-add_insn("vphminposuw", "ssse3", modifiers=[0x41, VEXL0], avx=True)
+# vphminposuw is 2 operand only
 add_insn("vpmaxsb",     "ssse3", modifiers=[0x3C, VEXL0], avx=True)
 add_insn("vpmaxsd",     "ssse3", modifiers=[0x3D, VEXL0], avx=True)
 add_insn("vpmaxud",     "ssse3", modifiers=[0x3F, VEXL0], avx=True)
@@ -5351,7 +5347,7 @@ add_insn("vpminud",     "ssse3", modifiers=[0x3B, VEXL0], avx=True)
 add_insn("vpminuw",     "ssse3", modifiers=[0x3A, VEXL0], avx=True)
 add_insn("vpmuldq",     "ssse3", modifiers=[0x28, VEXL0], avx=True)
 add_insn("vpmulld",     "ssse3", modifiers=[0x40, VEXL0], avx=True)
-# vptest, however, uses SSE4 style (2 operand only)
+# vptest uses SSE4 style (2 operand only), and takes 256-bit operands
 add_insn("vptest", "sse4", modifiers=[0x17, VEXL0], avx=True)
 
 add_group("sse4imm_256",
@@ -5910,7 +5906,7 @@ add_group("avx_sse4imm",
     vex=128,
     prefix=0x66,
     opcode=[0x0F, 0x3A, 0x00],
-    operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"),
+    operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
               Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"),
               Operand(type="Imm", size=8, relaxed=True, dest="Imm")])
 add_group("avx_sse4imm",
@@ -5941,7 +5937,7 @@ add_group("vmovddup",
     vex=128,
     prefix=0x00,
     opcode=[0x0F, 0x00],
-    operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"),
+    operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
               Operand(type="SIMDReg", size=128, dest="EA")])
 add_group("vmovddup",
     cpu=["AVX"],
@@ -5949,7 +5945,7 @@ add_group("vmovddup",
     vex=128,
     prefix=0x00,
     opcode=[0x0F, 0x00],
-    operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"),
+    operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
               Operand(type="Mem", size=64, relaxed=True, dest="EA")])
 add_group("vmovddup",
     cpu=["AVX"],
@@ -5962,6 +5958,50 @@ add_group("vmovddup",
 
 add_insn("vmovddup",  "vmovddup", modifiers=[0xF2, 0x12])
 
+# Some xmm_xmm64 combinations only take two operands in AVX
+# (VEX.vvvv must be 1111b)
+add_group("avx_xmm_xmm64",
+    cpu=["SSE2"],
+    modifiers=["PreAdd", "Op1Add"],
+    vex=128,
+    prefix=0x00,
+    opcode=[0x0F, 0x00],
+    operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
+              Operand(type="SIMDReg", size=128, dest="EA")])
+add_group("avx_xmm_xmm64",
+    cpu=["SSE2"],
+    modifiers=["PreAdd", "Op1Add"],
+    vex=128,
+    prefix=0x00,
+    opcode=[0x0F, 0x00],
+    operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
+              Operand(type="Mem", size=64, relaxed=True, dest="EA")])
+
+add_insn("vcomisd",  "avx_xmm_xmm64", modifiers=[0x66, 0x2F], avx=True)
+add_insn("vucomisd", "avx_xmm_xmm64", modifiers=[0x66, 0x2E], avx=True)
+
+# Some xmm_xmm64 combinations only take two operands in AVX
+# (VEX.vvvv must be 1111b)
+add_group("avx_xmm_xmm32",
+    cpu=["SSE"],
+    modifiers=["PreAdd", "Op1Add"],
+    vex=128,
+    prefix=0x00,
+    opcode=[0x0F, 0x00],
+    operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
+              Operand(type="SIMDReg", size=128, dest="EA")])
+add_group("avx_xmm_xmm32",
+    cpu=["SSE"],
+    modifiers=["PreAdd", "Op1Add"],
+    vex=128,
+    prefix=0x00,
+    opcode=[0x0F, 0x00],
+    operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
+              Operand(type="Mem", size=32, relaxed=True, dest="EA")])
+
+add_insn("vcomiss",  "avx_xmm_xmm32", modifiers=[0, 0x2F], avx=True)
+add_insn("vucomiss", "avx_xmm_xmm32", modifiers=[0, 0x2E], avx=True)
+
 # Some conversion functions take ymm, xmm combination
 add_group("avx_cvt_xmm64",
     cpu=["AVX"],
@@ -5991,6 +6031,22 @@ add_group("avx_cvt_xmm64",
 add_insn("vcvtdq2pd", "avx_cvt_xmm64", modifiers=[0xF3, 0xE6])
 add_insn("vcvtps2pd", "avx_cvt_xmm64", modifiers=[0, 0x5A])
 
+# Some SSE3 opcodes are only two operand in AVX
+# (VEX.vvvv must be 1111b)
+add_group("avx_ssse3_2op",
+    cpu=["AVX"],
+    modifiers=["Op2Add"],
+    vex=128,
+    prefix=0x66,
+    opcode=[0x0F, 0x38, 0x00],
+    operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
+              Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")])
+
+add_insn("vpabsb",     "avx_ssse3_2op", modifiers=[0x1C], avx=True)
+add_insn("vpabsw",     "avx_ssse3_2op", modifiers=[0x1D], avx=True)
+add_insn("vpabsd",     "avx_ssse3_2op", modifiers=[0x1E], avx=True)
+add_insn("vphminposuw", "avx_ssse3_2op", modifiers=[0x41], avx=True)
+
 # Some conversion functions take xmm, ymm combination
 # Need separate x and y versions for gas mode
 add_group("avx_cvt_xmm128_x",
@@ -6040,8 +6096,8 @@ add_insn("vcvttpd2dqy", "avx_cvt_xmm128_y", modifiers=[0x66, 0xE6], parser="gas"
 add_insn("vcvttpd2dq", "avx_cvt_xmm128", modifiers=[0x66, 0xE6])
 
 # Instructions new to AVX
-add_insn("vptestps", "sse4", modifiers=[0x0E, VEXL0], avx=True)
-add_insn("vptestpd", "sse4", modifiers=[0x0F, VEXL0], avx=True)
+add_insn("vtestps", "sse4", modifiers=[0x0E, VEXL0], avx=True)
+add_insn("vtestpd", "sse4", modifiers=[0x0F, VEXL0], avx=True)
 
 add_group("vbroadcastss",
     cpu=["AVX"],
@@ -6318,9 +6374,9 @@ add_group("fma_128_256",
     prefix=0x66,
     opcode=[0x0F, 0x3A, 0x00],
     operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
-              Operand(type="SIMDReg", size=128, dest="VEX"),
+              Operand(type="SIMDReg", size=128, dest="VEXImmSrc"),
               Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"),
-              Operand(type="SIMDReg", size=128, dest="VEXImmSrc")])
+              Operand(type="SIMDReg", size=128, dest="VEX")])
 add_group("fma_128_256",
     cpu=["FMA"],
     modifiers=["Op2Add"],
@@ -6329,8 +6385,8 @@ add_group("fma_128_256",
     prefix=0x66,
     opcode=[0x0F, 0x3A, 0x00],
     operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
-              Operand(type="SIMDReg", size=128, dest="VEX"),
               Operand(type="SIMDReg", size=128, dest="VEXImmSrc"),
+              Operand(type="SIMDReg", size=128, dest="VEX"),
               Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")])
 add_group("fma_128_256",
     cpu=["FMA"],
@@ -6340,9 +6396,9 @@ add_group("fma_128_256",
     prefix=0x66,
     opcode=[0x0F, 0x3A, 0x00],
     operands=[Operand(type="SIMDReg", size=256, dest="Spare"),
-              Operand(type="SIMDReg", size=256, dest="VEX"),
+              Operand(type="SIMDReg", size=256, dest="VEXImmSrc"),
               Operand(type="SIMDRM", size=256, relaxed=True, dest="EA"),
-              Operand(type="SIMDReg", size=256, dest="VEXImmSrc")])
+              Operand(type="SIMDReg", size=256, dest="VEX")])
 add_group("fma_128_256",
     cpu=["FMA"],
     modifiers=["Op2Add"],
@@ -6351,8 +6407,8 @@ add_group("fma_128_256",
     prefix=0x66,
     opcode=[0x0F, 0x3A, 0x00],
     operands=[Operand(type="SIMDReg", size=256, dest="Spare"),
-              Operand(type="SIMDReg", size=256, dest="VEX"),
               Operand(type="SIMDReg", size=256, dest="VEXImmSrc"),
+              Operand(type="SIMDReg", size=256, dest="VEX"),
               Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")])
 
 add_insn("vfmaddpd", "fma_128_256", modifiers=[0x69])
@@ -6377,9 +6433,9 @@ for sz in [32, 64]:
         prefix=0x66,
         opcode=[0x0F, 0x3A, 0x00],
         operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
-                  Operand(type="SIMDReg", size=128, dest="VEX"),
+                  Operand(type="SIMDReg", size=128, dest="VEXImmSrc"),
                   Operand(type="SIMDReg", size=128, dest="EA"),
-                  Operand(type="SIMDReg", size=128, dest="VEXImmSrc")])
+                  Operand(type="SIMDReg", size=128, dest="VEX")])
     add_group("fma_128_m%d" % sz,
         cpu=["FMA"],
         modifiers=["Op2Add"],
@@ -6388,9 +6444,9 @@ for sz in [32, 64]:
         prefix=0x66,
         opcode=[0x0F, 0x3A, 0x00],
         operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
-                  Operand(type="SIMDReg", size=128, dest="VEX"),
+                  Operand(type="SIMDReg", size=128, dest="VEXImmSrc"),
                   Operand(type="Mem", size=sz, relaxed=True, dest="EA"),
-                  Operand(type="SIMDReg", size=128, dest="VEXImmSrc")])
+                  Operand(type="SIMDReg", size=128, dest="VEX")])
     add_group("fma_128_m%d" % sz,
         cpu=["FMA"],
         modifiers=["Op2Add"],
@@ -6399,8 +6455,8 @@ for sz in [32, 64]:
         prefix=0x66,
         opcode=[0x0F, 0x3A, 0x00],
         operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
-                  Operand(type="SIMDReg", size=128, dest="VEX"),
                   Operand(type="SIMDReg", size=128, dest="VEXImmSrc"),
+                  Operand(type="SIMDReg", size=128, dest="VEX"),
                   Operand(type="Mem", size=sz, relaxed=True, dest="EA")])
 
 add_insn("vfmaddsd", "fma_128_m64", modifiers=[0x6B])
index 45495033308600127303191f348daba37c8b1475..2a2ad59463f908ade6619496c512be0f594fca76 100644 (file)
@@ -2154,19 +2154,19 @@ vptest ymm1, ymm2
 vptest ymm1, [rax]
 vptest ymm1, yword [rax]
 
-vptestps xmm1, xmm2
-vptestps xmm1, [rax]
-vptestps xmm1, dqword [rax]
-vptestps ymm1, ymm2
-vptestps ymm1, [rax]
-vptestps ymm1, yword [rax]
-
-vptestpd xmm1, xmm2
-vptestpd xmm1, [rax]
-vptestpd xmm1, dqword [rax]
-vptestpd ymm1, ymm2
-vptestpd ymm1, [rax]
-vptestpd ymm1, yword [rax]
+vtestps xmm1, xmm2
+vtestps xmm1, [rax]
+vtestps xmm1, dqword [rax]
+vtestps ymm1, ymm2
+vtestps ymm1, [rax]
+vtestps ymm1, yword [rax]
+
+vtestpd xmm1, xmm2
+vtestpd xmm1, [rax]
+vtestpd xmm1, dqword [rax]
+vtestpd ymm1, ymm2
+vtestpd ymm1, [rax]
+vtestpd ymm1, yword [rax]
 
 psubb xmm1, xmm2
 psubb xmm1, [rax]
index 39d5c839bc972dd98c050feb6d42eadec675db1f..f0fb5631b4b1faf07ee6481b8afe1e618be7e192 100644 (file)
@@ -1049,15 +1049,15 @@ ca
 2f 
 08 
 c5 
-f1 
+f9 
 2f 
 ca 
 c5 
-f1 
+f9 
 2f 
 08 
 c5 
-f1 
+f9 
 2f 
 08 
 0f 
@@ -1070,15 +1070,15 @@ ca
 2f 
 08 
 c5 
-f0 
+f8 
 2f 
 ca 
 c5 
-f0 
+f8 
 2f 
 08 
 c5 
-f0 
+f8 
 2f 
 08 
 f3 
@@ -3081,15 +3081,15 @@ f2
 12 
 08 
 c5 
-f3 
+fb 
 12 
 ca 
 c5 
-f3 
+fb 
 12 
 08 
 c5 
-f3 
+fb 
 12 
 08 
 c5 
@@ -4120,17 +4120,17 @@ ca
 08 
 c4 
 e2 
-71 
+79 
 1c 
 ca 
 c4 
 e2 
-71 
+79 
 1c 
 08 
 c4 
 e2 
-71 
+79 
 1c 
 08 
 66 
@@ -4150,17 +4150,17 @@ ca
 08 
 c4 
 e2 
-71 
+79 
 1d 
 ca 
 c4 
 e2 
-71 
+79 
 1d 
 08 
 c4 
 e2 
-71 
+79 
 1d 
 08 
 66 
@@ -4180,17 +4180,17 @@ ca
 08 
 c4 
 e2 
-71 
+79 
 1e 
 ca 
 c4 
 e2 
-71 
+79 
 1e 
 08 
 c4 
 e2 
-71 
+79 
 1e 
 08 
 66 
@@ -6024,17 +6024,17 @@ ca
 08 
 c4 
 e2 
-71 
+79 
 41 
 ca 
 c4 
 e2 
-71 
+79 
 41 
 08 
 c4 
 e2 
-71 
+79 
 41 
 08 
 66 
@@ -9465,19 +9465,19 @@ ca
 05 
 c4 
 e3 
-71 
+79 
 09 
 ca 
 05 
 c4 
 e3 
-71 
+79 
 09 
 08 
 05 
 c4 
 e3 
-71 
+79 
 09 
 08 
 05 
@@ -9519,19 +9519,19 @@ ca
 05 
 c4 
 e3 
-71 
+79 
 08 
 ca 
 05 
 c4 
 e3 
-71 
+79 
 08 
 08 
 05 
 c4 
 e3 
-71 
+79 
 08 
 08 
 05 
 2e 
 08 
 c5 
-f1 
+f9 
 2e 
 ca 
 c5 
-f1 
+f9 
 2e 
 08 
 c5 
-f1 
+f9 
 2e 
 08 
 0f 
 2e 
 08 
 c5 
-f0 
+f8 
 2e 
 ca 
 c5 
-f0 
+f8 
 2e 
 08 
 c5 
-f0 
+f8 
 2e 
 08 
 66 
index a1193179e5e70578c8ec1152f4906204c1a56c4d..7f51092adb8b6d84082412a875c85972765e5840 100644 (file)
 c4 
 e3 
-7
+6
 69 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 69 
 00 
-3
+1
 c4 
 e3 
-7
+6
 69 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 69 
 00 
-2
+1
 c4 
 e3 
-f1 
+e9 
 69 
 00 
-2
+1
 c4 
 e3 
-7
+6
 69 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 69 
 00 
-3
+1
 c4 
 e3 
-7
+6
 69 
 00 
-3
+1
 c4 
 e3 
-f5 
+ed 
 69 
 00 
-2
+1
 c4 
 e3 
-f5 
+ed 
 69 
 00 
-2
+1
 c4 
 e3 
-7
+6
 68 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 68 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 68 
 00 
-2
+1
 c4 
 e3 
-7
+6
 68 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 68 
 00 
-3
+1
 c4 
 e3 
-f5 
+ed 
 68 
 00 
-2
+1
 c4 
 e3 
-7
+6
 6b 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 6b 
 00 
-3
+1
 c4 
 e3 
-7
+6
 6b 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 6b 
 00 
-2
+1
 c4 
 e3 
-f1 
+e9 
 6b 
 00 
-2
+1
 c4 
 e3 
-7
+6
 6a 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 6a 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 6a 
 00 
-2
+1
 c4 
 e3 
-7
+6
 5d 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 5d 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 5d 
 00 
-2
+1
 c4 
 e3 
-7
+6
 5d 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 5d 
 00 
-3
+1
 c4 
 e3 
-f5 
+ed 
 5d 
 00 
-2
+1
 c4 
 e3 
-7
+6
 5c 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 5c 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 5c 
 00 
-2
+1
 c4 
 e3 
-7
+6
 5c 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 5c 
 00 
-3
+1
 c4 
 e3 
-f5 
+ed 
 5c 
 00 
-2
+1
 c4 
 e3 
-7
+6
 6d 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 6d 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 6d 
 00 
-2
+1
 c4 
 e3 
-7
+6
 6d 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 6d 
 00 
-3
+1
 c4 
 e3 
-f5 
+ed 
 6d 
 00 
-2
+1
 c4 
 e3 
-7
+6
 6c 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 6c 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 6c 
 00 
-2
+1
 c4 
 e3 
-7
+6
 6c 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 6c 
 00 
-3
+1
 c4 
 e3 
-f5 
+ed 
 6c 
 00 
-2
+1
 c4 
 e3 
-7
+6
 6f 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 6f 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 6f 
 00 
-2
+1
 c4 
 e3 
-7
+6
 6e 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 6e 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 6e 
 00 
-2
+1
 c4 
 e3 
-7
+6
 79 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 79 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 79 
 00 
-2
+1
 c4 
 e3 
-7
+6
 79 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 79 
 00 
-3
+1
 c4 
 e3 
-f5 
+ed 
 79 
 00 
-2
+1
 c4 
 e3 
-7
+6
 78 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 78 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 78 
 00 
-2
+1
 c4 
 e3 
-7
+6
 78 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 78 
 00 
-3
+1
 c4 
 e3 
-f5 
+ed 
 78 
 00 
-2
+1
 c4 
 e3 
-7
+6
 7b 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 7b 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 7b 
 00 
-2
+1
 c4 
 e3 
-7
+6
 7a 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 7a 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 7a 
 00 
-2
+1
 c4 
 e3 
-7
+6
 7d 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 7d 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 7d 
 00 
-2
+1
 c4 
 e3 
-7
+6
 7d 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 7d 
 00 
-3
+1
 c4 
 e3 
-f5 
+ed 
 7d 
 00 
-2
+1
 c4 
 e3 
-7
+6
 7c 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 7c 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 7c 
 00 
-2
+1
 c4 
 e3 
-7
+6
 7c 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 7c 
 00 
-3
+1
 c4 
 e3 
-f5 
+ed 
 7c 
 00 
-2
+1
 c4 
 e3 
-7
+6
 7f 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 7f 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 7f 
 00 
-2
+1
 c4 
 e3 
-7
+6
 7e 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 7e 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 7e 
 00 
-2
+1
index e54deecc1a6dda9634b77d0fff8ec2812556839c..16509de2a9185d2597dd1458698df4413ebbbcfb 100644 (file)
@@ -76,10 +76,14 @@ State *
 State_new(void)
 {
     State *s = malloc(sizeof(State));
+    s->label = 0;
     s->rule = NULL;
+    s->next = NULL;
     s->link = NULL;
+    s->depth = 0;
     s->kCount = 0;
     s->kernel = NULL;
+    s->isBase = 0;
     s->action = NULL;
     s->go.nSpans = 0;
     s->go.span = NULL;
index 4640ee4ad02e72e4a12ec4debec6c551f5966223..034c935bd9067b3cdea31cacd62e24d4fd98d6d4 100644 (file)
@@ -48,7 +48,7 @@ fill(Scanner *s, unsigned char *cursor)
            s->lim -= cnt;
        }
        if((s->top - s->lim) < BSIZE){
-           unsigned char *buf = malloc(((s->lim - s->bot) + BSIZE));
+           unsigned char *buf = malloc(((s->lim - s->bot) + BSIZE) + 1);
            memcpy(buf, s->tok, s->lim - s->tok);
            s->tok = buf;
            s->ptr = &buf[s->ptr - s->bot];
index 10af0883ed288f0e00f75531dffc61afcce07328..423835b6c0299e1adde98dc78e551f91696578b7 100644 (file)
@@ -45,7 +45,7 @@ fill(Scanner *s, unsigned char *cursor)
            s->lim -= cnt;
        }
        if((s->top - s->lim) < BSIZE){
-           unsigned char *buf = malloc(((s->lim - s->bot) + BSIZE));
+           unsigned char *buf = malloc(((s->lim - s->bot) + BSIZE) + 1);
            memcpy(buf, s->tok, s->lim - s->tok);
            s->tok = buf;
            s->ptr = &buf[s->ptr - s->bot];