Index: src/full-codegen/arm64/full-codegen-arm64.cc |
diff --git a/src/full-codegen/arm64/full-codegen-arm64.cc b/src/full-codegen/arm64/full-codegen-arm64.cc |
index 03505872cfb82e59c7c39ad5b3d4aec4470812e5..ef03d9ade40dc2d2e44826791f38894c6cd95e97 100644 |
--- a/src/full-codegen/arm64/full-codegen-arm64.cc |
+++ b/src/full-codegen/arm64/full-codegen-arm64.cc |
@@ -2759,6 +2759,24 @@ |
// All done. |
__ Bind(&done); |
+ context()->Plug(x0); |
+} |
+ |
+ |
+void FullCodeGenerator::EmitValueOf(CallRuntime* expr) { |
+ ASM_LOCATION("FullCodeGenerator::EmitValueOf"); |
+ ZoneList<Expression*>* args = expr->arguments(); |
+ DCHECK(args->length() == 1); |
+ VisitForAccumulatorValue(args->at(0)); // Load the object. |
+ |
+ Label done; |
+ // If the object is a smi return the object. |
+ __ JumpIfSmi(x0, &done); |
+ // If the object is not a value type, return the object. |
+ __ JumpIfNotObjectType(x0, x10, x11, JS_VALUE_TYPE, &done); |
+ __ Ldr(x0, FieldMemOperand(x0, JSValue::kValueOffset)); |
+ |
+ __ Bind(&done); |
context()->Plug(x0); |
} |