diff options
Diffstat (limited to 'deps/v8/src/compiler/backend/x64/instruction-selector-x64.cc')
-rw-r--r-- | deps/v8/src/compiler/backend/x64/instruction-selector-x64.cc | 57 |
1 files changed, 13 insertions, 44 deletions
diff --git a/deps/v8/src/compiler/backend/x64/instruction-selector-x64.cc b/deps/v8/src/compiler/backend/x64/instruction-selector-x64.cc index a3cb90f42a..a20590b8d3 100644 --- a/deps/v8/src/compiler/backend/x64/instruction-selector-x64.cc +++ b/deps/v8/src/compiler/backend/x64/instruction-selector-x64.cc @@ -9,7 +9,7 @@ #include "src/compiler/backend/instruction-selector-impl.h" #include "src/compiler/node-matchers.h" #include "src/compiler/node-properties.h" -#include "src/roots-inl.h" +#include "src/roots/roots-inl.h" namespace v8 { namespace internal { @@ -240,33 +240,18 @@ ArchOpcode GetLoadOpcode(LoadRepresentation load_rep) { case MachineRepresentation::kWord32: opcode = kX64Movl; break; -#ifdef V8_COMPRESS_POINTERS - case MachineRepresentation::kTaggedSigned: - opcode = kX64MovqDecompressTaggedSigned; - break; - case MachineRepresentation::kTaggedPointer: - opcode = kX64MovqDecompressTaggedPointer; - break; - case MachineRepresentation::kTagged: - opcode = kX64MovqDecompressAnyTagged; - break; case MachineRepresentation::kCompressedSigned: // Fall through. case MachineRepresentation::kCompressedPointer: // Fall through. case MachineRepresentation::kCompressed: +#ifdef V8_COMPRESS_POINTERS opcode = kX64Movl; break; #else - case MachineRepresentation::kCompressedSigned: // Fall through. - case MachineRepresentation::kCompressedPointer: // Fall through. - case MachineRepresentation::kCompressed: UNREACHABLE(); - break; +#endif case MachineRepresentation::kTaggedSigned: // Fall through. case MachineRepresentation::kTaggedPointer: // Fall through. - case MachineRepresentation::kTagged: - opcode = kX64Movq; - break; -#endif + case MachineRepresentation::kTagged: // Fall through. case MachineRepresentation::kWord64: opcode = kX64Movq; break; @@ -275,7 +260,6 @@ ArchOpcode GetLoadOpcode(LoadRepresentation load_rep) { break; case MachineRepresentation::kNone: UNREACHABLE(); - break; } return opcode; } @@ -284,46 +268,30 @@ ArchOpcode GetStoreOpcode(StoreRepresentation store_rep) { switch (store_rep.representation()) { case MachineRepresentation::kFloat32: return kX64Movss; - break; case MachineRepresentation::kFloat64: return kX64Movsd; - break; case MachineRepresentation::kBit: // Fall through. case MachineRepresentation::kWord8: return kX64Movb; - break; case MachineRepresentation::kWord16: return kX64Movw; - break; case MachineRepresentation::kWord32: return kX64Movl; - break; -#ifdef V8_COMPRESS_POINTERS - case MachineRepresentation::kTaggedSigned: // Fall through. - case MachineRepresentation::kTaggedPointer: // Fall through. - case MachineRepresentation::kTagged: - return kX64MovqCompressTagged; case MachineRepresentation::kCompressedSigned: // Fall through. case MachineRepresentation::kCompressedPointer: // Fall through. case MachineRepresentation::kCompressed: - return kX64Movl; +#ifdef V8_COMPRESS_POINTERS + return kX64MovqCompressTagged; #else - case MachineRepresentation::kCompressedSigned: // Fall through. - case MachineRepresentation::kCompressedPointer: // Fall through. - case MachineRepresentation::kCompressed: UNREACHABLE(); +#endif case MachineRepresentation::kTaggedSigned: // Fall through. case MachineRepresentation::kTaggedPointer: // Fall through. - case MachineRepresentation::kTagged: - return kX64Movq; - break; -#endif + case MachineRepresentation::kTagged: // Fall through. case MachineRepresentation::kWord64: return kX64Movq; - break; case MachineRepresentation::kSimd128: // Fall through. return kX64Movdqu; - break; case MachineRepresentation::kNone: UNREACHABLE(); } @@ -380,7 +348,7 @@ void InstructionSelector::VisitStore(Node* node) { WriteBarrierKind write_barrier_kind = store_rep.write_barrier_kind(); if (write_barrier_kind != kNoWriteBarrier) { - DCHECK(CanBeTaggedPointer(store_rep.representation())); + DCHECK(CanBeTaggedOrCompressedPointer(store_rep.representation())); AddressingMode addressing_mode; InstructionOperand inputs[] = { g.UseUniqueRegister(base), @@ -2405,7 +2373,6 @@ void InstructionSelector::VisitWord32AtomicStore(Node* node) { break; default: UNREACHABLE(); - return; } VisitAtomicExchange(this, node, opcode); } @@ -2428,7 +2395,6 @@ void InstructionSelector::VisitWord64AtomicStore(Node* node) { break; default: UNREACHABLE(); - return; } VisitAtomicExchange(this, node, opcode); } @@ -3029,7 +2995,10 @@ void InstructionSelector::VisitS8x16Shuffle(Node* node) { // pshufd takes a single imm8 shuffle mask. opcode = kX64S32x4Swizzle; no_same_as_first = true; - src0_needs_reg = false; + // TODO(v8:9083): This doesn't strictly require a register, forcing the + // swizzles to always use registers until generation of incorrect memory + // operands can be fixed. + src0_needs_reg = true; imms[imm_count++] = shuffle_mask; } } else { |