Index: runtime/vm/intrinsifier_x64.cc |
diff --git a/runtime/vm/intrinsifier_x64.cc b/runtime/vm/intrinsifier_x64.cc |
index 5f3f96d8e5b114a0b0cf5ff58e4b5a6e36ffdc75..e5dd2b404a8b3a05d09cea8633227cf100ecabae 100644 |
--- a/runtime/vm/intrinsifier_x64.cc |
+++ b/runtime/vm/intrinsifier_x64.cc |
@@ -700,6 +700,20 @@ bool Intrinsifier::Float64Array_setIndexed(Assembler* assembler) { |
} |
+bool Intrinsifier::ExternalUint8Array_getIndexed(Assembler* assembler) { |
+ Label fall_through; |
+ TestByteArrayIndex(assembler, &fall_through); |
+ __ SmiUntag(R12); |
+ __ movq(RAX, FieldAddress(RAX, ExternalUint8Array::external_data_offset())); |
+ __ movq(RAX, Address(RAX, ExternalByteArrayData<uint8_t>::data_offset())); |
+ __ movzxb(RAX, Address(RAX, R12, TIMES_1, 0)); |
+ __ SmiTag(RAX); |
+ __ ret(); |
+ __ Bind(&fall_through); |
+ return false; |
+} |
+ |
+ |
// Tests if two top most arguments are smis, jumps to label not_smi if not. |
// Topmost argument is in RAX. |
static void TestBothArgumentsSmis(Assembler* assembler, Label* not_smi) { |