Skip to content

Commit

Permalink
deps: V8: cherry-pick d15d49b09dc7
Browse files Browse the repository at this point in the history
Original commit message:

    Make bitfields only as wide as necessary for enums

    clang now complains when a BitField for an enum is too wide.
    We could suppress this, but it seems kind of useful from an
    uninformed distance, so I made a few bitfields smaller instead.

    (For AddressingMode, since its size is target-dependent, I added
    an explicit underlying type to the enum instead, which suppresses
    the diag on a per-enum basis.)

    This is without any understanding of the code I'm touching.
    Especially the change in v8-internal.h feels a bit risky to me.

    Bug: chromium:1348574
    Change-Id: I73395de593045036b72dadf4e3147b5f7e13c958
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3794708
    Commit-Queue: Nico Weber <[email protected]>
    Reviewed-by: Leszek Swirski <[email protected]>
    Reviewed-by: Hannes Payer <[email protected]>
    Auto-Submit: Nico Weber <[email protected]>
    Cr-Commit-Position: refs/heads/main@{#82109}

Refs: v8/v8@d15d49b
PR-URL: #52337
Fixes: #52230
Reviewed-By: Rafael Gonzaga <[email protected]>
  • Loading branch information
Bo98 authored and richardlau committed Apr 17, 2024
1 parent c60cd67 commit 678641f
Show file tree
Hide file tree
Showing 7 changed files with 13 additions and 8 deletions.
2 changes: 1 addition & 1 deletion common.gypi
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@

# Reset this number to 0 on major V8 upgrades.
# Increment by one for each non-official patch applied to deps/v8.
'v8_embedder_string': '-node.36',
'v8_embedder_string': '-node.37',

##### V8 defaults for Node.js #####

Expand Down
2 changes: 1 addition & 1 deletion deps/v8/src/ast/ast.h
Original file line number Diff line number Diff line change
Expand Up @@ -999,7 +999,7 @@ class Literal final : public Expression {
friend class AstNodeFactory;
friend Zone;

using TypeField = Expression::NextBitField<Type, 4>;
using TypeField = Expression::NextBitField<Type, 3>;

Literal(int smi, int position) : Expression(position, kLiteral), smi_(smi) {
bit_field_ = TypeField::update(bit_field_, kSmi);
Expand Down
5 changes: 5 additions & 0 deletions deps/v8/src/base/bit-field.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,11 @@ class BitField final {
static constexpr U kNumValues = U{1} << kSize;

// Value for the field with all bits set.
// If clang complains
// "constexpr variable 'kMax' must be initialized by a constant expression"
// on this line, then you're creating a BitField for an enum with more bits
// than needed for the enum values. Either reduce the BitField size,
// or give the enum an explicit underlying type.
static constexpr T kMax = static_cast<T>(kNumValues - 1);

template <class T2, int size2>
Expand Down
4 changes: 2 additions & 2 deletions deps/v8/src/compiler/backend/instruction-codes.h
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ V8_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
V(None) \
TARGET_ADDRESSING_MODE_LIST(V)

enum AddressingMode {
enum AddressingMode : uint8_t {
#define DECLARE_ADDRESSING_MODE(Name) kMode_##Name,
ADDRESSING_MODE_LIST(DECLARE_ADDRESSING_MODE)
#undef DECLARE_ADDRESSING_MODE
Expand Down Expand Up @@ -306,7 +306,7 @@ using MiscField = base::BitField<int, 22, 10>;
// LaneSizeField and AccessModeField are helper types to encode/decode a lane
// size, an access mode, or both inside the overlapping MiscField.
using LaneSizeField = base::BitField<int, 22, 8>;
using AccessModeField = base::BitField<MemoryAccessMode, 30, 2>;
using AccessModeField = base::BitField<MemoryAccessMode, 30, 1>;
// TODO(turbofan): {HasMemoryAccessMode} is currently only used to guard
// decoding (in CodeGenerator and InstructionScheduler). Encoding (in
// InstructionSelector) is not yet guarded. There are in fact instructions for
Expand Down
4 changes: 2 additions & 2 deletions deps/v8/src/compiler/backend/instruction.h
Original file line number Diff line number Diff line change
Expand Up @@ -586,8 +586,8 @@ class LocationOperand : public InstructionOperand {
}

STATIC_ASSERT(KindField::kSize == 3);
using LocationKindField = base::BitField64<LocationKind, 3, 2>;
using RepresentationField = base::BitField64<MachineRepresentation, 5, 8>;
using LocationKindField = base::BitField64<LocationKind, 3, 1>;
using RepresentationField = LocationKindField::Next<MachineRepresentation, 8>;
using IndexField = base::BitField64<int32_t, 35, 29>;
};

Expand Down
2 changes: 1 addition & 1 deletion deps/v8/src/maglev/maglev-ir.h
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ class OpProperties {
}

constexpr bool is_pure() const {
return (bitfield_ | kPureMask) == kPureValue;
return (bitfield_ & kPureMask) == kPureValue;
}
constexpr bool is_required_when_unused() const {
return can_write() || non_memory_side_effects();
Expand Down
2 changes: 1 addition & 1 deletion deps/v8/src/wasm/wasm-code-manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,7 @@ class V8_EXPORT_PRIVATE WasmCode final {
int trap_handler_index_ = -1;

// Bits encoded in {flags_}:
using KindField = base::BitField8<Kind, 0, 3>;
using KindField = base::BitField8<Kind, 0, 2>;
using ExecutionTierField = KindField::Next<ExecutionTier, 2>;
using ForDebuggingField = ExecutionTierField::Next<ForDebugging, 2>;

Expand Down

0 comments on commit 678641f

Please sign in to comment.