Made x86 ExtMachInsts distinguishable from each other by defining a real == and a real hash function.

--HG--
extra : convert_revision : 30f29a36f6ab44e67e62aaf81b685fbe1267c746
This commit is contained in:
Gabe Black 2007-04-04 14:27:00 +00:00
parent 6010c6ded4
commit 65fedeb5a7
2 changed files with 29 additions and 3 deletions

View file

@ -161,7 +161,26 @@ namespace X86ISA
inline static bool
operator == (const ExtMachInst &emi1, const ExtMachInst &emi2)
{
//Since this is empty, it's always equal
if(emi1.legacy != emi2.legacy)
return false;
if(emi1.rex != emi2.rex)
return false;
if(emi1.opcode.num != emi2.opcode.num)
return false;
if(emi1.opcode.op != emi2.opcode.op)
return false;
if(emi1.opcode.prefixA != emi2.opcode.prefixA)
return false;
if(emi1.opcode.prefixB != emi2.opcode.prefixB)
return false;
if(emi1.modRM != emi2.modRM)
return false;
if(emi1.sib != emi2.sib)
return false;
if(emi1.immediate != emi2.immediate)
return false;
if(emi1.displacement != emi2.displacement)
return false;
return true;
}

View file

@ -70,8 +70,15 @@ namespace __hash_namespace {
template<>
struct hash<X86ISA::ExtMachInst> {
size_t operator()(const X86ISA::ExtMachInst &emi) const {
//Because these are all the same, return 0
return 0;
return (((uint64_t)emi.legacy << 56) |
((uint64_t)emi.rex << 48) |
((uint64_t)emi.modRM << 40) |
((uint64_t)emi.sib << 32) |
((uint64_t)emi.opcode.num << 24) |
((uint64_t)emi.opcode.prefixA << 16) |
((uint64_t)emi.opcode.prefixB << 8) |
((uint64_t)emi.opcode.op)) ^
emi.immediate ^ emi.displacement;
};
};
}