diff options
author | 2022-02-11 17:16:46 +0700 | |
---|---|---|
committer | 2022-02-13 21:26:55 +0700 | |
commit | 1fba2b4f2c27a2f4162855056f9765ee79db31e9 (patch) | |
tree | f98b63565a8b12895b0bb057c0790b88b11a7b2e /3rdparty/asmjit/test/asmjit_test_x86_instinfo.cpp | |
parent | 3a7e08d47d4e1b0e075360e19be1763d9b29f557 (diff) |
asmjit: sync with upstream
Diffstat (limited to '3rdparty/asmjit/test/asmjit_test_x86_instinfo.cpp')
-rw-r--r-- | 3rdparty/asmjit/test/asmjit_test_x86_instinfo.cpp | 128 |
1 files changed, 0 insertions, 128 deletions
diff --git a/3rdparty/asmjit/test/asmjit_test_x86_instinfo.cpp b/3rdparty/asmjit/test/asmjit_test_x86_instinfo.cpp deleted file mode 100644 index 1d7d5003f8b..00000000000 --- a/3rdparty/asmjit/test/asmjit_test_x86_instinfo.cpp +++ /dev/null @@ -1,128 +0,0 @@ -// AsmJit - Machine code generation for C++ -// -// * Official AsmJit Home Page: https://asmjit.com -// * Official Github Repository: https://github.com/asmjit/asmjit -// -// Copyright (c) 2008-2020 The AsmJit Authors -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// 3. This notice may not be removed or altered from any source distribution. - -#include <asmjit/x86.h> -#include <stdio.h> - -using namespace asmjit; - -static void printInfo(uint32_t arch, const BaseInst& inst, const Operand_* operands, size_t opCount) { - StringTmp<512> sb; - - // Read & Write Information - // ------------------------ - - InstRWInfo rw; - InstAPI::queryRWInfo(arch, inst, operands, opCount, &rw); - - sb.append("Instruction:\n"); - sb.append(" "); -#ifndef ASMJIT_NO_LOGGING - Formatter::formatInstruction(sb, 0, nullptr, arch, inst, operands, opCount); -#else - sb.append("<Logging-Not-Available>"); -#endif - sb.append("\n"); - - sb.append("Operands:\n"); - for (uint32_t i = 0; i < rw.opCount(); i++) { - const OpRWInfo& op = rw.operand(i); - const char* access = op.isReadOnly() ? "R" : - op.isWriteOnly() ? "W" : - op.isReadWrite() ? "X" : "_"; - - sb.appendFormat(" [%u] RW=%s Read=%016llX Write=%016llX Extend=%016llX", - i, access, op.readByteMask(), op.writeByteMask(), op.extendByteMask()); - sb.append("\n"); - } - - // CPU Features - // ------------ - - BaseFeatures features; - InstAPI::queryFeatures(arch, inst, operands, opCount, &features); - -#ifndef ASMJIT_NO_LOGGING - if (!features.empty()) { - sb.append("Features:\n"); - sb.append(" "); - - bool first = true; - BaseFeatures::Iterator it(features.iterator()); - while (it.hasNext()) { - uint32_t featureId = uint32_t(it.next()); - if (!first) - sb.append(" & "); - Formatter::formatFeature(sb, arch, featureId); - first = false; - } - sb.append("\n"); - } -#endif - - printf("%s\n", sb.data()); -} - -template<typename... Args> -static void printInfoSimple(uint32_t arch, uint32_t instId, Args&&... args) { - BaseInst inst(instId); - Operand_ opArray[] = { std::forward<Args>(args)... }; - printInfo(arch, inst, opArray, sizeof...(args)); -} - -int main() { - using namespace x86; - uint32_t arch = Environment::kArchX64; - - printf("AsmJit X86 Instruction Information Test\n\n"); - - printInfoSimple(arch, - x86::Inst::kIdAdd, - x86::eax, x86::ebx); - - printInfoSimple(arch, - x86::Inst::kIdPshufd, - x86::xmm0, x86::xmm1, imm(0)); - - printInfoSimple(arch, - x86::Inst::kIdPextrw, - x86::eax, x86::xmm1, imm(0)); - - printInfoSimple(arch, - x86::Inst::kIdPextrw, - x86::ptr(rax), x86::xmm1, imm(0)); - - printInfoSimple(arch, - x86::Inst::kIdVaddpd, - x86::ymm0, x86::ymm1, x86::ymm2); - - printInfoSimple(arch, - x86::Inst::kIdVaddpd, - x86::ymm0, x86::ymm30, x86::ymm31); - - printInfoSimple(arch, - x86::Inst::kIdVaddpd, - x86::zmm0, x86::zmm1, x86::zmm2); - - return 0; -} |