Files
asmjit/test/asmjit_test_perf.cpp
kobalicek b25df5554d [ABI] Updated instruction DB, operands, and minor API changes
This changeset contains an updated instruction database that brings
ARM32 instructions for the first time. It also updates instruction
database tooling especially for ARM64, which will also be used by
ARM32 generator.

Additionally, new operan has been added, which represents a register
list as used by ARM32 instruction set.

Other minor changes are related to ARM - some stuff had to be moved
to a64 namespace from arm namespace as it's incompatible between
32-bit and 64-bit ISA.
2023-12-26 23:28:40 +01:00

73 lines
2.0 KiB
C++

// This file is part of AsmJit project <https://asmjit.com>
//
// See asmjit.h or LICENSE.md for license and copyright information
// SPDX-License-Identifier: Zlib
#include <asmjit/core.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "cmdline.h"
using namespace asmjit;
#if !defined(ASMJIT_NO_X86)
void benchmarkX86Emitters(uint32_t numIterations, bool testX86, bool testX64) noexcept;
#endif
#if !defined(ASMJIT_NO_AARCH64)
void benchmarkA64Emitters(uint32_t numIterations);
#endif
int main(int argc, char* argv[]) {
CmdLine cmdLine(argc, argv);
uint32_t numIterations = 20000;
printf("AsmJit Performance Suite v%u.%u.%u:\n\n",
unsigned((ASMJIT_LIBRARY_VERSION >> 16) ),
unsigned((ASMJIT_LIBRARY_VERSION >> 8) & 0xFF),
unsigned((ASMJIT_LIBRARY_VERSION ) & 0xFF));
printf("Usage:\n");
printf(" --help Show usage only\n");
printf(" --quick Decrease the number of iterations to make tests quicker\n");
printf(" --arch=<ARCH> Select architecture(s) to run ('all' by default)\n");
printf("\n");
printf("Architectures:\n");
#if !defined(ASMJIT_NO_X86)
printf(" --arch=x86 32-bit X86 architecture (X86)\n");
printf(" --arch=x64 64-bit X86 architecture (X86_64)\n");
#endif
#if !defined(ASMJIT_NO_AARCH64)
printf(" --arch=aarch64 64-bit ARM architecture (AArch64)\n");
#endif
printf("\n");
if (cmdLine.hasArg("--help"))
return 0;
if (cmdLine.hasArg("--quick"))
numIterations = 1000;
const char* arch = cmdLine.valueOf("--arch", "all");
#if !defined(ASMJIT_NO_X86)
bool testX86 = strcmp(arch, "all") == 0 || strcmp(arch, "x86") == 0;
bool testX64 = strcmp(arch, "all") == 0 || strcmp(arch, "x64") == 0;
if (testX86 || testX64)
benchmarkX86Emitters(numIterations, testX86, testX64);
#endif
#if !defined(ASMJIT_NO_AARCH64)
bool testAArch64 = strcmp(arch, "all") == 0 || strcmp(arch, "aarch64") == 0;
if (testAArch64)
benchmarkA64Emitters(numIterations);
#endif
return 0;
}