[ignition] Use an intrinsic for GeneratorClose.

GeneratorClose is pretty simple, we can handle it in the interpreter.

BUG=v8:6351

Review-Url: https://codereview.chromium.org/2891353002
Cr-Commit-Position: refs/heads/master@{#45434}
diff --git a/src/interpreter/interpreter-intrinsics-generator.cc b/src/interpreter/interpreter-intrinsics-generator.cc
index 6f320c0..e8572ba 100644
--- a/src/interpreter/interpreter-intrinsics-generator.cc
+++ b/src/interpreter/interpreter-intrinsics-generator.cc
@@ -434,6 +434,18 @@
   return value;
 }
 
+Node* IntrinsicsGenerator::GeneratorClose(Node* args_reg, Node* arg_count,
+                                          Node* context) {
+  Node* generator = __ LoadRegister(args_reg);
+  Node* const value =
+      __ LoadObjectField(generator, JSGeneratorObject::kResumeModeOffset);
+  __ StoreObjectFieldNoWriteBarrier(
+      generator, JSGeneratorObject::kContinuationOffset,
+      __ SmiConstant(JSGeneratorObject::kGeneratorClosed));
+
+  return value;
+}
+
 Node* IntrinsicsGenerator::AsyncGeneratorReject(Node* input, Node* arg_count,
                                                 Node* context) {
   return IntrinsicAsBuiltinCall(input, context,
diff --git a/src/interpreter/interpreter-intrinsics.h b/src/interpreter/interpreter-intrinsics.h
index 1bc6a83..3a69069 100644
--- a/src/interpreter/interpreter-intrinsics.h
+++ b/src/interpreter/interpreter-intrinsics.h
@@ -22,6 +22,7 @@
   V(GeneratorGetContext, generator_get_context, 1)                    \
   V(GeneratorGetResumeMode, generator_get_resume_mode, 1)             \
   V(GeneratorGetInputOrDebugPos, generator_get_input_or_debug_pos, 1) \
+  V(GeneratorClose, generator_close, 1)                               \
   V(Call, call, -1)                                                   \
   V(ClassOf, class_of, 1)                                             \
   V(CreateIterResultObject, create_iter_result_object, 2)             \
diff --git a/test/cctest/interpreter/bytecode_expectations/ForOfLoop.golden b/test/cctest/interpreter/bytecode_expectations/ForOfLoop.golden
index 80696ec..b476d7e 100644
--- a/test/cctest/interpreter/bytecode_expectations/ForOfLoop.golden
+++ b/test/cctest/interpreter/bytecode_expectations/ForOfLoop.golden
@@ -644,7 +644,7 @@
 "
 frame size: 15
 parameter count: 2
-bytecode array length: 590
+bytecode array length: 589
 bytecodes: [
                 B(Ldar), R(new_target),
                 B(JumpIfUndefined), U8(25),
@@ -877,7 +877,7 @@
                 B(Star), R(8),
                 B(LdaImmutableCurrentContextSlot), U8(5),
                 B(Star), R(9),
-                B(CallRuntime), U16(Runtime::k_GeneratorClose), R(9), U8(1),
+                B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(9), U8(1),
                 B(Ldar), R(8),
                 B(SetPendingMessage),
                 B(Ldar), R(6),
@@ -924,7 +924,7 @@
 "
 frame size: 17
 parameter count: 2
-bytecode array length: 696
+bytecode array length: 695
 bytecodes: [
                 B(Ldar), R(new_target),
                 B(JumpIfUndefined), U8(25),
@@ -1203,7 +1203,7 @@
                 B(Star), R(7),
                 B(LdaImmutableCurrentContextSlot), U8(5),
                 B(Star), R(8),
-                B(CallRuntime), U16(Runtime::k_GeneratorClose), R(8), U8(1),
+                B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(8), U8(1),
                 B(Ldar), R(7),
                 B(SetPendingMessage),
                 B(Ldar), R(5),
diff --git a/test/cctest/interpreter/bytecode_expectations/Generators.golden b/test/cctest/interpreter/bytecode_expectations/Generators.golden
index 4c2e2e6..04d40b6 100644
--- a/test/cctest/interpreter/bytecode_expectations/Generators.golden
+++ b/test/cctest/interpreter/bytecode_expectations/Generators.golden
@@ -13,7 +13,7 @@
 "
 frame size: 11
 parameter count: 1
-bytecode array length: 174
+bytecode array length: 173
 bytecodes: [
                 B(Ldar), R(new_target),
                 B(JumpIfUndefined), U8(25),
@@ -85,7 +85,7 @@
                 B(Star), R(5),
                 B(LdaImmutableCurrentContextSlot), U8(4),
                 B(Star), R(6),
-                B(CallRuntime), U16(Runtime::k_GeneratorClose), R(6), U8(1),
+                B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(6), U8(1),
                 B(Ldar), R(5),
                 B(SetPendingMessage),
                 B(Ldar), R(3),
@@ -114,7 +114,7 @@
 "
 frame size: 11
 parameter count: 1
-bytecode array length: 246
+bytecode array length: 245
 bytecodes: [
                 B(Ldar), R(new_target),
                 B(JumpIfUndefined), U8(25),
@@ -220,7 +220,7 @@
                 B(Star), R(5),
                 B(LdaImmutableCurrentContextSlot), U8(4),
                 B(Star), R(6),
-                B(CallRuntime), U16(Runtime::k_GeneratorClose), R(6), U8(1),
+                B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(6), U8(1),
                 B(Ldar), R(5),
                 B(SetPendingMessage),
                 B(Ldar), R(3),
@@ -250,7 +250,7 @@
 "
 frame size: 17
 parameter count: 1
-bytecode array length: 692
+bytecode array length: 691
 bytecodes: [
                 B(Ldar), R(new_target),
                 B(JumpIfUndefined), U8(25),
@@ -527,7 +527,7 @@
                 B(Star), R(7),
                 B(LdaImmutableCurrentContextSlot), U8(4),
                 B(Star), R(8),
-                B(CallRuntime), U16(Runtime::k_GeneratorClose), R(8), U8(1),
+                B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(8), U8(1),
                 B(Ldar), R(7),
                 B(SetPendingMessage),
                 B(Ldar), R(5),
diff --git a/test/cctest/interpreter/bytecode_expectations/StandardForLoop.golden b/test/cctest/interpreter/bytecode_expectations/StandardForLoop.golden
index 482b0c5..8eec066 100644
--- a/test/cctest/interpreter/bytecode_expectations/StandardForLoop.golden
+++ b/test/cctest/interpreter/bytecode_expectations/StandardForLoop.golden
@@ -273,7 +273,7 @@
 "
 frame size: 14
 parameter count: 1
-bytecode array length: 332
+bytecode array length: 331
 bytecodes: [
                 B(Ldar), R(new_target),
                 B(JumpIfUndefined), U8(25),
@@ -414,7 +414,7 @@
                 B(Star), R(8),
                 B(LdaImmutableCurrentContextSlot), U8(4),
                 B(Star), R(9),
-                B(CallRuntime), U16(Runtime::k_GeneratorClose), R(9), U8(1),
+                B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(9), U8(1),
                 B(Ldar), R(8),
                 B(SetPendingMessage),
                 B(Ldar), R(6),
@@ -448,7 +448,7 @@
 "
 frame size: 13
 parameter count: 1
-bytecode array length: 439
+bytecode array length: 438
 bytecodes: [
                 B(Ldar), R(new_target),
                 B(JumpIfUndefined), U8(25),
@@ -635,7 +635,7 @@
                 B(Star), R(7),
                 B(LdaImmutableCurrentContextSlot), U8(4),
                 B(Star), R(8),
-                B(CallRuntime), U16(Runtime::k_GeneratorClose), R(8), U8(1),
+                B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(8), U8(1),
                 B(Ldar), R(7),
                 B(SetPendingMessage),
                 B(Ldar), R(5),