"P4", "IA64", "Hammer"]
ordered_cpu_features = [
"FPU", "Cyrix", "AMD", "MMX", "3DNow", "SMM", "SSE", "SSE2",
- "SSE3", "SVM", "PadLock", "SSSE3", "SSE41", "SSE42"]
+ "SSE3", "SVM", "PadLock", "SSSE3", "SSE41", "SSE42", "SSE4a"]
unordered_cpu_features = ["Priv", "Prot", "Undoc", "Obs"]
def cpu_lcd(cpu1, cpu2):
add_insn("popcnt", "cnt", modifiers=[0xB8], cpu=["SSE42"])
#####################################################################
-# AMD SSE4.1 instructions
+# AMD SSE4a instructions
#####################################################################
add_group("extrq",
- cpu=["SSE41"],
+ cpu=["SSE4a"],
prefix=0x66,
opcode=[0x0F, 0x78],
operands=[Operand(type="SIMDReg", size=128, dest="EA"),
Operand(type="Imm", size=8, relaxed=True, dest="EA"),
Operand(type="Imm", size=8, relaxed=True, dest="Imm")])
add_group("extrq",
- cpu=["SSE41"],
+ cpu=["SSE4a"],
prefix=0x66,
opcode=[0x0F, 0x79],
operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
add_insn("extrq", "extrq")
add_group("insertq",
- cpu=["SSE41"],
+ cpu=["SSE4a"],
prefix=0xF2,
opcode=[0x0F, 0x78],
operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
Operand(type="Imm", size=8, relaxed=True, dest="EA"),
Operand(type="Imm", size=8, relaxed=True, dest="Imm")])
add_group("insertq",
- cpu=["SSE41"],
+ cpu=["SSE4a"],
prefix=0xF2,
opcode=[0x0F, 0x79],
operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
add_insn("insertq", "insertq")
add_group("movntsd",
- cpu=["SSE41"],
+ cpu=["SSE4a"],
prefix=0xF2,
opcode=[0x0F, 0x2B],
operands=[Operand(type="Mem", size=64, relaxed=True, dest="EA"),
add_insn("movntsd", "movntsd")
add_group("movntss",
- cpu=["SSE41"],
+ cpu=["SSE4a"],
prefix=0xF3,
opcode=[0x0F, 0x2B],
operands=[Operand(type="Mem", size=32, relaxed=True, dest="EA"),
BitVector_Bit_On(cpu, CPU_086);
}
+#define PROC_k10 10
+#define PROC_venice 9
#define PROC_hammer 8
#define PROC_k7 7
#define PROC_k6 6
BitVector_Bit_On(cpu, CPU_Prot);
BitVector_Bit_On(cpu, CPU_SMM);
BitVector_Bit_On(cpu, CPU_3DNow);
+ if (data >= PROC_k10)
+ BitVector_Bit_On(cpu, CPU_SSE4a);
+ if (data >= PROC_venice)
+ BitVector_Bit_On(cpu, CPU_SSE3);
if (data >= PROC_hammer)
BitVector_Bit_On(cpu, CPU_SSE2);
if (data >= PROC_k7)
k6, x86_cpu_amd, PROC_k6
k7, x86_cpu_amd, PROC_k7
athlon, x86_cpu_amd, PROC_k7
+k8, x86_cpu_amd, PROC_hammer
hammer, x86_cpu_amd, PROC_hammer
-sledgehammer, x86_cpu_amd, PROC_hammer
+clawhammer, x86_cpu_amd, PROC_hammer
opteron, x86_cpu_amd, PROC_hammer
athlon64, x86_cpu_amd, PROC_hammer
athlon-64, x86_cpu_amd, PROC_hammer
+venice, x86_cpu_amd, PROC_venice
+k10, x86_cpu_amd, PROC_k10
prescott, x86_cpu_intel, PROC_prescott
conroe, x86_cpu_intel, PROC_conroe
penryn, x86_cpu_intel, PROC_penryn
nossse3, x86_cpu_clear, CPU_SSSE3
sse4.1, x86_cpu_set, CPU_SSE41
nosse4.1, x86_cpu_clear, CPU_SSE41
+sse41, x86_cpu_set, CPU_SSE41
+nosse41, x86_cpu_clear, CPU_SSE41
sse4.2, x86_cpu_set, CPU_SSE42
nosse4.2, x86_cpu_clear, CPU_SSE42
+sse42, x86_cpu_set, CPU_SSE42
+nosse42, x86_cpu_clear, CPU_SSE42
+sse4a, x86_cpu_set, CPU_SSE4a
+nosse4a, x86_cpu_clear, CPU_SSE4a
sse4, x86_cpu_set_sse4, 0
nosse4, x86_cpu_clear_sse4, 0
%%