Index: src/compiler/linkage-impl.h |
diff --git a/src/compiler/linkage-impl.h b/src/compiler/linkage-impl.h |
index abd0696837d17a49c4f58e1d9ca8084968658069..a1137d76e678691781200cf81aee40b58d824328 100644 |
--- a/src/compiler/linkage-impl.h |
+++ b/src/compiler/linkage-impl.h |
@@ -164,13 +164,16 @@ class LinkageHelper { |
if (i < register_parameter_count) { |
// The first parameters go in registers. |
Register reg = descriptor.GetEnvironmentParameterRegister(i); |
+ Representation rep = |
+ descriptor.GetEnvironmentParameterRepresentation(i); |
locations.AddParam(regloc(reg)); |
+ types.AddParam(reptyp(rep)); |
} else { |
// The rest of the parameters go on the stack. |
int stack_slot = i - register_parameter_count - stack_parameter_count; |
locations.AddParam(stackloc(stack_slot)); |
+ types.AddParam(kMachAnyTagged); |
} |
- types.AddParam(kMachAnyTagged); |
} |
// Add context. |
locations.AddParam(regloc(LinkageTraits::ContextReg())); |
@@ -232,6 +235,34 @@ class LinkageHelper { |
DCHECK_LT(i, 0); |
return LinkageLocation(i); |
} |
+ |
+ static MachineType reptyp(Representation representation) { |
+ switch (representation.kind()) { |
+ case Representation::kInteger8: |
+ return kMachInt8; |
+ case Representation::kUInteger8: |
+ return kMachUint8; |
+ case Representation::kInteger16: |
+ return kMachInt16; |
+ case Representation::kUInteger16: |
+ return kMachUint16; |
+ case Representation::kInteger32: |
+ return kMachInt32; |
+ case Representation::kSmi: |
+ case Representation::kTagged: |
+ case Representation::kHeapObject: |
+ return kMachAnyTagged; |
+ case Representation::kDouble: |
+ return kMachFloat64; |
+ case Representation::kExternal: |
+ return kMachPtr; |
+ case Representation::kNone: |
+ case Representation::kNumRepresentations: |
+ break; |
+ } |
+ UNREACHABLE(); |
+ return kMachNone; |
+ } |
}; |
@@ -254,7 +285,6 @@ LinkageLocation Linkage::GetOsrValueLocation(int index) const { |
} |
} |
- |
} // namespace compiler |
} // namespace internal |
} // namespace v8 |