mirror of
https://git.wownero.com/wownero/RandomWOW.git
synced 2024-08-15 00:23:14 +00:00
New DRAM reading pattern
New instruction weights
This commit is contained in:
parent
58ae98c6a4
commit
9ed71ae167
1 changed files with 51 additions and 266 deletions
317
tests/rx2c.py
317
tests/rx2c.py
|
@ -4,6 +4,38 @@ import os
|
|||
|
||||
PROGRAM_SIZE = 512
|
||||
INSTRUCTION_COUNT = 1024 * 1024
|
||||
INSTRUCTION_WEIGHTS = [
|
||||
("ADD_64", 16),
|
||||
("ADD_32", 8),
|
||||
("SUB_64", 16),
|
||||
("SUB_32", 8),
|
||||
("MUL_64", 7),
|
||||
("MULH_64", 7),
|
||||
("MUL_32", 7),
|
||||
("IMUL_32", 7),
|
||||
("IMULH_64", 7),
|
||||
("DIV_64", 1),
|
||||
("IDIV_64", 1),
|
||||
("AND_64", 4),
|
||||
("AND_32", 3),
|
||||
("OR_64", 4),
|
||||
("OR_32", 3),
|
||||
("XOR_64", 4),
|
||||
("XOR_32", 3),
|
||||
("SHL_64", 6),
|
||||
("SHR_64", 6),
|
||||
("SAR_64", 6),
|
||||
("ROL_64", 9),
|
||||
("ROR_64", 9),
|
||||
("FADD", 22),
|
||||
("FSUB", 22),
|
||||
("FMUL", 22),
|
||||
("FDIV", 8),
|
||||
("FSQRT", 6),
|
||||
("FROUND", 2),
|
||||
("CALL", 17),
|
||||
("RET", 15),
|
||||
]
|
||||
|
||||
def genBytes(count):
|
||||
return ', '.join(str(random.getrandbits(8)) for i in range(count))
|
||||
|
@ -114,8 +146,8 @@ def writeInitialValues(file):
|
|||
file.write("\tr{0} = *(uint64_t*)(aesSeed + {1});\n".format(i, i * 8))
|
||||
for i in range(8):
|
||||
file.write("\tf{0} = *(int64_t*)(aesSeed + {1});\n".format(i, 64 + i * 8))
|
||||
file.write("\tmmu.m0 = (aesKey[9] << 8) | (aesKey[10] << 16) | (aesKey[11] << 24);\n")
|
||||
file.write("\taesInitialize((__m128i*)aesKey, (__m128i*)aesSeed, (__m128i*)scratchpad, SCRATCHPAD_SIZE);\n")
|
||||
file.write("\tmmu.m0 = (aesKey[10] << 16) | (aesKey[11] << 24);\n")
|
||||
file.write("\tmmu.mx = 0;\n")
|
||||
file.write("\tsp = 0;\n")
|
||||
file.write("\tic = {0};\n".format(INSTRUCTION_COUNT))
|
||||
|
@ -365,264 +397,17 @@ def write_RET(file, i, symbol):
|
|||
file.write("\t\t\tgoto *target;\n")
|
||||
file.write("\t\t}}\n\t\t{0} = A; }}\n".format(writeC(symbol, type)))
|
||||
|
||||
opcodeMap = {
|
||||
0: write_ADD_64,
|
||||
1: write_ADD_64,
|
||||
2: write_ADD_64,
|
||||
3: write_ADD_64,
|
||||
4: write_ADD_64,
|
||||
5: write_ADD_64,
|
||||
6: write_ADD_64,
|
||||
7: write_ADD_64,
|
||||
8: write_ADD_64,
|
||||
9: write_ADD_64,
|
||||
10: write_ADD_64,
|
||||
11: write_ADD_64,
|
||||
12: write_ADD_64,
|
||||
13: write_ADD_64,
|
||||
14: write_ADD_32,
|
||||
15: write_ADD_32,
|
||||
16: write_ADD_32,
|
||||
17: write_ADD_32,
|
||||
18: write_ADD_32,
|
||||
19: write_ADD_32,
|
||||
20: write_ADD_32,
|
||||
21: write_SUB_64,
|
||||
22: write_SUB_64,
|
||||
23: write_SUB_64,
|
||||
24: write_SUB_64,
|
||||
25: write_SUB_64,
|
||||
26: write_SUB_64,
|
||||
27: write_SUB_64,
|
||||
28: write_SUB_64,
|
||||
29: write_SUB_64,
|
||||
30: write_SUB_64,
|
||||
31: write_SUB_64,
|
||||
32: write_SUB_64,
|
||||
33: write_SUB_64,
|
||||
34: write_SUB_64,
|
||||
35: write_SUB_32,
|
||||
36: write_SUB_32,
|
||||
37: write_SUB_32,
|
||||
38: write_SUB_32,
|
||||
39: write_SUB_32,
|
||||
40: write_SUB_32,
|
||||
41: write_SUB_32,
|
||||
42: write_MUL_64,
|
||||
43: write_MUL_64,
|
||||
44: write_MUL_64,
|
||||
45: write_MUL_64,
|
||||
46: write_MULH_64,
|
||||
47: write_MULH_64,
|
||||
48: write_MULH_64,
|
||||
49: write_MULH_64,
|
||||
50: write_MUL_32,
|
||||
51: write_MUL_32,
|
||||
52: write_MUL_32,
|
||||
53: write_MUL_32,
|
||||
54: write_IMUL_32,
|
||||
55: write_IMUL_32,
|
||||
56: write_IMUL_32,
|
||||
57: write_IMUL_32,
|
||||
58: write_IMULH_64,
|
||||
59: write_IMULH_64,
|
||||
60: write_IMULH_64,
|
||||
61: write_IMULH_64,
|
||||
62: write_DIV_64,
|
||||
63: write_IDIV_64,
|
||||
64: write_AND_64,
|
||||
65: write_AND_64,
|
||||
66: write_AND_64,
|
||||
67: write_AND_64,
|
||||
68: write_AND_64,
|
||||
69: write_AND_64,
|
||||
70: write_AND_64,
|
||||
71: write_AND_64,
|
||||
72: write_AND_64,
|
||||
73: write_AND_64,
|
||||
74: write_AND_64,
|
||||
75: write_AND_64,
|
||||
76: write_AND_64,
|
||||
77: write_AND_32,
|
||||
78: write_AND_32,
|
||||
79: write_AND_32,
|
||||
80: write_AND_32,
|
||||
81: write_AND_32,
|
||||
82: write_AND_32,
|
||||
83: write_OR_64,
|
||||
84: write_OR_64,
|
||||
85: write_OR_64,
|
||||
86: write_OR_64,
|
||||
87: write_OR_64,
|
||||
88: write_OR_64,
|
||||
89: write_OR_64,
|
||||
90: write_OR_64,
|
||||
91: write_OR_64,
|
||||
92: write_OR_64,
|
||||
93: write_OR_64,
|
||||
94: write_OR_64,
|
||||
95: write_OR_64,
|
||||
96: write_OR_32,
|
||||
97: write_OR_32,
|
||||
98: write_OR_32,
|
||||
99: write_OR_32,
|
||||
100: write_OR_32,
|
||||
101: write_OR_32,
|
||||
102: write_XOR_64,
|
||||
103: write_XOR_64,
|
||||
104: write_XOR_64,
|
||||
105: write_XOR_64,
|
||||
106: write_XOR_64,
|
||||
107: write_XOR_64,
|
||||
108: write_XOR_64,
|
||||
109: write_XOR_64,
|
||||
110: write_XOR_64,
|
||||
111: write_XOR_64,
|
||||
112: write_XOR_64,
|
||||
113: write_XOR_64,
|
||||
114: write_XOR_64,
|
||||
115: write_XOR_64,
|
||||
116: write_XOR_32,
|
||||
117: write_XOR_32,
|
||||
118: write_XOR_32,
|
||||
119: write_XOR_32,
|
||||
120: write_XOR_32,
|
||||
121: write_XOR_32,
|
||||
122: write_SHL_64,
|
||||
123: write_SHL_64,
|
||||
124: write_SHL_64,
|
||||
125: write_SHL_64,
|
||||
126: write_SHL_64,
|
||||
127: write_SHL_64,
|
||||
128: write_SHL_64,
|
||||
129: write_SHR_64,
|
||||
130: write_SHR_64,
|
||||
131: write_SHR_64,
|
||||
132: write_SHR_64,
|
||||
133: write_SAR_64,
|
||||
134: write_SAR_64,
|
||||
135: write_SAR_64,
|
||||
136: write_ROL_64,
|
||||
137: write_ROL_64,
|
||||
138: write_ROL_64,
|
||||
139: write_ROL_64,
|
||||
140: write_ROL_64,
|
||||
141: write_ROL_64,
|
||||
142: write_ROL_64,
|
||||
143: write_ROL_64,
|
||||
144: write_ROL_64,
|
||||
145: write_ROL_64,
|
||||
146: write_ROL_64,
|
||||
147: write_ROR_64,
|
||||
148: write_ROR_64,
|
||||
149: write_ROR_64,
|
||||
150: write_ROR_64,
|
||||
151: write_ROR_64,
|
||||
152: write_ROR_64,
|
||||
153: write_ROR_64,
|
||||
154: write_ROR_64,
|
||||
155: write_ROR_64,
|
||||
156: write_ROR_64,
|
||||
157: write_ROR_64,
|
||||
158: write_FADD,
|
||||
159: write_FADD,
|
||||
160: write_FADD,
|
||||
161: write_FADD,
|
||||
162: write_FADD,
|
||||
163: write_FADD,
|
||||
164: write_FADD,
|
||||
165: write_FADD,
|
||||
166: write_FADD,
|
||||
167: write_FADD,
|
||||
168: write_FADD,
|
||||
169: write_FADD,
|
||||
170: write_FADD,
|
||||
171: write_FADD,
|
||||
172: write_FADD,
|
||||
173: write_FADD,
|
||||
174: write_FADD,
|
||||
175: write_FADD,
|
||||
176: write_FSUB,
|
||||
177: write_FSUB,
|
||||
178: write_FSUB,
|
||||
179: write_FSUB,
|
||||
180: write_FSUB,
|
||||
181: write_FSUB,
|
||||
182: write_FSUB,
|
||||
183: write_FSUB,
|
||||
184: write_FSUB,
|
||||
185: write_FSUB,
|
||||
186: write_FSUB,
|
||||
187: write_FSUB,
|
||||
188: write_FSUB,
|
||||
189: write_FSUB,
|
||||
190: write_FSUB,
|
||||
191: write_FSUB,
|
||||
192: write_FSUB,
|
||||
193: write_FSUB,
|
||||
194: write_FMUL,
|
||||
195: write_FMUL,
|
||||
196: write_FMUL,
|
||||
197: write_FMUL,
|
||||
198: write_FMUL,
|
||||
199: write_FMUL,
|
||||
200: write_FMUL,
|
||||
201: write_FMUL,
|
||||
202: write_FMUL,
|
||||
203: write_FMUL,
|
||||
204: write_FMUL,
|
||||
205: write_FMUL,
|
||||
206: write_FMUL,
|
||||
207: write_FMUL,
|
||||
208: write_FMUL,
|
||||
209: write_FMUL,
|
||||
210: write_FMUL,
|
||||
211: write_FMUL,
|
||||
212: write_FDIV,
|
||||
213: write_FDIV,
|
||||
214: write_FDIV,
|
||||
215: write_FSQRT,
|
||||
216: write_FSQRT,
|
||||
217: write_FSQRT,
|
||||
218: write_FSQRT,
|
||||
219: write_FSQRT,
|
||||
220: write_FSQRT,
|
||||
221: write_FSQRT,
|
||||
222: write_FROUND,
|
||||
223: write_FROUND,
|
||||
224: write_CALL,
|
||||
225: write_CALL,
|
||||
226: write_CALL,
|
||||
227: write_CALL,
|
||||
228: write_CALL,
|
||||
229: write_CALL,
|
||||
230: write_CALL,
|
||||
231: write_CALL,
|
||||
232: write_CALL,
|
||||
233: write_CALL,
|
||||
234: write_CALL,
|
||||
235: write_CALL,
|
||||
236: write_CALL,
|
||||
237: write_CALL,
|
||||
238: write_CALL,
|
||||
239: write_CALL,
|
||||
240: write_CALL,
|
||||
241: write_RET,
|
||||
242: write_RET,
|
||||
243: write_RET,
|
||||
244: write_RET,
|
||||
245: write_RET,
|
||||
246: write_RET,
|
||||
247: write_RET,
|
||||
248: write_RET,
|
||||
249: write_RET,
|
||||
250: write_RET,
|
||||
251: write_RET,
|
||||
252: write_RET,
|
||||
253: write_RET,
|
||||
254: write_RET,
|
||||
255: write_RET,
|
||||
}
|
||||
opcodeMap = { }
|
||||
|
||||
def buildOpcodeMap():
|
||||
functions = globals()
|
||||
totalWeight = 0;
|
||||
for instruction, weight in INSTRUCTION_WEIGHTS:
|
||||
func = functions['write_' + instruction]
|
||||
for i in range(weight):
|
||||
opcodeMap[totalWeight] = func
|
||||
totalWeight = totalWeight + 1
|
||||
assert totalWeight == 256
|
||||
|
||||
def writeCode(file, i, symbol):
|
||||
opcodeMap.get(symbol.opcode)(file, i, symbol)
|
||||
|
@ -664,7 +449,6 @@ def writeProlog(file):
|
|||
"} stack_t;\n"
|
||||
"typedef struct {\n"
|
||||
" addr_t m0;\n"
|
||||
" addr_t m1;\n"
|
||||
" addr_t mx;\n"
|
||||
"#ifdef RAM\n"
|
||||
" const char* buffer;\n"
|
||||
|
@ -680,10 +464,10 @@ def writeProlog(file):
|
|||
"#define STACK_LENGTH (128 * 1024)\n"
|
||||
"#ifdef RAM\n"
|
||||
"#define DRAM_READ(mmu) (convertible_t)*(uint64_t*)((mmu)->buffer + (mmu)->m0)\n"
|
||||
"#define PREFETCH(mmu) _mm_prefetch(((mmu)->buffer + (mmu)->m1), _MM_HINT_T0)\n"
|
||||
"#define PREFETCH(mmu) _mm_prefetch(((mmu)->buffer + (mmu)->m0), _MM_HINT_T0)\n"
|
||||
"#else\n"
|
||||
"#define DRAM_READ(mmu) (convertible_t)(uint64_t)__rolq(6364136223846793005ULL*((mmu)->m0)+1442695040888963407ULL,32)\n"
|
||||
"#define PREFETCH(x)\n"
|
||||
"#define PREFETCH(mmu)\n"
|
||||
"#endif\n"
|
||||
"#define PUSH_VALUE(x) stack[sp++].value = x\n"
|
||||
"#define PUSH_ADDRESS(x) stack[sp++].address = x\n"
|
||||
|
@ -695,12 +479,12 @@ def writeProlog(file):
|
|||
" data = DRAM_READ(mmu);\n"
|
||||
" mmu->m0 += 8;\n"
|
||||
" mmu->mx ^= addr;\n"
|
||||
" if((mmu->m0 & 255) == 128) {\n"
|
||||
" mmu->m1 = mmu->mx & 0xFFFFFF00;\n"
|
||||
" if((mmu->mx & 0xFFFF) == 0) {\n"
|
||||
" mmu->m0 = mmu->mx;\n"
|
||||
"#if defined(PREF)\n"
|
||||
" PREFETCH(mmu);\n"
|
||||
"#endif\n"
|
||||
" }\n"
|
||||
" if((mmu->m0 & 255) == 0)\n"
|
||||
" mmu->m0 = mmu->m1;\n"
|
||||
" return data;\n"
|
||||
"}\n"
|
||||
"static inline __m128i sl_xor(__m128i tmp1) {\n"
|
||||
|
@ -792,6 +576,7 @@ def writeProlog(file):
|
|||
"}\n"))
|
||||
|
||||
with sys.stdout as file:
|
||||
buildOpcodeMap()
|
||||
writeProlog(file)
|
||||
file.write("const byte aesKey[32] = {{ {0} }};\n".format(genBytes(32)))
|
||||
file.write("const byte aesSeed[128] = {{ {0} }};\n".format(genBytes(128)))
|
||||
|
|
Loading…
Reference in a new issue