578 uint32_t bitfield_bit_size,
579 uint32_t bitfield_bit_offset)
const {
580 assert(bitfield_bit_size <= 64);
581 uint64_t uval64 =
GetMaxU64(offset_ptr, size);
583 if (bitfield_bit_size == 0)
586 int32_t lsbcount = bitfield_bit_offset;
588 lsbcount = size * 8 - bitfield_bit_offset - bitfield_bit_size;
593 uint64_t bitfield_mask =
594 (bitfield_bit_size == 64
595 ? std::numeric_limits<uint64_t>::max()
596 : ((
static_cast<uint64_t
>(1) << bitfield_bit_size) - 1));
597 if (!bitfield_mask && bitfield_bit_offset == 0 && bitfield_bit_size == 64)
600 uval64 &= bitfield_mask;
606 uint32_t bitfield_bit_size,
607 uint32_t bitfield_bit_offset)
const {
608 assert(size >= 1 &&
"GetMaxS64Bitfield size must be >= 1");
609 assert(size <= 8 &&
"GetMaxS64Bitfield size must be <= 8");
610 int64_t sval64 =
GetMaxS64(offset_ptr, size);
611 if (bitfield_bit_size == 0)
613 int32_t lsbcount = bitfield_bit_offset;
615 lsbcount = size * 8 - bitfield_bit_offset - bitfield_bit_size;
618 uint64_t bitfield_mask = llvm::maskTrailingOnes<uint64_t>(bitfield_bit_size);
619 sval64 &= bitfield_mask;
621 if (sval64 & ((
static_cast<uint64_t
>(1)) << (bitfield_bit_size - 1)))
622 sval64 |= ~bitfield_mask;
691 void *dst_void_ptr,
offset_t dst_len,
700 assert(dst_void_ptr !=
nullptr);
705 assert(dst_byte_order ==
m_byte_order || dst_len == 1 || dst_len == 2 ||
706 dst_len == 4 || dst_len == 8 || dst_len == 10 || dst_len == 16 ||
715 uint8_t *dst =
static_cast<uint8_t *
>(dst_void_ptr);
716 const uint8_t *src =
PeekData(src_offset, src_len);
718 if (dst_len >= src_len) {
722 const size_t num_zeroes = dst_len - src_len;
726 ::memset(dst, 0, num_zeroes);
729 ::memcpy(dst + num_zeroes, src, src_len);
731 for (uint32_t i = 0; i < src_len; ++i)
732 dst[i + num_zeroes] = src[src_len - 1 - i];
737 for (uint32_t i = 0; i < src_len; ++i)
738 dst[i] = src[src_len - 1 - i];
740 ::memcpy(dst, src, src_len);
744 ::memset(dst + src_len, 0, num_zeroes);
754 ::memcpy(dst, src + (src_len - dst_len), dst_len);
757 for (uint32_t i = 0; i < dst_len; ++i)
758 dst[i] = src[dst_len - 1 - i];
764 for (uint32_t i = 0; i < dst_len; ++i)
765 dst[i] = src[src_len - 1 - i];
768 ::memcpy(dst, src, dst_len);
903 offset_t length, uint64_t base_addr,
904 uint32_t num_per_line,
913 for (offset = start_offset, end_offset = offset + length, count = 0;
914 ValidOffset(offset) && offset < end_offset; ++count) {
915 if ((count % num_per_line) == 0) {
923 sstr.
Printf(
"0x%8.8" PRIx64
":",
924 static_cast<uint64_t
>(base_addr + (offset - start_offset)));
932 char ch =
GetU8(&offset);
933 sstr.
Printf(
" %c", llvm::isPrint(ch) ? ch :
' ');