Home | History | Annotate | Download | only in arm

Lines Matching full:masm

40 #define __ ACCESS_MASM(masm)
42 static void EmitIdenticalObjectComparison(MacroAssembler* masm,
46 static void EmitSmiNonsmiComparison(MacroAssembler* masm,
52 static void EmitTwoNonNanDoubleComparison(MacroAssembler* masm, Condition cond);
53 static void EmitStrictTwoHeapObjectCompare(MacroAssembler* masm,
59 static void EmitCheckForHeapNumber(MacroAssembler* masm, Register operand,
69 void ToNumberStub::Generate(MacroAssembler* masm) {
76 EmitCheckForHeapNumber(masm, r0, r1, ip, &call_builtin);
85 void FastNewClosureStub::Generate(MacroAssembler* masm) {
142 void FastNewContextStub::Generate(MacroAssembler* masm) {
189 void FastNewBlockContextStub::Generate(MacroAssembler* masm) {
254 MacroAssembler* masm,
302 void FastCloneShallowArrayStub::Generate(MacroAssembler* masm) {
326 GenerateFastCloneShallowArrayCommon(masm, 0,
335 GenerateFastCloneShallowArrayCommon(masm, length_,
368 GenerateFastCloneShallowArrayCommon(masm, length_, mode, &slow_case);
379 void FastCloneShallowObjectStub::Generate(MacroAssembler* masm) {
457 void Generate(MacroAssembler* masm);
461 void ConvertToDoubleStub::Generate(MacroAssembler* masm) {
518 void FloatingPointHelper::LoadSmis(MacroAssembler* masm,
551 MacroAssembler* masm,
559 LoadNumber(masm, destination,
563 LoadNumber(masm, destination,
568 void FloatingPointHelper::LoadNumber(MacroAssembler* masm,
630 void FloatingPointHelper::ConvertNumberToInt32(MacroAssembler* masm,
671 void FloatingPointHelper::ConvertIntToDouble(MacroAssembler* masm,
745 void FloatingPointHelper::LoadNumberAsInt32Double(MacroAssembler* masm,
766 ConvertIntToDouble(masm, scratch1, destination, double_dst, dst1, dst2,
812 DoubleIs32BitInteger(masm, dst1, dst2, scratch1, scratch2, not_int32);
822 void FloatingPointHelper::LoadNumberAsInt32(MacroAssembler* masm,
880 DoubleIs32BitInteger(masm, scratch1, scratch2, dst, scratch3, not_int32);
901 void FloatingPointHelper::DoubleIs32BitInteger(MacroAssembler* masm,
962 MacroAssembler* masm,
980 if (masm->use_eabi_hardfloat()) {
986 AllowExternalCallThatCantCauseGC scope(masm);
988 ExternalReference::double_fp_operation(op, masm->isolate()), 0, 2);
992 if (masm->use_eabi_hardfloat()) {
1030 void WriteInt32ToHeapNumberStub::Generate(MacroAssembler* masm) {
1078 static void EmitIdenticalObjectComparison(MacroAssembler* masm,
1183 static void EmitSmiNonsmiComparison(MacroAssembler* masm,
1273 void EmitNanCheck(MacroAssembler* masm, Label* lhs_not_nan, Condition cond) {
1325 static void EmitTwoNonNanDoubleComparison(MacroAssembler* masm,
1364 if (masm->use_eabi_hardfloat()) {
1370 AllowExternalCallThatCantCauseGC scope(masm);
1371 __ CallCFunction(ExternalReference::compare_doubles(masm->isolate()),
1379 static void EmitStrictTwoHeapObjectCompare(MacroAssembler* masm,
1423 static void EmitCheckForTwoHeapNumbers(MacroAssembler* masm,
1455 static void EmitCheckForSymbolsOrObjects(MacroAssembler* masm,
1499 void NumberToStringStub::GenerateLookupNumberStringCache(MacroAssembler* masm,
1525 Isolate* isolate = masm->isolate();
1594 void NumberToStringStub::Generate(MacroAssembler* masm) {
1600 GenerateLookupNumberStringCache(masm, r1, r0, r2, r3, r4, false, &runtime);
1613 void CompareStub::Generate(MacroAssembler* masm) {
1639 EmitIdenticalObjectComparison(masm, &slow, cc_, never_nan_nan_);
1656 EmitSmiNonsmiComparison(masm, lhs_, rhs_, &lhs_not_nan, &slow, strict_);
1661 Isolate* isolate = masm->isolate();
1688 EmitNanCheck(masm, &lhs_not_nan, cc_);
1691 EmitTwoNonNanDoubleComparison(masm, cc_);
1700 EmitStrictTwoHeapObjectCompare(masm, lhs_, rhs_);
1709 EmitCheckForTwoHeapNumbers(masm,
1723 EmitCheckForSymbolsOrObjects(masm, lhs_, rhs_, &flat_string_check, &slow);
1734 StringCompareStub::GenerateFlatAsciiStringEquals(masm,
1741 StringCompareStub::GenerateCompareFlatAsciiStrings(masm,
1779 void ToBooleanStub::Generate(MacroAssembler* masm) {
1789 CheckOddball(masm, UNDEFINED, Heap::kUndefinedValueRootIndex, false);
1792 CheckOddball(masm, BOOLEAN, Heap::kFalseValueRootIndex, false);
1793 CheckOddball(masm, BOOLEAN, Heap::kTrueValueRootIndex, true);
1796 CheckOddball(masm, NULL_TYPE, Heap::kNullValueRootIndex, false);
1851 GenerateTypeTransition(masm);
1855 void ToBooleanStub::CheckOddball(MacroAssembler* masm,
1873 void ToBooleanStub::GenerateTypeTransition(MacroAssembler* masm) {
1883 ExternalReference(IC_Utility(IC::kToBoolean_Patch), masm->isolate()),
1889 void StoreBufferOverflowStub::Generate(MacroAssembler* masm) {
1906 AllowExternalCallThatCantCauseGC scope(masm);
1910 ExternalReference::store_buffer_overflow_function(masm->isolate()),
1939 void UnaryOpStub::Generate(MacroAssembler* masm) {
1942 GenerateTypeTransition(masm);
1945 GenerateSmiStub(masm);
1948 GenerateHeapNumberStub(masm);
1951 GenerateGenericStub(masm);
1957 void UnaryOpStub::GenerateTypeTransition(MacroAssembler* masm) {
1965 ExternalReference(IC_Utility(IC::kUnaryOp_Patch), masm->isolate()), 4, 1);
1970 void UnaryOpStub::GenerateSmiStub(MacroAssembler* masm) {
1973 GenerateSmiStubSub(masm);
1976 GenerateSmiStubBitNot(masm);
1984 void UnaryOpStub::GenerateSmiStubSub(MacroAssembler* masm) {
1986 GenerateSmiCodeSub(masm, &non_smi, &slow);
1989 GenerateTypeTransition(masm);
1993 void UnaryOpStub::GenerateSmiStubBitNot(MacroAssembler* masm) {
1995 GenerateSmiCodeBitNot(masm, &non_smi);
1997 GenerateTypeTransition(masm);
2001 void UnaryOpStub::GenerateSmiCodeSub(MacroAssembler* masm,
2016 void UnaryOpStub::GenerateSmiCodeBitNot(MacroAssembler* masm,
2028 void UnaryOpStub::GenerateHeapNumberStub(MacroAssembler* masm) {
2031 GenerateHeapNumberStubSub(masm);
2034 GenerateHeapNumberStubBitNot(masm);
2042 void UnaryOpStub::GenerateHeapNumberStubSub(MacroAssembler* masm) {
2044 GenerateSmiCodeSub(masm, &non_smi, &call_builtin);
2046 GenerateHeapNumberCodeSub(masm, &slow);
2048 GenerateTypeTransition(masm);
2050 GenerateGenericCodeFallback(masm);
2054 void UnaryOpStub::GenerateHeapNumberStubBitNot(MacroAssembler* masm) {
2056 GenerateSmiCodeBitNot(masm, &non_smi);
2058 GenerateHeapNumberCodeBitNot(masm, &slow);
2060 GenerateTypeTransition(masm);
2063 void UnaryOpStub::GenerateHeapNumberCodeSub(MacroAssembler* masm,
2065 EmitCheckForHeapNumber(masm, r0, r1, r6, slow);
2078 FrameScope scope(masm, StackFrame::INTERNAL);
2098 MacroAssembler* masm, Label* slow) {
2101 EmitCheckForHeapNumber(masm, r0, r1, r6, slow);
2125 FrameScope scope(masm, StackFrame::INTERNAL);
2166 void UnaryOpStub::GenerateGenericStub(MacroAssembler* masm) {
2169 GenerateGenericStubSub(masm);
2172 GenerateGenericStubBitNot(masm);
2180 void UnaryOpStub::GenerateGenericStubSub(MacroAssembler* masm) {
2182 GenerateSmiCodeSub(masm, &non_smi, &slow);
2184 GenerateHeapNumberCodeSub(masm, &slow);
2186 GenerateGenericCodeFallback(masm);
2190 void UnaryOpStub::GenerateGenericStubBitNot(MacroAssembler* masm) {
2192 GenerateSmiCodeBitNot(masm, &non_smi);
2194 GenerateHeapNumberCodeBitNot(masm, &slow);
2196 GenerateGenericCodeFallback(masm);
2200 void UnaryOpStub::GenerateGenericCodeFallback(MacroAssembler* masm) {
2216 void BinaryOpStub::GenerateTypeTransition(MacroAssembler* masm) {
2228 masm->isolate()),
2235 MacroAssembler* masm) {
2240 void BinaryOpStub::Generate(MacroAssembler* masm) {
2243 AllowStubCallsScope allow_stub_calls(masm, true);
2247 GenerateTypeTransition(masm);
2250 GenerateSmiStub(masm);
2253 GenerateInt32Stub(masm);
2256 GenerateHeapNumberStub(masm);
2259 masm);
2262 GenerateBothStringStub(masm);
2265 GenerateStringStub(masm);
2268 GenerateGeneric(masm);
2292 void BinaryOpStub::GenerateSmiSmiOperation(MacroAssembler* masm) {
2417 void BinaryOpStub::GenerateFPOperation(MacroAssembler* masm,
2453 masm, result, heap_number_map, scratch1, scratch2, gc_required);
2457 FloatingPointHelper::LoadSmis(masm, destination, scratch1, scratch2);
2459 FloatingPointHelper::LoadOperands(masm,
2496 FloatingPointHelper::CallCCodeForDoubleOperation(masm,
2517 FloatingPointHelper::ConvertNumberToInt32(masm,
2526 FloatingPointHelper::ConvertNumberToInt32(masm,
2590 masm, result, heap_number_map, scratch1, scratch2, gc_required);
2632 MacroAssembler* masm,
2648 GenerateSmiSmiOperation(masm);
2653 GenerateFPOperation(masm, true, use_runtime, gc_required);
2659 void BinaryOpStub::GenerateSmiStub(MacroAssembler* masm) {
2665 GenerateSmiCode(masm, &call_runtime, NULL, NO_HEAPNUMBER_RESULTS);
2669 GenerateSmiCode(masm,
2677 GenerateTypeTransition(masm);
2680 GenerateCallRuntime(masm);
2684 void BinaryOpStub::GenerateStringStub(MacroAssembler* masm) {
2689 GenerateAddStrings(masm);
2690 GenerateTypeTransition(masm);
2694 void BinaryOpStub::GenerateBothStringStub(MacroAssembler* masm) {
2716 GenerateRegisterArgsPush(masm);
2720 GenerateTypeTransition(masm);
2724 void BinaryOpStub::GenerateInt32Stub(MacroAssembler* masm) {
2748 GenerateSmiSmiOperation(masm);
2766 FloatingPointHelper::LoadNumberAsInt32Double(masm,
2777 FloatingPointHelper::LoadNumberAsInt32Double(masm,
2855 GenerateHeapResultAllocation(masm,
2879 GenerateHeapResultAllocation(masm,
2891 masm, op_, heap_number_result, scratch1);
2915 FloatingPointHelper::LoadNumberAsInt32(masm,
2924 FloatingPointHelper::LoadNumberAsInt32(masm,
2987 GenerateHeapResultAllocation(masm,
3032 GenerateTypeTransition(masm);
3036 GenerateCallRuntime(masm);
3040 void BinaryOpStub::GenerateOddballStub(MacroAssembler* masm) {
3046 GenerateAddStrings(masm);
3069 GenerateHeapNumberStub(masm);
3073 void BinaryOpStub::GenerateHeapNumberStub(MacroAssembler* masm) {
3075 GenerateFPOperation(masm, false, &call_runtime, &call_runtime);
3078 GenerateCallRuntime(masm);
3082 void BinaryOpStub::GenerateGeneric(MacroAssembler* masm) {
3085 GenerateSmiCode(masm, &call_runtime, &call_runtime, ALLOW_HEAPNUMBER_RESULTS);
3087 GenerateFPOperation(masm, false, &call_string_add_or_runtime, &call_runtime);
3091 GenerateAddStrings(masm);
3095 GenerateCallRuntime(masm);
3099 void BinaryOpStub::GenerateAddStrings(MacroAssembler* masm) {
3112 GenerateRegisterArgsPush(masm);
3122 GenerateRegisterArgsPush(masm);
3130 void BinaryOpStub::GenerateCallRuntime(MacroAssembler* masm) {
3131 GenerateRegisterArgsPush(masm);
3172 void BinaryOpStub::GenerateHeapResultAllocation(MacroAssembler* masm,
3204 void BinaryOpStub::GenerateRegisterArgsPush(MacroAssembler* masm) {
3209 void TranscendentalCacheStub::Generate(MacroAssembler* masm) {
3265 Isolate* isolate = masm->isolate();
3302 Counters* counters = masm->isolate()->counters();
3317 Counters* counters = masm->isolate()->counters();
3323 ExternalReference(RuntimeFunction(), masm->isolate());
3337 GenerateCallCFunction(masm, scratch0);
3356 FrameScope scope(masm, StackFrame::INTERNAL);
3366 GenerateCallCFunction(masm, scratch0);
3373 FrameScope scope(masm, StackFrame::INTERNAL);
3386 void TranscendentalCacheStub::GenerateCallCFunction(MacroAssembler* masm,
3388 Isolate* isolate = masm->isolate();
3392 if (masm->use_eabi_hardfloat()) {
3397 AllowExternalCallThatCantCauseGC scope(masm);
3437 void StackCheckStub::Generate(MacroAssembler* masm) {
3442 void InterruptStub::Generate(MacroAssembler* masm) {
3447 void MathPowStub::Generate(MacroAssembler* masm) {
3555 AllowExternalCallThatCantCauseGC scope(masm);
3559 ExternalReference::power_double_double_function(masm->isolate()),
3610 Counters* counters = masm->isolate()->counters();
3629 AllowExternalCallThatCantCauseGC scope(masm);
3633 ExternalReference::power_double_double_function(masm->isolate()),
3682 void CEntryStub::GenerateCore(MacroAssembler* masm,
3692 Isolate* isolate = masm->isolate();
3740 masm->add(lr, pc, Operand(4));
3742 masm->Jump(r5);
3800 void CEntryStub::Generate(MacroAssembler* masm) {
3820 FrameScope scope(masm, StackFrame::MANUAL);
3836 GenerateCore(masm,
3844 GenerateCore(masm,
3854 GenerateCore(masm,
3863 Isolate* isolate = masm->isolate();
3886 void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
3927 Isolate* isolate = masm->isolate();
4011 masm->add(pc, ip, Operand(Code::kHeaderSize - kHeapObjectTag));
4062 void InstanceofStub::Generate(MacroAssembler* masm) {
4193 __ cmp(scratch, Operand(masm->isolate()->factory()->null_value()));
4219 FrameScope scope(masm, StackFrame::INTERNAL);
4237 void ArgumentsAccessStub::GenerateReadElement(MacroAssembler* masm) {
4288 void ArgumentsAccessStub::GenerateNewNonStrictSlow(MacroAssembler* masm) {
4312 void ArgumentsAccessStub::GenerateNewNonStrictFast(MacroAssembler* masm) {
4510 void ArgumentsAccessStub::GenerateNewStrict(MacroAssembler* masm) {
4611 void RegExpExecStub::Generate(MacroAssembler* masm) {
4642 Isolate* isolate = masm->isolate();
4692 Condition is_string = masm->IsObjectStringType(subject, r0);
4884 stub.GenerateCall(masm, r7);
4930 __ mov(r0, Operand(masm->isolate()->factory()->null_value()));
5026 void RegExpConstructResultStub::Generate(MacroAssembler* masm) {
5030 Factory* factory = masm->isolate()->factory();
5116 static void GenerateRecordCallTarget(MacroAssembler* masm) {
5124 ASSERT_EQ(*TypeFeedbackCells::MegamorphicSentinel(masm->isolate()),
5125 masm->isolate()->heap()->undefined_value());
5126 ASSERT_EQ(*TypeFeedbackCells::UninitializedSentinel(masm->isolate()),
5127 masm->isolate()->heap()->the_hole_value());
5155 void CallFunctionStub::Generate(MacroAssembler* masm) {
5218 masm->isolate()->builtins()->ArgumentsAdaptorTrampoline();
5230 __ Jump(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(),
5235 void CallConstructStub::Generate(MacroAssembler* masm) {
5248 GenerateRecordCallTarget(masm);
5272 __ Jump(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(),
5320 void StringCharCodeAtGenerator::GenerateFast(MacroAssembler* masm) {
5347 StringCharLoadGenerator::Generate(masm,
5359 MacroAssembler* masm,
5371 call_helper.BeforeCall(masm);
5388 call_helper.AfterCall(masm);
5398 call_helper.BeforeCall(masm);
5403 call_helper.AfterCall(masm);
5413 void StringCharFromCodeGenerator::GenerateFast(MacroAssembler* masm) {
5435 MacroAssembler* masm,
5440 call_helper.BeforeCall(masm);
5444 call_helper.AfterCall(masm);
5454 void StringCharAtGenerator::GenerateFast(MacroAssembler* masm) {
5455 char_code_at_generator_.GenerateFast(masm);
5456 char_from_code_generator_.GenerateFast(masm);
5461 MacroAssembler* masm,
5463 char_code_at_generator_.GenerateSlow(masm, call_helper);
5464 char_from_code_generator_.GenerateSlow(masm, call_helper);
5468 void StringHelper::GenerateCopyCharacters(MacroAssembler* masm,
5504 void StringHelper::GenerateCopyCharactersLong(MacroAssembler* masm,
5647 void StringHelper::GenerateTwoCharacterSymbolTableProbe(MacroAssembler* masm,
5677 StringHelper::GenerateHashInit(masm, hash, c1);
5678 StringHelper::GenerateHashAddCharacter(masm, hash, c2);
5679 StringHelper::GenerateHashGetHash(masm, hash);
5784 void StringHelper::GenerateHashInit(MacroAssembler* masm,
5798 void StringHelper::GenerateHashAddCharacter(MacroAssembler* masm,
5810 void StringHelper::GenerateHashGetHash(MacroAssembler* masm,
5826 void SubStringStub::Generate(MacroAssembler* masm) {
5867 Condition is_string = masm->IsObjectStringType(r0, r1);
5895 masm, r3, r4, r1, r5, r6, r7, r9, &make_two_character_string);
6022 StringHelper::GenerateCopyCharactersLong(masm, r1, r5, r2, r3, r4, r6, r7, r9,
6042 masm, r1, r5, r2, r3, r4, r6, r7, r9, DEST_ALWAYS_ALIGNED);
6045 Counters* counters = masm->isolate()->counters();
6056 void StringCompareStub::GenerateFlatAsciiStringEquals(MacroAssembler* masm,
6085 GenerateAsciiCharsCompareLoop(masm,
6095 void StringCompareStub::GenerateCompareFlatAsciiStrings(MacroAssembler* masm,
6115 GenerateAsciiCharsCompareLoop(masm,
6134 MacroAssembler* masm,
6164 void StringCompareStub::Generate(MacroAssembler* masm) {
6167 Counters* counters = masm->isolate()->counters();
6192 GenerateCompareFlatAsciiStrings(masm, r1, r0, r2, r3, r4, r5);
6201 void StringAddStub::Generate(MacroAssembler* masm) {
6205 Counters* counters = masm->isolate()->counters();
6234 masm, 1 * kPointerSize, r0, r2, r3, r4, r5, &call_builtin);
6239 masm, 0 * kPointerSize, r1, r2, r3, r4, r5, &call_builtin);
6306 masm, r2, r3, r6, r7, r4, r5, r9, &make_two_character_string);
6455 StringHelper::GenerateCopyCharacters(masm, r6, r7, r2, r4, true);
6457 StringHelper::GenerateCopyCharacters(masm, r6, r1, r3, r4, true);
6471 StringHelper::GenerateCopyCharacters(masm, r6, r7, r2, r4, false);
6473 StringHelper::GenerateCopyCharacters(masm, r6, r1, r3, r4, false);
6489 void StringAddStub::GenerateConvertArgument(MacroAssembler* masm,
6507 NumberToStringStub::GenerateLookupNumberStringCache(masm,
6538 void ICCompareStub::GenerateSmis(MacroAssembler* masm) {
6555 GenerateMiss(masm);
6559 void ICCompareStub::GenerateHeapNumbers(MacroAssembler* masm) {
6618 GenerateMiss(masm);
6622 void ICCompareStub::GenerateSymbols(MacroAssembler* masm) {
6656 GenerateMiss(masm);
6660 void ICCompareStub::GenerateStrings(MacroAssembler* masm) {
6718 masm, left, right, tmp1, tmp2, tmp3);
6721 masm, left, right, tmp1, tmp2, tmp3, tmp4);
6734 GenerateMiss(masm);
6738 void ICCompareStub::GenerateObjects(MacroAssembler* masm) {
6754 GenerateMiss(masm);
6758 void ICCompareStub::GenerateKnownObjects(MacroAssembler* masm) {
6773 GenerateMiss(masm);
6778 void ICCompareStub::GenerateMiss(MacroAssembler* masm) {
6782 ExternalReference(IC_Utility(IC::kCompareIC_Miss), masm->isolate());
6784 FrameScope scope(masm, StackFrame::INTERNAL);
6803 void DirectCEntryStub::Generate(MacroAssembler* masm) {
6808 void DirectCEntryStub::GenerateCall(MacroAssembler* masm,
6811 GenerateCall(masm, r2);
6815 void DirectCEntryStub::GenerateCall(MacroAssembler* masm,
6827 masm->SizeOfCodeGeneratedSince(&start));
6831 void StringDictionaryLookupStub::GenerateNegativeLookup(MacroAssembler* masm,
6917 void StringDictionaryLookupStub::GeneratePositiveLookup(MacroAssembler* masm,
6991 void StringDictionaryLookupStub::Generate(MacroAssembler* masm) {
7170 void RecordWriteStub::Generate(MacroAssembler* masm) {
7192 GenerateIncremental(masm, INCREMENTAL);
7195 GenerateIncremental(masm, INCREMENTAL_COMPACTION);
7199 ASSERT(Assembler::GetBranchOffset(masm->instr_at(0)) < (1 << 12));
7200 ASSERT(Assembler::GetBranchOffset(masm->instr_at(4)) < (1 << 12));
7201 PatchBranchIntoNop(masm, 0);
7202 PatchBranchIntoNop(masm, Assembler::kInstrSize);
7206 void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
7207 regs_.Save(masm);
7226 masm, kUpdateRememberedSetOnNoNeedToInformIncrementalMarker, mode);
7227 InformIncrementalMarker(masm, mode);
7228 regs_.Restore(masm);
7239 masm, kReturnOnNoNeedToInformIncrementalMarker, mode);
7240 InformIncrementalMarker(masm, mode);
7241 regs_.Restore(masm);
7246 void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) {
7247 regs_.SaveCallerSaveRegisters(masm, save_fp_regs_mode_);
7264 AllowExternalCallThatCantCauseGC scope(masm);
7268 masm->isolate()),
7274 masm->isolate()),
7277 regs_.RestoreCallerSaveRegisters(masm, save_fp_regs_mode_);
7282 MacroAssembler* masm,
7293 regs_.Restore(masm);
7337 regs_.Restore(masm);
7357 void StoreArrayLiteralElementStub::Generate(MacroAssembler* masm) {