mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-06 16:00:18 +02:00
This will allow investigating the Arm64 directly next to the test, plus publicly linking directly to badly behaving tests. Perfect for nerdsniping implementations.
70 lines
2.3 KiB
Python
Executable File
70 lines
2.3 KiB
Python
Executable File
#!/usr/bin/python3
|
|
import json
|
|
import logging
|
|
import sys
|
|
logger = logging.getLogger()
|
|
logger.setLevel(logging.ERROR)
|
|
|
|
def update_performance_numbers(performance_json_path, performance_json, new_json_numbers):
|
|
for key, items in new_json_numbers.items():
|
|
if len(key) == 0:
|
|
continue
|
|
|
|
if not key in performance_json["Instructions"]:
|
|
logging.error("{} didn't exist in performance json file?".format(key))
|
|
return 1
|
|
|
|
if "ExpectedInstructionCount" in items:
|
|
performance_json["Instructions"][key]["ExpectedInstructionCount"] = items["ExpectedInstructionCount"]
|
|
if "ExpectedArm64ASM" in items:
|
|
performance_json["Instructions"][key]["ExpectedArm64ASM"] = items["ExpectedArm64ASM"]
|
|
|
|
# Output to the original file.
|
|
with open(performance_json_path, "w") as json_file:
|
|
json.dump(performance_json, json_file, indent=2)
|
|
|
|
def main():
|
|
if sys.version_info[0] < 3:
|
|
logging.critical ("Python 3 or a more recent version is required.")
|
|
|
|
if (len(sys.argv) < 3):
|
|
logging.critical ("usage: %s <PerformanceTests.json> <NewNumbers.json>" % (sys.argv[0]))
|
|
|
|
performance_json_path = sys.argv[1]
|
|
new_json_numbers = sys.argv[2]
|
|
|
|
try:
|
|
with open(new_json_numbers) as json_file:
|
|
new_json_numbers_text = json_file.read()
|
|
except IOError:
|
|
# If there isn't any new json numbers for this file, then it is safe to skip.
|
|
return 0
|
|
|
|
try:
|
|
with open(performance_json_path) as json_file:
|
|
performance_json_text = json_file.read()
|
|
except IOError:
|
|
logging.error("IOError!")
|
|
return 1
|
|
|
|
try:
|
|
performance_json_data = json.loads(performance_json_text)
|
|
if not isinstance(performance_json_data, dict):
|
|
raise TypeError('JSON data must be a dict')
|
|
|
|
new_json_numbers_data = json.loads(new_json_numbers_text)
|
|
if not isinstance(new_json_numbers_data, dict):
|
|
raise TypeError('JSON data must be a dict')
|
|
|
|
return update_performance_numbers(performance_json_path, performance_json_data, new_json_numbers_data)
|
|
except ValueError as ve:
|
|
logging.error(f'JSON error: {ve}')
|
|
return 1
|
|
|
|
return 0
|
|
|
|
if __name__ == "__main__":
|
|
# execute only if run as a script
|
|
sys.exit(main())
|
|
|