/* Capstone Disassembly Engine, http://www.capstone-engine.org */ /* By Nguyen Anh Quynh , 2013-2022, */ /* Rot127 2022-2023 */ /* Automatically translated source file from LLVM. */ /* LLVM-commit: */ /* LLVM-tag: */ /* Only small edits allowed. */ /* For multiple similar edits, please create a Patch for the translator. */ /* Capstone's C++ file translator: */ /* https://github.com/capstone-engine/capstone/tree/next/suite/auto-sync */ //===-- AArch64BaseInfo.cpp - AArch64 Base encoding information------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file provides basic encoding and assembly information for AArch64. // //===----------------------------------------------------------------------===// #include #include #include #include #include "AArch64BaseInfo.h" #define CONCAT(a, b) CONCAT_(a, b) #define CONCAT_(a, b) a##_##b #define GET_AT_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_AT_IMPL #define GET_DBNXS_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_DBNXS_IMPL #define GET_DB_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_DB_IMPL #define GET_DC_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_DC_IMPL #define GET_IC_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_IC_IMPL #define GET_ISB_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_ISB_IMPL #define GET_TSB_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_TSB_IMPL #define GET_PRCTX_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_PRCTX_IMPL #define GET_PRFM_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_PRFM_IMPL #define GET_SVEPRFM_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_SVEPRFM_IMPL #define GET_RPRFM_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_RPRFM_IMPL // namespace AArch64RPRFM // namespace llvm #define GET_SVEPREDPAT_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_SVEPREDPAT_IMPL #define GET_SVEVECLENSPECIFIER_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_SVEVECLENSPECIFIER_IMPL // namespace AArch64SVEVecLenSpecifier // namespace llvm #define GET_EXACTFPIMM_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_EXACTFPIMM_IMPL #define GET_PSTATEIMM0_15_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_PSTATEIMM0_15_IMPL #define GET_PSTATEIMM0_1_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_PSTATEIMM0_1_IMPL #define GET_PSB_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_PSB_IMPL #define GET_BTI_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_BTI_IMPL #define SysReg AArch64SysReg_SysReg #define GET_SYSREG_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_SYSREG_IMPL #undef SysReg // return a string representing the number X // NOTE: result must be big enough to contain the data static void utostr(uint64_t X, bool isNeg, char *result) { char Buffer[22]; char *BufPtr = Buffer + 21; Buffer[21] = '\0'; if (X == 0) *--BufPtr = '0'; // Handle special case... while (X) { *--BufPtr = X % 10 + '0'; X /= 10; } if (isNeg) *--BufPtr = '-'; // Add negative sign... // suppose that result is big enough strncpy(result, BufPtr, sizeof(Buffer)); } // NOTE: result must be big enough to contain the result void AArch64SysReg_genericRegisterString(uint32_t Bits, char *result) { // assert(Bits < 0x10000); char Op0Str[32], Op1Str[32], CRnStr[32], CRmStr[32], Op2Str[32]; int dummy; uint32_t Op0 = (Bits >> 14) & 0x3; uint32_t Op1 = (Bits >> 11) & 0x7; uint32_t CRn = (Bits >> 7) & 0xf; uint32_t CRm = (Bits >> 3) & 0xf; uint32_t Op2 = Bits & 0x7; utostr(Op0, false, Op0Str); utostr(Op1, false, Op1Str); utostr(Op2, false, Op2Str); utostr(CRn, false, CRnStr); utostr(CRm, false, CRmStr); dummy = cs_snprintf(result, AARCH64_GRS_LEN, "s%s_%s_c%s_c%s_%s", Op0Str, Op1Str, CRnStr, CRmStr, Op2Str); (void)dummy; } #define GET_TLBITable_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_TLBITable_IMPL #define GET_SVCR_IMPL #include "AArch64GenSystemOperands.inc" #undef GET_SVCR_IMPL