Lines Matching full:invoke

156 bool IntrinsicLocationsBuilderARMVIXL::TryDispatch(HInvoke* invoke) {  in TryDispatch()  argument
157 Dispatch(invoke); in TryDispatch()
158 LocationSummary* res = invoke->GetLocations(); in TryDispatch()
165 static void CreateFPToIntLocations(ArenaAllocator* allocator, HInvoke* invoke) { in CreateFPToIntLocations() argument
167 new (allocator) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in CreateFPToIntLocations()
172 static void CreateIntToFPLocations(ArenaAllocator* allocator, HInvoke* invoke) { in CreateIntToFPLocations() argument
174 new (allocator) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in CreateIntToFPLocations()
199 void IntrinsicLocationsBuilderARMVIXL::VisitDoubleDoubleToRawLongBits(HInvoke* invoke) { in VisitDoubleDoubleToRawLongBits() argument
200 CreateFPToIntLocations(allocator_, invoke); in VisitDoubleDoubleToRawLongBits()
202 void IntrinsicLocationsBuilderARMVIXL::VisitDoubleLongBitsToDouble(HInvoke* invoke) { in VisitDoubleLongBitsToDouble() argument
203 CreateIntToFPLocations(allocator_, invoke); in VisitDoubleLongBitsToDouble()
206 void IntrinsicCodeGeneratorARMVIXL::VisitDoubleDoubleToRawLongBits(HInvoke* invoke) { in VisitDoubleDoubleToRawLongBits() argument
207 MoveFPToInt(invoke->GetLocations(), /* is64bit= */ true, GetAssembler()); in VisitDoubleDoubleToRawLongBits()
209 void IntrinsicCodeGeneratorARMVIXL::VisitDoubleLongBitsToDouble(HInvoke* invoke) { in VisitDoubleLongBitsToDouble() argument
210 MoveIntToFP(invoke->GetLocations(), /* is64bit= */ true, GetAssembler()); in VisitDoubleLongBitsToDouble()
213 void IntrinsicLocationsBuilderARMVIXL::VisitFloatFloatToRawIntBits(HInvoke* invoke) { in VisitFloatFloatToRawIntBits() argument
214 CreateFPToIntLocations(allocator_, invoke); in VisitFloatFloatToRawIntBits()
216 void IntrinsicLocationsBuilderARMVIXL::VisitFloatIntBitsToFloat(HInvoke* invoke) { in VisitFloatIntBitsToFloat() argument
217 CreateIntToFPLocations(allocator_, invoke); in VisitFloatIntBitsToFloat()
220 void IntrinsicCodeGeneratorARMVIXL::VisitFloatFloatToRawIntBits(HInvoke* invoke) { in VisitFloatFloatToRawIntBits() argument
221 MoveFPToInt(invoke->GetLocations(), /* is64bit= */ false, GetAssembler()); in VisitFloatFloatToRawIntBits()
223 void IntrinsicCodeGeneratorARMVIXL::VisitFloatIntBitsToFloat(HInvoke* invoke) { in VisitFloatIntBitsToFloat() argument
224 MoveIntToFP(invoke->GetLocations(), /* is64bit= */ false, GetAssembler()); in VisitFloatIntBitsToFloat()
227 static void CreateIntToIntLocations(ArenaAllocator* allocator, HInvoke* invoke) { in CreateIntToIntLocations() argument
229 new (allocator) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in CreateIntToIntLocations()
234 static void CreateIntIntToIntSlowPathCallLocations(ArenaAllocator* allocator, HInvoke* invoke) { in CreateIntIntToIntSlowPathCallLocations() argument
236 new (allocator) LocationSummary(invoke, LocationSummary::kCallOnSlowPath, kIntrinsified); in CreateIntIntToIntSlowPathCallLocations()
243 static void CreateLongToLongLocationsWithOverlap(ArenaAllocator* allocator, HInvoke* invoke) { in CreateLongToLongLocationsWithOverlap() argument
245 new (allocator) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in CreateLongToLongLocationsWithOverlap()
250 static void CreateFPToFPLocations(ArenaAllocator* allocator, HInvoke* invoke) { in CreateFPToFPLocations() argument
252 new (allocator) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in CreateFPToFPLocations()
257 static void GenNumberOfLeadingZeros(HInvoke* invoke, in GenNumberOfLeadingZeros() argument
261 LocationSummary* locations = invoke->GetLocations(); in GenNumberOfLeadingZeros()
271 vixl32::Label* final_label = codegen->GetFinalLabel(invoke, &end); in GenNumberOfLeadingZeros()
284 void IntrinsicLocationsBuilderARMVIXL::VisitIntegerNumberOfLeadingZeros(HInvoke* invoke) { in VisitIntegerNumberOfLeadingZeros() argument
285 CreateIntToIntLocations(allocator_, invoke); in VisitIntegerNumberOfLeadingZeros()
288 void IntrinsicCodeGeneratorARMVIXL::VisitIntegerNumberOfLeadingZeros(HInvoke* invoke) { in VisitIntegerNumberOfLeadingZeros() argument
289 GenNumberOfLeadingZeros(invoke, DataType::Type::kInt32, codegen_); in VisitIntegerNumberOfLeadingZeros()
292 void IntrinsicLocationsBuilderARMVIXL::VisitLongNumberOfLeadingZeros(HInvoke* invoke) { in VisitLongNumberOfLeadingZeros() argument
293 CreateLongToLongLocationsWithOverlap(allocator_, invoke); in VisitLongNumberOfLeadingZeros()
296 void IntrinsicCodeGeneratorARMVIXL::VisitLongNumberOfLeadingZeros(HInvoke* invoke) { in VisitLongNumberOfLeadingZeros() argument
297 GenNumberOfLeadingZeros(invoke, DataType::Type::kInt64, codegen_); in VisitLongNumberOfLeadingZeros()
300 static void GenNumberOfTrailingZeros(HInvoke* invoke, in GenNumberOfTrailingZeros() argument
306 LocationSummary* locations = invoke->GetLocations(); in GenNumberOfTrailingZeros()
313 vixl32::Label* final_label = codegen->GetFinalLabel(invoke, &end); in GenNumberOfTrailingZeros()
330 void IntrinsicLocationsBuilderARMVIXL::VisitIntegerNumberOfTrailingZeros(HInvoke* invoke) { in VisitIntegerNumberOfTrailingZeros() argument
331 CreateIntToIntLocations(allocator_, invoke); in VisitIntegerNumberOfTrailingZeros()
334 void IntrinsicCodeGeneratorARMVIXL::VisitIntegerNumberOfTrailingZeros(HInvoke* invoke) { in VisitIntegerNumberOfTrailingZeros() argument
335 GenNumberOfTrailingZeros(invoke, DataType::Type::kInt32, codegen_); in VisitIntegerNumberOfTrailingZeros()
338 void IntrinsicLocationsBuilderARMVIXL::VisitLongNumberOfTrailingZeros(HInvoke* invoke) { in VisitLongNumberOfTrailingZeros() argument
339 CreateLongToLongLocationsWithOverlap(allocator_, invoke); in VisitLongNumberOfTrailingZeros()
342 void IntrinsicCodeGeneratorARMVIXL::VisitLongNumberOfTrailingZeros(HInvoke* invoke) { in VisitLongNumberOfTrailingZeros() argument
343 GenNumberOfTrailingZeros(invoke, DataType::Type::kInt64, codegen_); in VisitLongNumberOfTrailingZeros()
346 void IntrinsicLocationsBuilderARMVIXL::VisitMathSqrt(HInvoke* invoke) { in VisitMathSqrt() argument
347 CreateFPToFPLocations(allocator_, invoke); in VisitMathSqrt()
350 void IntrinsicCodeGeneratorARMVIXL::VisitMathSqrt(HInvoke* invoke) { in VisitMathSqrt() argument
352 __ Vsqrt(OutputDRegister(invoke), InputDRegisterAt(invoke, 0)); in VisitMathSqrt()
355 void IntrinsicLocationsBuilderARMVIXL::VisitMathRint(HInvoke* invoke) { in VisitMathRint() argument
357 CreateFPToFPLocations(allocator_, invoke); in VisitMathRint()
361 void IntrinsicCodeGeneratorARMVIXL::VisitMathRint(HInvoke* invoke) { in VisitMathRint() argument
364 __ Vrintn(F64, OutputDRegister(invoke), InputDRegisterAt(invoke, 0)); in VisitMathRint()
367 void IntrinsicLocationsBuilderARMVIXL::VisitMathRoundFloat(HInvoke* invoke) { in VisitMathRoundFloat() argument
370 new (allocator_) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in VisitMathRoundFloat()
377 void IntrinsicCodeGeneratorARMVIXL::VisitMathRoundFloat(HInvoke* invoke) { in VisitMathRoundFloat() argument
381 vixl32::SRegister in_reg = InputSRegisterAt(invoke, 0); in VisitMathRoundFloat()
382 vixl32::Register out_reg = OutputRegister(invoke); in VisitMathRoundFloat()
383 vixl32::SRegister temp1 = LowSRegisterFrom(invoke->GetLocations()->GetTemp(0)); in VisitMathRoundFloat()
384 vixl32::SRegister temp2 = HighSRegisterFrom(invoke->GetLocations()->GetTemp(0)); in VisitMathRoundFloat()
386 vixl32::Label* final_label = codegen_->GetFinalLabel(invoke, &done); in VisitMathRoundFloat()
418 void IntrinsicLocationsBuilderARMVIXL::VisitMemoryPeekByte(HInvoke* invoke) { in VisitMemoryPeekByte() argument
419 CreateIntToIntLocations(allocator_, invoke); in VisitMemoryPeekByte()
422 void IntrinsicCodeGeneratorARMVIXL::VisitMemoryPeekByte(HInvoke* invoke) { in VisitMemoryPeekByte() argument
425 __ Ldrsb(OutputRegister(invoke), MemOperand(LowRegisterFrom(invoke->GetLocations()->InAt(0)))); in VisitMemoryPeekByte()
428 void IntrinsicLocationsBuilderARMVIXL::VisitMemoryPeekIntNative(HInvoke* invoke) { in VisitMemoryPeekIntNative() argument
429 CreateIntToIntLocations(allocator_, invoke); in VisitMemoryPeekIntNative()
432 void IntrinsicCodeGeneratorARMVIXL::VisitMemoryPeekIntNative(HInvoke* invoke) { in VisitMemoryPeekIntNative() argument
435 __ Ldr(OutputRegister(invoke), MemOperand(LowRegisterFrom(invoke->GetLocations()->InAt(0)))); in VisitMemoryPeekIntNative()
438 void IntrinsicLocationsBuilderARMVIXL::VisitMemoryPeekLongNative(HInvoke* invoke) { in VisitMemoryPeekLongNative() argument
439 CreateIntToIntLocations(allocator_, invoke); in VisitMemoryPeekLongNative()
442 void IntrinsicCodeGeneratorARMVIXL::VisitMemoryPeekLongNative(HInvoke* invoke) { in VisitMemoryPeekLongNative() argument
445 vixl32::Register addr = LowRegisterFrom(invoke->GetLocations()->InAt(0)); in VisitMemoryPeekLongNative()
448 vixl32::Register lo = LowRegisterFrom(invoke->GetLocations()->Out()); in VisitMemoryPeekLongNative()
449 vixl32::Register hi = HighRegisterFrom(invoke->GetLocations()->Out()); in VisitMemoryPeekLongNative()
459 void IntrinsicLocationsBuilderARMVIXL::VisitMemoryPeekShortNative(HInvoke* invoke) { in VisitMemoryPeekShortNative() argument
460 CreateIntToIntLocations(allocator_, invoke); in VisitMemoryPeekShortNative()
463 void IntrinsicCodeGeneratorARMVIXL::VisitMemoryPeekShortNative(HInvoke* invoke) { in VisitMemoryPeekShortNative() argument
466 __ Ldrsh(OutputRegister(invoke), MemOperand(LowRegisterFrom(invoke->GetLocations()->InAt(0)))); in VisitMemoryPeekShortNative()
469 static void CreateIntIntToVoidLocations(ArenaAllocator* allocator, HInvoke* invoke) { in CreateIntIntToVoidLocations() argument
471 new (allocator) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in CreateIntIntToVoidLocations()
476 void IntrinsicLocationsBuilderARMVIXL::VisitMemoryPokeByte(HInvoke* invoke) { in VisitMemoryPokeByte() argument
477 CreateIntIntToVoidLocations(allocator_, invoke); in VisitMemoryPokeByte()
480 void IntrinsicCodeGeneratorARMVIXL::VisitMemoryPokeByte(HInvoke* invoke) { in VisitMemoryPokeByte() argument
482 __ Strb(InputRegisterAt(invoke, 1), MemOperand(LowRegisterFrom(invoke->GetLocations()->InAt(0)))); in VisitMemoryPokeByte()
485 void IntrinsicLocationsBuilderARMVIXL::VisitMemoryPokeIntNative(HInvoke* invoke) { in VisitMemoryPokeIntNative() argument
486 CreateIntIntToVoidLocations(allocator_, invoke); in VisitMemoryPokeIntNative()
489 void IntrinsicCodeGeneratorARMVIXL::VisitMemoryPokeIntNative(HInvoke* invoke) { in VisitMemoryPokeIntNative() argument
491 __ Str(InputRegisterAt(invoke, 1), MemOperand(LowRegisterFrom(invoke->GetLocations()->InAt(0)))); in VisitMemoryPokeIntNative()
494 void IntrinsicLocationsBuilderARMVIXL::VisitMemoryPokeLongNative(HInvoke* invoke) { in VisitMemoryPokeLongNative() argument
495 CreateIntIntToVoidLocations(allocator_, invoke); in VisitMemoryPokeLongNative()
498 void IntrinsicCodeGeneratorARMVIXL::VisitMemoryPokeLongNative(HInvoke* invoke) { in VisitMemoryPokeLongNative() argument
501 vixl32::Register addr = LowRegisterFrom(invoke->GetLocations()->InAt(0)); in VisitMemoryPokeLongNative()
504 __ Str(LowRegisterFrom(invoke->GetLocations()->InAt(1)), MemOperand(addr)); in VisitMemoryPokeLongNative()
505 __ Str(HighRegisterFrom(invoke->GetLocations()->InAt(1)), MemOperand(addr, 4)); in VisitMemoryPokeLongNative()
508 void IntrinsicLocationsBuilderARMVIXL::VisitMemoryPokeShortNative(HInvoke* invoke) { in VisitMemoryPokeShortNative() argument
509 CreateIntIntToVoidLocations(allocator_, invoke); in VisitMemoryPokeShortNative()
512 void IntrinsicCodeGeneratorARMVIXL::VisitMemoryPokeShortNative(HInvoke* invoke) { in VisitMemoryPokeShortNative() argument
514 __ Strh(InputRegisterAt(invoke, 1), MemOperand(LowRegisterFrom(invoke->GetLocations()->InAt(0)))); in VisitMemoryPokeShortNative()
517 void IntrinsicLocationsBuilderARMVIXL::VisitThreadCurrentThread(HInvoke* invoke) { in VisitThreadCurrentThread() argument
519 new (allocator_) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in VisitThreadCurrentThread()
523 void IntrinsicCodeGeneratorARMVIXL::VisitThreadCurrentThread(HInvoke* invoke) { in VisitThreadCurrentThread() argument
525 __ Ldr(OutputRegister(invoke), in VisitThreadCurrentThread()
529 void IntrinsicLocationsBuilderARMVIXL::VisitStringCompareTo(HInvoke* invoke) { in VisitStringCompareTo() argument
532 new (allocator_) LocationSummary(invoke, in VisitStringCompareTo()
533 invoke->InputAt(1)->CanBeNull() in VisitStringCompareTo()
554 HInvoke* invoke,
558 void IntrinsicCodeGeneratorARMVIXL::VisitStringCompareTo(HInvoke* invoke) { in VisitStringCompareTo() argument
560 LocationSummary* locations = invoke->GetLocations(); in VisitStringCompareTo()
562 const vixl32::Register str = InputRegisterAt(invoke, 0); in VisitStringCompareTo()
563 const vixl32::Register arg = InputRegisterAt(invoke, 1); in VisitStringCompareTo()
564 const vixl32::Register out = OutputRegister(invoke); in VisitStringCompareTo()
581 DCHECK(!invoke->CanDoImplicitNullCheckOn(invoke->InputAt(0))); in VisitStringCompareTo()
585 const bool can_slow_path = invoke->InputAt(1)->CanBeNull(); in VisitStringCompareTo()
587 slow_path = new (codegen_->GetScopedAllocator()) IntrinsicSlowPathARMVIXL(invoke); in VisitStringCompareTo()
644 GenerateStringCompareToLoop(assembler, invoke, &end, &different_compression); in VisitStringCompareTo()
654 HInvoke* invoke, in GenerateStringCompareToLoop() argument
657 LocationSummary* locations = invoke->GetLocations(); in GenerateStringCompareToLoop()
659 const vixl32::Register str = InputRegisterAt(invoke, 0); in GenerateStringCompareToLoop()
660 const vixl32::Register arg = InputRegisterAt(invoke, 1); in GenerateStringCompareToLoop()
661 const vixl32::Register out = OutputRegister(invoke); in GenerateStringCompareToLoop()
845 void IntrinsicLocationsBuilderARMVIXL::VisitStringEquals(HInvoke* invoke) { in VisitStringEquals() argument
847 new (allocator_) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in VisitStringEquals()
859 const char* const_string = GetConstString(invoke->InputAt(0), &const_string_length); in VisitStringEquals()
861 const_string = GetConstString(invoke->InputAt(1), &const_string_length); in VisitStringEquals()
877 void IntrinsicCodeGeneratorARMVIXL::VisitStringEquals(HInvoke* invoke) { in VisitStringEquals() argument
879 LocationSummary* locations = invoke->GetLocations(); in VisitStringEquals()
881 vixl32::Register str = InputRegisterAt(invoke, 0); in VisitStringEquals()
882 vixl32::Register arg = InputRegisterAt(invoke, 1); in VisitStringEquals()
883 vixl32::Register out = OutputRegister(invoke); in VisitStringEquals()
891 vixl32::Label* final_label = codegen_->GetFinalLabel(invoke, &end); in VisitStringEquals()
899 DCHECK(!invoke->CanDoImplicitNullCheckOn(invoke->InputAt(0))); in VisitStringEquals()
901 StringEqualsOptimizations optimizations(invoke); in VisitStringEquals()
933 const char* const_string = GetConstString(invoke->InputAt(0), &const_string_length); in VisitStringEquals()
935 const_string = GetConstString(invoke->InputAt(1), &const_string_length); in VisitStringEquals()
1044 static void GenerateVisitStringIndexOf(HInvoke* invoke, in GenerateVisitStringIndexOf() argument
1048 LocationSummary* locations = invoke->GetLocations(); in GenerateVisitStringIndexOf()
1051 DCHECK(!invoke->CanDoImplicitNullCheckOn(invoke->InputAt(0))); in GenerateVisitStringIndexOf()
1056 HInstruction* code_point = invoke->InputAt(1); in GenerateVisitStringIndexOf()
1062 slow_path = new (codegen->GetScopedAllocator()) IntrinsicSlowPathARMVIXL(invoke); in GenerateVisitStringIndexOf()
1069 vixl32::Register char_reg = InputRegisterAt(invoke, 1); in GenerateVisitStringIndexOf()
1072 slow_path = new (codegen->GetScopedAllocator()) IntrinsicSlowPathARMVIXL(invoke); in GenerateVisitStringIndexOf()
1084 codegen->InvokeRuntime(kQuickIndexOf, invoke, invoke->GetDexPc(), slow_path); in GenerateVisitStringIndexOf()
1092 void IntrinsicLocationsBuilderARMVIXL::VisitStringIndexOf(HInvoke* invoke) { in VisitStringIndexOf() argument
1094 invoke, LocationSummary::kCallOnMainAndSlowPath, kIntrinsified); in VisitStringIndexOf()
1106 void IntrinsicCodeGeneratorARMVIXL::VisitStringIndexOf(HInvoke* invoke) { in VisitStringIndexOf() argument
1107 GenerateVisitStringIndexOf(invoke, GetAssembler(), codegen_, /* start_at_zero= */ true); in VisitStringIndexOf()
1110 void IntrinsicLocationsBuilderARMVIXL::VisitStringIndexOfAfter(HInvoke* invoke) { in VisitStringIndexOfAfter() argument
1112 invoke, LocationSummary::kCallOnMainAndSlowPath, kIntrinsified); in VisitStringIndexOfAfter()
1122 void IntrinsicCodeGeneratorARMVIXL::VisitStringIndexOfAfter(HInvoke* invoke) { in VisitStringIndexOfAfter() argument
1123 GenerateVisitStringIndexOf(invoke, GetAssembler(), codegen_, /* start_at_zero= */ false); in VisitStringIndexOfAfter()
1126 void IntrinsicLocationsBuilderARMVIXL::VisitStringNewStringFromBytes(HInvoke* invoke) { in VisitStringNewStringFromBytes() argument
1128 invoke, LocationSummary::kCallOnMainAndSlowPath, kIntrinsified); in VisitStringNewStringFromBytes()
1137 void IntrinsicCodeGeneratorARMVIXL::VisitStringNewStringFromBytes(HInvoke* invoke) { in VisitStringNewStringFromBytes() argument
1139 vixl32::Register byte_array = InputRegisterAt(invoke, 0); in VisitStringNewStringFromBytes()
1142 new (codegen_->GetScopedAllocator()) IntrinsicSlowPathARMVIXL(invoke); in VisitStringNewStringFromBytes()
1146 codegen_->InvokeRuntime(kQuickAllocStringFromBytes, invoke, invoke->GetDexPc(), slow_path); in VisitStringNewStringFromBytes()
1151 void IntrinsicLocationsBuilderARMVIXL::VisitStringNewStringFromChars(HInvoke* invoke) { in VisitStringNewStringFromChars() argument
1153 new (allocator_) LocationSummary(invoke, LocationSummary::kCallOnMainOnly, kIntrinsified); in VisitStringNewStringFromChars()
1161 void IntrinsicCodeGeneratorARMVIXL::VisitStringNewStringFromChars(HInvoke* invoke) { in VisitStringNewStringFromChars() argument
1168 codegen_->InvokeRuntime(kQuickAllocStringFromChars, invoke, invoke->GetDexPc()); in VisitStringNewStringFromChars()
1172 void IntrinsicLocationsBuilderARMVIXL::VisitStringNewStringFromString(HInvoke* invoke) { in VisitStringNewStringFromString() argument
1174 invoke, LocationSummary::kCallOnMainAndSlowPath, kIntrinsified); in VisitStringNewStringFromString()
1180 void IntrinsicCodeGeneratorARMVIXL::VisitStringNewStringFromString(HInvoke* invoke) { in VisitStringNewStringFromString() argument
1182 vixl32::Register string_to_copy = InputRegisterAt(invoke, 0); in VisitStringNewStringFromString()
1185 new (codegen_->GetScopedAllocator()) IntrinsicSlowPathARMVIXL(invoke); in VisitStringNewStringFromString()
1189 codegen_->InvokeRuntime(kQuickAllocStringFromString, invoke, invoke->GetDexPc(), slow_path); in VisitStringNewStringFromString()
1225 void IntrinsicLocationsBuilderARMVIXL::VisitSystemArrayCopy(HInvoke* invoke) { in VisitSystemArrayCopy() argument
1234 invoke, kSystemArrayCopyThreshold, kInitialNumTemps); in VisitSystemArrayCopy()
1236 locations->SetInAt(1, LocationForSystemArrayCopyInput(assembler_, invoke->InputAt(1))); in VisitSystemArrayCopy()
1237 locations->SetInAt(3, LocationForSystemArrayCopyInput(assembler_, invoke->InputAt(3))); in VisitSystemArrayCopy()
1238 locations->SetInAt(4, LocationForSystemArrayCopyInput(assembler_, invoke->InputAt(4))); in VisitSystemArrayCopy()
1304 void IntrinsicCodeGeneratorARMVIXL::VisitSystemArrayCopy(HInvoke* invoke) { in VisitSystemArrayCopy() argument
1310 LocationSummary* locations = invoke->GetLocations(); in VisitSystemArrayCopy()
1318 vixl32::Register src = InputRegisterAt(invoke, 0); in VisitSystemArrayCopy()
1320 vixl32::Register dest = InputRegisterAt(invoke, 2); in VisitSystemArrayCopy()
1331 new (codegen_->GetScopedAllocator()) IntrinsicSlowPathARMVIXL(invoke); in VisitSystemArrayCopy()
1335 SystemArrayCopyOptimizations optimizations(invoke); in VisitSystemArrayCopy()
1435 invoke, temp1_loc, dest, class_offset, temp2_loc, /* needs_null_check= */ false); in VisitSystemArrayCopy()
1443 invoke, temp2_loc, src, class_offset, temp3_loc, /* needs_null_check= */ false); in VisitSystemArrayCopy()
1550 new (codegen_->GetScopedAllocator()) ReadBarrierSystemArrayCopySlowPathARMVIXL(invoke); in VisitSystemArrayCopy()
1602 static void CreateFPToFPCallLocations(ArenaAllocator* allocator, HInvoke* invoke) { in CreateFPToFPCallLocations() argument
1608 if (invoke->GetBlock()->GetGraph()->IsDebuggable()) { in CreateFPToFPCallLocations()
1612 DCHECK_EQ(invoke->GetNumberOfArguments(), 1U); in CreateFPToFPCallLocations()
1613 DCHECK_EQ(invoke->InputAt(0)->GetType(), DataType::Type::kFloat64); in CreateFPToFPCallLocations()
1614 DCHECK_EQ(invoke->GetType(), DataType::Type::kFloat64); in CreateFPToFPCallLocations()
1617 new (allocator) LocationSummary(invoke, LocationSummary::kCallOnMainOnly, kIntrinsified); in CreateFPToFPCallLocations()
1627 static void CreateFPFPToFPCallLocations(ArenaAllocator* allocator, HInvoke* invoke) { in CreateFPFPToFPCallLocations() argument
1633 if (invoke->GetBlock()->GetGraph()->IsDebuggable()) { in CreateFPFPToFPCallLocations()
1637 DCHECK_EQ(invoke->GetNumberOfArguments(), 2U); in CreateFPFPToFPCallLocations()
1638 DCHECK_EQ(invoke->InputAt(0)->GetType(), DataType::Type::kFloat64); in CreateFPFPToFPCallLocations()
1639 DCHECK_EQ(invoke->InputAt(1)->GetType(), DataType::Type::kFloat64); in CreateFPFPToFPCallLocations()
1640 DCHECK_EQ(invoke->GetType(), DataType::Type::kFloat64); in CreateFPFPToFPCallLocations()
1643 new (allocator) LocationSummary(invoke, LocationSummary::kCallOnMainOnly, kIntrinsified); in CreateFPFPToFPCallLocations()
1656 static void GenFPToFPCall(HInvoke* invoke, in GenFPToFPCall() argument
1660 LocationSummary* const locations = invoke->GetLocations(); in GenFPToFPCall()
1662 DCHECK_EQ(invoke->GetNumberOfArguments(), 1U); in GenFPToFPCall()
1668 InputDRegisterAt(invoke, 0)); in GenFPToFPCall()
1669 codegen->InvokeRuntime(entry, invoke, invoke->GetDexPc()); in GenFPToFPCall()
1670 __ Vmov(OutputDRegister(invoke), in GenFPToFPCall()
1675 static void GenFPFPToFPCall(HInvoke* invoke, in GenFPFPToFPCall() argument
1679 LocationSummary* const locations = invoke->GetLocations(); in GenFPFPToFPCall()
1681 DCHECK_EQ(invoke->GetNumberOfArguments(), 2U); in GenFPFPToFPCall()
1687 InputDRegisterAt(invoke, 0)); in GenFPFPToFPCall()
1690 InputDRegisterAt(invoke, 1)); in GenFPFPToFPCall()
1691 codegen->InvokeRuntime(entry, invoke, invoke->GetDexPc()); in GenFPFPToFPCall()
1692 __ Vmov(OutputDRegister(invoke), in GenFPFPToFPCall()
1697 void IntrinsicLocationsBuilderARMVIXL::VisitMathCos(HInvoke* invoke) { in VisitMathCos() argument
1698 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathCos()
1701 void IntrinsicCodeGeneratorARMVIXL::VisitMathCos(HInvoke* invoke) { in VisitMathCos() argument
1702 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickCos); in VisitMathCos()
1705 void IntrinsicLocationsBuilderARMVIXL::VisitMathSin(HInvoke* invoke) { in VisitMathSin() argument
1706 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathSin()
1709 void IntrinsicCodeGeneratorARMVIXL::VisitMathSin(HInvoke* invoke) { in VisitMathSin() argument
1710 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickSin); in VisitMathSin()
1713 void IntrinsicLocationsBuilderARMVIXL::VisitMathAcos(HInvoke* invoke) { in VisitMathAcos() argument
1714 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathAcos()
1717 void IntrinsicCodeGeneratorARMVIXL::VisitMathAcos(HInvoke* invoke) { in VisitMathAcos() argument
1718 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickAcos); in VisitMathAcos()
1721 void IntrinsicLocationsBuilderARMVIXL::VisitMathAsin(HInvoke* invoke) { in VisitMathAsin() argument
1722 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathAsin()
1725 void IntrinsicCodeGeneratorARMVIXL::VisitMathAsin(HInvoke* invoke) { in VisitMathAsin() argument
1726 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickAsin); in VisitMathAsin()
1729 void IntrinsicLocationsBuilderARMVIXL::VisitMathAtan(HInvoke* invoke) { in VisitMathAtan() argument
1730 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathAtan()
1733 void IntrinsicCodeGeneratorARMVIXL::VisitMathAtan(HInvoke* invoke) { in VisitMathAtan() argument
1734 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickAtan); in VisitMathAtan()
1737 void IntrinsicLocationsBuilderARMVIXL::VisitMathCbrt(HInvoke* invoke) { in VisitMathCbrt() argument
1738 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathCbrt()
1741 void IntrinsicCodeGeneratorARMVIXL::VisitMathCbrt(HInvoke* invoke) { in VisitMathCbrt() argument
1742 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickCbrt); in VisitMathCbrt()
1745 void IntrinsicLocationsBuilderARMVIXL::VisitMathCosh(HInvoke* invoke) { in VisitMathCosh() argument
1746 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathCosh()
1749 void IntrinsicCodeGeneratorARMVIXL::VisitMathCosh(HInvoke* invoke) { in VisitMathCosh() argument
1750 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickCosh); in VisitMathCosh()
1753 void IntrinsicLocationsBuilderARMVIXL::VisitMathExp(HInvoke* invoke) { in VisitMathExp() argument
1754 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathExp()
1757 void IntrinsicCodeGeneratorARMVIXL::VisitMathExp(HInvoke* invoke) { in VisitMathExp() argument
1758 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickExp); in VisitMathExp()
1761 void IntrinsicLocationsBuilderARMVIXL::VisitMathExpm1(HInvoke* invoke) { in VisitMathExpm1() argument
1762 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathExpm1()
1765 void IntrinsicCodeGeneratorARMVIXL::VisitMathExpm1(HInvoke* invoke) { in VisitMathExpm1() argument
1766 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickExpm1); in VisitMathExpm1()
1769 void IntrinsicLocationsBuilderARMVIXL::VisitMathLog(HInvoke* invoke) { in VisitMathLog() argument
1770 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathLog()
1773 void IntrinsicCodeGeneratorARMVIXL::VisitMathLog(HInvoke* invoke) { in VisitMathLog() argument
1774 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickLog); in VisitMathLog()
1777 void IntrinsicLocationsBuilderARMVIXL::VisitMathLog10(HInvoke* invoke) { in VisitMathLog10() argument
1778 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathLog10()
1781 void IntrinsicCodeGeneratorARMVIXL::VisitMathLog10(HInvoke* invoke) { in VisitMathLog10() argument
1782 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickLog10); in VisitMathLog10()
1785 void IntrinsicLocationsBuilderARMVIXL::VisitMathSinh(HInvoke* invoke) { in VisitMathSinh() argument
1786 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathSinh()
1789 void IntrinsicCodeGeneratorARMVIXL::VisitMathSinh(HInvoke* invoke) { in VisitMathSinh() argument
1790 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickSinh); in VisitMathSinh()
1793 void IntrinsicLocationsBuilderARMVIXL::VisitMathTan(HInvoke* invoke) { in VisitMathTan() argument
1794 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathTan()
1797 void IntrinsicCodeGeneratorARMVIXL::VisitMathTan(HInvoke* invoke) { in VisitMathTan() argument
1798 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickTan); in VisitMathTan()
1801 void IntrinsicLocationsBuilderARMVIXL::VisitMathTanh(HInvoke* invoke) { in VisitMathTanh() argument
1802 CreateFPToFPCallLocations(allocator_, invoke); in VisitMathTanh()
1805 void IntrinsicCodeGeneratorARMVIXL::VisitMathTanh(HInvoke* invoke) { in VisitMathTanh() argument
1806 GenFPToFPCall(invoke, GetAssembler(), codegen_, kQuickTanh); in VisitMathTanh()
1809 void IntrinsicLocationsBuilderARMVIXL::VisitMathAtan2(HInvoke* invoke) { in VisitMathAtan2() argument
1810 CreateFPFPToFPCallLocations(allocator_, invoke); in VisitMathAtan2()
1813 void IntrinsicCodeGeneratorARMVIXL::VisitMathAtan2(HInvoke* invoke) { in VisitMathAtan2() argument
1814 GenFPFPToFPCall(invoke, GetAssembler(), codegen_, kQuickAtan2); in VisitMathAtan2()
1817 void IntrinsicLocationsBuilderARMVIXL::VisitMathPow(HInvoke* invoke) { in VisitMathPow() argument
1818 CreateFPFPToFPCallLocations(allocator_, invoke); in VisitMathPow()
1821 void IntrinsicCodeGeneratorARMVIXL::VisitMathPow(HInvoke* invoke) { in VisitMathPow() argument
1822 GenFPFPToFPCall(invoke, GetAssembler(), codegen_, kQuickPow); in VisitMathPow()
1825 void IntrinsicLocationsBuilderARMVIXL::VisitMathHypot(HInvoke* invoke) { in VisitMathHypot() argument
1826 CreateFPFPToFPCallLocations(allocator_, invoke); in VisitMathHypot()
1829 void IntrinsicCodeGeneratorARMVIXL::VisitMathHypot(HInvoke* invoke) { in VisitMathHypot() argument
1830 GenFPFPToFPCall(invoke, GetAssembler(), codegen_, kQuickHypot); in VisitMathHypot()
1833 void IntrinsicLocationsBuilderARMVIXL::VisitMathNextAfter(HInvoke* invoke) { in VisitMathNextAfter() argument
1834 CreateFPFPToFPCallLocations(allocator_, invoke); in VisitMathNextAfter()
1837 void IntrinsicCodeGeneratorARMVIXL::VisitMathNextAfter(HInvoke* invoke) { in VisitMathNextAfter() argument
1838 GenFPFPToFPCall(invoke, GetAssembler(), codegen_, kQuickNextAfter); in VisitMathNextAfter()
1841 void IntrinsicLocationsBuilderARMVIXL::VisitIntegerReverse(HInvoke* invoke) { in VisitIntegerReverse() argument
1842 CreateIntToIntLocations(allocator_, invoke); in VisitIntegerReverse()
1845 void IntrinsicCodeGeneratorARMVIXL::VisitIntegerReverse(HInvoke* invoke) { in VisitIntegerReverse() argument
1847 __ Rbit(OutputRegister(invoke), InputRegisterAt(invoke, 0)); in VisitIntegerReverse()
1850 void IntrinsicLocationsBuilderARMVIXL::VisitLongReverse(HInvoke* invoke) { in VisitLongReverse() argument
1851 CreateLongToLongLocationsWithOverlap(allocator_, invoke); in VisitLongReverse()
1854 void IntrinsicCodeGeneratorARMVIXL::VisitLongReverse(HInvoke* invoke) { in VisitLongReverse() argument
1856 LocationSummary* locations = invoke->GetLocations(); in VisitLongReverse()
1906 void IntrinsicLocationsBuilderARMVIXL::VisitIntegerReverseBytes(HInvoke* invoke) { in VisitIntegerReverseBytes() argument
1907 CreateIntToIntLocations(allocator_, invoke); in VisitIntegerReverseBytes()
1910 void IntrinsicCodeGeneratorARMVIXL::VisitIntegerReverseBytes(HInvoke* invoke) { in VisitIntegerReverseBytes() argument
1912 LocationSummary* locations = invoke->GetLocations(); in VisitIntegerReverseBytes()
1916 void IntrinsicLocationsBuilderARMVIXL::VisitLongReverseBytes(HInvoke* invoke) { in VisitLongReverseBytes() argument
1917 CreateLongToLongLocationsWithOverlap(allocator_, invoke); in VisitLongReverseBytes()
1920 void IntrinsicCodeGeneratorARMVIXL::VisitLongReverseBytes(HInvoke* invoke) { in VisitLongReverseBytes() argument
1922 LocationSummary* locations = invoke->GetLocations(); in VisitLongReverseBytes()
1926 void IntrinsicLocationsBuilderARMVIXL::VisitShortReverseBytes(HInvoke* invoke) { in VisitShortReverseBytes() argument
1927 CreateIntToIntLocations(allocator_, invoke); in VisitShortReverseBytes()
1930 void IntrinsicCodeGeneratorARMVIXL::VisitShortReverseBytes(HInvoke* invoke) { in VisitShortReverseBytes() argument
1932 LocationSummary* locations = invoke->GetLocations(); in VisitShortReverseBytes()
1964 void IntrinsicLocationsBuilderARMVIXL::VisitIntegerBitCount(HInvoke* invoke) { in VisitIntegerBitCount() argument
1965 CreateIntToIntLocations(allocator_, invoke); in VisitIntegerBitCount()
1966 invoke->GetLocations()->AddTemp(Location::RequiresFpuRegister()); in VisitIntegerBitCount()
1969 void IntrinsicCodeGeneratorARMVIXL::VisitIntegerBitCount(HInvoke* invoke) { in VisitIntegerBitCount() argument
1970 GenBitCount(invoke, DataType::Type::kInt32, GetAssembler()); in VisitIntegerBitCount()
1973 void IntrinsicLocationsBuilderARMVIXL::VisitLongBitCount(HInvoke* invoke) { in VisitLongBitCount() argument
1974 VisitIntegerBitCount(invoke); in VisitLongBitCount()
1977 void IntrinsicCodeGeneratorARMVIXL::VisitLongBitCount(HInvoke* invoke) { in VisitLongBitCount() argument
1978 GenBitCount(invoke, DataType::Type::kInt64, GetAssembler()); in VisitLongBitCount()
1981 static void GenHighestOneBit(HInvoke* invoke, in GenHighestOneBit() argument
1991 LocationSummary* locations = invoke->GetLocations(); in GenHighestOneBit()
2022 vixl32::Register out = OutputRegister(invoke); in GenHighestOneBit()
2023 vixl32::Register in = InputRegisterAt(invoke, 0); in GenHighestOneBit()
2031 void IntrinsicLocationsBuilderARMVIXL::VisitIntegerHighestOneBit(HInvoke* invoke) { in VisitIntegerHighestOneBit() argument
2032 CreateIntToIntLocations(allocator_, invoke); in VisitIntegerHighestOneBit()
2035 void IntrinsicCodeGeneratorARMVIXL::VisitIntegerHighestOneBit(HInvoke* invoke) { in VisitIntegerHighestOneBit() argument
2036 GenHighestOneBit(invoke, DataType::Type::kInt32, codegen_); in VisitIntegerHighestOneBit()
2039 void IntrinsicLocationsBuilderARMVIXL::VisitLongHighestOneBit(HInvoke* invoke) { in VisitLongHighestOneBit() argument
2040 CreateLongToLongLocationsWithOverlap(allocator_, invoke); in VisitLongHighestOneBit()
2043 void IntrinsicCodeGeneratorARMVIXL::VisitLongHighestOneBit(HInvoke* invoke) { in VisitLongHighestOneBit() argument
2044 GenHighestOneBit(invoke, DataType::Type::kInt64, codegen_); in VisitLongHighestOneBit()
2047 static void GenLowestOneBit(HInvoke* invoke, in GenLowestOneBit() argument
2057 LocationSummary* locations = invoke->GetLocations(); in GenLowestOneBit()
2088 vixl32::Register out = OutputRegister(invoke); in GenLowestOneBit()
2089 vixl32::Register in = InputRegisterAt(invoke, 0); in GenLowestOneBit()
2096 void IntrinsicLocationsBuilderARMVIXL::VisitIntegerLowestOneBit(HInvoke* invoke) { in VisitIntegerLowestOneBit() argument
2097 CreateIntToIntLocations(allocator_, invoke); in VisitIntegerLowestOneBit()
2100 void IntrinsicCodeGeneratorARMVIXL::VisitIntegerLowestOneBit(HInvoke* invoke) { in VisitIntegerLowestOneBit() argument
2101 GenLowestOneBit(invoke, DataType::Type::kInt32, codegen_); in VisitIntegerLowestOneBit()
2104 void IntrinsicLocationsBuilderARMVIXL::VisitLongLowestOneBit(HInvoke* invoke) { in VisitLongLowestOneBit() argument
2105 CreateLongToLongLocationsWithOverlap(allocator_, invoke); in VisitLongLowestOneBit()
2108 void IntrinsicCodeGeneratorARMVIXL::VisitLongLowestOneBit(HInvoke* invoke) { in VisitLongLowestOneBit() argument
2109 GenLowestOneBit(invoke, DataType::Type::kInt64, codegen_); in VisitLongLowestOneBit()
2112 void IntrinsicLocationsBuilderARMVIXL::VisitStringGetCharsNoCheck(HInvoke* invoke) { in VisitStringGetCharsNoCheck() argument
2114 new (allocator_) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in VisitStringGetCharsNoCheck()
2125 void IntrinsicCodeGeneratorARMVIXL::VisitStringGetCharsNoCheck(HInvoke* invoke) { in VisitStringGetCharsNoCheck() argument
2127 LocationSummary* locations = invoke->GetLocations(); in VisitStringGetCharsNoCheck()
2141 vixl32::Register srcObj = InputRegisterAt(invoke, 0); in VisitStringGetCharsNoCheck()
2142 vixl32::Register srcBegin = InputRegisterAt(invoke, 1); in VisitStringGetCharsNoCheck()
2143 vixl32::Register srcEnd = InputRegisterAt(invoke, 2); in VisitStringGetCharsNoCheck()
2144 vixl32::Register dstObj = InputRegisterAt(invoke, 3); in VisitStringGetCharsNoCheck()
2145 vixl32::Register dstBegin = InputRegisterAt(invoke, 4); in VisitStringGetCharsNoCheck()
2152 vixl32::Label* final_label = codegen_->GetFinalLabel(invoke, &done); in VisitStringGetCharsNoCheck()
2237 void IntrinsicLocationsBuilderARMVIXL::VisitFloatIsInfinite(HInvoke* invoke) { in VisitFloatIsInfinite() argument
2238 CreateFPToIntLocations(allocator_, invoke); in VisitFloatIsInfinite()
2241 void IntrinsicCodeGeneratorARMVIXL::VisitFloatIsInfinite(HInvoke* invoke) { in VisitFloatIsInfinite() argument
2243 const vixl32::Register out = OutputRegister(invoke); in VisitFloatIsInfinite()
2248 __ Vmov(out, InputSRegisterAt(invoke, 0)); in VisitFloatIsInfinite()
2255 void IntrinsicLocationsBuilderARMVIXL::VisitDoubleIsInfinite(HInvoke* invoke) { in VisitDoubleIsInfinite() argument
2256 CreateFPToIntLocations(allocator_, invoke); in VisitDoubleIsInfinite()
2259 void IntrinsicCodeGeneratorARMVIXL::VisitDoubleIsInfinite(HInvoke* invoke) { in VisitDoubleIsInfinite() argument
2261 const vixl32::Register out = OutputRegister(invoke); in VisitDoubleIsInfinite()
2273 __ Vmov(temp, out, InputDRegisterAt(invoke, 0)); in VisitDoubleIsInfinite()
2281 void IntrinsicLocationsBuilderARMVIXL::VisitMathCeil(HInvoke* invoke) { in VisitMathCeil() argument
2283 CreateFPToFPLocations(allocator_, invoke); in VisitMathCeil()
2287 void IntrinsicCodeGeneratorARMVIXL::VisitMathCeil(HInvoke* invoke) { in VisitMathCeil() argument
2290 __ Vrintp(F64, OutputDRegister(invoke), InputDRegisterAt(invoke, 0)); in VisitMathCeil()
2293 void IntrinsicLocationsBuilderARMVIXL::VisitMathFloor(HInvoke* invoke) { in VisitMathFloor() argument
2295 CreateFPToFPLocations(allocator_, invoke); in VisitMathFloor()
2299 void IntrinsicCodeGeneratorARMVIXL::VisitMathFloor(HInvoke* invoke) { in VisitMathFloor() argument
2302 __ Vrintm(F64, OutputDRegister(invoke), InputDRegisterAt(invoke, 0)); in VisitMathFloor()
2306 void IntrinsicLocationsBuilderARMVIXL::Visit##name##ValueOf(HInvoke* invoke) { \
2308 IntrinsicVisitor::ComputeValueOfLocations(invoke, \
2315 void IntrinsicCodeGeneratorARMVIXL::Visit##name##ValueOf(HInvoke* invoke) { \
2317 IntrinsicVisitor::ComputeValueOfInfo(invoke, \
2323 HandleValueOf(invoke, info, type); \
2329 void IntrinsicCodeGeneratorARMVIXL::HandleValueOf(HInvoke* invoke, in BOXED_TYPES()
2332 LocationSummary* locations = invoke->GetLocations(); in BOXED_TYPES()
2340 codegen_->LoadIntrinsicDeclaringClass(out, invoke); in BOXED_TYPES()
2341 codegen_->InvokeRuntime(kQuickAllocObjectInitialized, invoke, invoke->GetDexPc()); in BOXED_TYPES()
2344 if (invoke->InputAt(0)->IsIntConstant()) { in BOXED_TYPES()
2345 int32_t value = invoke->InputAt(0)->AsIntConstant()->GetValue(); in BOXED_TYPES()
2384 void IntrinsicLocationsBuilderARMVIXL::VisitReferenceGetReferent(HInvoke* invoke) { in VisitReferenceGetReferent() argument
2385 IntrinsicVisitor::CreateReferenceGetReferentLocations(invoke, codegen_); in VisitReferenceGetReferent()
2388 void IntrinsicCodeGeneratorARMVIXL::VisitReferenceGetReferent(HInvoke* invoke) { in VisitReferenceGetReferent() argument
2390 LocationSummary* locations = invoke->GetLocations(); in VisitReferenceGetReferent()
2395 SlowPathCodeARMVIXL* slow_path = new (GetAllocator()) IntrinsicSlowPathARMVIXL(invoke); in VisitReferenceGetReferent()
2412 codegen_->LoadIntrinsicDeclaringClass(temp, invoke); in VisitReferenceGetReferent()
2427 codegen_->GenerateFieldLoadWithBakerReadBarrier(invoke, in VisitReferenceGetReferent()
2438 codegen_->MaybeRecordImplicitNullCheck(invoke); in VisitReferenceGetReferent()
2441 codegen_->MaybeGenerateReadBarrierSlow(invoke, out, out, obj, referent_offset); in VisitReferenceGetReferent()
2446 void IntrinsicLocationsBuilderARMVIXL::VisitReferenceRefersTo(HInvoke* invoke) { in VisitReferenceRefersTo() argument
2447 IntrinsicVisitor::CreateReferenceRefersToLocations(invoke, codegen_); in VisitReferenceRefersTo()
2450 void IntrinsicCodeGeneratorARMVIXL::VisitReferenceRefersTo(HInvoke* invoke) { in VisitReferenceRefersTo() argument
2451 LocationSummary* locations = invoke->GetLocations(); in VisitReferenceRefersTo()
2469 codegen_->MaybeRecordImplicitNullCheck(invoke); in VisitReferenceRefersTo()
2509 void IntrinsicLocationsBuilderARMVIXL::VisitThreadInterrupted(HInvoke* invoke) { in VisitThreadInterrupted() argument
2511 new (allocator_) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in VisitThreadInterrupted()
2515 void IntrinsicCodeGeneratorARMVIXL::VisitThreadInterrupted(HInvoke* invoke) { in VisitThreadInterrupted() argument
2517 vixl32::Register out = RegisterFrom(invoke->GetLocations()->Out()); in VisitThreadInterrupted()
2523 vixl32::Label* const final_label = codegen_->GetFinalLabel(invoke, &done); in VisitThreadInterrupted()
2534 void IntrinsicLocationsBuilderARMVIXL::VisitReachabilityFence(HInvoke* invoke) { in VisitReachabilityFence() argument
2536 new (allocator_) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in VisitReachabilityFence()
2540 void IntrinsicCodeGeneratorARMVIXL::VisitReachabilityFence([[maybe_unused]] HInvoke* invoke) {} in VisitReachabilityFence() argument
2542 void IntrinsicLocationsBuilderARMVIXL::VisitIntegerDivideUnsigned(HInvoke* invoke) { in VisitIntegerDivideUnsigned() argument
2543 CreateIntIntToIntSlowPathCallLocations(allocator_, invoke); in VisitIntegerDivideUnsigned()
2546 void IntrinsicCodeGeneratorARMVIXL::VisitIntegerDivideUnsigned(HInvoke* invoke) { in VisitIntegerDivideUnsigned() argument
2548 LocationSummary* locations = invoke->GetLocations(); in VisitIntegerDivideUnsigned()
2555 new (codegen_->GetScopedAllocator()) IntrinsicSlowPathARMVIXL(invoke); in VisitIntegerDivideUnsigned()
2568 static void GenerateIntrinsicGet(HInvoke* invoke, in GenerateIntrinsicGet() argument
2634 invoke, out, base, MemOperand(temp), /* needs_null_check= */ false); in GenerateIntrinsicGet()
2684 codegen->MaybeGenerateReadBarrierSlow(invoke, out, out, base_loc, /* offset=*/ 0u, index_loc); in GenerateIntrinsicGet()
2688 static void CreateUnsafeGetLocations(HInvoke* invoke, in CreateUnsafeGetLocations() argument
2692 bool can_call = codegen->EmitReadBarrier() && IsUnsafeGetReference(invoke); in CreateUnsafeGetLocations()
2693 ArenaAllocator* allocator = invoke->GetBlock()->GetGraph()->GetAllocator(); in CreateUnsafeGetLocations()
2695 new (allocator) LocationSummary(invoke, in CreateUnsafeGetLocations()
2717 static void CreateUnsafeGetAbsoluteLocations(HInvoke* invoke) { in CreateUnsafeGetAbsoluteLocations() argument
2718 ArenaAllocator* allocator = invoke->GetBlock()->GetGraph()->GetAllocator(); in CreateUnsafeGetAbsoluteLocations()
2720 new (allocator) LocationSummary(invoke, in CreateUnsafeGetAbsoluteLocations()
2728 static void GenUnsafeGet(HInvoke* invoke, in GenUnsafeGet() argument
2733 LocationSummary* locations = invoke->GetLocations(); in GenUnsafeGet()
2734 vixl32::Register base = InputRegisterAt(invoke, 1); // Object pointer. in GenUnsafeGet()
2742 GenerateIntrinsicGet(invoke, in GenUnsafeGet()
2755 static void GenUnsafeGetAbsolute(HInvoke* invoke, in GenUnsafeGetAbsolute() argument
2760 LocationSummary* locations = invoke->GetLocations(); in GenUnsafeGetAbsolute()
2767 GenerateIntrinsicGet(invoke, in GenUnsafeGetAbsolute()
2780 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeGet(HInvoke* invoke) { in VisitUnsafeGet() argument
2781 VisitJdkUnsafeGet(invoke); in VisitUnsafeGet()
2784 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeGetAbsolute(HInvoke* invoke) { in VisitUnsafeGetAbsolute() argument
2785 VisitJdkUnsafeGetAbsolute(invoke); in VisitUnsafeGetAbsolute()
2788 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeGet(HInvoke* invoke) { in VisitUnsafeGet() argument
2789 VisitJdkUnsafeGet(invoke); in VisitUnsafeGet()
2792 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeGetAbsolute(HInvoke* invoke) { in VisitUnsafeGetAbsolute() argument
2793 VisitJdkUnsafeGetAbsolute(invoke); in VisitUnsafeGetAbsolute()
2796 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeGetVolatile(HInvoke* invoke) { in VisitUnsafeGetVolatile() argument
2797 VisitJdkUnsafeGetVolatile(invoke); in VisitUnsafeGetVolatile()
2800 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeGetVolatile(HInvoke* invoke) { in VisitUnsafeGetVolatile() argument
2801 VisitJdkUnsafeGetVolatile(invoke); in VisitUnsafeGetVolatile()
2804 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeGetLong(HInvoke* invoke) { in VisitUnsafeGetLong() argument
2805 VisitJdkUnsafeGetLong(invoke); in VisitUnsafeGetLong()
2808 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeGetLong(HInvoke* invoke) { in VisitUnsafeGetLong() argument
2809 VisitJdkUnsafeGetLong(invoke); in VisitUnsafeGetLong()
2812 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeGetLongVolatile(HInvoke* invoke) { in VisitUnsafeGetLongVolatile() argument
2813 VisitJdkUnsafeGetLongVolatile(invoke); in VisitUnsafeGetLongVolatile()
2816 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeGetLongVolatile(HInvoke* invoke) { in VisitUnsafeGetLongVolatile() argument
2817 VisitJdkUnsafeGetLongVolatile(invoke); in VisitUnsafeGetLongVolatile()
2820 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeGetObject(HInvoke* invoke) { in VisitUnsafeGetObject() argument
2821 VisitJdkUnsafeGetReference(invoke); in VisitUnsafeGetObject()
2824 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeGetObject(HInvoke* invoke) { in VisitUnsafeGetObject() argument
2825 VisitJdkUnsafeGetReference(invoke); in VisitUnsafeGetObject()
2828 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeGetObjectVolatile(HInvoke* invoke) { in VisitUnsafeGetObjectVolatile() argument
2829 VisitJdkUnsafeGetReferenceVolatile(invoke); in VisitUnsafeGetObjectVolatile()
2832 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeGetObjectVolatile(HInvoke* invoke) { in VisitUnsafeGetObjectVolatile() argument
2833 VisitJdkUnsafeGetReferenceVolatile(invoke); in VisitUnsafeGetObjectVolatile()
2836 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeGetByte(HInvoke* invoke) { in VisitUnsafeGetByte() argument
2837 VisitJdkUnsafeGetByte(invoke); in VisitUnsafeGetByte()
2840 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeGetByte(HInvoke* invoke) { in VisitUnsafeGetByte() argument
2841 VisitJdkUnsafeGetByte(invoke); in VisitUnsafeGetByte()
2844 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafeGet(HInvoke* invoke) { in VisitJdkUnsafeGet() argument
2845 CreateUnsafeGetLocations(invoke, codegen_, DataType::Type::kInt32, /*atomic=*/ false); in VisitJdkUnsafeGet()
2848 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafeGetAbsolute(HInvoke* invoke) { in VisitJdkUnsafeGetAbsolute() argument
2849 CreateUnsafeGetAbsoluteLocations(invoke); in VisitJdkUnsafeGetAbsolute()
2852 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafeGet(HInvoke* invoke) { in VisitJdkUnsafeGet() argument
2854 invoke, codegen_, DataType::Type::kInt32, std::memory_order_relaxed, /*atomic=*/ false); in VisitJdkUnsafeGet()
2857 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafeGetAbsolute(HInvoke* invoke) { in VisitJdkUnsafeGetAbsolute() argument
2859 invoke, codegen_, DataType::Type::kInt32, std::memory_order_relaxed, /*atomic=*/ false); in VisitJdkUnsafeGetAbsolute()
2862 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafeGetVolatile(HInvoke* invoke) { in VisitJdkUnsafeGetVolatile() argument
2863 CreateUnsafeGetLocations(invoke, codegen_, DataType::Type::kInt32, /*atomic=*/ true); in VisitJdkUnsafeGetVolatile()
2866 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafeGetVolatile(HInvoke* invoke) { in VisitJdkUnsafeGetVolatile() argument
2868 invoke, codegen_, DataType::Type::kInt32, std::memory_order_seq_cst, /*atomic=*/ true); in VisitJdkUnsafeGetVolatile()
2871 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafeGetAcquire(HInvoke* invoke) { in VisitJdkUnsafeGetAcquire() argument
2872 CreateUnsafeGetLocations(invoke, codegen_, DataType::Type::kInt32, /*atomic=*/ true); in VisitJdkUnsafeGetAcquire()
2875 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafeGetAcquire(HInvoke* invoke) { in VisitJdkUnsafeGetAcquire() argument
2877 invoke, codegen_, DataType::Type::kInt32, std::memory_order_acquire, /*atomic=*/ true); in VisitJdkUnsafeGetAcquire()
2880 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafeGetLong(HInvoke* invoke) { in VisitJdkUnsafeGetLong() argument
2881 CreateUnsafeGetLocations(invoke, codegen_, DataType::Type::kInt64, /*atomic=*/ false); in VisitJdkUnsafeGetLong()
2884 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafeGetLong(HInvoke* invoke) { in VisitJdkUnsafeGetLong() argument
2886 invoke, codegen_, DataType::Type::kInt64, std::memory_order_relaxed, /*atomic=*/ false); in VisitJdkUnsafeGetLong()
2889 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafeGetLongVolatile(HInvoke* invoke) { in VisitJdkUnsafeGetLongVolatile() argument
2890 CreateUnsafeGetLocations(invoke, codegen_, DataType::Type::kInt64, /*atomic=*/ true); in VisitJdkUnsafeGetLongVolatile()
2893 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafeGetLongVolatile(HInvoke* invoke) { in VisitJdkUnsafeGetLongVolatile() argument
2895 invoke, codegen_, DataType::Type::kInt64, std::memory_order_seq_cst, /*atomic=*/ true); in VisitJdkUnsafeGetLongVolatile()
2898 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafeGetLongAcquire(HInvoke* invoke) { in VisitJdkUnsafeGetLongAcquire() argument
2899 CreateUnsafeGetLocations(invoke, codegen_, DataType::Type::kInt64, /*atomic=*/ true); in VisitJdkUnsafeGetLongAcquire()
2902 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafeGetLongAcquire(HInvoke* invoke) { in VisitJdkUnsafeGetLongAcquire() argument
2904 invoke, codegen_, DataType::Type::kInt64, std::memory_order_acquire, /*atomic=*/ true); in VisitJdkUnsafeGetLongAcquire()
2907 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafeGetReference(HInvoke* invoke) { in VisitJdkUnsafeGetReference() argument
2908 CreateUnsafeGetLocations(invoke, codegen_, DataType::Type::kReference, /*atomic=*/ false); in VisitJdkUnsafeGetReference()
2911 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafeGetReference(HInvoke* invoke) { in VisitJdkUnsafeGetReference() argument
2913 invoke, codegen_, DataType::Type::kReference, std::memory_order_relaxed, /*atomic=*/ false); in VisitJdkUnsafeGetReference()
2916 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafeGetReferenceVolatile(HInvoke* invoke) { in VisitJdkUnsafeGetReferenceVolatile() argument
2917 CreateUnsafeGetLocations(invoke, codegen_, DataType::Type::kReference, /*atomic=*/ true); in VisitJdkUnsafeGetReferenceVolatile()
2920 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafeGetReferenceVolatile(HInvoke* invoke) { in VisitJdkUnsafeGetReferenceVolatile() argument
2922 invoke, codegen_, DataType::Type::kReference, std::memory_order_seq_cst, /*atomic=*/ true); in VisitJdkUnsafeGetReferenceVolatile()
2925 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafeGetReferenceAcquire(HInvoke* invoke) { in VisitJdkUnsafeGetReferenceAcquire() argument
2926 CreateUnsafeGetLocations(invoke, codegen_, DataType::Type::kReference, /*atomic=*/ true); in VisitJdkUnsafeGetReferenceAcquire()
2929 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafeGetReferenceAcquire(HInvoke* invoke) { in VisitJdkUnsafeGetReferenceAcquire() argument
2931 invoke, codegen_, DataType::Type::kReference, std::memory_order_acquire, /*atomic=*/ true); in VisitJdkUnsafeGetReferenceAcquire()
2934 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafeGetByte(HInvoke* invoke) { in VisitJdkUnsafeGetByte() argument
2935 CreateUnsafeGetLocations(invoke, codegen_, DataType::Type::kInt8, /*atomic=*/ false); in VisitJdkUnsafeGetByte()
2938 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafeGetByte(HInvoke* invoke) { in VisitJdkUnsafeGetByte() argument
2940 invoke, codegen_, DataType::Type::kInt8, std::memory_order_relaxed, /*atomic=*/ false); in VisitJdkUnsafeGetByte()
3100 static void CreateUnsafePutLocations(HInvoke* invoke, in CreateUnsafePutLocations() argument
3104 ArenaAllocator* allocator = invoke->GetBlock()->GetGraph()->GetAllocator(); in CreateUnsafePutLocations()
3106 new (allocator) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in CreateUnsafePutLocations()
3114 static void CreateUnsafePutAbsoluteLocations(HInvoke* invoke, in CreateUnsafePutAbsoluteLocations() argument
3118 ArenaAllocator* allocator = invoke->GetBlock()->GetGraph()->GetAllocator(); in CreateUnsafePutAbsoluteLocations()
3120 new (allocator) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); in CreateUnsafePutAbsoluteLocations()
3127 static void GenUnsafePut(HInvoke* invoke, in GenUnsafePut() argument
3134 LocationSummary* locations = invoke->GetLocations(); in GenUnsafePut()
3165 static void GenUnsafePutAbsolute(HInvoke* invoke, in GenUnsafePutAbsolute() argument
3170 LocationSummary* locations = invoke->GetLocations(); in GenUnsafePutAbsolute()
3191 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafePut(HInvoke* invoke) { in VisitUnsafePut() argument
3192 VisitJdkUnsafePut(invoke); in VisitUnsafePut()
3195 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafePutAbsolute(HInvoke* invoke) { in VisitUnsafePutAbsolute() argument
3196 VisitJdkUnsafePutAbsolute(invoke); in VisitUnsafePutAbsolute()
3199 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafePut(HInvoke* invoke) { in VisitUnsafePut() argument
3200 VisitJdkUnsafePut(invoke); in VisitUnsafePut()
3203 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafePutAbsolute(HInvoke* invoke) { in VisitUnsafePutAbsolute() argument
3204 VisitJdkUnsafePutAbsolute(invoke); in VisitUnsafePutAbsolute()
3207 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafePutOrdered(HInvoke* invoke) { in VisitUnsafePutOrdered() argument
3208 VisitJdkUnsafePutOrdered(invoke); in VisitUnsafePutOrdered()
3211 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafePutOrdered(HInvoke* invoke) { in VisitUnsafePutOrdered() argument
3212 VisitJdkUnsafePutOrdered(invoke); in VisitUnsafePutOrdered()
3215 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafePutVolatile(HInvoke* invoke) { in VisitUnsafePutVolatile() argument
3216 VisitJdkUnsafePutVolatile(invoke); in VisitUnsafePutVolatile()
3219 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafePutVolatile(HInvoke* invoke) { in VisitUnsafePutVolatile() argument
3220 VisitJdkUnsafePutVolatile(invoke); in VisitUnsafePutVolatile()
3222 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafePutObject(HInvoke* invoke) { in VisitUnsafePutObject() argument
3223 VisitJdkUnsafePutReference(invoke); in VisitUnsafePutObject()
3226 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafePutObject(HInvoke* invoke) { in VisitUnsafePutObject() argument
3227 VisitJdkUnsafePutReference(invoke); in VisitUnsafePutObject()
3230 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafePutObjectOrdered(HInvoke* invoke) { in VisitUnsafePutObjectOrdered() argument
3231 VisitJdkUnsafePutObjectOrdered(invoke); in VisitUnsafePutObjectOrdered()
3234 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafePutObjectOrdered(HInvoke* invoke) { in VisitUnsafePutObjectOrdered() argument
3235 VisitJdkUnsafePutObjectOrdered(invoke); in VisitUnsafePutObjectOrdered()
3238 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafePutObjectVolatile(HInvoke* invoke) { in VisitUnsafePutObjectVolatile() argument
3239 VisitJdkUnsafePutReferenceVolatile(invoke); in VisitUnsafePutObjectVolatile()
3242 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafePutObjectVolatile(HInvoke* invoke) { in VisitUnsafePutObjectVolatile() argument
3243 VisitJdkUnsafePutReferenceVolatile(invoke); in VisitUnsafePutObjectVolatile()
3246 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafePutLong(HInvoke* invoke) { in VisitUnsafePutLong() argument
3247 VisitJdkUnsafePutLong(invoke); in VisitUnsafePutLong()
3250 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafePutLong(HInvoke* invoke) { in VisitUnsafePutLong() argument
3251 VisitJdkUnsafePutLong(invoke); in VisitUnsafePutLong()
3254 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafePutLongOrdered(HInvoke* invoke) { in VisitUnsafePutLongOrdered() argument
3255 VisitJdkUnsafePutLongOrdered(invoke); in VisitUnsafePutLongOrdered()
3258 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafePutLongOrdered(HInvoke* invoke) { in VisitUnsafePutLongOrdered() argument
3259 VisitJdkUnsafePutLongOrdered(invoke); in VisitUnsafePutLongOrdered()
3262 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafePutLongVolatile(HInvoke* invoke) { in VisitUnsafePutLongVolatile() argument
3263 VisitJdkUnsafePutLongVolatile(invoke); in VisitUnsafePutLongVolatile()
3266 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafePutLongVolatile(HInvoke* invoke) { in VisitUnsafePutLongVolatile() argument
3267 VisitJdkUnsafePutLongVolatile(invoke); in VisitUnsafePutLongVolatile()
3270 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafePutByte(HInvoke* invoke) { in VisitUnsafePutByte() argument
3271 VisitJdkUnsafePutByte(invoke); in VisitUnsafePutByte()
3274 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafePutByte(HInvoke* invoke) { in VisitUnsafePutByte() argument
3275 VisitJdkUnsafePutByte(invoke); in VisitUnsafePutByte()
3278 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafePut(HInvoke* invoke) { in VisitJdkUnsafePut() argument
3279 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kInt32, /*atomic=*/ false); in VisitJdkUnsafePut()
3282 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafePutAbsolute(HInvoke* invoke) { in VisitJdkUnsafePutAbsolute() argument
3283 CreateUnsafePutAbsoluteLocations(invoke, codegen_, DataType::Type::kInt32, /*atomic=*/ false); in VisitJdkUnsafePutAbsolute()
3286 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafePut(HInvoke* invoke) { in VisitJdkUnsafePut() argument
3287 GenUnsafePut(invoke, in VisitJdkUnsafePut()
3294 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafePutAbsolute(HInvoke* invoke) { in VisitJdkUnsafePutAbsolute() argument
3295 GenUnsafePutAbsolute(invoke, in VisitJdkUnsafePutAbsolute()
3302 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafePutByte(HInvoke* invoke) { in VisitJdkUnsafePutByte() argument
3303 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kInt8, /*atomic=*/ false); in VisitJdkUnsafePutByte()
3306 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafePutByte(HInvoke* invoke) { in VisitJdkUnsafePutByte() argument
3307 GenUnsafePut(invoke, in VisitJdkUnsafePutByte()
3314 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafePutOrdered(HInvoke* invoke) { in VisitJdkUnsafePutOrdered() argument
3315 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kInt32, /*atomic=*/ true); in VisitJdkUnsafePutOrdered()
3318 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafePutOrdered(HInvoke* invoke) { in VisitJdkUnsafePutOrdered() argument
3319 GenUnsafePut(invoke, in VisitJdkUnsafePutOrdered()
3326 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafePutVolatile(HInvoke* invoke) { in VisitJdkUnsafePutVolatile() argument
3327 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kInt32, /*atomic=*/ true); in VisitJdkUnsafePutVolatile()
3330 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafePutVolatile(HInvoke* invoke) { in VisitJdkUnsafePutVolatile() argument
3331 GenUnsafePut(invoke, in VisitJdkUnsafePutVolatile()
3338 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafePutRelease(HInvoke* invoke) { in VisitJdkUnsafePutRelease() argument
3339 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kInt32, /*atomic=*/ true); in VisitJdkUnsafePutRelease()
3342 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafePutRelease(HInvoke* invoke) { in VisitJdkUnsafePutRelease() argument
3343 GenUnsafePut(invoke, in VisitJdkUnsafePutRelease()
3350 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafePutReference(HInvoke* invoke) { in VisitJdkUnsafePutReference() argument
3351 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kReference, /*atomic=*/ false); in VisitJdkUnsafePutReference()
3354 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafePutReference(HInvoke* invoke) { in VisitJdkUnsafePutReference() argument
3355 GenUnsafePut(invoke, in VisitJdkUnsafePutReference()
3362 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafePutObjectOrdered(HInvoke* invoke) { in VisitJdkUnsafePutObjectOrdered() argument
3363 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kReference, /*atomic=*/ true); in VisitJdkUnsafePutObjectOrdered()
3366 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafePutObjectOrdered(HInvoke* invoke) { in VisitJdkUnsafePutObjectOrdered() argument
3367 GenUnsafePut(invoke, in VisitJdkUnsafePutObjectOrdered()
3374 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafePutReferenceVolatile(HInvoke* invoke) { in VisitJdkUnsafePutReferenceVolatile() argument
3375 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kReference, /*atomic=*/ true); in VisitJdkUnsafePutReferenceVolatile()
3378 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafePutReferenceVolatile(HInvoke* invoke) { in VisitJdkUnsafePutReferenceVolatile() argument
3379 GenUnsafePut(invoke, in VisitJdkUnsafePutReferenceVolatile()
3386 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafePutReferenceRelease(HInvoke* invoke) { in VisitJdkUnsafePutReferenceRelease() argument
3387 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kReference, /*atomic=*/ true); in VisitJdkUnsafePutReferenceRelease()
3390 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafePutReferenceRelease(HInvoke* invoke) { in VisitJdkUnsafePutReferenceRelease() argument
3391 GenUnsafePut(invoke, in VisitJdkUnsafePutReferenceRelease()
3398 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafePutLong(HInvoke* invoke) { in VisitJdkUnsafePutLong() argument
3399 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kInt64, /*atomic=*/ false); in VisitJdkUnsafePutLong()
3402 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafePutLong(HInvoke* invoke) { in VisitJdkUnsafePutLong() argument
3403 GenUnsafePut(invoke, in VisitJdkUnsafePutLong()
3410 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafePutLongOrdered(HInvoke* invoke) { in VisitJdkUnsafePutLongOrdered() argument
3411 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kInt64, /*atomic=*/ true); in VisitJdkUnsafePutLongOrdered()
3414 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafePutLongOrdered(HInvoke* invoke) { in VisitJdkUnsafePutLongOrdered() argument
3415 GenUnsafePut(invoke, in VisitJdkUnsafePutLongOrdered()
3422 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafePutLongVolatile(HInvoke* invoke) { in VisitJdkUnsafePutLongVolatile() argument
3423 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kInt64, /*atomic=*/ true); in VisitJdkUnsafePutLongVolatile()
3426 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafePutLongVolatile(HInvoke* invoke) { in VisitJdkUnsafePutLongVolatile() argument
3427 GenUnsafePut(invoke, in VisitJdkUnsafePutLongVolatile()
3434 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafePutLongRelease(HInvoke* invoke) { in VisitJdkUnsafePutLongRelease() argument
3435 CreateUnsafePutLocations(invoke, codegen_, DataType::Type::kInt64, /*atomic=*/ true); in VisitJdkUnsafePutLongRelease()
3438 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafePutLongRelease(HInvoke* invoke) { in VisitJdkUnsafePutLongRelease() argument
3439 GenUnsafePut(invoke, in VisitJdkUnsafePutLongRelease()
3619 explicit ReadBarrierCasSlowPathARMVIXL(HInvoke* invoke, in ReadBarrierCasSlowPathARMVIXL() argument
3630 : SlowPathCodeARMVIXL(invoke), in ReadBarrierCasSlowPathARMVIXL()
3645 invoke, in ReadBarrierCasSlowPathARMVIXL()
3653 invoke, in ReadBarrierCasSlowPathARMVIXL()
3753 static void CreateUnsafeCASLocations(HInvoke* invoke, CodeGeneratorARMVIXL* codegen) { in CreateUnsafeCASLocations() argument
3754 const bool can_call = codegen->EmitReadBarrier() && IsUnsafeCASReference(invoke); in CreateUnsafeCASLocations()
3755 ArenaAllocator* allocator = invoke->GetBlock()->GetGraph()->GetAllocator(); in CreateUnsafeCASLocations()
3757 new (allocator) LocationSummary(invoke, in CreateUnsafeCASLocations()
3778 static void GenUnsafeCas(HInvoke* invoke, DataType::Type type, CodeGeneratorARMVIXL* codegen) { in GenUnsafeCas() argument
3782 LocationSummary* locations = invoke->GetLocations(); in GenUnsafeCas()
3784 vixl32::Register out = OutputRegister(invoke); // Boolean result. in GenUnsafeCas()
3785 vixl32::Register base = InputRegisterAt(invoke, 1); // Object pointer. in GenUnsafeCas()
3787 vixl32::Register expected = InputRegisterAt(invoke, 3); // Expected. in GenUnsafeCas()
3788 vixl32::Register new_value = InputRegisterAt(invoke, 4); // New value. in GenUnsafeCas()
3811 invoke, in GenUnsafeCas()
3849 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeCASInt(HInvoke* invoke) { in VisitUnsafeCASInt() argument
3850 VisitJdkUnsafeCASInt(invoke); in VisitUnsafeCASInt()
3852 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeCASObject(HInvoke* invoke) { in VisitUnsafeCASObject() argument
3853 VisitJdkUnsafeCASObject(invoke); in VisitUnsafeCASObject()
3856 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafeCASInt(HInvoke* invoke) { in VisitJdkUnsafeCASInt() argument
3858 VisitJdkUnsafeCompareAndSetInt(invoke); in VisitJdkUnsafeCASInt()
3860 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafeCASObject(HInvoke* invoke) { in VisitJdkUnsafeCASObject() argument
3862 VisitJdkUnsafeCompareAndSetReference(invoke); in VisitJdkUnsafeCASObject()
3865 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafeCompareAndSetInt(HInvoke* invoke) { in VisitJdkUnsafeCompareAndSetInt() argument
3866 CreateUnsafeCASLocations(invoke, codegen_); in VisitJdkUnsafeCompareAndSetInt()
3868 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafeCompareAndSetReference(HInvoke* invoke) { in VisitJdkUnsafeCompareAndSetReference() argument
3874 CreateUnsafeCASLocations(invoke, codegen_); in VisitJdkUnsafeCompareAndSetReference()
3877 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeCASInt(HInvoke* invoke) { in VisitUnsafeCASInt() argument
3878 VisitJdkUnsafeCASInt(invoke); in VisitUnsafeCASInt()
3880 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeCASObject(HInvoke* invoke) { in VisitUnsafeCASObject() argument
3881 VisitJdkUnsafeCASObject(invoke); in VisitUnsafeCASObject()
3884 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafeCASInt(HInvoke* invoke) { in VisitJdkUnsafeCASInt() argument
3886 VisitJdkUnsafeCompareAndSetInt(invoke); in VisitJdkUnsafeCASInt()
3888 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafeCASObject(HInvoke* invoke) { in VisitJdkUnsafeCASObject() argument
3890 VisitJdkUnsafeCompareAndSetReference(invoke); in VisitJdkUnsafeCASObject()
3893 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafeCompareAndSetInt(HInvoke* invoke) { in VisitJdkUnsafeCompareAndSetInt() argument
3894 GenUnsafeCas(invoke, DataType::Type::kInt32, codegen_); in VisitJdkUnsafeCompareAndSetInt()
3896 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafeCompareAndSetReference(HInvoke* invoke) { in VisitJdkUnsafeCompareAndSetReference() argument
3900 GenUnsafeCas(invoke, DataType::Type::kReference, codegen_); in VisitJdkUnsafeCompareAndSetReference()
4044 static void CreateUnsafeGetAndUpdateLocations(HInvoke* invoke, in CreateUnsafeGetAndUpdateLocations() argument
4048 const bool can_call = codegen->EmitReadBarrier() && IsUnsafeGetAndSetReference(invoke); in CreateUnsafeGetAndUpdateLocations()
4049 ArenaAllocator* allocator = invoke->GetBlock()->GetGraph()->GetAllocator(); in CreateUnsafeGetAndUpdateLocations()
4051 new (allocator) LocationSummary(invoke, in CreateUnsafeGetAndUpdateLocations()
4066 const bool is_void = invoke->GetType() == DataType::Type::kVoid; in CreateUnsafeGetAndUpdateLocations()
4089 static void GenUnsafeGetAndUpdate(HInvoke* invoke, in GenUnsafeGetAndUpdate() argument
4098 LocationSummary* locations = invoke->GetLocations(); in GenUnsafeGetAndUpdate()
4100 const bool is_void = invoke->GetType() == DataType::Type::kVoid; in GenUnsafeGetAndUpdate()
4105 vixl32::Register base = InputRegisterAt(invoke, 1); // Object pointer. in GenUnsafeGetAndUpdate()
4149 codegen->GenerateReadBarrierSlow(invoke, in GenUnsafeGetAndUpdate()
4159 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeGetAndAddInt(HInvoke* invoke) { in VisitUnsafeGetAndAddInt() argument
4160 VisitJdkUnsafeGetAndAddInt(invoke); in VisitUnsafeGetAndAddInt()
4162 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeGetAndAddLong(HInvoke* invoke) { in VisitUnsafeGetAndAddLong() argument
4163 VisitJdkUnsafeGetAndAddLong(invoke); in VisitUnsafeGetAndAddLong()
4165 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeGetAndSetInt(HInvoke* invoke) { in VisitUnsafeGetAndSetInt() argument
4166 VisitJdkUnsafeGetAndSetInt(invoke); in VisitUnsafeGetAndSetInt()
4168 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeGetAndSetLong(HInvoke* invoke) { in VisitUnsafeGetAndSetLong() argument
4169 VisitJdkUnsafeGetAndSetLong(invoke); in VisitUnsafeGetAndSetLong()
4171 void IntrinsicLocationsBuilderARMVIXL::VisitUnsafeGetAndSetObject(HInvoke* invoke) { in VisitUnsafeGetAndSetObject() argument
4172 VisitJdkUnsafeGetAndSetReference(invoke); in VisitUnsafeGetAndSetObject()
4175 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafeGetAndAddInt(HInvoke* invoke) { in VisitJdkUnsafeGetAndAddInt() argument
4176 CreateUnsafeGetAndUpdateLocations(invoke, codegen_, DataType::Type::kInt32, GetAndUpdateOp::kAdd); in VisitJdkUnsafeGetAndAddInt()
4178 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafeGetAndAddLong(HInvoke* invoke) { in VisitJdkUnsafeGetAndAddLong() argument
4179 CreateUnsafeGetAndUpdateLocations(invoke, codegen_, DataType::Type::kInt64, GetAndUpdateOp::kAdd); in VisitJdkUnsafeGetAndAddLong()
4181 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafeGetAndSetInt(HInvoke* invoke) { in VisitJdkUnsafeGetAndSetInt() argument
4182 CreateUnsafeGetAndUpdateLocations(invoke, codegen_, DataType::Type::kInt32, GetAndUpdateOp::kSet); in VisitJdkUnsafeGetAndSetInt()
4184 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafeGetAndSetLong(HInvoke* invoke) { in VisitJdkUnsafeGetAndSetLong() argument
4185 CreateUnsafeGetAndUpdateLocations(invoke, codegen_, DataType::Type::kInt64, GetAndUpdateOp::kSet); in VisitJdkUnsafeGetAndSetLong()
4187 void IntrinsicLocationsBuilderARMVIXL::VisitJdkUnsafeGetAndSetReference(HInvoke* invoke) { in VisitJdkUnsafeGetAndSetReference() argument
4189 invoke, codegen_, DataType::Type::kReference, GetAndUpdateOp::kSet); in VisitJdkUnsafeGetAndSetReference()
4192 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeGetAndAddInt(HInvoke* invoke) { in VisitUnsafeGetAndAddInt() argument
4193 VisitJdkUnsafeGetAndAddInt(invoke); in VisitUnsafeGetAndAddInt()
4195 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeGetAndAddLong(HInvoke* invoke) { in VisitUnsafeGetAndAddLong() argument
4196 VisitJdkUnsafeGetAndAddLong(invoke); in VisitUnsafeGetAndAddLong()
4198 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeGetAndSetInt(HInvoke* invoke) { in VisitUnsafeGetAndSetInt() argument
4199 VisitJdkUnsafeGetAndSetInt(invoke); in VisitUnsafeGetAndSetInt()
4201 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeGetAndSetLong(HInvoke* invoke) { in VisitUnsafeGetAndSetLong() argument
4202 VisitJdkUnsafeGetAndSetLong(invoke); in VisitUnsafeGetAndSetLong()
4204 void IntrinsicCodeGeneratorARMVIXL::VisitUnsafeGetAndSetObject(HInvoke* invoke) { in VisitUnsafeGetAndSetObject() argument
4205 VisitJdkUnsafeGetAndSetReference(invoke); in VisitUnsafeGetAndSetObject()
4208 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafeGetAndAddInt(HInvoke* invoke) { in VisitJdkUnsafeGetAndAddInt() argument
4209 GenUnsafeGetAndUpdate(invoke, codegen_, DataType::Type::kInt32, GetAndUpdateOp::kAdd); in VisitJdkUnsafeGetAndAddInt()
4211 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafeGetAndAddLong(HInvoke* invoke) { in VisitJdkUnsafeGetAndAddLong() argument
4212 GenUnsafeGetAndUpdate(invoke, codegen_, DataType::Type::kInt64, GetAndUpdateOp::kAdd); in VisitJdkUnsafeGetAndAddLong()
4214 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafeGetAndSetInt(HInvoke* invoke) { in VisitJdkUnsafeGetAndSetInt() argument
4215 GenUnsafeGetAndUpdate(invoke, codegen_, DataType::Type::kInt32, GetAndUpdateOp::kSet); in VisitJdkUnsafeGetAndSetInt()
4217 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafeGetAndSetLong(HInvoke* invoke) { in VisitJdkUnsafeGetAndSetLong() argument
4218 GenUnsafeGetAndUpdate(invoke, codegen_, DataType::Type::kInt64, GetAndUpdateOp::kSet); in VisitJdkUnsafeGetAndSetLong()
4220 void IntrinsicCodeGeneratorARMVIXL::VisitJdkUnsafeGetAndSetReference(HInvoke* invoke) { in VisitJdkUnsafeGetAndSetReference() argument
4221 GenUnsafeGetAndUpdate(invoke, codegen_, DataType::Type::kReference, GetAndUpdateOp::kSet); in VisitJdkUnsafeGetAndSetReference()
4226 VarHandleSlowPathARMVIXL(HInvoke* invoke, std::memory_order order) in VarHandleSlowPathARMVIXL() argument
4227 : IntrinsicSlowPathARMVIXL(invoke), in VarHandleSlowPathARMVIXL()
4331 static void GenerateVarHandleAccessModeAndVarTypeChecks(HInvoke* invoke, in GenerateVarHandleAccessModeAndVarTypeChecks() argument
4336 mirror::VarHandle::GetAccessModeByIntrinsic(invoke->GetIntrinsic()); in GenerateVarHandleAccessModeAndVarTypeChecks()
4340 vixl32::Register varhandle = InputRegisterAt(invoke, 0); in GenerateVarHandleAccessModeAndVarTypeChecks()
4347 size_t expected_coordinates_count = GetExpectedVarHandleCoordinatesCount(invoke); in GenerateVarHandleAccessModeAndVarTypeChecks()
4349 RegisterFrom(invoke->GetLocations()->GetTemp(expected_coordinates_count == 0u ? 1u : 0u)); in GenerateVarHandleAccessModeAndVarTypeChecks()
4372 uint32_t number_of_arguments = invoke->GetNumberOfArguments(); in GenerateVarHandleAccessModeAndVarTypeChecks()
4374 HInstruction* arg = invoke->InputAt(arg_index); in GenerateVarHandleAccessModeAndVarTypeChecks()
4377 vixl32::Register arg_reg = RegisterFrom(invoke->GetLocations()->InAt(arg_index)); in GenerateVarHandleAccessModeAndVarTypeChecks()
4384 static void GenerateVarHandleStaticFieldCheck(HInvoke* invoke, in GenerateVarHandleStaticFieldCheck() argument
4388 vixl32::Register varhandle = InputRegisterAt(invoke, 0); in GenerateVarHandleStaticFieldCheck()
4402 static void GenerateVarHandleInstanceFieldChecks(HInvoke* invoke, in GenerateVarHandleInstanceFieldChecks() argument
4405 VarHandleOptimizations optimizations(invoke); in GenerateVarHandleInstanceFieldChecks()
4407 vixl32::Register varhandle = InputRegisterAt(invoke, 0); in GenerateVarHandleInstanceFieldChecks()
4408 vixl32::Register object = InputRegisterAt(invoke, 1); in GenerateVarHandleInstanceFieldChecks()
4422 vixl32::Register temp = RegisterFrom(invoke->GetLocations()->GetTemp(0u)); in GenerateVarHandleInstanceFieldChecks()
4445 static void GenerateVarHandleArrayChecks(HInvoke* invoke, in GenerateVarHandleArrayChecks() argument
4448 VarHandleOptimizations optimizations(invoke); in GenerateVarHandleArrayChecks()
4450 vixl32::Register varhandle = InputRegisterAt(invoke, 0); in GenerateVarHandleArrayChecks()
4451 vixl32::Register object = InputRegisterAt(invoke, 1); in GenerateVarHandleArrayChecks()
4452 vixl32::Register index = InputRegisterAt(invoke, 2); in GenerateVarHandleArrayChecks()
4454 GetVarHandleExpectedValueType(invoke, /*expected_coordinates_count=*/ 2u); in GenerateVarHandleArrayChecks()
4471 vixl32::Register temp = RegisterFrom(invoke->GetLocations()->GetTemp(0u)); in GenerateVarHandleArrayChecks()
4532 static void GenerateVarHandleCoordinateChecks(HInvoke* invoke, in GenerateVarHandleCoordinateChecks() argument
4535 size_t expected_coordinates_count = GetExpectedVarHandleCoordinatesCount(invoke); in GenerateVarHandleCoordinateChecks()
4537 GenerateVarHandleStaticFieldCheck(invoke, codegen, slow_path); in GenerateVarHandleCoordinateChecks()
4539 GenerateVarHandleInstanceFieldChecks(invoke, codegen, slow_path); in GenerateVarHandleCoordinateChecks()
4542 GenerateVarHandleArrayChecks(invoke, codegen, slow_path); in GenerateVarHandleCoordinateChecks()
4546 static VarHandleSlowPathARMVIXL* GenerateVarHandleChecks(HInvoke* invoke, in GenerateVarHandleChecks() argument
4550 size_t expected_coordinates_count = GetExpectedVarHandleCoordinatesCount(invoke); in GenerateVarHandleChecks()
4551 VarHandleOptimizations optimizations(invoke); in GenerateVarHandleChecks()
4560 new (codegen->GetScopedAllocator()) VarHandleSlowPathARMVIXL(invoke, order); in GenerateVarHandleChecks()
4564 GenerateVarHandleAccessModeAndVarTypeChecks(invoke, codegen, slow_path, type); in GenerateVarHandleChecks()
4566 GenerateVarHandleCoordinateChecks(invoke, codegen, slow_path); in GenerateVarHandleChecks()
4576 static VarHandleTarget GetVarHandleTarget(HInvoke* invoke) { in GetVarHandleTarget() argument
4577 size_t expected_coordinates_count = GetExpectedVarHandleCoordinatesCount(invoke); in GetVarHandleTarget()
4578 LocationSummary* locations = invoke->GetLocations(); in GetVarHandleTarget()
4586 : InputRegisterAt(invoke, 1); in GetVarHandleTarget()
4590 static void GenerateVarHandleTarget(HInvoke* invoke, in GenerateVarHandleTarget() argument
4594 vixl32::Register varhandle = InputRegisterAt(invoke, 0); in GenerateVarHandleTarget()
4595 size_t expected_coordinates_count = GetExpectedVarHandleCoordinatesCount(invoke); in GenerateVarHandleTarget()
4598 if (VarHandleOptimizations(invoke).GetUseKnownImageVarHandle()) { in GenerateVarHandleTarget()
4600 ArtField* target_field = GetBootImageVarHandleField(invoke); in GenerateVarHandleTarget()
4627 codegen->GenerateGcRootFieldLoad(invoke, in GenerateVarHandleTarget()
4637 GetVarHandleExpectedValueType(invoke, /*expected_coordinates_count=*/ 2u); in GenerateVarHandleTarget()
4641 vixl32::Register index = InputRegisterAt(invoke, 2); in GenerateVarHandleTarget()
4651 static LocationSummary* CreateVarHandleCommonLocations(HInvoke* invoke, in CreateVarHandleCommonLocations() argument
4653 size_t expected_coordinates_count = GetExpectedVarHandleCoordinatesCount(invoke); in CreateVarHandleCommonLocations()
4654 DataType::Type return_type = invoke->GetType(); in CreateVarHandleCommonLocations()
4656 ArenaAllocator* allocator = invoke->GetBlock()->GetGraph()->GetAllocator(); in CreateVarHandleCommonLocations()
4658 new (allocator) LocationSummary(invoke, LocationSummary::kCallOnSlowPath, kIntrinsified); in CreateVarHandleCommonLocations()
4673 uint32_t number_of_arguments = invoke->GetNumberOfArguments(); in CreateVarHandleCommonLocations()
4675 HInstruction* arg = invoke->InputAt(arg_index); in CreateVarHandleCommonLocations()
4685 GetExpectedVarHandleCoordinatesCount(invoke) == 0u) { // For static fields. in CreateVarHandleCommonLocations()
4701 static void CreateVarHandleGetLocations(HInvoke* invoke, in CreateVarHandleGetLocations() argument
4704 VarHandleOptimizations optimizations(invoke); in CreateVarHandleGetLocations()
4710 invoke->GetType() == DataType::Type::kReference && in CreateVarHandleGetLocations()
4711 invoke->GetIntrinsic() != Intrinsics::kVarHandleGet && in CreateVarHandleGetLocations()
4712 invoke->GetIntrinsic() != Intrinsics::kVarHandleGetOpaque) { in CreateVarHandleGetLocations()
4719 LocationSummary* locations = CreateVarHandleCommonLocations(invoke, codegen); in CreateVarHandleGetLocations()
4721 DataType::Type type = invoke->GetType(); in CreateVarHandleGetLocations()
4726 (GetExpectedVarHandleCoordinatesCount(invoke) == 0) ? 2u : 1u); in CreateVarHandleGetLocations()
4731 static void GenerateVarHandleGet(HInvoke* invoke, in GenerateVarHandleGet() argument
4736 DataType::Type type = invoke->GetType(); in GenerateVarHandleGet()
4739 LocationSummary* locations = invoke->GetLocations(); in GenerateVarHandleGet()
4743 VarHandleTarget target = GetVarHandleTarget(invoke); in GenerateVarHandleGet()
4746 slow_path = GenerateVarHandleChecks(invoke, codegen, order, type); in GenerateVarHandleGet()
4747 GenerateVarHandleTarget(invoke, target, codegen); in GenerateVarHandleGet()
4796 GenerateIntrinsicGet(invoke, in GenerateVarHandleGet()
4821 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGet(HInvoke* invoke) { in VisitVarHandleGet() argument
4822 CreateVarHandleGetLocations(invoke, codegen_, /*atomic=*/ false); in VisitVarHandleGet()
4825 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGet(HInvoke* invoke) { in VisitVarHandleGet() argument
4826 GenerateVarHandleGet(invoke, codegen_, std::memory_order_relaxed, /*atomic=*/ false); in VisitVarHandleGet()
4829 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetOpaque(HInvoke* invoke) { in VisitVarHandleGetOpaque() argument
4830 CreateVarHandleGetLocations(invoke, codegen_, /*atomic=*/ true); in VisitVarHandleGetOpaque()
4833 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetOpaque(HInvoke* invoke) { in VisitVarHandleGetOpaque() argument
4834 GenerateVarHandleGet(invoke, codegen_, std::memory_order_relaxed, /*atomic=*/ true); in VisitVarHandleGetOpaque()
4837 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAcquire(HInvoke* invoke) { in VisitVarHandleGetAcquire() argument
4838 CreateVarHandleGetLocations(invoke, codegen_, /*atomic=*/ true); in VisitVarHandleGetAcquire()
4841 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAcquire(HInvoke* invoke) { in VisitVarHandleGetAcquire() argument
4842 GenerateVarHandleGet(invoke, codegen_, std::memory_order_acquire, /*atomic=*/ true); in VisitVarHandleGetAcquire()
4845 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetVolatile(HInvoke* invoke) { in VisitVarHandleGetVolatile() argument
4846 CreateVarHandleGetLocations(invoke, codegen_, /*atomic=*/ true); in VisitVarHandleGetVolatile()
4849 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetVolatile(HInvoke* invoke) { in VisitVarHandleGetVolatile() argument
4850 GenerateVarHandleGet(invoke, codegen_, std::memory_order_seq_cst, /*atomic=*/ true); in VisitVarHandleGetVolatile()
4853 static void CreateVarHandleSetLocations(HInvoke* invoke, in CreateVarHandleSetLocations() argument
4856 VarHandleOptimizations optimizations(invoke); in CreateVarHandleSetLocations()
4861 LocationSummary* locations = CreateVarHandleCommonLocations(invoke, codegen); in CreateVarHandleSetLocations()
4864 uint32_t number_of_arguments = invoke->GetNumberOfArguments(); in CreateVarHandleSetLocations()
4865 DataType::Type value_type = GetDataTypeFromShorty(invoke, number_of_arguments - 1u); in CreateVarHandleSetLocations()
4867 size_t expected_coordinates_count = GetExpectedVarHandleCoordinatesCount(invoke); in CreateVarHandleSetLocations()
4869 HInstruction* arg = invoke->InputAt(number_of_arguments - 1u); in CreateVarHandleSetLocations()
4890 static void GenerateVarHandleSet(HInvoke* invoke, in GenerateVarHandleSet() argument
4895 uint32_t value_index = invoke->GetNumberOfArguments() - 1; in GenerateVarHandleSet()
4896 DataType::Type value_type = GetDataTypeFromShorty(invoke, value_index); in GenerateVarHandleSet()
4899 LocationSummary* locations = invoke->GetLocations(); in GenerateVarHandleSet()
4902 VarHandleTarget target = GetVarHandleTarget(invoke); in GenerateVarHandleSet()
4905 slow_path = GenerateVarHandleChecks(invoke, codegen, order, value_type); in GenerateVarHandleSet()
4906 GenerateVarHandleTarget(invoke, target, codegen); in GenerateVarHandleSet()
4976 if (CodeGenerator::StoreNeedsWriteBarrier(value_type, invoke->InputAt(value_index))) { in GenerateVarHandleSet()
4990 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleSet(HInvoke* invoke) { in VisitVarHandleSet() argument
4991 CreateVarHandleSetLocations(invoke, codegen_, /*atomic=*/ false); in VisitVarHandleSet()
4994 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleSet(HInvoke* invoke) { in VisitVarHandleSet() argument
4995 GenerateVarHandleSet(invoke, codegen_, std::memory_order_relaxed, /*atomic=*/ false); in VisitVarHandleSet()
4998 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleSetOpaque(HInvoke* invoke) { in VisitVarHandleSetOpaque() argument
4999 CreateVarHandleSetLocations(invoke, codegen_, /*atomic=*/ true); in VisitVarHandleSetOpaque()
5002 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleSetOpaque(HInvoke* invoke) { in VisitVarHandleSetOpaque() argument
5003 GenerateVarHandleSet(invoke, codegen_, std::memory_order_relaxed, /*atomic=*/ true); in VisitVarHandleSetOpaque()
5006 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleSetRelease(HInvoke* invoke) { in VisitVarHandleSetRelease() argument
5007 CreateVarHandleSetLocations(invoke, codegen_, /*atomic=*/ true); in VisitVarHandleSetRelease()
5010 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleSetRelease(HInvoke* invoke) { in VisitVarHandleSetRelease() argument
5011 GenerateVarHandleSet(invoke, codegen_, std::memory_order_release, /*atomic=*/ true); in VisitVarHandleSetRelease()
5014 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleSetVolatile(HInvoke* invoke) { in VisitVarHandleSetVolatile() argument
5015 CreateVarHandleSetLocations(invoke, codegen_, /*atomic=*/ true); in VisitVarHandleSetVolatile()
5018 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleSetVolatile(HInvoke* invoke) { in VisitVarHandleSetVolatile() argument
5020 GenerateVarHandleSet(invoke, codegen_, std::memory_order_seq_cst, /*atomic=*/ true); in VisitVarHandleSetVolatile()
5023 static void CreateVarHandleCompareAndSetOrExchangeLocations(HInvoke* invoke, in CreateVarHandleCompareAndSetOrExchangeLocations() argument
5026 VarHandleOptimizations optimizations(invoke); in CreateVarHandleCompareAndSetOrExchangeLocations()
5031 uint32_t number_of_arguments = invoke->GetNumberOfArguments(); in CreateVarHandleCompareAndSetOrExchangeLocations()
5032 DataType::Type value_type = GetDataTypeFromShorty(invoke, number_of_arguments - 1u); in CreateVarHandleCompareAndSetOrExchangeLocations()
5044 LocationSummary* locations = CreateVarHandleCommonLocations(invoke, codegen); in CreateVarHandleCompareAndSetOrExchangeLocations()
5052 if (GetExpectedVarHandleCoordinatesCount(invoke) == 0u) { // For static fields. in CreateVarHandleCompareAndSetOrExchangeLocations()
5067 (GetExpectedVarHandleCoordinatesCount(invoke) == 0) ? 2u : 1u); in CreateVarHandleCompareAndSetOrExchangeLocations()
5072 } else if (GetExpectedVarHandleCoordinatesCount(invoke) == 2u) { in CreateVarHandleCompareAndSetOrExchangeLocations()
5088 static void GenerateVarHandleCompareAndSetOrExchange(HInvoke* invoke, in GenerateVarHandleCompareAndSetOrExchange() argument
5096 uint32_t expected_index = invoke->GetNumberOfArguments() - 2; in GenerateVarHandleCompareAndSetOrExchange()
5097 uint32_t new_value_index = invoke->GetNumberOfArguments() - 1; in GenerateVarHandleCompareAndSetOrExchange()
5098 DataType::Type value_type = GetDataTypeFromShorty(invoke, new_value_index); in GenerateVarHandleCompareAndSetOrExchange()
5099 DCHECK_EQ(value_type, GetDataTypeFromShorty(invoke, expected_index)); in GenerateVarHandleCompareAndSetOrExchange()
5102 LocationSummary* locations = invoke->GetLocations(); in GenerateVarHandleCompareAndSetOrExchange()
5107 VarHandleTarget target = GetVarHandleTarget(invoke); in GenerateVarHandleCompareAndSetOrExchange()
5110 slow_path = GenerateVarHandleChecks(invoke, codegen, order, value_type); in GenerateVarHandleCompareAndSetOrExchange()
5111 GenerateVarHandleTarget(invoke, target, codegen); in GenerateVarHandleCompareAndSetOrExchange()
5221 invoke, in GenerateVarHandleCompareAndSetOrExchange()
5275 if (CodeGenerator::StoreNeedsWriteBarrier(value_type, invoke->InputAt(new_value_index))) { in GenerateVarHandleCompareAndSetOrExchange()
5291 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleCompareAndExchange(HInvoke* invoke) { in VisitVarHandleCompareAndExchange() argument
5292 CreateVarHandleCompareAndSetOrExchangeLocations(invoke, codegen_, /*return_success=*/ false); in VisitVarHandleCompareAndExchange()
5295 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleCompareAndExchange(HInvoke* invoke) { in VisitVarHandleCompareAndExchange() argument
5297 invoke, codegen_, std::memory_order_seq_cst, /*return_success=*/ false, /*strong=*/ true); in VisitVarHandleCompareAndExchange()
5300 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleCompareAndExchangeAcquire(HInvoke* invoke) { in VisitVarHandleCompareAndExchangeAcquire() argument
5301 CreateVarHandleCompareAndSetOrExchangeLocations(invoke, codegen_, /*return_success=*/ false); in VisitVarHandleCompareAndExchangeAcquire()
5304 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleCompareAndExchangeAcquire(HInvoke* invoke) { in VisitVarHandleCompareAndExchangeAcquire() argument
5306 invoke, codegen_, std::memory_order_acquire, /*return_success=*/ false, /*strong=*/ true); in VisitVarHandleCompareAndExchangeAcquire()
5309 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleCompareAndExchangeRelease(HInvoke* invoke) { in VisitVarHandleCompareAndExchangeRelease() argument
5310 CreateVarHandleCompareAndSetOrExchangeLocations(invoke, codegen_, /*return_success=*/ false); in VisitVarHandleCompareAndExchangeRelease()
5313 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleCompareAndExchangeRelease(HInvoke* invoke) { in VisitVarHandleCompareAndExchangeRelease() argument
5315 invoke, codegen_, std::memory_order_release, /*return_success=*/ false, /*strong=*/ true); in VisitVarHandleCompareAndExchangeRelease()
5318 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleCompareAndSet(HInvoke* invoke) { in VisitVarHandleCompareAndSet() argument
5319 CreateVarHandleCompareAndSetOrExchangeLocations(invoke, codegen_, /*return_success=*/ true); in VisitVarHandleCompareAndSet()
5322 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleCompareAndSet(HInvoke* invoke) { in VisitVarHandleCompareAndSet() argument
5324 invoke, codegen_, std::memory_order_seq_cst, /*return_success=*/ true, /*strong=*/ true); in VisitVarHandleCompareAndSet()
5327 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleWeakCompareAndSet(HInvoke* invoke) { in VisitVarHandleWeakCompareAndSet() argument
5328 CreateVarHandleCompareAndSetOrExchangeLocations(invoke, codegen_, /*return_success=*/ true); in VisitVarHandleWeakCompareAndSet()
5331 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleWeakCompareAndSet(HInvoke* invoke) { in VisitVarHandleWeakCompareAndSet() argument
5333 invoke, codegen_, std::memory_order_seq_cst, /*return_success=*/ true, /*strong=*/ false); in VisitVarHandleWeakCompareAndSet()
5336 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleWeakCompareAndSetAcquire(HInvoke* invoke) { in VisitVarHandleWeakCompareAndSetAcquire() argument
5337 CreateVarHandleCompareAndSetOrExchangeLocations(invoke, codegen_, /*return_success=*/ true); in VisitVarHandleWeakCompareAndSetAcquire()
5340 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleWeakCompareAndSetAcquire(HInvoke* invoke) { in VisitVarHandleWeakCompareAndSetAcquire() argument
5342 invoke, codegen_, std::memory_order_acquire, /*return_success=*/ true, /*strong=*/ false); in VisitVarHandleWeakCompareAndSetAcquire()
5345 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleWeakCompareAndSetPlain(HInvoke* invoke) { in VisitVarHandleWeakCompareAndSetPlain() argument
5346 CreateVarHandleCompareAndSetOrExchangeLocations(invoke, codegen_, /*return_success=*/ true); in VisitVarHandleWeakCompareAndSetPlain()
5349 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleWeakCompareAndSetPlain(HInvoke* invoke) { in VisitVarHandleWeakCompareAndSetPlain() argument
5351 invoke, codegen_, std::memory_order_relaxed, /*return_success=*/ true, /*strong=*/ false); in VisitVarHandleWeakCompareAndSetPlain()
5354 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleWeakCompareAndSetRelease(HInvoke* invoke) { in VisitVarHandleWeakCompareAndSetRelease() argument
5355 CreateVarHandleCompareAndSetOrExchangeLocations(invoke, codegen_, /*return_success=*/ true); in VisitVarHandleWeakCompareAndSetRelease()
5358 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleWeakCompareAndSetRelease(HInvoke* invoke) { in VisitVarHandleWeakCompareAndSetRelease() argument
5360 invoke, codegen_, std::memory_order_release, /*return_success=*/ true, /*strong=*/ false); in VisitVarHandleWeakCompareAndSetRelease()
5363 static void CreateVarHandleGetAndUpdateLocations(HInvoke* invoke, in CreateVarHandleGetAndUpdateLocations() argument
5366 VarHandleOptimizations optimizations(invoke); in CreateVarHandleGetAndUpdateLocations()
5372 uint32_t arg_index = invoke->GetNumberOfArguments() - 1; in CreateVarHandleGetAndUpdateLocations()
5373 DataType::Type value_type = GetDataTypeFromShorty(invoke, arg_index); in CreateVarHandleGetAndUpdateLocations()
5381 LocationSummary* locations = CreateVarHandleCommonLocations(invoke, codegen); in CreateVarHandleGetAndUpdateLocations()
5386 (GetExpectedVarHandleCoordinatesCount(invoke) == 0) ? 2u : 1u); in CreateVarHandleGetAndUpdateLocations()
5397 } else if (GetExpectedVarHandleCoordinatesCount(invoke) == 2u) { in CreateVarHandleGetAndUpdateLocations()
5406 GetExpectedVarHandleCoordinatesCount(invoke) == 2u) { in CreateVarHandleGetAndUpdateLocations()
5423 DataType::Type return_type = invoke->GetType(); in CreateVarHandleGetAndUpdateLocations()
5440 static void GenerateVarHandleGetAndUpdate(HInvoke* invoke, in GenerateVarHandleGetAndUpdate() argument
5446 uint32_t arg_index = invoke->GetNumberOfArguments() - 1; in GenerateVarHandleGetAndUpdate()
5447 DataType::Type value_type = GetDataTypeFromShorty(invoke, arg_index); in GenerateVarHandleGetAndUpdate()
5450 LocationSummary* locations = invoke->GetLocations(); in GenerateVarHandleGetAndUpdate()
5452 DataType::Type return_type = invoke->GetType(); in GenerateVarHandleGetAndUpdate()
5478 VarHandleTarget target = GetVarHandleTarget(invoke); in GenerateVarHandleGetAndUpdate()
5481 slow_path = GenerateVarHandleChecks(invoke, codegen, order, value_type); in GenerateVarHandleGetAndUpdate()
5482 GenerateVarHandleTarget(invoke, target, codegen); in GenerateVarHandleGetAndUpdate()
5634 invoke, in GenerateVarHandleGetAndUpdate()
5644 if (CodeGenerator::StoreNeedsWriteBarrier(value_type, invoke->InputAt(arg_index))) { in GenerateVarHandleGetAndUpdate()
5659 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndSet(HInvoke* invoke) { in VisitVarHandleGetAndSet() argument
5660 CreateVarHandleGetAndUpdateLocations(invoke, codegen_, GetAndUpdateOp::kSet); in VisitVarHandleGetAndSet()
5663 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndSet(HInvoke* invoke) { in VisitVarHandleGetAndSet() argument
5664 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kSet, std::memory_order_seq_cst); in VisitVarHandleGetAndSet()
5667 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndSetAcquire(HInvoke* invoke) { in VisitVarHandleGetAndSetAcquire() argument
5668 CreateVarHandleGetAndUpdateLocations(invoke, codegen_, GetAndUpdateOp::kSet); in VisitVarHandleGetAndSetAcquire()
5671 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndSetAcquire(HInvoke* invoke) { in VisitVarHandleGetAndSetAcquire() argument
5672 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kSet, std::memory_order_acquire); in VisitVarHandleGetAndSetAcquire()
5675 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndSetRelease(HInvoke* invoke) { in VisitVarHandleGetAndSetRelease() argument
5676 CreateVarHandleGetAndUpdateLocations(invoke, codegen_, GetAndUpdateOp::kSet); in VisitVarHandleGetAndSetRelease()
5679 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndSetRelease(HInvoke* invoke) { in VisitVarHandleGetAndSetRelease() argument
5680 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kSet, std::memory_order_release); in VisitVarHandleGetAndSetRelease()
5683 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndAdd(HInvoke* invoke) { in VisitVarHandleGetAndAdd() argument
5684 CreateVarHandleGetAndUpdateLocations(invoke, codegen_, GetAndUpdateOp::kAdd); in VisitVarHandleGetAndAdd()
5687 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndAdd(HInvoke* invoke) { in VisitVarHandleGetAndAdd() argument
5688 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kAdd, std::memory_order_seq_cst); in VisitVarHandleGetAndAdd()
5691 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndAddAcquire(HInvoke* invoke) { in VisitVarHandleGetAndAddAcquire() argument
5692 CreateVarHandleGetAndUpdateLocations(invoke, codegen_, GetAndUpdateOp::kAdd); in VisitVarHandleGetAndAddAcquire()
5695 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndAddAcquire(HInvoke* invoke) { in VisitVarHandleGetAndAddAcquire() argument
5696 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kAdd, std::memory_order_acquire); in VisitVarHandleGetAndAddAcquire()
5699 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndAddRelease(HInvoke* invoke) { in VisitVarHandleGetAndAddRelease() argument
5700 CreateVarHandleGetAndUpdateLocations(invoke, codegen_, GetAndUpdateOp::kAdd); in VisitVarHandleGetAndAddRelease()
5703 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndAddRelease(HInvoke* invoke) { in VisitVarHandleGetAndAddRelease() argument
5704 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kAdd, std::memory_order_release); in VisitVarHandleGetAndAddRelease()
5707 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndBitwiseAnd(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseAnd() argument
5708 CreateVarHandleGetAndUpdateLocations(invoke, codegen_, GetAndUpdateOp::kAnd); in VisitVarHandleGetAndBitwiseAnd()
5711 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndBitwiseAnd(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseAnd() argument
5712 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kAnd, std::memory_order_seq_cst); in VisitVarHandleGetAndBitwiseAnd()
5715 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndBitwiseAndAcquire(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseAndAcquire() argument
5716 CreateVarHandleGetAndUpdateLocations(invoke, codegen_, GetAndUpdateOp::kAnd); in VisitVarHandleGetAndBitwiseAndAcquire()
5719 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndBitwiseAndAcquire(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseAndAcquire() argument
5720 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kAnd, std::memory_order_acquire); in VisitVarHandleGetAndBitwiseAndAcquire()
5723 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndBitwiseAndRelease(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseAndRelease() argument
5724 CreateVarHandleGetAndUpdateLocations(invoke, codegen_, GetAndUpdateOp::kAnd); in VisitVarHandleGetAndBitwiseAndRelease()
5727 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndBitwiseAndRelease(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseAndRelease() argument
5728 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kAnd, std::memory_order_release); in VisitVarHandleGetAndBitwiseAndRelease()
5731 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndBitwiseOr(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseOr() argument
5732 CreateVarHandleGetAndUpdateLocations(invoke, codegen_, GetAndUpdateOp::kOr); in VisitVarHandleGetAndBitwiseOr()
5735 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndBitwiseOr(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseOr() argument
5736 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kOr, std::memory_order_seq_cst); in VisitVarHandleGetAndBitwiseOr()
5739 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndBitwiseOrAcquire(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseOrAcquire() argument
5740 CreateVarHandleGetAndUpdateLocations(invoke, codegen_, GetAndUpdateOp::kOr); in VisitVarHandleGetAndBitwiseOrAcquire()
5743 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndBitwiseOrAcquire(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseOrAcquire() argument
5744 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kOr, std::memory_order_acquire); in VisitVarHandleGetAndBitwiseOrAcquire()
5747 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndBitwiseOrRelease(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseOrRelease() argument
5748 CreateVarHandleGetAndUpdateLocations(invoke, codegen_, GetAndUpdateOp::kOr); in VisitVarHandleGetAndBitwiseOrRelease()
5751 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndBitwiseOrRelease(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseOrRelease() argument
5752 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kOr, std::memory_order_release); in VisitVarHandleGetAndBitwiseOrRelease()
5755 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndBitwiseXor(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseXor() argument
5756 CreateVarHandleGetAndUpdateLocations(invoke, codegen_, GetAndUpdateOp::kXor); in VisitVarHandleGetAndBitwiseXor()
5759 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndBitwiseXor(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseXor() argument
5760 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kXor, std::memory_order_seq_cst); in VisitVarHandleGetAndBitwiseXor()
5763 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndBitwiseXorAcquire(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseXorAcquire() argument
5764 CreateVarHandleGetAndUpdateLocations(invoke, codegen_, GetAndUpdateOp::kXor); in VisitVarHandleGetAndBitwiseXorAcquire()
5767 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndBitwiseXorAcquire(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseXorAcquire() argument
5768 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kXor, std::memory_order_acquire); in VisitVarHandleGetAndBitwiseXorAcquire()
5771 void IntrinsicLocationsBuilderARMVIXL::VisitVarHandleGetAndBitwiseXorRelease(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseXorRelease() argument
5772 CreateVarHandleGetAndUpdateLocations(invoke, codegen_, GetAndUpdateOp::kXor); in VisitVarHandleGetAndBitwiseXorRelease()
5775 void IntrinsicCodeGeneratorARMVIXL::VisitVarHandleGetAndBitwiseXorRelease(HInvoke* invoke) { in VisitVarHandleGetAndBitwiseXorRelease() argument
5776 GenerateVarHandleGetAndUpdate(invoke, codegen_, GetAndUpdateOp::kXor, std::memory_order_release); in VisitVarHandleGetAndBitwiseXorRelease()
5783 HInvoke* invoke = GetInvoke(); in EmitByteArrayViewCode() local
5786 GetVarHandleExpectedValueType(invoke, /*expected_coordinates_count=*/ 2u); in EmitByteArrayViewCode()
5791 vixl32::Register varhandle = InputRegisterAt(invoke, 0); in EmitByteArrayViewCode()
5792 vixl32::Register object = InputRegisterAt(invoke, 1); in EmitByteArrayViewCode()
5793 vixl32::Register index = InputRegisterAt(invoke, 2); in EmitByteArrayViewCode()
5802 VarHandleTarget target = GetVarHandleTarget(invoke); in EmitByteArrayViewCode()
5805 vixl32::Register temp = RegisterFrom(invoke->GetLocations()->GetTemp(0u)); in EmitByteArrayViewCode()
5849 HInstruction* arg = invoke->InputAt(invoke->GetNumberOfArguments() - 1u); in EmitByteArrayViewCode()
5864 GenerateVarHandleGet(invoke, codegen, order_, atomic_, /*byte_swap=*/ true); in EmitByteArrayViewCode()
5867 GenerateVarHandleSet(invoke, codegen, order_, atomic_, /*byte_swap=*/ true); in EmitByteArrayViewCode()
5872 invoke, codegen, order_, return_success_, strong_, /*byte_swap=*/ true); in EmitByteArrayViewCode()
5876 invoke, codegen, get_and_update_op_, order_, /*byte_swap=*/ true); in EmitByteArrayViewCode()