LCOV - code coverage report
Current view: top level - src/builtins - builtins-handler-gen.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 52 52 100.0 %
Date: 2017-10-20 Functions: 30 30 100.0 %

          Line data    Source code
       1             : // Copyright 2016 the V8 project authors. All rights reserved.
       2             : // Use of this source code is governed by a BSD-style license that can be
       3             : // found in the LICENSE file.
       4             : 
       5             : #include "src/builtins/builtins-utils-gen.h"
       6             : #include "src/builtins/builtins.h"
       7             : #include "src/code-stub-assembler.h"
       8             : #include "src/ic/handler-compiler.h"
       9             : #include "src/ic/ic.h"
      10             : #include "src/ic/keyed-store-generic.h"
      11             : #include "src/objects-inl.h"
      12             : 
      13             : namespace v8 {
      14             : namespace internal {
      15             : 
      16          93 : TF_BUILTIN(LoadIC_StringLength, CodeStubAssembler) {
      17             :   Node* value = Parameter(Descriptor::kReceiver);
      18          31 :   Node* string = LoadJSValueValue(value);
      19          62 :   Node* result = LoadStringLength(string);
      20          31 :   Return(result);
      21          31 : }
      22             : 
      23          93 : TF_BUILTIN(KeyedLoadIC_IndexedString, CodeStubAssembler) {
      24             :   Node* receiver = Parameter(Descriptor::kReceiver);
      25             :   Node* index = Parameter(Descriptor::kName);
      26             :   Node* slot = Parameter(Descriptor::kSlot);
      27             :   Node* vector = Parameter(Descriptor::kVector);
      28             :   Node* context = Parameter(Descriptor::kContext);
      29             : 
      30             :   Label miss(this);
      31             : 
      32          31 :   Node* index_intptr = TryToIntptr(index, &miss);
      33          93 :   Node* length = SmiUntag(LoadStringLength(receiver));
      34          62 :   GotoIf(UintPtrGreaterThanOrEqual(index_intptr, length), &miss);
      35             : 
      36          62 :   Node* code = StringCharCodeAt(receiver, index_intptr, INTPTR_PARAMETERS);
      37          31 :   Node* result = StringFromCharCode(code);
      38          31 :   Return(result);
      39             : 
      40          31 :   BIND(&miss);
      41             :   TailCallRuntime(Runtime::kKeyedLoadIC_Miss, context, receiver, index, slot,
      42          31 :                   vector);
      43          31 : }
      44             : 
      45          93 : TF_BUILTIN(KeyedLoadIC_Miss, CodeStubAssembler) {
      46             :   Node* receiver = Parameter(Descriptor::kReceiver);
      47             :   Node* name = Parameter(Descriptor::kName);
      48             :   Node* slot = Parameter(Descriptor::kSlot);
      49             :   Node* vector = Parameter(Descriptor::kVector);
      50             :   Node* context = Parameter(Descriptor::kContext);
      51             : 
      52             :   TailCallRuntime(Runtime::kKeyedLoadIC_Miss, context, receiver, name, slot,
      53             :                   vector);
      54          31 : }
      55             : 
      56          93 : TF_BUILTIN(KeyedLoadIC_Slow, CodeStubAssembler) {
      57             :   Node* receiver = Parameter(Descriptor::kReceiver);
      58             :   Node* name = Parameter(Descriptor::kName);
      59             :   Node* context = Parameter(Descriptor::kContext);
      60             : 
      61             :   TailCallRuntime(Runtime::kKeyedGetProperty, context, receiver, name);
      62          31 : }
      63             : 
      64          31 : void Builtins::Generate_KeyedStoreIC_Megamorphic(
      65             :     compiler::CodeAssemblerState* state) {
      66          31 :   KeyedStoreGenericGenerator::Generate(state);
      67          31 : }
      68             : 
      69          31 : void Builtins::Generate_StoreIC_Uninitialized(
      70             :     compiler::CodeAssemblerState* state) {
      71          31 :   StoreICUninitializedGenerator::Generate(state);
      72          31 : }
      73             : 
      74          93 : TF_BUILTIN(KeyedStoreIC_Miss, CodeStubAssembler) {
      75             :   Node* receiver = Parameter(Descriptor::kReceiver);
      76             :   Node* name = Parameter(Descriptor::kName);
      77             :   Node* value = Parameter(Descriptor::kValue);
      78             :   Node* slot = Parameter(Descriptor::kSlot);
      79             :   Node* vector = Parameter(Descriptor::kVector);
      80             :   Node* context = Parameter(Descriptor::kContext);
      81             : 
      82             :   TailCallRuntime(Runtime::kKeyedStoreIC_Miss, context, value, slot, vector,
      83             :                   receiver, name);
      84          31 : }
      85             : 
      86          93 : TF_BUILTIN(KeyedStoreIC_Slow, CodeStubAssembler) {
      87             :   Node* receiver = Parameter(Descriptor::kReceiver);
      88             :   Node* name = Parameter(Descriptor::kName);
      89             :   Node* value = Parameter(Descriptor::kValue);
      90             :   Node* slot = Parameter(Descriptor::kSlot);
      91             :   Node* vector = Parameter(Descriptor::kVector);
      92             :   Node* context = Parameter(Descriptor::kContext);
      93             : 
      94             :   // The slow case calls into the runtime to complete the store without causing
      95             :   // an IC miss that would otherwise cause a transition to the generic stub.
      96             :   TailCallRuntime(Runtime::kKeyedStoreIC_Slow, context, value, slot, vector,
      97             :                   receiver, name);
      98          31 : }
      99             : 
     100          93 : TF_BUILTIN(LoadGlobalIC_Miss, CodeStubAssembler) {
     101             :   Node* name = Parameter(Descriptor::kName);
     102             :   Node* slot = Parameter(Descriptor::kSlot);
     103             :   Node* vector = Parameter(Descriptor::kVector);
     104             :   Node* context = Parameter(Descriptor::kContext);
     105             : 
     106             :   TailCallRuntime(Runtime::kLoadGlobalIC_Miss, context, name, slot, vector);
     107          31 : }
     108             : 
     109          93 : TF_BUILTIN(LoadGlobalIC_Slow, CodeStubAssembler) {
     110             :   Node* name = Parameter(Descriptor::kName);
     111             :   Node* slot = Parameter(Descriptor::kSlot);
     112             :   Node* vector = Parameter(Descriptor::kVector);
     113             :   Node* context = Parameter(Descriptor::kContext);
     114             : 
     115             :   TailCallRuntime(Runtime::kLoadGlobalIC_Slow, context, name, slot, vector);
     116          31 : }
     117             : 
     118          31 : void Builtins::Generate_LoadIC_Getter_ForDeopt(MacroAssembler* masm) {
     119          31 :   NamedLoadHandlerCompiler::GenerateLoadViaGetterForDeopt(masm);
     120          31 : }
     121             : 
     122          93 : TF_BUILTIN(LoadIC_FunctionPrototype, CodeStubAssembler) {
     123             :   Node* receiver = Parameter(Descriptor::kReceiver);
     124             :   Node* name = Parameter(Descriptor::kName);
     125             :   Node* slot = Parameter(Descriptor::kSlot);
     126             :   Node* vector = Parameter(Descriptor::kVector);
     127             :   Node* context = Parameter(Descriptor::kContext);
     128             : 
     129             :   Label miss(this, Label::kDeferred);
     130          62 :   Return(LoadJSFunctionPrototype(receiver, &miss));
     131             : 
     132          31 :   BIND(&miss);
     133          31 :   TailCallRuntime(Runtime::kLoadIC_Miss, context, receiver, name, slot, vector);
     134          31 : }
     135             : 
     136          93 : TF_BUILTIN(LoadIC_Miss, CodeStubAssembler) {
     137             :   Node* receiver = Parameter(Descriptor::kReceiver);
     138             :   Node* name = Parameter(Descriptor::kName);
     139             :   Node* slot = Parameter(Descriptor::kSlot);
     140             :   Node* vector = Parameter(Descriptor::kVector);
     141             :   Node* context = Parameter(Descriptor::kContext);
     142             : 
     143             :   TailCallRuntime(Runtime::kLoadIC_Miss, context, receiver, name, slot, vector);
     144          31 : }
     145             : 
     146          93 : TF_BUILTIN(LoadIC_Slow, CodeStubAssembler) {
     147             :   Node* receiver = Parameter(Descriptor::kReceiver);
     148             :   Node* name = Parameter(Descriptor::kName);
     149             :   Node* context = Parameter(Descriptor::kContext);
     150             : 
     151             :   TailCallRuntime(Runtime::kGetProperty, context, receiver, name);
     152          31 : }
     153             : 
     154          93 : TF_BUILTIN(StoreIC_Miss, CodeStubAssembler) {
     155             :   Node* receiver = Parameter(Descriptor::kReceiver);
     156             :   Node* name = Parameter(Descriptor::kName);
     157             :   Node* value = Parameter(Descriptor::kValue);
     158             :   Node* slot = Parameter(Descriptor::kSlot);
     159             :   Node* vector = Parameter(Descriptor::kVector);
     160             :   Node* context = Parameter(Descriptor::kContext);
     161             : 
     162             :   TailCallRuntime(Runtime::kStoreIC_Miss, context, value, slot, vector,
     163             :                   receiver, name);
     164          31 : }
     165             : 
     166          31 : void Builtins::Generate_StoreIC_Setter_ForDeopt(MacroAssembler* masm) {
     167          31 :   NamedStoreHandlerCompiler::GenerateStoreViaSetterForDeopt(masm);
     168          31 : }
     169             : 
     170          93 : TF_BUILTIN(StoreGlobalIC_Slow, CodeStubAssembler) {
     171             :   Node* receiver = Parameter(Descriptor::kReceiver);
     172             :   Node* name = Parameter(Descriptor::kName);
     173             :   Node* value = Parameter(Descriptor::kValue);
     174             :   Node* slot = Parameter(Descriptor::kSlot);
     175             :   Node* vector = Parameter(Descriptor::kVector);
     176             :   Node* context = Parameter(Descriptor::kContext);
     177             : 
     178             :   // The slow case calls into the runtime to complete the store without causing
     179             :   // an IC miss that would otherwise cause a transition to the generic stub.
     180             :   TailCallRuntime(Runtime::kStoreGlobalIC_Slow, context, value, slot, vector,
     181             :                   receiver, name);
     182          31 : }
     183             : 
     184             : }  // namespace internal
     185             : }  // namespace v8

Generated by: LCOV version 1.10