From 378b9fcda4229d6caed420f081a51b8837f96d5d Mon Sep 17 00:00:00 2001 From: Ryan Macnak Date: Tue, 24 Oct 2023 15:04:36 +0000 Subject: [PATCH] [vm] More fixes for ARM64 MSVC. TEST=--no-clang Change-Id: I9e449ce5270adcf6254602c59a625ca9af3f1082 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/331219 Commit-Queue: Ryan Macnak Reviewed-by: Alexander Aprelev --- .../vm/compiler/assembler/assembler_arm64.h | 2 +- runtime/vm/compiler/runtime_api.h | 20 +++++++++---------- runtime/vm/image_snapshot.cc | 3 ++- runtime/vm/kernel_binary.h | 8 +++++--- 4 files changed, 18 insertions(+), 15 deletions(-) diff --git a/runtime/vm/compiler/assembler/assembler_arm64.h b/runtime/vm/compiler/assembler/assembler_arm64.h index b8e021bb7d9..204c1b42b42 100644 --- a/runtime/vm/compiler/assembler/assembler_arm64.h +++ b/runtime/vm/compiler/assembler/assembler_arm64.h @@ -1753,7 +1753,7 @@ class Assembler : public AssemblerBase { ASSERT(value != result); compiler::Label done; sbfx(result, value, kSmiTagSize, - Utils::Minimum(static_cast(32), compiler::target::kSmiBits)); + Utils::Minimum(static_cast(32), compiler::target::kSmiBits)); BranchIfSmi(value, &done); LoadFieldFromOffset(result, value, compiler::target::Mint::value_offset(), compiler::kFourBytes); diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h index a25b45cebc0..fdd06158535 100644 --- a/runtime/vm/compiler/runtime_api.h +++ b/runtime/vm/compiler/runtime_api.h @@ -263,15 +263,15 @@ namespace target { #if defined(TARGET_ARCH_IS_32_BIT) typedef int32_t word; typedef uint32_t uword; -static constexpr int kWordSizeLog2 = 2; +static constexpr intptr_t kWordSizeLog2 = 2; #elif defined(TARGET_ARCH_IS_64_BIT) typedef int64_t word; typedef uint64_t uword; -static constexpr int kWordSizeLog2 = 3; +static constexpr intptr_t kWordSizeLog2 = 3; #else #error "Unsupported architecture" #endif -static constexpr int kWordSize = 1 << kWordSizeLog2; +static constexpr intptr_t kWordSize = 1 << kWordSizeLog2; static_assert(kWordSize == sizeof(word), "kWordSize should match sizeof(word)"); // Our compiler code currently assumes this, so formally check it. #if !defined(FFI_UNIT_TESTS) @@ -280,11 +280,11 @@ static_assert(dart::kWordSize >= kWordSize, #endif #if defined(DART_COMPRESSED_POINTERS) -static constexpr int kCompressedWordSize = kInt32Size; -static constexpr int kCompressedWordSizeLog2 = kInt32SizeLog2; +static constexpr intptr_t kCompressedWordSize = kInt32Size; +static constexpr intptr_t kCompressedWordSizeLog2 = kInt32SizeLog2; #else -static constexpr int kCompressedWordSize = kWordSize; -static constexpr int kCompressedWordSizeLog2 = kWordSizeLog2; +static constexpr intptr_t kCompressedWordSize = kWordSize; +static constexpr intptr_t kCompressedWordSizeLog2 = kWordSizeLog2; #endif static constexpr word kBitsPerWordLog2 = kWordSizeLog2 + kBitsPerByteLog2; @@ -298,9 +298,9 @@ constexpr uword kUwordMax = static_cast(-1); // The number of bits in the _magnitude_ of a Smi, not counting the sign bit. #if !defined(DART_COMPRESSED_POINTERS) -constexpr int kSmiBits = kBitsPerWord - 2; +constexpr intptr_t kSmiBits = kBitsPerWord - 2; #else -constexpr int kSmiBits = 30; +constexpr intptr_t kSmiBits = 30; #endif constexpr word kSmiMax = (static_cast(1) << kSmiBits) - 1; constexpr word kSmiMin = -(static_cast(1) << kSmiBits); @@ -341,7 +341,7 @@ constexpr intptr_t kDoubleSpillFactor = sizeof(double) / kWordSize; // Returns the FP-relative index where [variable] can be found (assumes // [variable] is not captured), in bytes. -inline int FrameOffsetInBytesForVariable(const LocalVariable* variable) { +inline intptr_t FrameOffsetInBytesForVariable(const LocalVariable* variable) { return frame_layout.FrameSlotForVariable(variable) * kWordSize; } diff --git a/runtime/vm/image_snapshot.cc b/runtime/vm/image_snapshot.cc index 7f8a8161647..a15ccae9dc7 100644 --- a/runtime/vm/image_snapshot.cc +++ b/runtime/vm/image_snapshot.cc @@ -1538,7 +1538,8 @@ intptr_t AssemblyImageWriter::WriteTargetWord(word value) { ASSERT(Utils::BitLength(value) <= compiler::target::kBitsPerWord); // Padding is helpful for comparing the .S with --disassemble. assembly_stream_->Printf("%s 0x%.*" Px "\n", kWordDirective, - 2 * compiler::target::kWordSize, value); + static_cast(2 * compiler::target::kWordSize), + value); return compiler::target::kWordSize; } diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h index 3a33d202090..e92a787e4ab 100644 --- a/runtime/vm/kernel_binary.h +++ b/runtime/vm/kernel_binary.h @@ -324,7 +324,7 @@ class Reader : public ValueObject { ASSERT((size_ >= 1) && (offset_ >= 0) && (offset_ <= size_ - 1)); const uint8_t* buffer = raw_buffer_; - uint8_t byte0 = buffer[offset_]; + uword byte0 = buffer[offset_]; if ((byte0 & 0x80) == 0) { // 0... offset_++; @@ -332,13 +332,15 @@ class Reader : public ValueObject { } else if ((byte0 & 0xc0) == 0x80) { // 10... ASSERT((size_ >= 2) && (offset_ >= 0) && (offset_ <= size_ - 2)); - uint32_t value = ((byte0 & ~0x80) << 8) | (buffer[offset_ + 1]); + uint32_t value = + ((byte0 & ~static_cast(0x80)) << 8) | (buffer[offset_ + 1]); offset_ += 2; return value; } else { // 11... ASSERT((size_ >= 4) && (offset_ >= 0) && (offset_ <= size_ - 4)); - uint32_t value = ((byte0 & ~0xc0) << 24) | (buffer[offset_ + 1] << 16) | + uint32_t value = ((byte0 & ~static_cast(0xc0)) << 24) | + (buffer[offset_ + 1] << 16) | (buffer[offset_ + 2] << 8) | (buffer[offset_ + 3] << 0); offset_ += 4; return value;