aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/src/compiler/backend/x64/instruction-selector-x64.cc
diff options
context:
space:
mode:
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.cc57
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 {