Merge [2069], [2070], [2071], and [2072] from trunk to 0.7.x branch.

svn path=/branches/yasm-0.7.x/; revision=2073
This commit is contained in:
Peter Johnson 2008-04-25 03:25:12 +00:00
parent 01ef04cee1
commit 1ed090be23
7 changed files with 312 additions and 252 deletions

View file

@ -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])

View 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]
vtestps xmm1, xmm2
vtestps xmm1, [rax]
vtestps xmm1, dqword [rax]
vtestps ymm1, ymm2
vtestps ymm1, [rax]
vtestps ymm1, yword [rax]
vptestpd xmm1, xmm2
vptestpd xmm1, [rax]
vptestpd xmm1, dqword [rax]
vptestpd ymm1, ymm2
vptestpd ymm1, [rax]
vptestpd 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]

View 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
@ -10111,15 +10111,15 @@ ca
2e
08
c5
f1
f9
2e
ca
c5
f1
f9
2e
08
c5
f1
f9
2e
08
0f
@ -10132,15 +10132,15 @@ ca
2e
08
c5
f0
f8
2e
ca
c5
f0
f8
2e
08
c5
f0
f8
2e
08
66

View file

@ -1,540 +1,540 @@
c4
e3
71
61
69
c2
30
10
c4
e3
71
61
69
00
30
10
c4
e3
71
61
69
00
30
10
c4
e3
f1
e9
69
00
20
10
c4
e3
f1
e9
69
00
20
10
c4
e3
75
65
69
c2
30
10
c4
e3
75
65
69
00
30
10
c4
e3
75
65
69
00
30
10
c4
e3
f5
ed
69
00
20
10
c4
e3
f5
ed
69
00
20
10
c4
e3
71
61
68
c2
30
10
c4
e3
71
61
68
00
30
10
c4
e3
f1
e9
68
00
20
10
c4
e3
75
65
68
c2
30
10
c4
e3
75
65
68
00
30
10
c4
e3
f5
ed
68
00
20
10
c4
e3
71
61
6b
c2
30
10
c4
e3
71
61
6b
00
30
10
c4
e3
71
61
6b
00
30
10
c4
e3
f1
e9
6b
00
20
10
c4
e3
f1
e9
6b
00
20
10
c4
e3
71
61
6a
c2
30
10
c4
e3
71
61
6a
00
30
10
c4
e3
f1
e9
6a
00
20
10
c4
e3
71
61
5d
c2
30
10
c4
e3
71
61
5d
00
30
10
c4
e3
f1
e9
5d
00
20
10
c4
e3
75
65
5d
c2
30
10
c4
e3
75
65
5d
00
30
10
c4
e3
f5
ed
5d
00
20
10
c4
e3
71
61
5c
c2
30
10
c4
e3
71
61
5c
00
30
10
c4
e3
f1
e9
5c
00
20
10
c4
e3
75
65
5c
c2
30
10
c4
e3
75
65
5c
00
30
10
c4
e3
f5
ed
5c
00
20
10
c4
e3
71
61
6d
c2
30
10
c4
e3
71
61
6d
00
30
10
c4
e3
f1
e9
6d
00
20
10
c4
e3
75
65
6d
c2
30
10
c4
e3
75
65
6d
00
30
10
c4
e3
f5
ed
6d
00
20
10
c4
e3
71
61
6c
c2
30
10
c4
e3
71
61
6c
00
30
10
c4
e3
f1
e9
6c
00
20
10
c4
e3
75
65
6c
c2
30
10
c4
e3
75
65
6c
00
30
10
c4
e3
f5
ed
6c
00
20
10
c4
e3
71
61
6f
c2
30
10
c4
e3
71
61
6f
00
30
10
c4
e3
f1
e9
6f
00
20
10
c4
e3
71
61
6e
c2
30
10
c4
e3
71
61
6e
00
30
10
c4
e3
f1
e9
6e
00
20
10
c4
e3
71
61
79
c2
30
10
c4
e3
71
61
79
00
30
10
c4
e3
f1
e9
79
00
20
10
c4
e3
75
65
79
c2
30
10
c4
e3
75
65
79
00
30
10
c4
e3
f5
ed
79
00
20
10
c4
e3
71
61
78
c2
30
10
c4
e3
71
61
78
00
30
10
c4
e3
f1
e9
78
00
20
10
c4
e3
75
65
78
c2
30
10
c4
e3
75
65
78
00
30
10
c4
e3
f5
ed
78
00
20
10
c4
e3
71
61
7b
c2
30
10
c4
e3
71
61
7b
00
30
10
c4
e3
f1
e9
7b
00
20
10
c4
e3
71
61
7a
c2
30
10
c4
e3
71
61
7a
00
30
10
c4
e3
f1
e9
7a
00
20
10
c4
e3
71
61
7d
c2
30
10
c4
e3
71
61
7d
00
30
10
c4
e3
f1
e9
7d
00
20
10
c4
e3
75
65
7d
c2
30
10
c4
e3
75
65
7d
00
30
10
c4
e3
f5
ed
7d
00
20
10
c4
e3
71
61
7c
c2
30
10
c4
e3
71
61
7c
00
30
10
c4
e3
f1
e9
7c
00
20
10
c4
e3
75
65
7c
c2
30
10
c4
e3
75
65
7c
00
30
10
c4
e3
f5
ed
7c
00
20
10
c4
e3
71
61
7f
c2
30
10
c4
e3
71
61
7f
00
30
10
c4
e3
f1
e9
7f
00
20
10
c4
e3
71
61
7e
c2
30
10
c4
e3
71
61
7e
00
30
10
c4
e3
f1
e9
7e
00
20
10

View 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;

View 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];

View 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];