m256 arguments, MMX exception
This commit is contained in:
@@ -86,18 +86,18 @@ func arg(t string) string {
|
||||
"imm32": fmt.Sprintf("$%d", math.MaxInt32), // <xs:enumeration value="imm32" />
|
||||
"imm64": fmt.Sprintf("$%d", math.MaxInt64), // <xs:enumeration value="imm64" />
|
||||
|
||||
"al": "AL", // <xs:enumeration value="al" />
|
||||
"cl": "CL", // <xs:enumeration value="cl" />
|
||||
"r8": "CH", // <xs:enumeration value="r8" />
|
||||
"ax": "AX", // <xs:enumeration value="ax" />
|
||||
"r16": "SI", // <xs:enumeration value="r16" />
|
||||
"eax": "AX", // <xs:enumeration value="eax" />
|
||||
"r32": "DX", // <xs:enumeration value="r32" />
|
||||
"rax": "AX", // <xs:enumeration value="rax" />
|
||||
"r64": "R15", // <xs:enumeration value="r64" />
|
||||
// <xs:enumeration value="mm" />
|
||||
"xmm0": "X0", // <xs:enumeration value="xmm0" />
|
||||
"xmm": "X7", // <xs:enumeration value="xmm" />
|
||||
"al": "AL", // <xs:enumeration value="al" />
|
||||
"cl": "CL", // <xs:enumeration value="cl" />
|
||||
"r8": "CH", // <xs:enumeration value="r8" />
|
||||
"ax": "AX", // <xs:enumeration value="ax" />
|
||||
"r16": "SI", // <xs:enumeration value="r16" />
|
||||
"eax": "AX", // <xs:enumeration value="eax" />
|
||||
"r32": "DX", // <xs:enumeration value="r32" />
|
||||
"rax": "AX", // <xs:enumeration value="rax" />
|
||||
"r64": "R15", // <xs:enumeration value="r64" />
|
||||
"mm": "M5", // <xs:enumeration value="mm" />
|
||||
"xmm0": "X0", // <xs:enumeration value="xmm0" />
|
||||
"xmm": "X7", // <xs:enumeration value="xmm" />
|
||||
// <xs:enumeration value="xmm{k}" />
|
||||
// <xs:enumeration value="xmm{k}{z}" />
|
||||
"ymm": "Y13", // <xs:enumeration value="ymm" />
|
||||
@@ -122,7 +122,7 @@ func arg(t string) string {
|
||||
// <xs:enumeration value="m64{k}{z}" />
|
||||
"m128": "128(AX)(CX*2)", // <xs:enumeration value="m128" />
|
||||
// <xs:enumeration value="m128{k}{z}" />
|
||||
// <xs:enumeration value="m256" />
|
||||
"m256": "256(AX)(CX*2)", // <xs:enumeration value="m256" />
|
||||
// <xs:enumeration value="m256{k}{z}" />
|
||||
// <xs:enumeration value="m512" />
|
||||
// <xs:enumeration value="m512{k}{z}" />
|
||||
|
||||
@@ -97,7 +97,7 @@ func (l Loader) include(f opcodesxml.Form) bool {
|
||||
for _, isa := range f.ISA {
|
||||
switch isa.ID {
|
||||
// AMD-only.
|
||||
case "TBM", "CLZERO", "FMA4", "XOP", "SSE4A":
|
||||
case "TBM", "CLZERO", "FMA4", "XOP", "SSE4A", "3dnow!", "3dnow!+":
|
||||
return false
|
||||
// Incomplete support for some prefetching instructions.
|
||||
case "PREFETCH", "PREFETCHW", "PREFETCHWT1", "CLWB":
|
||||
@@ -113,6 +113,17 @@ func (l Loader) include(f opcodesxml.Form) bool {
|
||||
}
|
||||
}
|
||||
|
||||
// Go appears to have skeleton support for MMX instructions. See the many TODO lines in the testcases:
|
||||
// Reference: https://github.com/golang/go/blob/649b89377e91ad6dbe710784f9e662082d31a1ff/src/cmd/asm/internal/asm/testdata/amd64enc.s#L3310-L3312
|
||||
//
|
||||
// //TODO: PALIGNR $7, (BX), M2 // 0f3a0f1307
|
||||
// //TODO: PALIGNR $7, (R11), M2 // 410f3a0f1307
|
||||
// //TODO: PALIGNR $7, M2, M2 // 0f3a0fd207
|
||||
//
|
||||
if f.MMXMode == "MMX" {
|
||||
return false
|
||||
}
|
||||
|
||||
// x86 csv contains a number of CMOV* instructions which are actually not valid
|
||||
// Go instructions. The valid Go forms should have different opcodes from GNU.
|
||||
// Therefore a decent "heuristic" is CMOV* instructions that do not have
|
||||
|
||||
Reference in New Issue
Block a user