From e093c21ed880ac3eb72119be15093ee04f8ce299 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Tue, 5 Mar 2024 19:50:13 -0500 Subject: Move architecture modules into the API repo --- arch/powerpc/test_asm.cpp | 184 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 arch/powerpc/test_asm.cpp (limited to 'arch/powerpc/test_asm.cpp') diff --git a/arch/powerpc/test_asm.cpp b/arch/powerpc/test_asm.cpp new file mode 100644 index 00000000..7f391792 --- /dev/null +++ b/arch/powerpc/test_asm.cpp @@ -0,0 +1,184 @@ +/* this is meant to be linked up against assembler.cpp for stress test and + benchmarking + +g++ -std=c++11 -O0 -g -I capstone/include -L./build/capstone test_asm.cpp assembler.cpp -o test_asm -lcapstone + +*/ + +/* */ +#include +#include +#include +#include +#include + +/* c++ stuff */ +#include +#include +#include +using namespace std; + +/* capstone stuff */ +#include + +#include +#include +#include + +#include "assembler.h" + +/*****************************************************************************/ +/* main */ +/*****************************************************************************/ + +#define TEST_ADDR 0xCAFEBAB0 + +int main(int ac, char **av) +{ + int rc = -1; + uint32_t insWord = 0x800000A; + uint8_t encoding[4]; + + /* statistics crap */ + string srcWorstTime, srcWorstFails; + clock_t t0, t1; + double tdelta, tavg=0, tsum=0, tworst=0; + int tcount = 0; + uint32_t insWordWorstTime, insWordWorstFails; + int failsWorst = 0; + + srand(time(NULL)); + + /* decide mode */ + #define MODE_FILE 0 + #define MODE_RANDOM 1 + #define MODE_SINGLE 2 + int mode; + if(ac > 1) { + struct stat st; + stat(av[1], &st); + if(S_ISREG(st.st_mode)) { + printf("FILE MODE!\n"); + mode = MODE_FILE; + } + else if(!strcmp(av[1], "random")) { + printf("RANDOM MODE!\n"); + mode = MODE_RANDOM; + } + else { + printf("SINGLE MODE!\n"); + mode = MODE_SINGLE; + } + } + else { + printf("need args!\n"); + return -1; + } + + if(mode == MODE_FILE) { + char *line; + string src, err; + size_t len; + + /* read file */ + FILE *fp = fopen(av[1], "r"); + if(!fp) { + printf("ERROR: fopen(%s)\n", av[1]); + return -1; + } + while(getline(&line, &len, fp) != -1) + src += line; + fclose(fp); + + /* assemble */ + vector result; + if(assemble_multiline(src, result, err)) { + printf("error: %s", err.c_str()); + return -1; + } + + /* result */ + printf("result: "); + for(int i=0; i tworst) { + insWordWorstTime = insWord; + srcWorstTime = src; + tworst = tdelta; + } + + if(failures > failsWorst) { + insWordWorstFails = insWord; + failsWorst = failures; + srcWorstFails = src; + } + + printf("worst time: %f held by %08X: %s\n", tworst, insWordWorstTime, srcWorstTime.c_str()); + printf("worst fails: %d held by %08X: %s\n", failsWorst, insWordWorstFails, srcWorstFails.c_str()); + } + + return 0; + } + + rc = 0; + cleanup: + return rc; +} + -- cgit v1.3.1