From 81bb8aed762816616c410461a504795782a357f1 Mon Sep 17 00:00:00 2001 From: Junliang Yan Date: Fri, 15 Feb 2019 08:59:12 -0500 Subject: [PATCH] PPC/s390: [builtins] Improve CallApiCallback calling convention. Port c142e0a2b16a7c35f258a0649985fc6e84609e60 Original Commit Message: Refactor the CallApiCallback builtin to - pass the context as with other stubs, and - pass holder and call data in registers. This avoids having to place holder and call data onto the stack, and thus makes it possible to easily call the CallApiCallback builtin from other builtins while just forwarding the (stack) arguments. The idea is to use this in the future to optimize the general case of calling into any API method via a FunctionTemplateInfo and doing appropriate security and/or interface checks upfront as necessary (eventually making the HandleApiCall C++ builtin obsolete at some point). R=bmeurer@chromium.org, joransiu@ca.ibm.com, michael_dawson@ca.ibm.com, miladfar@ca.ibm.com BUG= LOG=N Change-Id: I94583d1e0fa7c4696e628c363fefe273c8c5cab9 Reviewed-on: https://chromium-review.googlesource.com/c/1475331 Reviewed-by: Milad Farazmand Commit-Queue: Junliang Yan Cr-Commit-Position: refs/heads/master@{#59633} --- src/ppc/interface-descriptors-ppc.cc | 8 ++++++++ src/s390/interface-descriptors-s390.cc | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/src/ppc/interface-descriptors-ppc.cc b/src/ppc/interface-descriptors-ppc.cc index 3ffe711780..20e395834c 100644 --- a/src/ppc/interface-descriptors-ppc.cc +++ b/src/ppc/interface-descriptors-ppc.cc @@ -99,6 +99,14 @@ void CallForwardVarargsDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(arraysize(registers), registers); } +void CallFunctionTemplateDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + // r4 : function template info + // r5 : number of arguments (on the stack, not including receiver) + Register registers[] = {r4, r5}; + data->InitializePlatformSpecific(arraysize(registers), registers); +} + void CallWithSpreadDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { // r3 : number of arguments (on the stack, not including receiver) diff --git a/src/s390/interface-descriptors-s390.cc b/src/s390/interface-descriptors-s390.cc index ffb7eb55c0..da51d195ff 100644 --- a/src/s390/interface-descriptors-s390.cc +++ b/src/s390/interface-descriptors-s390.cc @@ -98,6 +98,14 @@ void CallForwardVarargsDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(arraysize(registers), registers); } +void CallFunctionTemplateDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + // r3 : function template info + // r4 : number of arguments (on the stack, not including receiver) + Register registers[] = {r3, r4}; + data->InitializePlatformSpecific(arraysize(registers), registers); +} + void CallWithSpreadDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { // r2 : number of arguments (on the stack, not including receiver)