From: bmeurer Date: Thu, 19 Mar 2015 13:58:05 +0000 (-0700) Subject: [turbofan] Use proper parameter representation for stub calls. X-Git-Tag: upstream/4.7.83~3732 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fb966fd666e8958717828e6b2bc9411808211bc7;p=platform%2Fupstream%2Fv8.git [turbofan] Use proper parameter representation for stub calls. The CallInterfaceDescriptor already provides information about the expected representation of parameters, so we can use that instead of hardcoding tagged representation for all parameters. R=jarin@chromium.org Review URL: https://codereview.chromium.org/1019293002 Cr-Commit-Position: refs/heads/master@{#27308} --- diff --git a/src/compiler/linkage-impl.h b/src/compiler/linkage-impl.h index abd0696..a1137d7 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