holey-toys/hashtable-brute.py
2024-03-04 22:24:03 +02:00

37 lines
1.6 KiB
Python

mnemonics = [
"un", "tx", "nop", "add8", "add16", "add32", "add64", "sub8", "sub16",
"sub32", "sub64", "mul8", "mul16", "mul32", "mul64", "and", "or", "xor",
"slu8", "slu16", "slu32", "slu64", "sru8", "sru16", "sru32", "sru64",
"srs8", "srs16", "srs32", "srs64", "cmpu", "cmps", "diru8", "diru16",
"diru32", "diru64", "dirs8", "dirs16", "dirs32", "dirs64", "neg", "not",
"sxt8", "sxt16", "sxt32", "addi8", "addi16", "addi32", "addi64", "muli8",
"muli16", "muli32", "muli64", "andi", "ori", "xori", "slui8", "slui16",
"slui32", "slui64", "srui8", "srui16", "srui32", "srui64", "srsi8",
"srsi16", "srsi32", "srsi64", "cmpui", "cmpsi", "cp", "swa", "li8", "li16",
"li32", "li64", "lra", "ld", "st", "ldr", "str", "bmc", "brc", "jmp", "jal",
"jala", "jeq", "jne", "jltu", "jgtu", "jlts", "jgts", "eca", "ebp",
"fadd32", "fadd64", "fsub32", "fsub64", "fmul32", "fmul64", "fdiv32",
"fdiv64", "fma32", "fma64", "fcmplt32", "fcmplt64", "fcmpgt32", "fcmpgt64",
"itf32", "itf64", "fti32", "fti64", "fc32t64", "fc64t32", "lra16", "ldr16",
"str16", "jmp16",
]
from collections import Counter
mnemonics = [s.encode('utf-8') for s in mnemonics]
for ii in range(0, 1000000):
def mh(s):
h = 0
mask32 = (1 << 32) - 1
mul = ii # 0x4F6CDD1D
for c in s:
h ^= c * mul
h *= mul
h = h & mask32
return h & 0xffff
ct = Counter(mh(s) for s in mnemonics)
# n = sum(1 if c == 2 else 0 for c in ct.values())
n = 0
c = ct.most_common(1)[0][1]
if c == 1 and n == 0:
print(ii, n)