/* * Use an inline function here just to test '__textcoal_nt' sections on darwin. */ inline int MyDisasm(uintptr_t CodeIndex, PDISCPUSTATE pCpu, uint32_t *pcb) { uint32_t cb; int rc = DISInstrWithReader(CodeIndex, DISCPUMODE_32BIT, DisasmTest1ReadCode, 0, pCpu, &cb); *pcb = cb; MY_PRINTF(("DISCoreOneEx -> rc=%d cb=%d Cpu: bOpCode=%#x pCurInstr=%p (42=%d)\n", \ rc, cb, pCpu->bOpCode, pCpu->pCurInstr, 42)); \ return rc; }
static void testPerformance(const char *pszSub, uint8_t const *pabInstrs, uintptr_t uEndPtr, DISCPUMODE enmDisCpuMode) { RTTestISubF("Performance - %s", pszSub); size_t const cbInstrs = uEndPtr - (uintptr_t)pabInstrs; uint64_t cInstrs = 0; uint64_t nsStart = RTTimeNanoTS(); for (uint32_t i = 0; i < _512K; i++) /* the samples are way to small. :-) */ { for (size_t off = 0; off < cbInstrs; cInstrs++) { uint32_t cb = 1; DISSTATE Dis; DISInstrWithReader((uintptr_t)&pabInstrs[off], enmDisCpuMode, testReadBytes, NULL, &Dis, &cb); off += cb; } } uint64_t cNsElapsed = RTTimeNanoTS() - nsStart; RTTestIValueF(cNsElapsed, RTTESTUNIT_NS, "%s-Total", pszSub); RTTestIValueF(cNsElapsed / cInstrs, RTTESTUNIT_NS_PER_CALL, "%s-per-instruction", pszSub); }