Reviewers: Benedikt Meurer, mvstanton,

Message:
This CL is a close friend of https://codereview.chromium.org/59023003/

Description:
Generate DataViewInitialize built-in in hydrogen.

[email protected],[email protected]

Please review this at https://codereview.chromium.org/66843011/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files (+58, -1 lines):
  M src/hydrogen.h
  M src/hydrogen.cc
  M src/typedarray.js
  M test/mjsunit/fuzz-natives-part1.js
  M test/mjsunit/fuzz-natives-part2.js
  M test/mjsunit/fuzz-natives-part3.js
  M test/mjsunit/fuzz-natives-part4.js


Index: src/hydrogen.cc
diff --git a/src/hydrogen.cc b/src/hydrogen.cc
index 591390231526124567d494905432b3a08cafd8b5..27fd055d43443824b8f0ee408d32667bc0b324c4 100644
--- a/src/hydrogen.cc
+++ b/src/hydrogen.cc
@@ -7920,6 +7920,52 @@ const HOptimizedGraphBuilder::InlineFunctionGenerator
 #undef INLINE_FUNCTION_GENERATOR_ADDRESS


+void HOptimizedGraphBuilder::VisitDataViewInitialize(
+    CallRuntime* expr) {
+  ZoneList<Expression*>* arguments = expr->arguments();
+
+  NoObservableSideEffectsScope scope(this);
+  ASSERT(arguments->length()== 4);
+  CHECK_ALIVE(VisitForValue(arguments->at(0)));
+  HValue* obj = Pop();
+
+  CHECK_ALIVE(VisitForValue(arguments->at(1)));
+  HValue* buffer = Pop();
+
+  CHECK_ALIVE(VisitForValue(arguments->at(2)));
+  HValue* byte_offset = Pop();
+
+  CHECK_ALIVE(VisitForValue(arguments->at(3)));
+  HValue* byte_length = Pop();
+
+  for (int offset = JSDataView::kSize;
+        offset < JSDataView::kSizeWithInternalFields;
+        offset += kPointerSize) {
+    Add<HStoreNamedField>(obj,
+        HObjectAccess::ForJSObjectOffset(offset),
+        Add<HConstant>(static_cast<int32_t>(0)));
+  }
+
+  Add<HStoreNamedField>(obj,
+      HObjectAccess::ForJSObjectOffset(JSDataView::kBufferOffset), buffer);
+  Add<HStoreNamedField>(obj,
+      HObjectAccess::ForJSObjectOffset(JSDataView::kByteOffsetOffset),
+      byte_offset);
+  Add<HStoreNamedField>(obj,
+      HObjectAccess::ForJSObjectOffset(JSDataView::kByteLengthOffset),
+      byte_length);
+
+  Add<HStoreNamedField>(obj,
+      HObjectAccess::ForJSObjectOffset(JSDataView::kWeakNextOffset),
+      Add<HLoadNamedField>(buffer,
+          HObjectAccess::ForJSObjectOffset(
+            JSArrayBuffer::kWeakFirstViewOffset)));
+  Add<HStoreNamedField>(buffer,
+ HObjectAccess::ForJSObjectOffset(JSArrayBuffer::kWeakFirstViewOffset),
+      obj);
+}
+
+
 void HOptimizedGraphBuilder::VisitCallRuntime(CallRuntime* expr) {
   ASSERT(!HasStackOverflow());
   ASSERT(current_block() != NULL);
@@ -7930,6 +7976,11 @@ void HOptimizedGraphBuilder::VisitCallRuntime(CallRuntime* expr) {

   const Runtime::Function* function = expr->function();
   ASSERT(function != NULL);
+
+  if (function->function_id == Runtime::kDataViewInitialize) {
+      return VisitDataViewInitialize(expr);
+  }
+
   if (function->intrinsic_type == Runtime::INLINE) {
     ASSERT(expr->name()->length() > 0);
     ASSERT(expr->name()->Get(0) == '_');
Index: src/hydrogen.h
diff --git a/src/hydrogen.h b/src/hydrogen.h
index c838c43306d6254c3020ad6c9957b6eb5df209e0..48b496b96461efd5971a3aed1d7c6fe8428dd49f 100644
--- a/src/hydrogen.h
+++ b/src/hydrogen.h
@@ -2142,6 +2142,8 @@ class HOptimizedGraphBuilder : public HGraphBuilder, public AstVisitor {
   bool IsCallNewArrayInlineable(CallNew* expr);
   void BuildInlinedCallNewArray(CallNew* expr);

+  void VisitDataViewInitialize(CallRuntime* expr);
+
   class PropertyAccessInfo {
    public:
PropertyAccessInfo(Isolate* isolate, Handle<Map> map, Handle<String> name)
Index: src/typedarray.js
diff --git a/src/typedarray.js b/src/typedarray.js
index 422dc4a03cba36b8a422b5913babaafe1c83bb06..7ac8f8fd71c819d923f9ba9c94c44b0efbca0132 100644
--- a/src/typedarray.js
+++ b/src/typedarray.js
@@ -306,7 +306,7 @@ function DataViewConstructor(buffer, byteOffset, byteLength) { // length = 3
     if (!IS_ARRAYBUFFER(buffer)) {
       throw MakeTypeError('data_view_not_array_buffer', []);
     }
-    var bufferByteLength = %ArrayBufferGetByteLength(buffer);
+    var bufferByteLength = buffer.byteLength;
     var offset = IS_UNDEFINED(byteOffset) ?
       0 : ToPositiveInteger(byteOffset, 'invalid_data_view_offset');
     if (offset > bufferByteLength) {
Index: test/mjsunit/fuzz-natives-part1.js
diff --git a/test/mjsunit/fuzz-natives-part1.js b/test/mjsunit/fuzz-natives-part1.js index e76b9be6d4bd7791194789f2915e11fcae15cd9e..ffcbd1d6734309883ee1b27aba3dc6ada6ca8079 100644
--- a/test/mjsunit/fuzz-natives-part1.js
+++ b/test/mjsunit/fuzz-natives-part1.js
@@ -208,6 +208,7 @@ var knownProblems = {
   "_GeneratorThrow": true,

   // Only applicable to DataViews.
+  "DataViewInitialize": true,
   "DataViewGetBuffer": true,
   "DataViewGetByteLength": true,
   "DataViewGetByteOffset": true
Index: test/mjsunit/fuzz-natives-part2.js
diff --git a/test/mjsunit/fuzz-natives-part2.js b/test/mjsunit/fuzz-natives-part2.js index 0797deb18d3707997239b0b8929cfff1beec1d8b..f796b809bf5a9d4f567b45e94a176786faf44b74 100644
--- a/test/mjsunit/fuzz-natives-part2.js
+++ b/test/mjsunit/fuzz-natives-part2.js
@@ -209,6 +209,7 @@ var knownProblems = {
   "_GeneratorThrow": true,

   // Only applicable to DataViews.
+  "DataViewInitialize": true,
   "DataViewGetBuffer": true,
   "DataViewGetByteLength": true,
   "DataViewGetByteOffset": true
Index: test/mjsunit/fuzz-natives-part3.js
diff --git a/test/mjsunit/fuzz-natives-part3.js b/test/mjsunit/fuzz-natives-part3.js index 9a3a883fe40180423398fd2e55e8fb21f6fcc60f..61e02113c0f072ee40462c9678035061227001de 100644
--- a/test/mjsunit/fuzz-natives-part3.js
+++ b/test/mjsunit/fuzz-natives-part3.js
@@ -208,6 +208,7 @@ var knownProblems = {
   "_GeneratorThrow": true,

   // Only applicable to DataViews.
+  "DataViewInitialize":true,
   "DataViewGetBuffer": true,
   "DataViewGetByteLength": true,
   "DataViewGetByteOffset": true
Index: test/mjsunit/fuzz-natives-part4.js
diff --git a/test/mjsunit/fuzz-natives-part4.js b/test/mjsunit/fuzz-natives-part4.js index 83e00d2b663acb9b55e25bc361d30932b4a8d5b2..831722b3bbf48a8bfe53d233ca3b51e53de54013 100644
--- a/test/mjsunit/fuzz-natives-part4.js
+++ b/test/mjsunit/fuzz-natives-part4.js
@@ -208,6 +208,7 @@ var knownProblems = {
   "_GeneratorThrow": true,

   // Only applicable to DataViews.
+  "DataViewInitialize": true,
   "DataViewGetBuffer": true,
   "DataViewGetByteLength": true,
   "DataViewGetByteOffset": true


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to