Created
October 13, 2022 00:39
-
-
Save yuriks/3e70410e45fe1973e4c146866983df15 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Search returns false positives if A isn't actually in ptrs | |
def create_search(f, table, label_prefix='.l'): | |
search_bits = len(table).bit_length() | |
def pad_label(s): | |
return (s + ':').ljust(len(label_prefix) + search_bits + 2) | |
def emit_search(prefix, sub_table): | |
f.write(pad_label(prefix)) | |
if len(sub_table) == 1: | |
f.write('LDX #{} : BRA {}_end_search\n'.format(sub_table[0][1], label_prefix)) | |
else: | |
midpoint_i = len(sub_table) // 2 | |
f.write('CMP #${:04X} : BCS {}1\n'.format(sub_table[midpoint_i][0], prefix)) | |
emit_search(prefix + '0', sub_table[:midpoint_i]) | |
emit_search(prefix + '1', sub_table[midpoint_i:]) | |
emit_search(label_prefix, table) | |
# Search can correctly detect if A isn't in ptrs | |
def create_search_exact(f, table, label_prefix='.l'): | |
search_bits = len(table).bit_length() | |
def pad_label(s): | |
return (s + ': ').ljust(len(label_prefix) + search_bits + 2) | |
def emit_search(prefix, sub_table): | |
#print("emit_search", prefix, sub_table) | |
f.write(pad_label(prefix)) | |
if len(sub_table) == 0: | |
# This is a failsafe but should never happen | |
#print("********************") | |
f.write('BRA {}_not_found\n'.format(label_prefix)) | |
elif len(sub_table) == 1: | |
f.write('CMP #${:04X} : BNE {}_not_found : LDX #{} : BRA {}_end_search\n'.format(sub_table[0][0], label_prefix, sub_table[0][1], label_prefix)) | |
else: | |
midpoint_i = len(sub_table) // 2 | |
left = sub_table[:midpoint_i] | |
mid = sub_table[midpoint_i] | |
right = sub_table[midpoint_i+1:] | |
f.write('CMP #${:04X} : BCS {}x\n'.format(mid[0], prefix)) | |
emit_search(prefix + '0', left) | |
f.write(pad_label(prefix + 'x')) | |
# Short circuit to not found | |
target_label = prefix + '1' if right else label_prefix + '_not_found' | |
f.write('BNE {} : LDX #{} : BRA {}_end_search\n'.format(target_label, mid[1], label_prefix)) | |
if right: | |
emit_search(prefix + '1', right) | |
emit_search(label_prefix, table) | |
def assemble_test(f): | |
code = [] | |
labels = {} | |
for line in f: | |
parts = line.split(':') | |
label = parts[0] | |
if label in code: | |
raise ValueError("duplicate label: " + label) | |
labels[label] = len(code) | |
for instr_text in parts[1:]: | |
instr = instr_text.split() | |
if instr[0] == 'CMP': | |
instr.append(instr[1]) | |
instr[1] = int(instr[1].removeprefix('#$'), base=16) | |
code.append(tuple(instr)) | |
return code, labels | |
def calc_code_size(code): | |
size = 0 | |
for i in code: | |
size += { | |
'CMP': 2+1, | |
'BCS': 2, | |
'LDX': 2+1, | |
'BRA': 2, | |
'BNE': 2, | |
}[i[0]] | |
return size | |
def run_test(val, code, labels, trace=False): | |
pc = 0 | |
x_reg = None | |
cmp_val = None | |
labels['.l_end_search'] = -1 | |
labels['.l_not_found'] = -2 | |
instruction_count = 0 | |
cycles = 0 | |
while pc >= 0: | |
i = code[pc] | |
pc += 1 | |
if trace: | |
print(i) | |
if i[0] == 'CMP': | |
cycles += 2+1 | |
cmp_val = i[1] | |
elif i[0] == 'BCS': | |
cycles += 2 | |
if val >= cmp_val: | |
cycles += 1 | |
pc = labels[i[1]] | |
if trace: | |
print(i[1]) | |
elif i[0] == 'LDX': | |
cycles += 2+1 | |
x_reg = i[1] | |
elif i[0] == 'BRA': | |
cycles += 3 | |
pc = labels[i[1]] | |
if trace: | |
print(i[1]) | |
elif i[0] == 'BNE': | |
cycles += 2 | |
if val != cmp_val: | |
cycles += 1 | |
pc = labels[i[1]] | |
if trace: | |
print(i[1]) | |
instruction_count += 1 | |
return {'pc': pc, 'x': x_reg, 'instrs': instruction_count, 'cycles': cycles} | |
from io import StringIO | |
import sys | |
import random | |
def test(exact): | |
ptrs = [0xB2F3, 0xB321, 0xB3EC, 0xB3F8, 0xB441, 0xB455, 0xB493, 0xB4D1, 0xB516, 0xB554, 0xB594, 0xB5E5, 0xB613, 0xB6A7, 0xB6DD, 0xB70E, 0xB7B9, 0xBAB7, 0xBB8F, 0xBBC4, 0xBBF1, 0xBC2E, 0xBC54, 0xBD4E, 0xC538, 0xC588] | |
dest_labels = ["RidleyAIText_B2F3", "RidleyAIText_B321", "RidleyAIText_B3EC", "RidleyAIText_B3F8", "RidleyAIText_B441", "RidleyAIText_B455", "RidleyAIText_B493", "RidleyAIText_B4D1", "RidleyAIText_B516", "RidleyAIText_B554", "RidleyAIText_B594", "RidleyAIText_B5E5", "RidleyAIText_B613", "RidleyAIText_B6A7", "RidleyAIText_B6DD", "RidleyAIText_B70E", "RidleyAIText_B7B9", "RidleyAIText_BAB7", "RidleyAIText_BB8F", "RidleyAIText_BBC4", "RidleyAIText_BBF1", "RidleyAIText_BC2E", "RidleyAIText_BC54", "RidleyAIText_BD4E", "RidleyAIText_C538", "RidleyAIText_C588"] | |
table = dict(zip(ptrs, dest_labels, strict=True)) | |
print(table) | |
print() | |
s = StringIO() | |
if exact: | |
create_search_exact(s, list(table.items())) | |
else: | |
create_search(s, list(table.items())) | |
print(s.getvalue()) | |
s.seek(0) | |
code, labels = assemble_test(s) | |
print("Code size: ${:X}".format(calc_code_size(code))) | |
accum_stats = {} | |
accum_n = 0 | |
def testcase(v, trace=False, print_stats=False): | |
stats = run_test(v, code, labels, trace) | |
if stats['pc'] == -1: | |
pc = ".l_end_search" | |
result = table.get(v) == stats['x'].removeprefix('#') | |
elif stats['pc'] == -2: | |
pc = ".l_not_found" | |
result = v not in table | |
else: | |
pc = "invalid" | |
result = False | |
print('${:04X}'.format(v), pc, stats['x'], "(PASS)" if result else "(FAIL)") | |
# Statistics | |
nonlocal accum_n | |
del stats['pc'] | |
del stats['x'] | |
for k in stats: | |
accum_stats[k] = accum_stats.get(k, 0) + stats[k] | |
accum_n += 1 | |
if print_stats: | |
print(stats) | |
def print_accum_stats(): | |
nonlocal accum_stats, accum_n | |
for k in accum_stats: | |
accum_stats[k] = accum_stats[k] / accum_n | |
print("Average:", accum_stats) | |
accum_stats = {} | |
accum_n = 0 | |
print("--- Found tests:") | |
for p in ptrs[:]: | |
testcase(p) | |
print_accum_stats() | |
if exact: | |
print("--- Off-by-one tests:") | |
for p in ptrs[:]: | |
testcase(p-1) | |
testcase(p+1) | |
print("--- Random tests:") | |
random.seed(0x12345) | |
for p in range(50): | |
testcase(random.randrange(0xA000, 0xD000)) | |
print_accum_stats() | |
test(exact=False) | |
test(exact=True) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
=================================================================================================== RESTART: C:/Users/yuriks/projects/make_binary_search.py =================================================================================================== | |
{45811: 'RidleyAIText_B2F3', 45857: 'RidleyAIText_B321', 46060: 'RidleyAIText_B3EC', 46072: 'RidleyAIText_B3F8', 46145: 'RidleyAIText_B441', 46165: 'RidleyAIText_B455', 46227: 'RidleyAIText_B493', 46289: 'RidleyAIText_B4D1', 46358: 'RidleyAIText_B516', 46420: 'RidleyAIText_B554', 46484: 'RidleyAIText_B594', 46565: 'RidleyAIText_B5E5', 46611: 'RidleyAIText_B613', 46759: 'RidleyAIText_B6A7', 46813: 'RidleyAIText_B6DD', 46862: 'RidleyAIText_B70E', 47033: 'RidleyAIText_B7B9', 47799: 'RidleyAIText_BAB7', 48015: 'RidleyAIText_BB8F', 48068: 'RidleyAIText_BBC4', 48113: 'RidleyAIText_BBF1', 48174: 'RidleyAIText_BC2E', 48212: 'RidleyAIText_BC54', 48462: 'RidleyAIText_BD4E', 50488: 'RidleyAIText_C538', 50568: 'RidleyAIText_C588'} | |
.l: CMP #$B6A7 : BCS .l1 | |
.l0: CMP #$B493 : BCS .l01 | |
.l00: CMP #$B3F8 : BCS .l001 | |
.l000: CMP #$B321 : BCS .l0001 | |
.l0000: LDX #RidleyAIText_B2F3 : BRA .l_end_search | |
.l0001: CMP #$B3EC : BCS .l00011 | |
.l00010: LDX #RidleyAIText_B321 : BRA .l_end_search | |
.l00011: LDX #RidleyAIText_B3EC : BRA .l_end_search | |
.l001: CMP #$B441 : BCS .l0011 | |
.l0010: LDX #RidleyAIText_B3F8 : BRA .l_end_search | |
.l0011: CMP #$B455 : BCS .l00111 | |
.l00110: LDX #RidleyAIText_B441 : BRA .l_end_search | |
.l00111: LDX #RidleyAIText_B455 : BRA .l_end_search | |
.l01: CMP #$B554 : BCS .l011 | |
.l010: CMP #$B4D1 : BCS .l0101 | |
.l0100: LDX #RidleyAIText_B493 : BRA .l_end_search | |
.l0101: CMP #$B516 : BCS .l01011 | |
.l01010: LDX #RidleyAIText_B4D1 : BRA .l_end_search | |
.l01011: LDX #RidleyAIText_B516 : BRA .l_end_search | |
.l011: CMP #$B5E5 : BCS .l0111 | |
.l0110: CMP #$B594 : BCS .l01101 | |
.l01100: LDX #RidleyAIText_B554 : BRA .l_end_search | |
.l01101: LDX #RidleyAIText_B594 : BRA .l_end_search | |
.l0111: CMP #$B613 : BCS .l01111 | |
.l01110: LDX #RidleyAIText_B5E5 : BRA .l_end_search | |
.l01111: LDX #RidleyAIText_B613 : BRA .l_end_search | |
.l1: CMP #$BBC4 : BCS .l11 | |
.l10: CMP #$B7B9 : BCS .l101 | |
.l100: CMP #$B6DD : BCS .l1001 | |
.l1000: LDX #RidleyAIText_B6A7 : BRA .l_end_search | |
.l1001: CMP #$B70E : BCS .l10011 | |
.l10010: LDX #RidleyAIText_B6DD : BRA .l_end_search | |
.l10011: LDX #RidleyAIText_B70E : BRA .l_end_search | |
.l101: CMP #$BAB7 : BCS .l1011 | |
.l1010: LDX #RidleyAIText_B7B9 : BRA .l_end_search | |
.l1011: CMP #$BB8F : BCS .l10111 | |
.l10110: LDX #RidleyAIText_BAB7 : BRA .l_end_search | |
.l10111: LDX #RidleyAIText_BB8F : BRA .l_end_search | |
.l11: CMP #$BC54 : BCS .l111 | |
.l110: CMP #$BBF1 : BCS .l1101 | |
.l1100: LDX #RidleyAIText_BBC4 : BRA .l_end_search | |
.l1101: CMP #$BC2E : BCS .l11011 | |
.l11010: LDX #RidleyAIText_BBF1 : BRA .l_end_search | |
.l11011: LDX #RidleyAIText_BC2E : BRA .l_end_search | |
.l111: CMP #$C538 : BCS .l1111 | |
.l1110: CMP #$BD4E : BCS .l11101 | |
.l11100: LDX #RidleyAIText_BC54 : BRA .l_end_search | |
.l11101: LDX #RidleyAIText_BD4E : BRA .l_end_search | |
.l1111: CMP #$C588 : BCS .l11111 | |
.l11110: LDX #RidleyAIText_C538 : BRA .l_end_search | |
.l11111: LDX #RidleyAIText_C588 : BRA .l_end_search | |
Code size: $FF | |
--- Found tests: | |
$B2F3 .l_end_search #RidleyAIText_B2F3 (PASS) | |
$B321 .l_end_search #RidleyAIText_B321 (PASS) | |
$B3EC .l_end_search #RidleyAIText_B3EC (PASS) | |
$B3F8 .l_end_search #RidleyAIText_B3F8 (PASS) | |
$B441 .l_end_search #RidleyAIText_B441 (PASS) | |
$B455 .l_end_search #RidleyAIText_B455 (PASS) | |
$B493 .l_end_search #RidleyAIText_B493 (PASS) | |
$B4D1 .l_end_search #RidleyAIText_B4D1 (PASS) | |
$B516 .l_end_search #RidleyAIText_B516 (PASS) | |
$B554 .l_end_search #RidleyAIText_B554 (PASS) | |
$B594 .l_end_search #RidleyAIText_B594 (PASS) | |
$B5E5 .l_end_search #RidleyAIText_B5E5 (PASS) | |
$B613 .l_end_search #RidleyAIText_B613 (PASS) | |
$B6A7 .l_end_search #RidleyAIText_B6A7 (PASS) | |
$B6DD .l_end_search #RidleyAIText_B6DD (PASS) | |
$B70E .l_end_search #RidleyAIText_B70E (PASS) | |
$B7B9 .l_end_search #RidleyAIText_B7B9 (PASS) | |
$BAB7 .l_end_search #RidleyAIText_BAB7 (PASS) | |
$BB8F .l_end_search #RidleyAIText_BB8F (PASS) | |
$BBC4 .l_end_search #RidleyAIText_BBC4 (PASS) | |
$BBF1 .l_end_search #RidleyAIText_BBF1 (PASS) | |
$BC2E .l_end_search #RidleyAIText_BC2E (PASS) | |
$BC54 .l_end_search #RidleyAIText_BC54 (PASS) | |
$BD4E .l_end_search #RidleyAIText_BD4E (PASS) | |
$C538 .l_end_search #RidleyAIText_C538 (PASS) | |
$C588 .l_end_search #RidleyAIText_C588 (PASS) | |
Average: {'instrs': 11.538461538461538, 'cycles': 32.42307692307692} | |
{45811: 'RidleyAIText_B2F3', 45857: 'RidleyAIText_B321', 46060: 'RidleyAIText_B3EC', 46072: 'RidleyAIText_B3F8', 46145: 'RidleyAIText_B441', 46165: 'RidleyAIText_B455', 46227: 'RidleyAIText_B493', 46289: 'RidleyAIText_B4D1', 46358: 'RidleyAIText_B516', 46420: 'RidleyAIText_B554', 46484: 'RidleyAIText_B594', 46565: 'RidleyAIText_B5E5', 46611: 'RidleyAIText_B613', 46759: 'RidleyAIText_B6A7', 46813: 'RidleyAIText_B6DD', 46862: 'RidleyAIText_B70E', 47033: 'RidleyAIText_B7B9', 47799: 'RidleyAIText_BAB7', 48015: 'RidleyAIText_BB8F', 48068: 'RidleyAIText_BBC4', 48113: 'RidleyAIText_BBF1', 48174: 'RidleyAIText_BC2E', 48212: 'RidleyAIText_BC54', 48462: 'RidleyAIText_BD4E', 50488: 'RidleyAIText_C538', 50568: 'RidleyAIText_C588'} | |
.l: CMP #$B6A7 : BCS .lx | |
.l0: CMP #$B493 : BCS .l0x | |
.l00: CMP #$B3F8 : BCS .l00x | |
.l000: CMP #$B321 : BCS .l000x | |
.l0000: CMP #$B2F3 : BNE .l_not_found : LDX #RidleyAIText_B2F3 : BRA .l_end_search | |
.l000x: BNE .l0001 : LDX #RidleyAIText_B321 : BRA .l_end_search | |
.l0001: CMP #$B3EC : BNE .l_not_found : LDX #RidleyAIText_B3EC : BRA .l_end_search | |
.l00x: BNE .l001 : LDX #RidleyAIText_B3F8 : BRA .l_end_search | |
.l001: CMP #$B455 : BCS .l001x | |
.l0010: CMP #$B441 : BNE .l_not_found : LDX #RidleyAIText_B441 : BRA .l_end_search | |
.l001x: BNE .l_not_found : LDX #RidleyAIText_B455 : BRA .l_end_search | |
.l0x: BNE .l01 : LDX #RidleyAIText_B493 : BRA .l_end_search | |
.l01: CMP #$B594 : BCS .l01x | |
.l010: CMP #$B516 : BCS .l010x | |
.l0100: CMP #$B4D1 : BNE .l_not_found : LDX #RidleyAIText_B4D1 : BRA .l_end_search | |
.l010x: BNE .l0101 : LDX #RidleyAIText_B516 : BRA .l_end_search | |
.l0101: CMP #$B554 : BNE .l_not_found : LDX #RidleyAIText_B554 : BRA .l_end_search | |
.l01x: BNE .l011 : LDX #RidleyAIText_B594 : BRA .l_end_search | |
.l011: CMP #$B613 : BCS .l011x | |
.l0110: CMP #$B5E5 : BNE .l_not_found : LDX #RidleyAIText_B5E5 : BRA .l_end_search | |
.l011x: BNE .l_not_found : LDX #RidleyAIText_B613 : BRA .l_end_search | |
.lx: BNE .l1 : LDX #RidleyAIText_B6A7 : BRA .l_end_search | |
.l1: CMP #$BBF1 : BCS .l1x | |
.l10: CMP #$BAB7 : BCS .l10x | |
.l100: CMP #$B70E : BCS .l100x | |
.l1000: CMP #$B6DD : BNE .l_not_found : LDX #RidleyAIText_B6DD : BRA .l_end_search | |
.l100x: BNE .l1001 : LDX #RidleyAIText_B70E : BRA .l_end_search | |
.l1001: CMP #$B7B9 : BNE .l_not_found : LDX #RidleyAIText_B7B9 : BRA .l_end_search | |
.l10x: BNE .l101 : LDX #RidleyAIText_BAB7 : BRA .l_end_search | |
.l101: CMP #$BBC4 : BCS .l101x | |
.l1010: CMP #$BB8F : BNE .l_not_found : LDX #RidleyAIText_BB8F : BRA .l_end_search | |
.l101x: BNE .l_not_found : LDX #RidleyAIText_BBC4 : BRA .l_end_search | |
.l1x: BNE .l11 : LDX #RidleyAIText_BBF1 : BRA .l_end_search | |
.l11: CMP #$BD4E : BCS .l11x | |
.l110: CMP #$BC54 : BCS .l110x | |
.l1100: CMP #$BC2E : BNE .l_not_found : LDX #RidleyAIText_BC2E : BRA .l_end_search | |
.l110x: BNE .l_not_found : LDX #RidleyAIText_BC54 : BRA .l_end_search | |
.l11x: BNE .l111 : LDX #RidleyAIText_BD4E : BRA .l_end_search | |
.l111: CMP #$C588 : BCS .l111x | |
.l1110: CMP #$C538 : BNE .l_not_found : LDX #RidleyAIText_C538 : BRA .l_end_search | |
.l111x: BNE .l_not_found : LDX #RidleyAIText_C588 : BRA .l_end_search | |
Code size: $122 | |
--- Found tests: | |
$B2F3 .l_end_search #RidleyAIText_B2F3 (PASS) | |
$B321 .l_end_search #RidleyAIText_B321 (PASS) | |
$B3EC .l_end_search #RidleyAIText_B3EC (PASS) | |
$B3F8 .l_end_search #RidleyAIText_B3F8 (PASS) | |
$B441 .l_end_search #RidleyAIText_B441 (PASS) | |
$B455 .l_end_search #RidleyAIText_B455 (PASS) | |
$B493 .l_end_search #RidleyAIText_B493 (PASS) | |
$B4D1 .l_end_search #RidleyAIText_B4D1 (PASS) | |
$B516 .l_end_search #RidleyAIText_B516 (PASS) | |
$B554 .l_end_search #RidleyAIText_B554 (PASS) | |
$B594 .l_end_search #RidleyAIText_B594 (PASS) | |
$B5E5 .l_end_search #RidleyAIText_B5E5 (PASS) | |
$B613 .l_end_search #RidleyAIText_B613 (PASS) | |
$B6A7 .l_end_search #RidleyAIText_B6A7 (PASS) | |
$B6DD .l_end_search #RidleyAIText_B6DD (PASS) | |
$B70E .l_end_search #RidleyAIText_B70E (PASS) | |
$B7B9 .l_end_search #RidleyAIText_B7B9 (PASS) | |
$BAB7 .l_end_search #RidleyAIText_BAB7 (PASS) | |
$BB8F .l_end_search #RidleyAIText_BB8F (PASS) | |
$BBC4 .l_end_search #RidleyAIText_BBC4 (PASS) | |
$BBF1 .l_end_search #RidleyAIText_BBF1 (PASS) | |
$BC2E .l_end_search #RidleyAIText_BC2E (PASS) | |
$BC54 .l_end_search #RidleyAIText_BC54 (PASS) | |
$BD4E .l_end_search #RidleyAIText_BD4E (PASS) | |
$C538 .l_end_search #RidleyAIText_C538 (PASS) | |
$C588 .l_end_search #RidleyAIText_C588 (PASS) | |
Average: {'instrs': 11.884615384615385, 'cycles': 32.96153846153846} | |
--- Off-by-one tests: | |
$B2F2 .l_not_found None (PASS) | |
$B2F4 .l_not_found None (PASS) | |
$B320 .l_not_found None (PASS) | |
$B322 .l_not_found None (PASS) | |
$B3EB .l_not_found None (PASS) | |
$B3ED .l_not_found None (PASS) | |
$B3F7 .l_not_found None (PASS) | |
$B3F9 .l_not_found None (PASS) | |
$B440 .l_not_found None (PASS) | |
$B442 .l_not_found None (PASS) | |
$B454 .l_not_found None (PASS) | |
$B456 .l_not_found None (PASS) | |
$B492 .l_not_found None (PASS) | |
$B494 .l_not_found None (PASS) | |
$B4D0 .l_not_found None (PASS) | |
$B4D2 .l_not_found None (PASS) | |
$B515 .l_not_found None (PASS) | |
$B517 .l_not_found None (PASS) | |
$B553 .l_not_found None (PASS) | |
$B555 .l_not_found None (PASS) | |
$B593 .l_not_found None (PASS) | |
$B595 .l_not_found None (PASS) | |
$B5E4 .l_not_found None (PASS) | |
$B5E6 .l_not_found None (PASS) | |
$B612 .l_not_found None (PASS) | |
$B614 .l_not_found None (PASS) | |
$B6A6 .l_not_found None (PASS) | |
$B6A8 .l_not_found None (PASS) | |
$B6DC .l_not_found None (PASS) | |
$B6DE .l_not_found None (PASS) | |
$B70D .l_not_found None (PASS) | |
$B70F .l_not_found None (PASS) | |
$B7B8 .l_not_found None (PASS) | |
$B7BA .l_not_found None (PASS) | |
$BAB6 .l_not_found None (PASS) | |
$BAB8 .l_not_found None (PASS) | |
$BB8E .l_not_found None (PASS) | |
$BB90 .l_not_found None (PASS) | |
$BBC3 .l_not_found None (PASS) | |
$BBC5 .l_not_found None (PASS) | |
$BBF0 .l_not_found None (PASS) | |
$BBF2 .l_not_found None (PASS) | |
$BC2D .l_not_found None (PASS) | |
$BC2F .l_not_found None (PASS) | |
$BC53 .l_not_found None (PASS) | |
$BC55 .l_not_found None (PASS) | |
$BD4D .l_not_found None (PASS) | |
$BD4F .l_not_found None (PASS) | |
$C537 .l_not_found None (PASS) | |
$C539 .l_not_found None (PASS) | |
$C587 .l_not_found None (PASS) | |
$C589 .l_not_found None (PASS) | |
--- Random tests: | |
$B926 .l_not_found None (PASS) | |
$BD96 .l_not_found None (PASS) | |
$BA76 .l_not_found None (PASS) | |
$B795 .l_not_found None (PASS) | |
$C078 .l_not_found None (PASS) | |
$A3DB .l_not_found None (PASS) | |
$BA10 .l_not_found None (PASS) | |
$A81F .l_not_found None (PASS) | |
$BD7E .l_not_found None (PASS) | |
$BCD9 .l_not_found None (PASS) | |
$B128 .l_not_found None (PASS) | |
$A1BB .l_not_found None (PASS) | |
$A746 .l_not_found None (PASS) | |
$A4C4 .l_not_found None (PASS) | |
$B461 .l_not_found None (PASS) | |
$BA1E .l_not_found None (PASS) | |
$C14B .l_not_found None (PASS) | |
$CF20 .l_not_found None (PASS) | |
$B16F .l_not_found None (PASS) | |
$AEA0 .l_not_found None (PASS) | |
$B2B5 .l_not_found None (PASS) | |
$C864 .l_not_found None (PASS) | |
$AA24 .l_not_found None (PASS) | |
$BD76 .l_not_found None (PASS) | |
$A40E .l_not_found None (PASS) | |
$CCD5 .l_not_found None (PASS) | |
$B59D .l_not_found None (PASS) | |
$CDDC .l_not_found None (PASS) | |
$BFD5 .l_not_found None (PASS) | |
$C840 .l_not_found None (PASS) | |
$C7CA .l_not_found None (PASS) | |
$AB50 .l_not_found None (PASS) | |
$AB26 .l_not_found None (PASS) | |
$A345 .l_not_found None (PASS) | |
$BB04 .l_not_found None (PASS) | |
$B298 .l_not_found None (PASS) | |
$A846 .l_not_found None (PASS) | |
$CBA1 .l_not_found None (PASS) | |
$CCDE .l_not_found None (PASS) | |
$AF67 .l_not_found None (PASS) | |
$CB59 .l_not_found None (PASS) | |
$A0F4 .l_not_found None (PASS) | |
$C7B3 .l_not_found None (PASS) | |
$B671 .l_not_found None (PASS) | |
$C569 .l_not_found None (PASS) | |
$AC9F .l_not_found None (PASS) | |
$BFA9 .l_not_found None (PASS) | |
$BA2B .l_not_found None (PASS) | |
$CE08 .l_not_found None (PASS) | |
$CC5B .l_not_found None (PASS) | |
Average: {'instrs': 11.392156862745098, 'cycles': 32.03921568627451} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment