Lines Matching refs:invoke
201 bool IntrinsicLocationsBuilderARMVIXL::TryDispatch(HInvoke* invoke) { in TryDispatch() argument
202 Dispatch(invoke); in TryDispatch()
203 LocationSummary* res = invoke->GetLocations(); in TryDispatch()
210 static void CreateFPToIntLocations(ArenaAllocator* allocator, HInvoke* invoke) { in CreateFPToIntLocations() argument
212 new (allocator) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in CreateFPToIntLocations()
217 static void CreateIntToFPLocations(ArenaAllocator* allocator, HInvoke* invoke) { in CreateIntToFPLocations() argument
219 new (allocator) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in CreateIntToFPLocations()
244 void IntrinsicLocationsBuilderARMVIXL::VisitDoubleDoubleToRawLongBits(HInvoke* invoke) { in VisitDoubleDoubleToRawLongBits() argument
245 CreateFPToIntLocations(allocator_, invoke); in VisitDoubleDoubleToRawLongBits()
247 void IntrinsicLocationsBuilderARMVIXL::VisitDoubleLongBitsToDouble(HInvoke* invoke) { in VisitDoubleLongBitsToDouble() argument
248 CreateIntToFPLocations(allocator_, invoke); in VisitDoubleLongBitsToDouble()
251 void IntrinsicCodeGeneratorARMVIXL::VisitDoubleDoubleToRawLongBits(HInvoke* invoke) { in VisitDoubleDoubleToRawLongBits() argument
252 MoveFPToInt(invoke->GetLocations(), /* is64bit= */ true, GetAssembler()); in VisitDoubleDoubleToRawLongBits()
254 void IntrinsicCodeGeneratorARMVIXL::VisitDoubleLongBitsToDouble(HInvoke* invoke) { in VisitDoubleLongBitsToDouble() argument
255 MoveIntToFP(invoke->GetLocations(), /* is64bit= */ true, GetAssembler()); in VisitDoubleLongBitsToDouble()
258 void IntrinsicLocationsBuilderARMVIXL::VisitFloatFloatToRawIntBits(HInvoke* invoke) { in VisitFloatFloatToRawIntBits() argument
259 CreateFPToIntLocations(allocator_, invoke); in VisitFloatFloatToRawIntBits()
261 void IntrinsicLocationsBuilderARMVIXL::VisitFloatIntBitsToFloat(HInvoke* invoke) { in VisitFloatIntBitsToFloat() argument
262 CreateIntToFPLocations(allocator_, invoke); in VisitFloatIntBitsToFloat()
265 void IntrinsicCodeGeneratorARMVIXL::VisitFloatFloatToRawIntBits(HInvoke* invoke) { in VisitFloatFloatToRawIntBits() argument
266 MoveFPToInt(invoke->GetLocations(), /* is64bit= */ false, GetAssembler()); in VisitFloatFloatToRawIntBits()
268 void IntrinsicCodeGeneratorARMVIXL::VisitFloatIntBitsToFloat(HInvoke* invoke) { in VisitFloatIntBitsToFloat() argument
269 MoveIntToFP(invoke->GetLocations(), /* is64bit= */ false, GetAssembler()); in VisitFloatIntBitsToFloat()
272 static void CreateIntToIntLocations(ArenaAllocator* allocator, HInvoke* invoke) { in CreateIntToIntLocations() argument
274 new (allocator) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in CreateIntToIntLocations()
279 static void CreateIntIntToIntSlowPathCallLocations(ArenaAllocator* allocator, HInvoke* invoke) { in CreateIntIntToIntSlowPathCallLocations() argument
281 new (allocator) LocationSummary(invoke, LocationSummary::kCallOnSlowPath, kIntrinsified); in CreateIntIntToIntSlowPathCallLocations()
288 static void CreateLongToLongLocationsWithOverlap(ArenaAllocator* allocator, HInvoke* invoke) { in CreateLongToLongLocationsWithOverlap() argument
290 new (allocator) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in CreateLongToLongLocationsWithOverlap()
295 static void CreateFPToFPLocations(ArenaAllocator* allocator, HInvoke* invoke) { in CreateFPToFPLocations() argument
297 new (allocator) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in CreateFPToFPLocations()
302 static void GenNumberOfLeadingZeros(HInvoke* invoke, in GenNumberOfLeadingZeros() argument
306 LocationSummary* locations = invoke->GetLocations(); in GenNumberOfLeadingZeros()
316 vixl32::Label* final_label = codegen->GetFinalLabel(invoke, &end); in GenNumberOfLeadingZeros()
329 void IntrinsicLocationsBuilderARMVIXL::VisitIntegerNumberOfLeadingZeros(HInvoke* invoke) { in VisitIntegerNumberOfLeadingZeros() argument
330 CreateIntToIntLocations(allocator_, invoke); in VisitIntegerNumberOfLeadingZeros()
333 void IntrinsicCodeGeneratorARMVIXL::VisitIntegerNumberOfLeadingZeros(HInvoke* invoke) { in VisitIntegerNumberOfLeadingZeros() argument
334 GenNumberOfLeadingZeros(invoke, DataType::Type::kInt32, codegen_); in VisitIntegerNumberOfLeadingZeros()
337 void IntrinsicLocationsBuilderARMVIXL::VisitLongNumberOfLeadingZeros(HInvoke* invoke) { in VisitLongNumberOfLeadingZeros() argument
338 CreateLongToLongLocationsWithOverlap(allocator_, invoke); in VisitLongNumberOfLeadingZeros()
341 void IntrinsicCodeGeneratorARMVIXL::VisitLongNumberOfLeadingZeros(HInvoke* invoke) { in VisitLongNumberOfLeadingZeros() argument
342 GenNumberOfLeadingZeros(invoke, DataType::Type::kInt64, codegen_); in VisitLongNumberOfLeadingZeros()
345 static void GenNumberOfTrailingZeros(HInvoke* invoke, in GenNumberOfTrailingZeros() argument
351 LocationSummary* locations = invoke->GetLocations(); in GenNumberOfTrailingZeros()
358 vixl32::Label* final_label = codegen->GetFinalLabel(invoke, &end); in GenNumberOfTrailingZeros()
375 void IntrinsicLocationsBuilderARMVIXL::VisitIntegerNumberOfTrailingZeros(HInvoke* invoke) { in VisitIntegerNumberOfTrailingZeros() argument
376 CreateIntToIntLocations(allocator_, invoke); in VisitIntegerNumberOfTrailingZeros()
379 void IntrinsicCodeGeneratorARMVIXL::VisitIntegerNumberOfTrailingZeros(HInvoke* invoke) { in VisitIntegerNumberOfTrailingZeros() argument
380 GenNumberOfTrailingZeros(invoke, DataType::Type::kInt32, codegen_); in VisitIntegerNumberOfTrailingZeros()
383 void IntrinsicLocationsBuilderARMVIXL::VisitLongNumberOfTrailingZeros(HInvoke* invoke) { in VisitLongNumberOfTrailingZeros() argument
384 CreateLongToLongLocationsWithOverlap(allocator_, invoke); in VisitLongNumberOfTrailingZeros()
387 void IntrinsicCodeGeneratorARMVIXL::VisitLongNumberOfTrailingZeros(HInvoke* invoke) { in VisitLongNumberOfTrailingZeros() argument
388 GenNumberOfTrailingZeros(invoke, DataType::Type::kInt64, codegen_); in VisitLongNumberOfTrailingZeros()
391 void IntrinsicLocationsBuilderARMVIXL::VisitMathSqrt(HInvoke* invoke) { in VisitMathSqrt() argument
392 CreateFPToFPLocations(allocator_, invoke); in VisitMathSqrt()
395 void IntrinsicCodeGeneratorARMVIXL::VisitMathSqrt(HInvoke* invoke) { in VisitMathSqrt() argument
397 __ Vsqrt(OutputDRegister(invoke), InputDRegisterAt(invoke, 0)); in VisitMathSqrt()
400 void IntrinsicLocationsBuilderARMVIXL::VisitMathRint(HInvoke* invoke) { in VisitMathRint() argument
402 CreateFPToFPLocations(allocator_, invoke); in VisitMathRint()
406 void IntrinsicCodeGeneratorARMVIXL::VisitMathRint(HInvoke* invoke) { in VisitMathRint() argument
409 __ Vrintn(F64, OutputDRegister(invoke), InputDRegisterAt(invoke, 0)); in VisitMathRint()
412 void IntrinsicLocationsBuilderARMVIXL::VisitMathRoundFloat(HInvoke* invoke) { in VisitMathRoundFloat() argument
415 new (allocator_) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in VisitMathRoundFloat()
422 void IntrinsicCodeGeneratorARMVIXL::VisitMathRoundFloat(HInvoke* invoke) { in VisitMathRoundFloat() argument
426 vixl32::SRegister in_reg = InputSRegisterAt(invoke, 0); in VisitMathRoundFloat()
427 vixl32::Register out_reg = OutputRegister(invoke); in VisitMathRoundFloat()
428 vixl32::SRegister temp1 = LowSRegisterFrom(invoke->GetLocations()->GetTemp(0)); in VisitMathRoundFloat()
429 vixl32::SRegister temp2 = HighSRegisterFrom(invoke->GetLocations()->GetTemp(0)); in VisitMathRoundFloat()
431 vixl32::Label* final_label = codegen_->GetFinalLabel(invoke, &done); in VisitMathRoundFloat()
463 void IntrinsicLocationsBuilderARMVIXL::VisitMemoryPeekByte(HInvoke* invoke) { in VisitMemoryPeekByte() argument
464 CreateIntToIntLocations(allocator_, invoke); in VisitMemoryPeekByte()
467 void IntrinsicCodeGeneratorARMVIXL::VisitMemoryPeekByte(HInvoke* invoke) { in VisitMemoryPeekByte() argument
470 __ Ldrsb(OutputRegister(invoke), MemOperand(LowRegisterFrom(invoke->GetLocations()->InAt(0)))); in VisitMemoryPeekByte()
473 void IntrinsicLocationsBuilderARMVIXL::VisitMemoryPeekIntNative(HInvoke* invoke) { in VisitMemoryPeekIntNative() argument
474 CreateIntToIntLocations(allocator_, invoke); in VisitMemoryPeekIntNative()
477 void IntrinsicCodeGeneratorARMVIXL::VisitMemoryPeekIntNative(HInvoke* invoke) { in VisitMemoryPeekIntNative() argument
480 __ Ldr(OutputRegister(invoke), MemOperand(LowRegisterFrom(invoke->GetLocations()->InAt(0)))); in VisitMemoryPeekIntNative()
483 void IntrinsicLocationsBuilderARMVIXL::VisitMemoryPeekLongNative(HInvoke* invoke) { in VisitMemoryPeekLongNative() argument
484 CreateIntToIntLocations(allocator_, invoke); in VisitMemoryPeekLongNative()
487 void IntrinsicCodeGeneratorARMVIXL::VisitMemoryPeekLongNative(HInvoke* invoke) { in VisitMemoryPeekLongNative() argument
490 vixl32::Register addr = LowRegisterFrom(invoke->GetLocations()->InAt(0)); in VisitMemoryPeekLongNative()
493 vixl32::Register lo = LowRegisterFrom(invoke->GetLocations()->Out()); in VisitMemoryPeekLongNative()
494 vixl32::Register hi = HighRegisterFrom(invoke->GetLocations()->Out()); in VisitMemoryPeekLongNative()
504 void IntrinsicLocationsBuilderARMVIXL::VisitMemoryPeekShortNative(HInvoke* invoke) { in VisitMemoryPeekShortNative() argument
505 CreateIntToIntLocations(allocator_, invoke); in VisitMemoryPeekShortNative()
508 void IntrinsicCodeGeneratorARMVIXL::VisitMemoryPeekShortNative(HInvoke* invoke) { in VisitMemoryPeekShortNative() argument
511 __ Ldrsh(OutputRegister(invoke), MemOperand(LowRegisterFrom(invoke->GetLocations()->InAt(0)))); in VisitMemoryPeekShortNative()
514 static void CreateIntIntToVoidLocations(ArenaAllocator* allocator, HInvoke* invoke) { in CreateIntIntToVoidLocations() argument
516 new (allocator) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in CreateIntIntToVoidLocations()
521 void IntrinsicLocationsBuilderARMVIXL::VisitMemoryPokeByte(HInvoke* invoke) { in VisitMemoryPokeByte() argument
522 CreateIntIntToVoidLocations(allocator_, invoke); in VisitMemoryPokeByte()
525 void IntrinsicCodeGeneratorARMVIXL::VisitMemoryPokeByte(HInvoke* invoke) { in VisitMemoryPokeByte() argument
527 __ Strb(InputRegisterAt(invoke, 1), MemOperand(LowRegisterFrom(invoke->GetLocations()->InAt(0)))); in VisitMemoryPokeByte()
530 void IntrinsicLocationsBuilderARMVIXL::VisitMemoryPokeIntNative(HInvoke* invoke) { in VisitMemoryPokeIntNative() argument
531 CreateIntIntToVoidLocations(allocator_, invoke); in VisitMemoryPokeIntNative()
534 void IntrinsicCodeGeneratorARMVIXL::VisitMemoryPokeIntNative(HInvoke* invoke) { in VisitMemoryPokeIntNative() argument
536 __ Str(InputRegisterAt(invoke, 1), MemOperand(LowRegisterFrom(invoke->GetLocations()->InAt(0)))); in VisitMemoryPokeIntNative()
539 void IntrinsicLocationsBuilderARMVIXL::VisitMemoryPokeLongNative(HInvoke* invoke) { in VisitMemoryPokeLongNative() argument
540 CreateIntIntToVoidLocations(allocator_, invoke); in VisitMemoryPokeLongNative()
543 void IntrinsicCodeGeneratorARMVIXL::VisitMemoryPokeLongNative(HInvoke* invoke) { in VisitMemoryPokeLongNative() argument
546 vixl32::Register addr = LowRegisterFrom(invoke->GetLocations()->InAt(0)); in VisitMemoryPokeLongNative()
549 __ Str(LowRegisterFrom(invoke->GetLocations()->InAt(1)), MemOperand(addr)); in VisitMemoryPokeLongNative()
550 __ Str(HighRegisterFrom(invoke->GetLocations()->InAt(1)), MemOperand(addr, 4)); in VisitMemoryPokeLongNative()
553 void IntrinsicLocationsBuilderARMVIXL::VisitMemoryPokeShortNative(HInvoke* invoke) { in VisitMemoryPokeShortNative() argument
554 CreateIntIntToVoidLocations(allocator_, invoke); in VisitMemoryPokeShortNative()
557 void IntrinsicCodeGeneratorARMVIXL::VisitMemoryPokeShortNative(HInvoke* invoke) { in VisitMemoryPokeShortNative() argument
559 __ Strh(InputRegisterAt(invoke, 1), MemOperand(LowRegisterFrom(invoke->GetLocations()->InAt(0)))); in VisitMemoryPokeShortNative()
562 void IntrinsicLocationsBuilderARMVIXL::VisitThreadCurrentThread(HInvoke* invoke) { in VisitThreadCurrentThread() argument
564 new (allocator_) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in VisitThreadCurrentThread()
568 void IntrinsicCodeGeneratorARMVIXL::VisitThreadCurrentThread(HInvoke* invoke) { in VisitThreadCurrentThread() argument
570 __ Ldr(OutputRegister(invoke), in VisitThreadCurrentThread()
574 void IntrinsicLocationsBuilderARMVIXL::VisitStringCompareTo(HInvoke* invoke) { in VisitStringCompareTo() argument
577 new (allocator_) LocationSummary(invoke, in VisitStringCompareTo()
578 invoke->InputAt(1)->CanBeNull() in VisitStringCompareTo()
601 HInvoke* invoke,
605 void IntrinsicCodeGeneratorARMVIXL::VisitStringCompareTo(HInvoke* invoke) { in VisitStringCompareTo() argument
607 LocationSummary* locations = invoke->GetLocations(); in VisitStringCompareTo()
609 const vixl32::Register str = InputRegisterAt(invoke, 0); in VisitStringCompareTo()
610 const vixl32::Register arg = InputRegisterAt(invoke, 1); in VisitStringCompareTo()
611 const vixl32::Register out = OutputRegister(invoke); in VisitStringCompareTo()
628 DCHECK(!invoke->CanDoImplicitNullCheckOn(invoke->InputAt(0))); in VisitStringCompareTo()
632 const bool can_slow_path = invoke->InputAt(1)->CanBeNull(); in VisitStringCompareTo()
634 slow_path = new (codegen_->GetScopedAllocator()) IntrinsicSlowPathARMVIXL(invoke); in VisitStringCompareTo()
691 GenerateStringCompareToLoop(assembler, invoke, &end, &different_compression); in VisitStringCompareTo()
701 HInvoke* invoke, in GenerateStringCompareToLoop() argument
704 LocationSummary* locations = invoke->GetLocations(); in GenerateStringCompareToLoop()
706 const vixl32::Register str = InputRegisterAt(invoke, 0); in GenerateStringCompareToLoop()
707 const vixl32::Register arg = InputRegisterAt(invoke, 1); in GenerateStringCompareToLoop()
708 const vixl32::Register out = OutputRegister(invoke); in GenerateStringCompareToLoop()
892 void IntrinsicLocationsBuilderARMVIXL::VisitStringEquals(HInvoke* invoke) { in VisitStringEquals() argument
894 new (allocator_) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in VisitStringEquals()
906 const char* const_string = GetConstString(invoke->InputAt(0), &const_string_length); in VisitStringEquals()
908 const_string = GetConstString(invoke->InputAt(1), &const_string_length); in VisitStringEquals()
924 void IntrinsicCodeGeneratorARMVIXL::VisitStringEquals(HInvoke* invoke) { in VisitStringEquals() argument
926 LocationSummary* locations = invoke->GetLocations(); in VisitStringEquals()
928 vixl32::Register str = InputRegisterAt(invoke, 0); in VisitStringEquals()
929 vixl32::Register arg = InputRegisterAt(invoke, 1); in VisitStringEquals()
930 vixl32::Register out = OutputRegister(invoke); in VisitStringEquals()
938 vixl32::Label* final_label = codegen_->GetFinalLabel(invoke, &end); in VisitStringEquals()
946 DCHECK(!invoke->CanDoImplicitNullCheckOn(invoke->InputAt(0))); in VisitStringEquals()
948 StringEqualsOptimizations optimizations(invoke); in VisitStringEquals()
980 const char* const_string = GetConstString(invoke->InputAt(0), &const_string_length); in VisitStringEquals()
982 const_string = GetConstString(invoke->InputAt(1), &const_string_length); in VisitStringEquals()
1091 static void GenerateVisitStringIndexOf(HInvoke* invoke, in GenerateVisitStringIndexOf() argument
1095 LocationSummary* locations = invoke->GetLocations(); in GenerateVisitStringIndexOf()
1098 DCHECK(!invoke->CanDoImplicitNullCheckOn(invoke->InputAt(0))); in GenerateVisitStringIndexOf()
1103 HInstruction* code_point = invoke->InputAt(1); in GenerateVisitStringIndexOf()
1109 slow_path = new (codegen->GetScopedAllocator()) IntrinsicSlowPathARMVIXL(invoke); in GenerateVisitStringIndexOf()
1116 vixl32::Register char_reg = InputRegisterAt(invoke, 1); in GenerateVisitStringIndexOf()
1119 slow_path = new (codegen->GetScopedAllocator()) IntrinsicSlowPathARMVIXL(invoke); in GenerateVisitStringIndexOf()
1131 codegen->InvokeRuntime(kQuickIndexOf, invoke, invoke->GetDexPc(), slow_path); in GenerateVisitStringIndexOf()
1139 void IntrinsicLocationsBuilderARMVIXL::VisitStringIndexOf(HInvoke* invoke) { in VisitStringIndexOf() argument
1141 invoke, LocationSummary::kCallOnMainAndSlowPath, kIntrinsified); in VisitStringIndexOf()
1153 void IntrinsicCodeGeneratorARMVIXL::VisitStringIndexOf(HInvoke* invoke) { in VisitStringIndexOf() argument
1154 GenerateVisitStringIndexOf(invoke, GetAssembler(), codegen_, /* start_at_zero= */ true); in VisitStringIndexOf()
1157 void IntrinsicLocationsBuilderARMVIXL::VisitStringIndexOfAfter(HInvoke* invoke) { in VisitStringIndexOfAfter() argument
1159 invoke, LocationSummary::kCallOnMainAndSlowPath, kIntrinsified); in VisitStringIndexOfAfter()
1169 void IntrinsicCodeGeneratorARMVIXL::VisitStringIndexOfAfter(HInvoke* invoke) { in VisitStringIndexOfAfter() argument
1170 GenerateVisitStringIndexOf(invoke, GetAssembler(), codegen_, /* start_at_zero= */ false); in VisitStringIndexOfAfter()
1173 void IntrinsicLocationsBuilderARMVIXL::VisitStringNewStringFromBytes(HInvoke* invoke) { in VisitStringNewStringFromBytes() argument
1175 invoke, LocationSummary::kCallOnMainAndSlowPath, kIntrinsified); in VisitStringNewStringFromBytes()
1184 void IntrinsicCodeGeneratorARMVIXL::VisitStringNewStringFromBytes(HInvoke* invoke) { in VisitStringNewStringFromBytes() argument
1186 vixl32::Register byte_array = InputRegisterAt(invoke, 0); in VisitStringNewStringFromBytes()
1189 new (codegen_->GetScopedAllocator()) IntrinsicSlowPathARMVIXL(invoke); in VisitStringNewStringFromBytes()
1193 codegen_->InvokeRuntime(kQuickAllocStringFromBytes, invoke, invoke->GetDexPc(), slow_path); in VisitStringNewStringFromBytes()
1198 void IntrinsicLocationsBuilderARMVIXL::VisitStringNewStringFromChars(HInvoke* invoke) { in VisitStringNewStringFromChars() argument
1200 new (allocator_) LocationSummary(invoke, LocationSummary::kCallOnMainOnly, kIntrinsified); in VisitStringNewStringFromChars()
1208 void IntrinsicCodeGeneratorARMVIXL::VisitStringNewStringFromChars(HInvoke* invoke) { in VisitStringNewStringFromChars() argument
1215 codegen_->InvokeRuntime(kQuickAllocStringFromChars, invoke, invoke->GetDexPc()); in VisitStringNewStringFromChars()
1219 void IntrinsicLocationsBuilderARMVIXL::VisitStringNewStringFromString(HInvoke* invoke) { in VisitStringNewStringFromString() argument
1221 invoke, LocationSummary::kCallOnMainAndSlowPath, kIntrinsified); in VisitStringNewStringFromString()
1227 void IntrinsicCodeGeneratorARMVIXL::VisitStringNewStringFromString(HInvoke* invoke) { in VisitStringNewStringFromString() argument
1229 vixl32::Register string_to_copy = InputRegisterAt(invoke, 0); in VisitStringNewStringFromString()
1232 new (codegen_->GetScopedAllocator()) IntrinsicSlowPathARMVIXL(invoke); in VisitStringNewStringFromString()
1236 codegen_->InvokeRuntime(kQuickAllocStringFromString, invoke, invoke->GetDexPc(), slow_path); in VisitStringNewStringFromString()
1242 void IntrinsicLocationsBuilderARMVIXL::VisitSystemArrayCopy(HInvoke* invoke) { in VisitSystemArrayCopy() argument
1249 CodeGenerator::CreateSystemArrayCopyLocationSummary(invoke); in VisitSystemArrayCopy()
1250 LocationSummary* locations = invoke->GetLocations(); in VisitSystemArrayCopy()
1255 HIntConstant* src_pos = invoke->InputAt(1)->AsIntConstant(); in VisitSystemArrayCopy()
1256 HIntConstant* dest_pos = invoke->InputAt(3)->AsIntConstant(); in VisitSystemArrayCopy()
1257 HIntConstant* length = invoke->InputAt(4)->AsIntConstant(); in VisitSystemArrayCopy()
1339 void IntrinsicCodeGeneratorARMVIXL::VisitSystemArrayCopy(HInvoke* invoke) { in VisitSystemArrayCopy() argument
1345 LocationSummary* locations = invoke->GetLocations(); in VisitSystemArrayCopy()
1353 vixl32::Register src = InputRegisterAt(invoke, 0); in VisitSystemArrayCopy()
1355 vixl32::Register dest = InputRegisterAt(invoke, 2); in VisitSystemArrayCopy()
1366 new (codegen_->GetScopedAllocator()) IntrinsicSlowPathARMVIXL(invoke); in VisitSystemArrayCopy()
1370 SystemArrayCopyOptimizations optimizations(invoke); in VisitSystemArrayCopy()
1460 invoke, temp1_loc, src, class_offset, temp2_loc, /* needs_null_check= */ false); in VisitSystemArrayCopy()
1464 invoke, temp1_loc, temp1, component_offset, temp2_loc, /* needs_null_check= */ false); in VisitSystemArrayCopy()
1476 invoke, temp1_loc, dest, class_offset, temp2_loc, /* needs_null_check= */ false); in VisitSystemArrayCopy()
1488 invoke, temp2_loc, temp1, component_offset, temp3_loc, /* needs_null_check= */ false); in VisitSystemArrayCopy()
1502 invoke, temp2_loc, src, class_offset, temp3_loc, /* needs_null_check= */ false); in VisitSystemArrayCopy()
1511 invoke, temp1_loc, temp1, component_offset, temp2_loc, /* needs_null_check= */ false); in VisitSystemArrayCopy()
1590 invoke, temp1_loc, src, class_offset, temp2_loc, /* needs_null_check= */ false); in VisitSystemArrayCopy()
1593 invoke, temp3_loc, temp1, component_offset, temp2_loc, /* needs_null_check= */ false); in VisitSystemArrayCopy()
1672 new (codegen_->GetScopedAllocator()) ReadBarrierSystemArrayCopySlowPathARMVIXL(invoke); in VisitSystemArrayCopy()
1731 static void CreateFPToFPCallLocations(ArenaAllocator* allocator, HInvoke* invoke) { in CreateFPToFPCallLocations() argument
1737 if (invoke->GetBlock()->GetGraph()->IsDebuggable()) { in CreateFPToFPCallLocations()
1741 DCHECK_EQ(invoke->GetNumberOfArguments(), 1U); in CreateFPToFPCallLocations()
1742 DCHECK_EQ(invoke->InputAt(0)->GetType(), DataType::Type::kFloat64); in CreateFPToFPCallLocations()
1743 DCHECK_EQ(invoke->GetType(), DataType::Type::kFloat64); in CreateFPToFPCallLocations()
1746 new (allocator) LocationSummary(invoke, LocationSummary::kCallOnMainOnly, kIntrinsified); in CreateFPToFPCallLocations()
1756 static void CreateFPFPToFPCallLocations(ArenaAllocator* allocator, HInvoke* invoke) { in CreateFPFPToFPCallLocations() argument
1762 if (invoke->GetBlock()->GetGraph()->IsDebuggable()) { in CreateFPFPToFPCallLocations()
1766 DCHECK_EQ(invoke->GetNumberOfArguments(), 2U); in CreateFPFPToFPCallLocations()
1767 DCHECK_EQ(invoke->InputAt(0)->GetType(), DataType::Type::kFloat64); in CreateFPFPToFPCallLocations()
1768 DCHECK_EQ(invoke->InputAt(1)->GetType(), DataType::Type::kFloat64); in CreateFPFPToFPCallLocations()
1769 DCHECK_EQ(invoke->GetType(), DataType::Type::kFloat64); in CreateFPFPToFPCallLocations()
1772 new (allocator) LocationSummary(invoke, LocationSummary::kCallOnMainOnly, kIntrinsified); in CreateFPFPToFPCallLocations()
1785 static void GenFPToFPCall(HInvoke* invoke, in GenFPToFPCall() argument
1789 LocationSummary* const locations = invoke->GetLocations(); in GenFPToFPCall()
1791 DCHECK_EQ(invoke->GetNumberOfArguments(), 1U); in GenFPToFPCall()
1797 InputDRegisterAt(invoke, 0)); in GenFPToFPCall()
1798 codegen->InvokeRuntime(entry, invoke, invoke->GetDexPc()); in GenFPToFPCall()
1799 __ Vmov(OutputDRegister(invoke), in GenFPToFPCall()
1804 static void GenFPFPToFPCall(HInvoke* invoke, in GenFPFPToFPCall() argument
1808 LocationSummary* const locations = invoke->GetLocations(); in GenFPFPToFPCall()
1810 DCHECK_EQ(invoke->GetNumberOfArguments(), 2U); in GenFPFPToFPCall()
1816 InputDRegisterAt(invoke, 0)); in GenFPFPToFPCall()
1819 InputDRegisterAt(invoke, 1)); in GenFPFPToFPCall()
1820 codegen->InvokeRuntime(entry, invoke, invoke->GetDexPc()); in GenFPFPToFPCall()
1821 __ Vmov(OutputDRegister(invoke), in GenFPFPToFPCall()
1826 void IntrinsicLocationsBuilderARMVIXL::VisitMathCos(HInvoke* invoke) { in VisitMathCos() argument
1827 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathCos()
1830 void IntrinsicCodeGeneratorARMVIXL::VisitMathCos(HInvoke* invoke) { in VisitMathCos() argument
1831 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickCos); in VisitMathCos()
1834 void IntrinsicLocationsBuilderARMVIXL::VisitMathSin(HInvoke* invoke) { in VisitMathSin() argument
1835 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathSin()
1838 void IntrinsicCodeGeneratorARMVIXL::VisitMathSin(HInvoke* invoke) { in VisitMathSin() argument
1839 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickSin); in VisitMathSin()
1842 void IntrinsicLocationsBuilderARMVIXL::VisitMathAcos(HInvoke* invoke) { in VisitMathAcos() argument
1843 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathAcos()
1846 void IntrinsicCodeGeneratorARMVIXL::VisitMathAcos(HInvoke* invoke) { in VisitMathAcos() argument
1847 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickAcos); in VisitMathAcos()
1850 void IntrinsicLocationsBuilderARMVIXL::VisitMathAsin(HInvoke* invoke) { in VisitMathAsin() argument
1851 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathAsin()
1854 void IntrinsicCodeGeneratorARMVIXL::VisitMathAsin(HInvoke* invoke) { in VisitMathAsin() argument
1855 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickAsin); in VisitMathAsin()
1858 void IntrinsicLocationsBuilderARMVIXL::VisitMathAtan(HInvoke* invoke) { in VisitMathAtan() argument
1859 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathAtan()
1862 void IntrinsicCodeGeneratorARMVIXL::VisitMathAtan(HInvoke* invoke) { in VisitMathAtan() argument
1863 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickAtan); in VisitMathAtan()
1866 void IntrinsicLocationsBuilderARMVIXL::VisitMathCbrt(HInvoke* invoke) { in VisitMathCbrt() argument
1867 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathCbrt()
1870 void IntrinsicCodeGeneratorARMVIXL::VisitMathCbrt(HInvoke* invoke) { in VisitMathCbrt() argument
1871 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickCbrt); in VisitMathCbrt()
1874 void IntrinsicLocationsBuilderARMVIXL::VisitMathCosh(HInvoke* invoke) { in VisitMathCosh() argument
1875 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathCosh()
1878 void IntrinsicCodeGeneratorARMVIXL::VisitMathCosh(HInvoke* invoke) { in VisitMathCosh() argument
1879 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickCosh); in VisitMathCosh()
1882 void IntrinsicLocationsBuilderARMVIXL::VisitMathExp(HInvoke* invoke) { in VisitMathExp() argument
1883 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathExp()
1886 void IntrinsicCodeGeneratorARMVIXL::VisitMathExp(HInvoke* invoke) { in VisitMathExp() argument
1887 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickExp); in VisitMathExp()
1890 void IntrinsicLocationsBuilderARMVIXL::VisitMathExpm1(HInvoke* invoke) { in VisitMathExpm1() argument
1891 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathExpm1()
1894 void IntrinsicCodeGeneratorARMVIXL::VisitMathExpm1(HInvoke* invoke) { in VisitMathExpm1() argument
1895 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickExpm1); in VisitMathExpm1()
1898 void IntrinsicLocationsBuilderARMVIXL::VisitMathLog(HInvoke* invoke) { in VisitMathLog() argument
1899 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathLog()
1902 void IntrinsicCodeGeneratorARMVIXL::VisitMathLog(HInvoke* invoke) { in VisitMathLog() argument
1903 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickLog); in VisitMathLog()
1906 void IntrinsicLocationsBuilderARMVIXL::VisitMathLog10(HInvoke* invoke) { in VisitMathLog10() argument
1907 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathLog10()
1910 void IntrinsicCodeGeneratorARMVIXL::VisitMathLog10(HInvoke* invoke) { in VisitMathLog10() argument
1911 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickLog10); in VisitMathLog10()
1914 void IntrinsicLocationsBuilderARMVIXL::VisitMathSinh(HInvoke* invoke) { in VisitMathSinh() argument
1915 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathSinh()
1918 void IntrinsicCodeGeneratorARMVIXL::VisitMathSinh(HInvoke* invoke) { in VisitMathSinh() argument
1919 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickSinh); in VisitMathSinh()
1922 void IntrinsicLocationsBuilderARMVIXL::VisitMathTan(HInvoke* invoke) { in VisitMathTan() argument
1923 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathTan()
1926 void IntrinsicCodeGeneratorARMVIXL::VisitMathTan(HInvoke* invoke) { in VisitMathTan() argument
1927 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickTan); in VisitMathTan()
1930 void IntrinsicLocationsBuilderARMVIXL::VisitMathTanh(HInvoke* invoke) { in VisitMathTanh() argument
1931 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathTanh()
1934 void IntrinsicCodeGeneratorARMVIXL::VisitMathTanh(HInvoke* invoke) { in VisitMathTanh() argument
1935 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickTanh); in VisitMathTanh()
1938 void IntrinsicLocationsBuilderARMVIXL::VisitMathAtan2(HInvoke* invoke) { in VisitMathAtan2() argument
1939 CreateFPFPToFPCallLocations(allocator_, invoke); in VisitMathAtan2()
1942 void IntrinsicCodeGeneratorARMVIXL::VisitMathAtan2(HInvoke* invoke) { in VisitMathAtan2() argument
1943 GenFPFPToFPCall(invoke, GetAssembler(), codegen_, kQuickAtan2); in VisitMathAtan2()
1946 void IntrinsicLocationsBuilderARMVIXL::VisitMathPow(HInvoke* invoke) { in VisitMathPow() argument
1947 CreateFPFPToFPCallLocations(allocator_, invoke); in VisitMathPow()
1950 void IntrinsicCodeGeneratorARMVIXL::VisitMathPow(HInvoke* invoke) { in VisitMathPow() argument
1951 GenFPFPToFPCall(invoke, GetAssembler(), codegen_, kQuickPow); in VisitMathPow()
1954 void IntrinsicLocationsBuilderARMVIXL::VisitMathHypot(HInvoke* invoke) { in VisitMathHypot() argument
1955 CreateFPFPToFPCallLocations(allocator_, invoke); in VisitMathHypot()
1958 void IntrinsicCodeGeneratorARMVIXL::VisitMathHypot(HInvoke* invoke) { in VisitMathHypot() argument
1959 GenFPFPToFPCall(invoke, GetAssembler(), codegen_, kQuickHypot); in VisitMathHypot()
1962 void IntrinsicLocationsBuilderARMVIXL::VisitMathNextAfter(HInvoke* invoke) { in VisitMathNextAfter() argument
1963 CreateFPFPToFPCallLocations(allocator_, invoke); in VisitMathNextAfter()
1966 void IntrinsicCodeGeneratorARMVIXL::VisitMathNextAfter(HInvoke* invoke) { in VisitMathNextAfter() argument
1967 GenFPFPToFPCall(invoke, GetAssembler(), codegen_, kQuickNextAfter); in VisitMathNextAfter()
1970 void IntrinsicLocationsBuilderARMVIXL::VisitIntegerReverse(HInvoke* invoke) { in VisitIntegerReverse() argument
1971 CreateIntToIntLocations(allocator_, invoke); in VisitIntegerReverse()
1974 void IntrinsicCodeGeneratorARMVIXL::VisitIntegerReverse(HInvoke* invoke) { in VisitIntegerReverse() argument
1976 __ Rbit(OutputRegister(invoke), InputRegisterAt(invoke, 0)); in VisitIntegerReverse()
1979 void IntrinsicLocationsBuilderARMVIXL::VisitLongReverse(HInvoke* invoke) { in VisitLongReverse() argument
1980 CreateLongToLongLocationsWithOverlap(allocator_, invoke); in VisitLongReverse()
1983 void IntrinsicCodeGeneratorARMVIXL::VisitLongReverse(HInvoke* invoke) { in VisitLongReverse() argument
1985 LocationSummary* locations = invoke->GetLocations(); in VisitLongReverse()
2035 void IntrinsicLocationsBuilderARMVIXL::VisitIntegerReverseBytes(HInvoke* invoke) { in VisitIntegerReverseBytes() argument
2036 CreateIntToIntLocations(allocator_, invoke); in VisitIntegerReverseBytes()
2039 void IntrinsicCodeGeneratorARMVIXL::VisitIntegerReverseBytes(HInvoke* invoke) { in VisitIntegerReverseBytes() argument
2041 LocationSummary* locations = invoke->GetLocations(); in VisitIntegerReverseBytes()
2045 void IntrinsicLocationsBuilderARMVIXL::VisitLongReverseBytes(HInvoke* invoke) { in VisitLongReverseBytes() argument
2046 CreateLongToLongLocationsWithOverlap(allocator_, invoke); in VisitLongReverseBytes()
2049 void IntrinsicCodeGeneratorARMVIXL::VisitLongReverseBytes(HInvoke* invoke) { in VisitLongReverseBytes() argument
2051 LocationSummary* locations = invoke->GetLocations(); in VisitLongReverseBytes()
2055 void IntrinsicLocationsBuilderARMVIXL::VisitShortReverseBytes(HInvoke* invoke) { in VisitShortReverseBytes() argument
2056 CreateIntToIntLocations(allocator_, invoke); in VisitShortReverseBytes()
2059 void IntrinsicCodeGeneratorARMVIXL::VisitShortReverseBytes(HInvoke* invoke) { in VisitShortReverseBytes() argument
2061 LocationSummary* locations = invoke->GetLocations(); in VisitShortReverseBytes()
2093 void IntrinsicLocationsBuilderARMVIXL::VisitIntegerBitCount(HInvoke* invoke) { in VisitIntegerBitCount() argument
2094 CreateIntToIntLocations(allocator_, invoke); in VisitIntegerBitCount()
2095 invoke->GetLocations()->AddTemp(Location::RequiresFpuRegister()); in VisitIntegerBitCount()
2098 void IntrinsicCodeGeneratorARMVIXL::VisitIntegerBitCount(HInvoke* invoke) { in VisitIntegerBitCount() argument
2099 GenBitCount(invoke, DataType::Type::kInt32, GetAssembler()); in VisitIntegerBitCount()
2102 void IntrinsicLocationsBuilderARMVIXL::VisitLongBitCount(HInvoke* invoke) { in VisitLongBitCount() argument
2103 VisitIntegerBitCount(invoke); in VisitLongBitCount()
2106 void IntrinsicCodeGeneratorARMVIXL::VisitLongBitCount(HInvoke* invoke) { in VisitLongBitCount() argument
2107 GenBitCount(invoke, DataType::Type::kInt64, GetAssembler()); in VisitLongBitCount()
2110 static void GenHighestOneBit(HInvoke* invoke, in GenHighestOneBit() argument
2120 LocationSummary* locations = invoke->GetLocations(); in GenHighestOneBit()
2151 vixl32::Register out = OutputRegister(invoke); in GenHighestOneBit()
2152 vixl32::Register in = InputRegisterAt(invoke, 0); in GenHighestOneBit()
2160 void IntrinsicLocationsBuilderARMVIXL::VisitIntegerHighestOneBit(HInvoke* invoke) { in VisitIntegerHighestOneBit() argument
2161 CreateIntToIntLocations(allocator_, invoke); in VisitIntegerHighestOneBit()
2164 void IntrinsicCodeGeneratorARMVIXL::VisitIntegerHighestOneBit(HInvoke* invoke) { in VisitIntegerHighestOneBit() argument
2165 GenHighestOneBit(invoke, DataType::Type::kInt32, codegen_); in VisitIntegerHighestOneBit()
2168 void IntrinsicLocationsBuilderARMVIXL::VisitLongHighestOneBit(HInvoke* invoke) { in VisitLongHighestOneBit() argument
2169 CreateLongToLongLocationsWithOverlap(allocator_, invoke); in VisitLongHighestOneBit()
2172 void IntrinsicCodeGeneratorARMVIXL::VisitLongHighestOneBit(HInvoke* invoke) { in VisitLongHighestOneBit() argument
2173 GenHighestOneBit(invoke, DataType::Type::kInt64, codegen_); in VisitLongHighestOneBit()
2176 static void GenLowestOneBit(HInvoke* invoke, in GenLowestOneBit() argument
2186 LocationSummary* locations = invoke->GetLocations(); in GenLowestOneBit()
2217 vixl32::Register out = OutputRegister(invoke); in GenLowestOneBit()
2218 vixl32::Register in = InputRegisterAt(invoke, 0); in GenLowestOneBit()
2225 void IntrinsicLocationsBuilderARMVIXL::VisitIntegerLowestOneBit(HInvoke* invoke) { in VisitIntegerLowestOneBit() argument
2226 CreateIntToIntLocations(allocator_, invoke); in VisitIntegerLowestOneBit()
2229 void IntrinsicCodeGeneratorARMVIXL::VisitIntegerLowestOneBit(HInvoke* invoke) { in VisitIntegerLowestOneBit() argument
2230 GenLowestOneBit(invoke, DataType::Type::kInt32, codegen_); in VisitIntegerLowestOneBit()
2233 void IntrinsicLocationsBuilderARMVIXL::VisitLongLowestOneBit(HInvoke* invoke) { in VisitLongLowestOneBit() argument
2234 CreateLongToLongLocationsWithOverlap(allocator_, invoke); in VisitLongLowestOneBit()
2237 void IntrinsicCodeGeneratorARMVIXL::VisitLongLowestOneBit(HInvoke* invoke) { in VisitLongLowestOneBit() argument
2238 GenLowestOneBit(invoke, DataType::Type::kInt64, codegen_); in VisitLongLowestOneBit()
2241 void IntrinsicLocationsBuilderARMVIXL::VisitStringGetCharsNoCheck(HInvoke* invoke) { in VisitStringGetCharsNoCheck() argument
2243 new (allocator_) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in VisitStringGetCharsNoCheck()
2256 void IntrinsicCodeGeneratorARMVIXL::VisitStringGetCharsNoCheck(HInvoke* invoke) { in VisitStringGetCharsNoCheck() argument
2258 LocationSummary* locations = invoke->GetLocations(); in VisitStringGetCharsNoCheck()
2272 vixl32::Register srcObj = InputRegisterAt(invoke, 0); in VisitStringGetCharsNoCheck()
2273 vixl32::Register srcBegin = InputRegisterAt(invoke, 1); in VisitStringGetCharsNoCheck()
2274 vixl32::Register srcEnd = InputRegisterAt(invoke, 2); in VisitStringGetCharsNoCheck()
2275 vixl32::Register dstObj = InputRegisterAt(invoke, 3); in VisitStringGetCharsNoCheck()
2276 vixl32::Register dstBegin = InputRegisterAt(invoke, 4); in VisitStringGetCharsNoCheck()
2283 vixl32::Label* final_label = codegen_->GetFinalLabel(invoke, &done); in VisitStringGetCharsNoCheck()
2368 void IntrinsicLocationsBuilderARMVIXL::VisitFloatIsInfinite(HInvoke* invoke) { in VisitFloatIsInfinite() argument
2369 CreateFPToIntLocations(allocator_, invoke); in VisitFloatIsInfinite()
2372 void IntrinsicCodeGeneratorARMVIXL::VisitFloatIsInfinite(HInvoke* invoke) { in VisitFloatIsInfinite() argument
2374 const vixl32::Register out = OutputRegister(invoke); in VisitFloatIsInfinite()
2379 __ Vmov(out, InputSRegisterAt(invoke, 0)); in VisitFloatIsInfinite()
2386 void IntrinsicLocationsBuilderARMVIXL::VisitDoubleIsInfinite(HInvoke* invoke) { in VisitDoubleIsInfinite() argument
2387 CreateFPToIntLocations(allocator_, invoke); in VisitDoubleIsInfinite()
2390 void IntrinsicCodeGeneratorARMVIXL::VisitDoubleIsInfinite(HInvoke* invoke) { in VisitDoubleIsInfinite() argument
2392 const vixl32::Register out = OutputRegister(invoke); in VisitDoubleIsInfinite()
2404 __ Vmov(temp, out, InputDRegisterAt(invoke, 0)); in VisitDoubleIsInfinite()
2412 void IntrinsicLocationsBuilderARMVIXL::VisitMathCeil(HInvoke* invoke) { in VisitMathCeil() argument
2414 CreateFPToFPLocations(allocator_, invoke); in VisitMathCeil()
2418 void IntrinsicCodeGeneratorARMVIXL::VisitMathCeil(HInvoke* invoke) { in VisitMathCeil() argument
2421 __ Vrintp(F64, OutputDRegister(invoke), InputDRegisterAt(invoke, 0)); in VisitMathCeil()
2424 void IntrinsicLocationsBuilderARMVIXL::VisitMathFloor(HInvoke* invoke) { in VisitMathFloor() argument
2426 CreateFPToFPLocations(allocator_, invoke); in VisitMathFloor()
2430 void IntrinsicCodeGeneratorARMVIXL::VisitMathFloor(HInvoke* invoke) { in VisitMathFloor() argument
2433 __ Vrintm(F64, OutputDRegister(invoke), InputDRegisterAt(invoke, 0)); in VisitMathFloor()
2436 void IntrinsicLocationsBuilderARMVIXL::VisitIntegerValueOf(HInvoke* invoke) { in VisitIntegerValueOf() argument
2439 invoke, in VisitIntegerValueOf()
2445 void IntrinsicCodeGeneratorARMVIXL::VisitIntegerValueOf(HInvoke* invoke) { in VisitIntegerValueOf() argument
2447 IntrinsicVisitor::ComputeIntegerValueOfInfo(invoke, codegen_->GetCompilerOptions()); in VisitIntegerValueOf()
2448 LocationSummary* locations = invoke->GetLocations(); in VisitIntegerValueOf()
2456 codegen_->LoadIntrinsicDeclaringClass(out, invoke); in VisitIntegerValueOf()
2457 codegen_->InvokeRuntime(kQuickAllocObjectInitialized, invoke, invoke->GetDexPc()); in VisitIntegerValueOf()
2460 if (invoke->InputAt(0)->IsConstant()) { in VisitIntegerValueOf()
2461 int32_t value = invoke->InputAt(0)->AsIntConstant()->GetValue(); in VisitIntegerValueOf()
2500 void IntrinsicLocationsBuilderARMVIXL::VisitReferenceGetReferent(HInvoke* invoke) { in VisitReferenceGetReferent() argument
2501 IntrinsicVisitor::CreateReferenceGetReferentLocations(invoke, codegen_); in VisitReferenceGetReferent()
2504 void IntrinsicCodeGeneratorARMVIXL::VisitReferenceGetReferent(HInvoke* invoke) { in VisitReferenceGetReferent() argument
2506 LocationSummary* locations = invoke->GetLocations(); in VisitReferenceGetReferent()
2511 SlowPathCodeARMVIXL* slow_path = new (GetAllocator()) IntrinsicSlowPathARMVIXL(invoke); in VisitReferenceGetReferent()
2528 codegen_->LoadIntrinsicDeclaringClass(temp, invoke); in VisitReferenceGetReferent()
2543 codegen_->GenerateFieldLoadWithBakerReadBarrier(invoke, in VisitReferenceGetReferent()
2554 codegen_->MaybeRecordImplicitNullCheck(invoke); in VisitReferenceGetReferent()
2557 codegen_->MaybeGenerateReadBarrierSlow(invoke, out, out, obj, referent_offset); in VisitReferenceGetReferent()
2562 void IntrinsicLocationsBuilderARMVIXL::VisitReferenceRefersTo(HInvoke* invoke) { in VisitReferenceRefersTo() argument
2563 IntrinsicVisitor::CreateReferenceRefersToLocations(invoke); in VisitReferenceRefersTo()
2566 void IntrinsicCodeGeneratorARMVIXL::VisitReferenceRefersTo(HInvoke* invoke) { in VisitReferenceRefersTo() argument
2567 LocationSummary* locations = invoke->GetLocations(); in VisitReferenceRefersTo()
2585 codegen_->MaybeRecordImplicitNullCheck(invoke); in VisitReferenceRefersTo()
2625 void IntrinsicLocationsBuilderARMVIXL::VisitThreadInterrupted(HInvoke* invoke) { in VisitThreadInterrupted() argument
2627 new (allocator_) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in VisitThreadInterrupted()
2631 void IntrinsicCodeGeneratorARMVIXL::VisitThreadInterrupted(HInvoke* invoke) { in VisitThreadInterrupted() argument
2633 vixl32::Register out = RegisterFrom(invoke->GetLocations()->Out()); in VisitThreadInterrupted()
2639 vixl32::Label* const final_label = codegen_->GetFinalLabel(invoke, &done); in VisitThreadInterrupted()
2650 void IntrinsicLocationsBuilderARMVIXL::VisitReachabilityFence(HInvoke* invoke) { in VisitReachabilityFence() argument
2652 new (allocator_) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in VisitReachabilityFence()
2656 void IntrinsicCodeGeneratorARMVIXL::VisitReachabilityFence(HInvoke* invoke ATTRIBUTE_UNUSED) { } in VisitReachabilityFence()
2658 void IntrinsicLocationsBuilderARMVIXL::VisitIntegerDivideUnsigned(HInvoke* invoke) { in VisitIntegerDivideUnsigned() argument
2659 CreateIntIntToIntSlowPathCallLocations(allocator_, invoke); in VisitIntegerDivideUnsigned()
2662 void IntrinsicCodeGeneratorARMVIXL::VisitIntegerDivideUnsigned(HInvoke* invoke) { in VisitIntegerDivideUnsigned() argument
2664 LocationSummary* locations = invoke->GetLocations(); in VisitIntegerDivideUnsigned()
2671 new (codegen_->GetScopedAllocator()) IntrinsicSlowPathARMVIXL(invoke); in VisitIntegerDivideUnsigned()
2684 static void GenerateIntrinsicGet(HInvoke* invoke, in GenerateIntrinsicGet() argument
2740 invoke, out, base, MemOperand(temp), /* needs_null_check= */ false); in GenerateIntrinsicGet()
2783 codegen->MaybeGenerateReadBarrierSlow(invoke, out, out, base_loc, /* offset=*/ 0u, index_loc); in GenerateIntrinsicGet()
2787 static void CreateUnsafeGetLocations(HInvoke* invoke, in CreateUnsafeGetLocations() argument
2792 (invoke->GetIntrinsic() == Intrinsics::kUnsafeGetObject || in CreateUnsafeGetLocations()
2793 invoke->GetIntrinsic() == Intrinsics::kUnsafeGetObjectVolatile); in CreateUnsafeGetLocations()
2794 ArenaAllocator* allocator = invoke->GetBlock()->GetGraph()->GetAllocator(); in CreateUnsafeGetLocations()
2796 new (allocator) LocationSummary(invoke, in CreateUnsafeGetLocations()
2818 static void GenUnsafeGet(HInvoke* invoke, in GenUnsafeGet() argument
2823 LocationSummary* locations = invoke->GetLocations(); in GenUnsafeGet()
2824 vixl32::Register base = InputRegisterAt(invoke, 1); // Object pointer. in GenUnsafeGet()
2832 GenerateIntrinsicGet(invoke, in GenUnsafeGet()
2845 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeGet(HInvoke* invoke) { in VisitUnsafeGet() argument
2846 CreateUnsafeGetLocations(invoke, codegen_, DataType::Type::kInt32, /*atomic=*/ false); in VisitUnsafeGet()
2849 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeGet(HInvoke* invoke) { in VisitUnsafeGet() argument
2851 invoke, codegen_, DataType::Type::kInt32, std::memory_order_relaxed, /*atomic=*/ false); in VisitUnsafeGet()
2854 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeGetVolatile(HInvoke* invoke) { in VisitUnsafeGetVolatile() argument
2855 CreateUnsafeGetLocations(invoke, codegen_, DataType::Type::kInt32, /*atomic=*/ true); in VisitUnsafeGetVolatile()
2858 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeGetVolatile(HInvoke* invoke) { in VisitUnsafeGetVolatile() argument
2860 invoke, codegen_, DataType::Type::kInt32, std::memory_order_seq_cst, /*atomic=*/ true); in VisitUnsafeGetVolatile()
2863 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeGetLong(HInvoke* invoke) { in VisitUnsafeGetLong() argument
2864 CreateUnsafeGetLocations(invoke, codegen_, DataType::Type::kInt64, /*atomic=*/ false); in VisitUnsafeGetLong()
2867 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeGetLong(HInvoke* invoke) { in VisitUnsafeGetLong() argument
2869 invoke, codegen_, DataType::Type::kInt64, std::memory_order_relaxed, /*atomic=*/ false); in VisitUnsafeGetLong()
2872 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeGetLongVolatile(HInvoke* invoke) { in VisitUnsafeGetLongVolatile() argument
2873 CreateUnsafeGetLocations(invoke, codegen_, DataType::Type::kInt64, /*atomic=*/ true); in VisitUnsafeGetLongVolatile()
2876 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeGetLongVolatile(HInvoke* invoke) { in VisitUnsafeGetLongVolatile() argument
2878 invoke, codegen_, DataType::Type::kInt64, std::memory_order_seq_cst, /*atomic=*/ true); in VisitUnsafeGetLongVolatile()
2881 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeGetObject(HInvoke* invoke) { in VisitUnsafeGetObject() argument
2882 CreateUnsafeGetLocations(invoke, codegen_, DataType::Type::kReference, /*atomic=*/ false); in VisitUnsafeGetObject()
2885 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeGetObject(HInvoke* invoke) { in VisitUnsafeGetObject() argument
2887 invoke, codegen_, DataType::Type::kReference, std::memory_order_relaxed, /*atomic=*/ false); in VisitUnsafeGetObject()
2890 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeGetObjectVolatile(HInvoke* invoke) { in VisitUnsafeGetObjectVolatile() argument
2891 CreateUnsafeGetLocations(invoke, codegen_, DataType::Type::kReference, /*atomic=*/ true); in VisitUnsafeGetObjectVolatile()
2894 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeGetObjectVolatile(HInvoke* invoke) { in VisitUnsafeGetObjectVolatile() argument
2896 invoke, codegen_, DataType::Type::kReference, std::memory_order_seq_cst, /*atomic=*/ true); in VisitUnsafeGetObjectVolatile()
2986 static void CreateUnsafePutLocations(HInvoke* invoke, in CreateUnsafePutLocations() argument
2990 ArenaAllocator* allocator = invoke->GetBlock()->GetGraph()->GetAllocator(); in CreateUnsafePutLocations()
2992 new (allocator) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in CreateUnsafePutLocations()
3010 static void GenUnsafePut(HInvoke* invoke, in GenUnsafePut() argument
3017 LocationSummary* locations = invoke->GetLocations(); in GenUnsafePut()
3048 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafePut(HInvoke* invoke) { in VisitUnsafePut() argument
3049 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kInt32, /*atomic=*/ false); in VisitUnsafePut()
3052 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafePut(HInvoke* invoke) { in VisitUnsafePut() argument
3053 GenUnsafePut(invoke, in VisitUnsafePut()
3060 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafePutOrdered(HInvoke* invoke) { in VisitUnsafePutOrdered() argument
3061 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kInt32, /*atomic=*/ true); in VisitUnsafePutOrdered()
3064 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafePutOrdered(HInvoke* invoke) { in VisitUnsafePutOrdered() argument
3065 GenUnsafePut(invoke, in VisitUnsafePutOrdered()
3072 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafePutVolatile(HInvoke* invoke) { in VisitUnsafePutVolatile() argument
3073 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kInt32, /*atomic=*/ true); in VisitUnsafePutVolatile()
3076 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafePutVolatile(HInvoke* invoke) { in VisitUnsafePutVolatile() argument
3077 GenUnsafePut(invoke, in VisitUnsafePutVolatile()
3083 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafePutObject(HInvoke* invoke) { in VisitUnsafePutObject() argument
3084 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kReference, /*atomic=*/ false); in VisitUnsafePutObject()
3087 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafePutObject(HInvoke* invoke) { in VisitUnsafePutObject() argument
3088 GenUnsafePut(invoke, in VisitUnsafePutObject()
3095 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafePutObjectOrdered(HInvoke* invoke) { in VisitUnsafePutObjectOrdered() argument
3096 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kReference, /*atomic=*/ true); in VisitUnsafePutObjectOrdered()
3099 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafePutObjectOrdered(HInvoke* invoke) { in VisitUnsafePutObjectOrdered() argument
3100 GenUnsafePut(invoke, in VisitUnsafePutObjectOrdered()
3107 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafePutObjectVolatile(HInvoke* invoke) { in VisitUnsafePutObjectVolatile() argument
3108 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kReference, /*atomic=*/ true); in VisitUnsafePutObjectVolatile()
3111 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafePutObjectVolatile(HInvoke* invoke) { in VisitUnsafePutObjectVolatile() argument
3112 GenUnsafePut(invoke, in VisitUnsafePutObjectVolatile()
3119 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafePutLong(HInvoke* invoke) { in VisitUnsafePutLong() argument
3120 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kInt64, /*atomic=*/ false); in VisitUnsafePutLong()
3123 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafePutLong(HInvoke* invoke) { in VisitUnsafePutLong() argument
3124 GenUnsafePut(invoke, in VisitUnsafePutLong()
3131 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafePutLongOrdered(HInvoke* invoke) { in VisitUnsafePutLongOrdered() argument
3132 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kInt64, /*atomic=*/ true); in VisitUnsafePutLongOrdered()
3135 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafePutLongOrdered(HInvoke* invoke) { in VisitUnsafePutLongOrdered() argument
3136 GenUnsafePut(invoke, in VisitUnsafePutLongOrdered()
3143 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafePutLongVolatile(HInvoke* invoke) { in VisitUnsafePutLongVolatile() argument
3144 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kInt64, /*atomic=*/ true); in VisitUnsafePutLongVolatile()
3147 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafePutLongVolatile(HInvoke* invoke) { in VisitUnsafePutLongVolatile() argument
3148 GenUnsafePut(invoke, in VisitUnsafePutLongVolatile()
3323 explicit ReadBarrierCasSlowPathARMVIXL(HInvoke* invoke, in ReadBarrierCasSlowPathARMVIXL() argument
3334 : SlowPathCodeARMVIXL(invoke), in ReadBarrierCasSlowPathARMVIXL()
3349 invoke, in ReadBarrierCasSlowPathARMVIXL()
3357 invoke, in ReadBarrierCasSlowPathARMVIXL()
3457 static void CreateUnsafeCASLocations(ArenaAllocator* allocator, HInvoke* invoke) { in CreateUnsafeCASLocations() argument
3459 (invoke->GetIntrinsic() == Intrinsics::kUnsafeCASObject); in CreateUnsafeCASLocations()
3461 new (allocator) LocationSummary(invoke, in CreateUnsafeCASLocations()
3482 static void GenUnsafeCas(HInvoke* invoke, DataType::Type type, CodeGeneratorARMVIXL* codegen) { in GenUnsafeCas() argument
3486 LocationSummary* locations = invoke->GetLocations(); in GenUnsafeCas()
3488 vixl32::Register out = OutputRegister(invoke); // Boolean result. in GenUnsafeCas()
3489 vixl32::Register base = InputRegisterAt(invoke, 1); // Object pointer. in GenUnsafeCas()
3491 vixl32::Register expected = InputRegisterAt(invoke, 3); // Expected. in GenUnsafeCas()
3492 vixl32::Register new_value = InputRegisterAt(invoke, 4); // New value. in GenUnsafeCas()
3515 invoke, in GenUnsafeCas()
3553 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeCASInt(HInvoke* invoke) { in VisitUnsafeCASInt() argument
3554 CreateUnsafeCASLocations(allocator_, invoke); in VisitUnsafeCASInt()
3556 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeCASObject(HInvoke* invoke) { in VisitUnsafeCASObject() argument
3563 CreateUnsafeCASLocations(allocator_, invoke); in VisitUnsafeCASObject()
3565 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeCASInt(HInvoke* invoke) { in VisitUnsafeCASInt() argument
3566 GenUnsafeCas(invoke, DataType::Type::kInt32, codegen_); in VisitUnsafeCASInt()
3568 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeCASObject(HInvoke* invoke) { in VisitUnsafeCASObject() argument
3569 GenUnsafeCas(invoke, DataType::Type::kReference, codegen_); in VisitUnsafeCASObject()
3715 VarHandleSlowPathARMVIXL(HInvoke* invoke, std::memory_order order) in VarHandleSlowPathARMVIXL() argument
3716 : IntrinsicSlowPathARMVIXL(invoke), in VarHandleSlowPathARMVIXL()
3820 static void GenerateVarHandleAccessModeAndVarTypeChecks(HInvoke* invoke, in GenerateVarHandleAccessModeAndVarTypeChecks() argument
3825 mirror::VarHandle::GetAccessModeByIntrinsic(invoke->GetIntrinsic()); in GenerateVarHandleAccessModeAndVarTypeChecks()
3829 vixl32::Register varhandle = InputRegisterAt(invoke, 0); in GenerateVarHandleAccessModeAndVarTypeChecks()
3836 size_t expected_coordinates_count = GetExpectedVarHandleCoordinatesCount(invoke); in GenerateVarHandleAccessModeAndVarTypeChecks()
3838 RegisterFrom(invoke->GetLocations()->GetTemp(expected_coordinates_count == 0u ? 1u : 0u)); in GenerateVarHandleAccessModeAndVarTypeChecks()
3861 uint32_t number_of_arguments = invoke->GetNumberOfArguments(); in GenerateVarHandleAccessModeAndVarTypeChecks()
3863 HInstruction* arg = invoke->InputAt(arg_index); in GenerateVarHandleAccessModeAndVarTypeChecks()
3866 vixl32::Register arg_reg = RegisterFrom(invoke->GetLocations()->InAt(arg_index)); in GenerateVarHandleAccessModeAndVarTypeChecks()
3873 static void GenerateVarHandleStaticFieldCheck(HInvoke* invoke, in GenerateVarHandleStaticFieldCheck() argument
3877 vixl32::Register varhandle = InputRegisterAt(invoke, 0); in GenerateVarHandleStaticFieldCheck()
3891 static void GenerateVarHandleInstanceFieldChecks(HInvoke* invoke, in GenerateVarHandleInstanceFieldChecks() argument
3895 vixl32::Register varhandle = InputRegisterAt(invoke, 0); in GenerateVarHandleInstanceFieldChecks()
3896 vixl32::Register object = InputRegisterAt(invoke, 1); in GenerateVarHandleInstanceFieldChecks()
3907 vixl32::Register temp = RegisterFrom(invoke->GetLocations()->GetTemp(0u)); in GenerateVarHandleInstanceFieldChecks()
3929 static DataType::Type GetVarHandleExpectedValueType(HInvoke* invoke, in GetVarHandleExpectedValueType() argument
3931 DCHECK_EQ(expected_coordinates_count, GetExpectedVarHandleCoordinatesCount(invoke)); in GetVarHandleExpectedValueType()
3932 uint32_t number_of_arguments = invoke->GetNumberOfArguments(); in GetVarHandleExpectedValueType()
3935 return invoke->GetType(); in GetVarHandleExpectedValueType()
3937 return GetDataTypeFromShorty(invoke, number_of_arguments - 1u); in GetVarHandleExpectedValueType()
3941 static void GenerateVarHandleArrayChecks(HInvoke* invoke, in GenerateVarHandleArrayChecks() argument
3945 vixl32::Register varhandle = InputRegisterAt(invoke, 0); in GenerateVarHandleArrayChecks()
3946 vixl32::Register object = InputRegisterAt(invoke, 1); in GenerateVarHandleArrayChecks()
3947 vixl32::Register index = InputRegisterAt(invoke, 2); in GenerateVarHandleArrayChecks()
3949 GetVarHandleExpectedValueType(invoke, /*expected_coordinates_count=*/ 2u); in GenerateVarHandleArrayChecks()
3964 vixl32::Register temp = RegisterFrom(invoke->GetLocations()->GetTemp(0u)); in GenerateVarHandleArrayChecks()
4026 static void GenerateVarHandleCoordinateChecks(HInvoke* invoke, in GenerateVarHandleCoordinateChecks() argument
4029 size_t expected_coordinates_count = GetExpectedVarHandleCoordinatesCount(invoke); in GenerateVarHandleCoordinateChecks()
4031 GenerateVarHandleStaticFieldCheck(invoke, codegen, slow_path); in GenerateVarHandleCoordinateChecks()
4033 GenerateVarHandleInstanceFieldChecks(invoke, codegen, slow_path); in GenerateVarHandleCoordinateChecks()
4036 GenerateVarHandleArrayChecks(invoke, codegen, slow_path); in GenerateVarHandleCoordinateChecks()
4040 static VarHandleSlowPathARMVIXL* GenerateVarHandleChecks(HInvoke* invoke, in GenerateVarHandleChecks() argument
4045 new (codegen->GetScopedAllocator()) VarHandleSlowPathARMVIXL(invoke, order); in GenerateVarHandleChecks()
4048 GenerateVarHandleAccessModeAndVarTypeChecks(invoke, codegen, slow_path, type); in GenerateVarHandleChecks()
4049 GenerateVarHandleCoordinateChecks(invoke, codegen, slow_path); in GenerateVarHandleChecks()
4059 static VarHandleTarget GetVarHandleTarget(HInvoke* invoke) { in GetVarHandleTarget() argument
4060 size_t expected_coordinates_count = GetExpectedVarHandleCoordinatesCount(invoke); in GetVarHandleTarget()
4061 LocationSummary* locations = invoke->GetLocations(); in GetVarHandleTarget()
4069 : InputRegisterAt(invoke, 1); in GetVarHandleTarget()
4073 static void GenerateVarHandleTarget(HInvoke* invoke, in GenerateVarHandleTarget() argument
4077 vixl32::Register varhandle = InputRegisterAt(invoke, 0); in GenerateVarHandleTarget()
4078 size_t expected_coordinates_count = GetExpectedVarHandleCoordinatesCount(invoke); in GenerateVarHandleTarget()
4094 codegen->GenerateGcRootFieldLoad(invoke, in GenerateVarHandleTarget()
4103 GetVarHandleExpectedValueType(invoke, /*expected_coordinates_count=*/ 2u); in GenerateVarHandleTarget()
4107 vixl32::Register index = InputRegisterAt(invoke, 2); in GenerateVarHandleTarget()
4117 static bool HasVarHandleIntrinsicImplementation(HInvoke* invoke) { in HasVarHandleIntrinsicImplementation() argument
4118 size_t expected_coordinates_count = GetExpectedVarHandleCoordinatesCount(invoke); in HasVarHandleIntrinsicImplementation()
4124 invoke->InputAt(1)->GetType() != DataType::Type::kReference) { in HasVarHandleIntrinsicImplementation()
4132 DataType::Type index_type = GetDataTypeFromShorty(invoke, 2); in HasVarHandleIntrinsicImplementation()
4139 uint32_t number_of_arguments = invoke->GetNumberOfArguments(); in HasVarHandleIntrinsicImplementation()
4140 DataType::Type return_type = invoke->GetType(); in HasVarHandleIntrinsicImplementation()
4142 mirror::VarHandle::GetAccessModeTemplateByIntrinsic(invoke->GetIntrinsic()); in HasVarHandleIntrinsicImplementation()
4161 DataType::Type expected_value_type = GetDataTypeFromShorty(invoke, expected_value_index); in HasVarHandleIntrinsicImplementation()
4162 DataType::Type new_value_type = GetDataTypeFromShorty(invoke, new_value_index); in HasVarHandleIntrinsicImplementation()
4171 DataType::Type expected_value_type = GetDataTypeFromShorty(invoke, expected_value_index); in HasVarHandleIntrinsicImplementation()
4172 DataType::Type new_value_type = GetDataTypeFromShorty(invoke, new_value_index); in HasVarHandleIntrinsicImplementation()
4179 DataType::Type value_type = GetDataTypeFromShorty(invoke, number_of_arguments - 1); in HasVarHandleIntrinsicImplementation()
4180 if (IsVarHandleGetAndAdd(invoke) && in HasVarHandleIntrinsicImplementation()
4184 } else if (IsVarHandleGetAndBitwiseOp(invoke) && !DataType::IsIntegralType(value_type)) { in HasVarHandleIntrinsicImplementation()
4202 static LocationSummary* CreateVarHandleCommonLocations(HInvoke* invoke) { in CreateVarHandleCommonLocations() argument
4203 size_t expected_coordinates_count = GetExpectedVarHandleCoordinatesCount(invoke); in CreateVarHandleCommonLocations()
4204 DataType::Type return_type = invoke->GetType(); in CreateVarHandleCommonLocations()
4206 ArenaAllocator* allocator = invoke->GetBlock()->GetGraph()->GetAllocator(); in CreateVarHandleCommonLocations()
4208 new (allocator) LocationSummary(invoke, LocationSummary::kCallOnSlowPath, kIntrinsified); in CreateVarHandleCommonLocations()
4223 uint32_t number_of_arguments = invoke->GetNumberOfArguments(); in CreateVarHandleCommonLocations()
4225 HInstruction* arg = invoke->InputAt(arg_index); in CreateVarHandleCommonLocations()
4235 GetExpectedVarHandleCoordinatesCount(invoke) == 0u) { // For static fields. in CreateVarHandleCommonLocations()
4251 static void CreateVarHandleGetLocations(HInvoke* invoke, in CreateVarHandleGetLocations() argument
4254 if (!HasVarHandleIntrinsicImplementation(invoke)) { in CreateVarHandleGetLocations()
4259 invoke->GetType() == DataType::Type::kReference && in CreateVarHandleGetLocations()
4260 invoke->GetIntrinsic() != Intrinsics::kVarHandleGet && in CreateVarHandleGetLocations()
4261 invoke->GetIntrinsic() != Intrinsics::kVarHandleGetOpaque) { in CreateVarHandleGetLocations()
4268 LocationSummary* locations = CreateVarHandleCommonLocations(invoke); in CreateVarHandleGetLocations()
4270 DataType::Type type = invoke->GetType(); in CreateVarHandleGetLocations()
4275 (GetExpectedVarHandleCoordinatesCount(invoke) == 0) ? 2u : 1u); in CreateVarHandleGetLocations()
4280 static void GenerateVarHandleGet(HInvoke* invoke, in GenerateVarHandleGet() argument
4285 DataType::Type type = invoke->GetType(); in GenerateVarHandleGet()
4288 LocationSummary* locations = invoke->GetLocations(); in GenerateVarHandleGet()
4292 VarHandleTarget target = GetVarHandleTarget(invoke); in GenerateVarHandleGet()
4295 slow_path = GenerateVarHandleChecks(invoke, codegen, order, type); in GenerateVarHandleGet()
4297 GenerateVarHandleTarget(invoke, target, codegen); in GenerateVarHandleGet()
4343 GenerateIntrinsicGet(invoke, in GenerateVarHandleGet()
4367 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGet(HInvoke* invoke) { in VisitVarHandleGet() argument
4368 CreateVarHandleGetLocations(invoke, codegen_, /*atomic=*/ false); in VisitVarHandleGet()
4371 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGet(HInvoke* invoke) { in VisitVarHandleGet() argument
4372 GenerateVarHandleGet(invoke, codegen_, std::memory_order_relaxed, /*atomic=*/ false); in VisitVarHandleGet()
4375 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetOpaque(HInvoke* invoke) { in VisitVarHandleGetOpaque() argument
4376 CreateVarHandleGetLocations(invoke, codegen_, /*atomic=*/ true); in VisitVarHandleGetOpaque()
4379 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetOpaque(HInvoke* invoke) { in VisitVarHandleGetOpaque() argument
4380 GenerateVarHandleGet(invoke, codegen_, std::memory_order_relaxed, /*atomic=*/ true); in VisitVarHandleGetOpaque()
4383 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAcquire(HInvoke* invoke) { in VisitVarHandleGetAcquire() argument
4384 CreateVarHandleGetLocations(invoke, codegen_, /*atomic=*/ true); in VisitVarHandleGetAcquire()
4387 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAcquire(HInvoke* invoke) { in VisitVarHandleGetAcquire() argument
4388 GenerateVarHandleGet(invoke, codegen_, std::memory_order_acquire, /*atomic=*/ true); in VisitVarHandleGetAcquire()
4391 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetVolatile(HInvoke* invoke) { in VisitVarHandleGetVolatile() argument
4392 CreateVarHandleGetLocations(invoke, codegen_, /*atomic=*/ true); in VisitVarHandleGetVolatile()
4395 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetVolatile(HInvoke* invoke) { in VisitVarHandleGetVolatile() argument
4396 GenerateVarHandleGet(invoke, codegen_, std::memory_order_seq_cst, /*atomic=*/ true); in VisitVarHandleGetVolatile()
4399 static void CreateVarHandleSetLocations(HInvoke* invoke, in CreateVarHandleSetLocations() argument
4402 if (!HasVarHandleIntrinsicImplementation(invoke)) { in CreateVarHandleSetLocations()
4406 LocationSummary* locations = CreateVarHandleCommonLocations(invoke); in CreateVarHandleSetLocations()
4408 uint32_t number_of_arguments = invoke->GetNumberOfArguments(); in CreateVarHandleSetLocations()
4409 DataType::Type value_type = GetDataTypeFromShorty(invoke, number_of_arguments - 1u); in CreateVarHandleSetLocations()
4411 size_t expected_coordinates_count = GetExpectedVarHandleCoordinatesCount(invoke); in CreateVarHandleSetLocations()
4413 HInstruction* arg = invoke->InputAt(number_of_arguments - 1u); in CreateVarHandleSetLocations()
4434 static void GenerateVarHandleSet(HInvoke* invoke, in GenerateVarHandleSet() argument
4439 uint32_t value_index = invoke->GetNumberOfArguments() - 1; in GenerateVarHandleSet()
4440 DataType::Type value_type = GetDataTypeFromShorty(invoke, value_index); in GenerateVarHandleSet()
4443 LocationSummary* locations = invoke->GetLocations(); in GenerateVarHandleSet()
4446 VarHandleTarget target = GetVarHandleTarget(invoke); in GenerateVarHandleSet()
4449 slow_path = GenerateVarHandleChecks(invoke, codegen, order, value_type); in GenerateVarHandleSet()
4451 GenerateVarHandleTarget(invoke, target, codegen); in GenerateVarHandleSet()
4517 if (CodeGenerator::StoreNeedsWriteBarrier(value_type, invoke->InputAt(value_index))) { in GenerateVarHandleSet()
4530 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleSet(HInvoke* invoke) { in VisitVarHandleSet() argument
4531 CreateVarHandleSetLocations(invoke, codegen_, /*atomic=*/ false); in VisitVarHandleSet()
4534 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleSet(HInvoke* invoke) { in VisitVarHandleSet() argument
4535 GenerateVarHandleSet(invoke, codegen_, std::memory_order_relaxed, /*atomic=*/ false); in VisitVarHandleSet()
4538 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleSetOpaque(HInvoke* invoke) { in VisitVarHandleSetOpaque() argument
4539 CreateVarHandleSetLocations(invoke, codegen_, /*atomic=*/ true); in VisitVarHandleSetOpaque()
4542 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleSetOpaque(HInvoke* invoke) { in VisitVarHandleSetOpaque() argument
4543 GenerateVarHandleSet(invoke, codegen_, std::memory_order_relaxed, /*atomic=*/ true); in VisitVarHandleSetOpaque()
4546 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleSetRelease(HInvoke* invoke) { in VisitVarHandleSetRelease() argument
4547 CreateVarHandleSetLocations(invoke, codegen_, /*atomic=*/ true); in VisitVarHandleSetRelease()
4550 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleSetRelease(HInvoke* invoke) { in VisitVarHandleSetRelease() argument
4551 GenerateVarHandleSet(invoke, codegen_, std::memory_order_release, /*atomic=*/ true); in VisitVarHandleSetRelease()
4554 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleSetVolatile(HInvoke* invoke) { in VisitVarHandleSetVolatile() argument
4555 CreateVarHandleSetLocations(invoke, codegen_, /*atomic=*/ true); in VisitVarHandleSetVolatile()
4558 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleSetVolatile(HInvoke* invoke) { in VisitVarHandleSetVolatile() argument
4560 GenerateVarHandleSet(invoke, codegen_, std::memory_order_seq_cst, /*atomic=*/ true); in VisitVarHandleSetVolatile()
4563 static void CreateVarHandleCompareAndSetOrExchangeLocations(HInvoke* invoke, bool return_success) { in CreateVarHandleCompareAndSetOrExchangeLocations() argument
4564 if (!HasVarHandleIntrinsicImplementation(invoke)) { in CreateVarHandleCompareAndSetOrExchangeLocations()
4568 uint32_t number_of_arguments = invoke->GetNumberOfArguments(); in CreateVarHandleCompareAndSetOrExchangeLocations()
4569 DataType::Type value_type = GetDataTypeFromShorty(invoke, number_of_arguments - 1u); in CreateVarHandleCompareAndSetOrExchangeLocations()
4582 LocationSummary* locations = CreateVarHandleCommonLocations(invoke); in CreateVarHandleCompareAndSetOrExchangeLocations()
4590 if (GetExpectedVarHandleCoordinatesCount(invoke) == 0u) { // For static fields. in CreateVarHandleCompareAndSetOrExchangeLocations()
4605 (GetExpectedVarHandleCoordinatesCount(invoke) == 0) ? 2u : 1u); in CreateVarHandleCompareAndSetOrExchangeLocations()
4610 } else if (GetExpectedVarHandleCoordinatesCount(invoke) == 2u) { in CreateVarHandleCompareAndSetOrExchangeLocations()
4626 static void GenerateVarHandleCompareAndSetOrExchange(HInvoke* invoke, in GenerateVarHandleCompareAndSetOrExchange() argument
4634 uint32_t expected_index = invoke->GetNumberOfArguments() - 2; in GenerateVarHandleCompareAndSetOrExchange()
4635 uint32_t new_value_index = invoke->GetNumberOfArguments() - 1; in GenerateVarHandleCompareAndSetOrExchange()
4636 DataType::Type value_type = GetDataTypeFromShorty(invoke, new_value_index); in GenerateVarHandleCompareAndSetOrExchange()
4637 DCHECK_EQ(value_type, GetDataTypeFromShorty(invoke, expected_index)); in GenerateVarHandleCompareAndSetOrExchange()
4640 LocationSummary* locations = invoke->GetLocations(); in GenerateVarHandleCompareAndSetOrExchange()
4645 VarHandleTarget target = GetVarHandleTarget(invoke); in GenerateVarHandleCompareAndSetOrExchange()
4648 slow_path = GenerateVarHandleChecks(invoke, codegen, order, value_type); in GenerateVarHandleCompareAndSetOrExchange()
4650 GenerateVarHandleTarget(invoke, target, codegen); in GenerateVarHandleCompareAndSetOrExchange()
4755 invoke, in GenerateVarHandleCompareAndSetOrExchange()
4807 if (CodeGenerator::StoreNeedsWriteBarrier(value_type, invoke->InputAt(new_value_index))) { in GenerateVarHandleCompareAndSetOrExchange()
4821 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleCompareAndExchange(HInvoke* invoke) { in VisitVarHandleCompareAndExchange() argument
4822 CreateVarHandleCompareAndSetOrExchangeLocations(invoke, /*return_success=*/ false); in VisitVarHandleCompareAndExchange()
4825 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleCompareAndExchange(HInvoke* invoke) { in VisitVarHandleCompareAndExchange() argument
4827 invoke, codegen_, std::memory_order_seq_cst, /*return_success=*/ false, /*strong=*/ true); in VisitVarHandleCompareAndExchange()
4830 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleCompareAndExchangeAcquire(HInvoke* invoke) { in VisitVarHandleCompareAndExchangeAcquire() argument
4831 CreateVarHandleCompareAndSetOrExchangeLocations(invoke, /*return_success=*/ false); in VisitVarHandleCompareAndExchangeAcquire()
4834 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleCompareAndExchangeAcquire(HInvoke* invoke) { in VisitVarHandleCompareAndExchangeAcquire() argument
4836 invoke, codegen_, std::memory_order_acquire, /*return_success=*/ false, /*strong=*/ true); in VisitVarHandleCompareAndExchangeAcquire()
4839 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleCompareAndExchangeRelease(HInvoke* invoke) { in VisitVarHandleCompareAndExchangeRelease() argument
4840 CreateVarHandleCompareAndSetOrExchangeLocations(invoke, /*return_success=*/ false); in VisitVarHandleCompareAndExchangeRelease()
4843 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleCompareAndExchangeRelease(HInvoke* invoke) { in VisitVarHandleCompareAndExchangeRelease() argument
4845 invoke, codegen_, std::memory_order_release, /*return_success=*/ false, /*strong=*/ true); in VisitVarHandleCompareAndExchangeRelease()
4848 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleCompareAndSet(HInvoke* invoke) { in VisitVarHandleCompareAndSet() argument
4849 CreateVarHandleCompareAndSetOrExchangeLocations(invoke, /*return_success=*/ true); in VisitVarHandleCompareAndSet()
4852 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleCompareAndSet(HInvoke* invoke) { in VisitVarHandleCompareAndSet() argument
4854 invoke, codegen_, std::memory_order_seq_cst, /*return_success=*/ true, /*strong=*/ true); in VisitVarHandleCompareAndSet()
4857 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleWeakCompareAndSet(HInvoke* invoke) { in VisitVarHandleWeakCompareAndSet() argument
4858 CreateVarHandleCompareAndSetOrExchangeLocations(invoke, /*return_success=*/ true); in VisitVarHandleWeakCompareAndSet()
4861 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleWeakCompareAndSet(HInvoke* invoke) { in VisitVarHandleWeakCompareAndSet() argument
4863 invoke, codegen_, std::memory_order_seq_cst, /*return_success=*/ true, /*strong=*/ false); in VisitVarHandleWeakCompareAndSet()
4866 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleWeakCompareAndSetAcquire(HInvoke* invoke) { in VisitVarHandleWeakCompareAndSetAcquire() argument
4867 CreateVarHandleCompareAndSetOrExchangeLocations(invoke, /*return_success=*/ true); in VisitVarHandleWeakCompareAndSetAcquire()
4870 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleWeakCompareAndSetAcquire(HInvoke* invoke) { in VisitVarHandleWeakCompareAndSetAcquire() argument
4872 invoke, codegen_, std::memory_order_acquire, /*return_success=*/ true, /*strong=*/ false); in VisitVarHandleWeakCompareAndSetAcquire()
4875 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleWeakCompareAndSetPlain(HInvoke* invoke) { in VisitVarHandleWeakCompareAndSetPlain() argument
4876 CreateVarHandleCompareAndSetOrExchangeLocations(invoke, /*return_success=*/ true); in VisitVarHandleWeakCompareAndSetPlain()
4879 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleWeakCompareAndSetPlain(HInvoke* invoke) { in VisitVarHandleWeakCompareAndSetPlain() argument
4881 invoke, codegen_, std::memory_order_relaxed, /*return_success=*/ true, /*strong=*/ false); in VisitVarHandleWeakCompareAndSetPlain()
4884 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleWeakCompareAndSetRelease(HInvoke* invoke) { in VisitVarHandleWeakCompareAndSetRelease() argument
4885 CreateVarHandleCompareAndSetOrExchangeLocations(invoke, /*return_success=*/ true); in VisitVarHandleWeakCompareAndSetRelease()
4888 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleWeakCompareAndSetRelease(HInvoke* invoke) { in VisitVarHandleWeakCompareAndSetRelease() argument
4890 invoke, codegen_, std::memory_order_release, /*return_success=*/ true, /*strong=*/ false); in VisitVarHandleWeakCompareAndSetRelease()
4893 static void CreateVarHandleGetAndUpdateLocations(HInvoke* invoke, in CreateVarHandleGetAndUpdateLocations() argument
4895 if (!HasVarHandleIntrinsicImplementation(invoke)) { in CreateVarHandleGetAndUpdateLocations()
4900 invoke->GetType() == DataType::Type::kReference) { in CreateVarHandleGetAndUpdateLocations()
4907 LocationSummary* locations = CreateVarHandleCommonLocations(invoke); in CreateVarHandleGetAndUpdateLocations()
4912 (GetExpectedVarHandleCoordinatesCount(invoke) == 0) ? 2u : 1u); in CreateVarHandleGetAndUpdateLocations()
4914 DataType::Type value_type = invoke->GetType(); in CreateVarHandleGetAndUpdateLocations()
4925 } else if (GetExpectedVarHandleCoordinatesCount(invoke) == 2u) { in CreateVarHandleGetAndUpdateLocations()
4934 GetExpectedVarHandleCoordinatesCount(invoke) == 2u) { in CreateVarHandleGetAndUpdateLocations()
4951 static void GenerateVarHandleGetAndUpdate(HInvoke* invoke, in GenerateVarHandleGetAndUpdate() argument
4956 uint32_t arg_index = invoke->GetNumberOfArguments() - 1; in GenerateVarHandleGetAndUpdate()
4957 DataType::Type value_type = GetDataTypeFromShorty(invoke, arg_index); in GenerateVarHandleGetAndUpdate()
4960 LocationSummary* locations = invoke->GetLocations(); in GenerateVarHandleGetAndUpdate()
4964 VarHandleTarget target = GetVarHandleTarget(invoke); in GenerateVarHandleGetAndUpdate()
4967 slow_path = GenerateVarHandleChecks(invoke, codegen, order, value_type); in GenerateVarHandleGetAndUpdate()
4969 GenerateVarHandleTarget(invoke, target, codegen); in GenerateVarHandleGetAndUpdate()
5113 invoke, in GenerateVarHandleGetAndUpdate()
5122 if (CodeGenerator::StoreNeedsWriteBarrier(value_type, invoke->InputAt(arg_index))) { in GenerateVarHandleGetAndUpdate()
5136 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndSet(HInvoke* invoke) { in VisitVarHandleGetAndSet() argument
5137 CreateVarHandleGetAndUpdateLocations(invoke, GetAndUpdateOp::kSet); in VisitVarHandleGetAndSet()
5140 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndSet(HInvoke* invoke) { in VisitVarHandleGetAndSet() argument
5141 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kSet, std::memory_order_seq_cst); in VisitVarHandleGetAndSet()
5144 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndSetAcquire(HInvoke* invoke) { in VisitVarHandleGetAndSetAcquire() argument
5145 CreateVarHandleGetAndUpdateLocations(invoke, GetAndUpdateOp::kSet); in VisitVarHandleGetAndSetAcquire()
5148 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndSetAcquire(HInvoke* invoke) { in VisitVarHandleGetAndSetAcquire() argument
5149 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kSet, std::memory_order_acquire); in VisitVarHandleGetAndSetAcquire()
5152 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndSetRelease(HInvoke* invoke) { in VisitVarHandleGetAndSetRelease() argument
5153 CreateVarHandleGetAndUpdateLocations(invoke, GetAndUpdateOp::kSet); in VisitVarHandleGetAndSetRelease()
5156 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndSetRelease(HInvoke* invoke) { in VisitVarHandleGetAndSetRelease() argument
5157 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kSet, std::memory_order_release); in VisitVarHandleGetAndSetRelease()
5160 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndAdd(HInvoke* invoke) { in VisitVarHandleGetAndAdd() argument
5161 CreateVarHandleGetAndUpdateLocations(invoke, GetAndUpdateOp::kAdd); in VisitVarHandleGetAndAdd()
5164 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndAdd(HInvoke* invoke) { in VisitVarHandleGetAndAdd() argument
5165 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kAdd, std::memory_order_seq_cst); in VisitVarHandleGetAndAdd()
5168 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndAddAcquire(HInvoke* invoke) { in VisitVarHandleGetAndAddAcquire() argument
5169 CreateVarHandleGetAndUpdateLocations(invoke, GetAndUpdateOp::kAdd); in VisitVarHandleGetAndAddAcquire()
5172 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndAddAcquire(HInvoke* invoke) { in VisitVarHandleGetAndAddAcquire() argument
5173 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kAdd, std::memory_order_acquire); in VisitVarHandleGetAndAddAcquire()
5176 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndAddRelease(HInvoke* invoke) { in VisitVarHandleGetAndAddRelease() argument
5177 CreateVarHandleGetAndUpdateLocations(invoke, GetAndUpdateOp::kAdd); in VisitVarHandleGetAndAddRelease()
5180 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndAddRelease(HInvoke* invoke) { in VisitVarHandleGetAndAddRelease() argument
5181 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kAdd, std::memory_order_release); in VisitVarHandleGetAndAddRelease()
5184 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndBitwiseAnd(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseAnd() argument
5185 CreateVarHandleGetAndUpdateLocations(invoke, GetAndUpdateOp::kAnd); in VisitVarHandleGetAndBitwiseAnd()
5188 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndBitwiseAnd(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseAnd() argument
5189 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kAnd, std::memory_order_seq_cst); in VisitVarHandleGetAndBitwiseAnd()
5192 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndBitwiseAndAcquire(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseAndAcquire() argument
5193 CreateVarHandleGetAndUpdateLocations(invoke, GetAndUpdateOp::kAnd); in VisitVarHandleGetAndBitwiseAndAcquire()
5196 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndBitwiseAndAcquire(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseAndAcquire() argument
5197 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kAnd, std::memory_order_acquire); in VisitVarHandleGetAndBitwiseAndAcquire()
5200 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndBitwiseAndRelease(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseAndRelease() argument
5201 CreateVarHandleGetAndUpdateLocations(invoke, GetAndUpdateOp::kAnd); in VisitVarHandleGetAndBitwiseAndRelease()
5204 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndBitwiseAndRelease(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseAndRelease() argument
5205 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kAnd, std::memory_order_release); in VisitVarHandleGetAndBitwiseAndRelease()
5208 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndBitwiseOr(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseOr() argument
5209 CreateVarHandleGetAndUpdateLocations(invoke, GetAndUpdateOp::kOr); in VisitVarHandleGetAndBitwiseOr()
5212 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndBitwiseOr(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseOr() argument
5213 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kOr, std::memory_order_seq_cst); in VisitVarHandleGetAndBitwiseOr()
5216 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndBitwiseOrAcquire(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseOrAcquire() argument
5217 CreateVarHandleGetAndUpdateLocations(invoke, GetAndUpdateOp::kOr); in VisitVarHandleGetAndBitwiseOrAcquire()
5220 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndBitwiseOrAcquire(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseOrAcquire() argument
5221 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kOr, std::memory_order_acquire); in VisitVarHandleGetAndBitwiseOrAcquire()
5224 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndBitwiseOrRelease(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseOrRelease() argument
5225 CreateVarHandleGetAndUpdateLocations(invoke, GetAndUpdateOp::kOr); in VisitVarHandleGetAndBitwiseOrRelease()
5228 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndBitwiseOrRelease(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseOrRelease() argument
5229 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kOr, std::memory_order_release); in VisitVarHandleGetAndBitwiseOrRelease()
5232 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndBitwiseXor(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseXor() argument
5233 CreateVarHandleGetAndUpdateLocations(invoke, GetAndUpdateOp::kXor); in VisitVarHandleGetAndBitwiseXor()
5236 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndBitwiseXor(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseXor() argument
5237 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kXor, std::memory_order_seq_cst); in VisitVarHandleGetAndBitwiseXor()
5240 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndBitwiseXorAcquire(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseXorAcquire() argument
5241 CreateVarHandleGetAndUpdateLocations(invoke, GetAndUpdateOp::kXor); in VisitVarHandleGetAndBitwiseXorAcquire()
5244 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndBitwiseXorAcquire(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseXorAcquire() argument
5245 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kXor, std::memory_order_acquire); in VisitVarHandleGetAndBitwiseXorAcquire()
5248 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndBitwiseXorRelease(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseXorRelease() argument
5249 CreateVarHandleGetAndUpdateLocations(invoke, GetAndUpdateOp::kXor); in VisitVarHandleGetAndBitwiseXorRelease()
5252 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndBitwiseXorRelease(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseXorRelease() argument
5253 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kXor, std::memory_order_release); in VisitVarHandleGetAndBitwiseXorRelease()
5260 HInvoke* invoke = GetInvoke(); in EmitByteArrayViewCode() local
5263 GetVarHandleExpectedValueType(invoke, /*expected_coordinates_count=*/ 2u); in EmitByteArrayViewCode()
5268 vixl32::Register varhandle = InputRegisterAt(invoke, 0); in EmitByteArrayViewCode()
5269 vixl32::Register object = InputRegisterAt(invoke, 1); in EmitByteArrayViewCode()
5270 vixl32::Register index = InputRegisterAt(invoke, 2); in EmitByteArrayViewCode()
5279 VarHandleTarget target = GetVarHandleTarget(invoke); in EmitByteArrayViewCode()
5282 vixl32::Register temp = RegisterFrom(invoke->GetLocations()->GetTemp(0u)); in EmitByteArrayViewCode()
5325 HInstruction* arg = invoke->InputAt(invoke->GetNumberOfArguments() - 1u); in EmitByteArrayViewCode()
5340 GenerateVarHandleGet(invoke, codegen, order_, atomic_, /*byte_swap=*/ true); in EmitByteArrayViewCode()
5343 GenerateVarHandleSet(invoke, codegen, order_, atomic_, /*byte_swap=*/ true); in EmitByteArrayViewCode()
5348 invoke, codegen, order_, return_success_, strong_, /*byte_swap=*/ true); in EmitByteArrayViewCode()
5352 invoke, codegen, get_and_update_op_, order_, /*byte_swap=*/ true); in EmitByteArrayViewCode()