summaryrefslogtreecommitdiff
path: root/erts/emulator/asmjit/arm/a64instapi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'erts/emulator/asmjit/arm/a64instapi.cpp')
-rw-r--r--erts/emulator/asmjit/arm/a64instapi.cpp41
1 files changed, 21 insertions, 20 deletions
diff --git a/erts/emulator/asmjit/arm/a64instapi.cpp b/erts/emulator/asmjit/arm/a64instapi.cpp
index dc98bc8f73..82bed0e78e 100644
--- a/erts/emulator/asmjit/arm/a64instapi.cpp
+++ b/erts/emulator/asmjit/arm/a64instapi.cpp
@@ -8,7 +8,7 @@
#include "../core/cpuinfo.h"
#include "../core/misc_p.h"
-#include "../core/support.h"
+#include "../core/support_p.h"
#include "../arm/a64instapi_p.h"
#include "../arm/a64instdb_p.h"
#include "../arm/a64operand.h"
@@ -26,8 +26,11 @@ Error InstInternal::instIdToString(Arch arch, InstId instId, String& output) noe
if (ASMJIT_UNLIKELY(!Inst::isDefinedId(realId)))
return DebugUtils::errored(kErrorInvalidInstruction);
- const InstDB::InstInfo& info = InstDB::infoById(realId);
- return output.append(InstDB::_nameData + info._nameDataIndex);
+
+ char nameData[32];
+ size_t nameSize = Support::decodeInstName(nameData, InstDB::_instNameIndexTable[realId], InstDB::_instNameStringTable);
+
+ return output.append(nameData, nameSize);
}
InstId InstInternal::stringToInstId(Arch arch, const char* s, size_t len) noexcept {
@@ -46,30 +49,28 @@ InstId InstInternal::stringToInstId(Arch arch, const char* s, size_t len) noexce
if (ASMJIT_UNLIKELY(prefix > 'z' - 'a'))
return Inst::kIdNone;
- uint32_t index = InstDB::instNameIndex[prefix].start;
- if (ASMJIT_UNLIKELY(!index))
- return Inst::kIdNone;
+ size_t base = InstDB::instNameIndex[prefix].start;
+ size_t end = InstDB::instNameIndex[prefix].end;
- const char* nameData = InstDB::_nameData;
- const InstDB::InstInfo* table = InstDB::_instInfoTable;
+ if (ASMJIT_UNLIKELY(!base))
+ return Inst::kIdNone;
- const InstDB::InstInfo* base = table + index;
- const InstDB::InstInfo* end = table + InstDB::instNameIndex[prefix].end;
+ char nameData[32];
+ for (size_t lim = end - base; lim != 0; lim >>= 1) {
+ size_t instId = base + (lim >> 1);
+ size_t nameSize = Support::decodeInstName(nameData, InstDB::_instNameIndexTable[instId], InstDB::_instNameStringTable);
- for (size_t lim = (size_t)(end - base); lim != 0; lim >>= 1) {
- const InstDB::InstInfo* cur = base + (lim >> 1);
- int result = Support::cmpInstName(nameData + cur[0]._nameDataIndex, s, len);
+ int result = Support::compareStringViews(s, len, nameData, nameSize);
+ if (result < 0)
+ continue;
- if (result < 0) {
- base = cur + 1;
+ if (result > 0) {
+ base = instId + 1;
lim--;
continue;
}
- if (result > 0)
- continue;
-
- return uint32_t((size_t)(cur - table));
+ return InstId(instId);
}
return Inst::kIdNone;
@@ -139,7 +140,7 @@ Error InstInternal::queryRWInfo(Arch arch, const BaseInst& inst, const Operand_*
if (ASMJIT_UNLIKELY(!Inst::isDefinedId(realId)))
return DebugUtils::errored(kErrorInvalidInstruction);
- out->_instFlags = 0;
+ out->_instFlags = InstRWFlags::kNone;
out->_opCount = uint8_t(opCount);
out->_rmFeature = 0;
out->_extraReg.reset();