6#include <private/qv4lookup_p.h>
7#include <private/qv4generatorobject_p.h>
16BaselineJIT::BaselineJIT(
Function *function)
18 , as(new BaselineAssembler(&(
function->compilationUnit->constants->asValue<
Value>())))
21BaselineJIT::~BaselineJIT()
24void BaselineJIT::generate()
30 for (
unsigned i = 0, ei =
function->compiledFunction->nLabelInfos;
i != ei; ++
i)
31 labels.insert(
int(
function->compiledFunction->labelInfoTable()[
i]));
33 as->generatePrologue();
35 as->loadAccumulatorFromFrame();
37 as->generateEpilogue();
43#define STORE_IP() as->storeInstructionPointer(nextInstructionOffset())
44#define STORE_ACC() as->saveAccumulatorInFrame()
45#define LOAD_ACC() as->loadAccumulatorFromFrame()
46#define BASELINEJIT_GENERATE_RUNTIME_CALL(function, destination) { \
47 as->GENERATE_RUNTIME_CALL(function, destination); \
48 if (Runtime::function::throws) \
49 as->checkException(); \
52void BaselineJIT::generate_Ret()
57void BaselineJIT::generate_Debug() { Q_UNREACHABLE(); }
59void BaselineJIT::generate_LoadConst(
int index)
64void BaselineJIT::generate_LoadZero()
66 as->loadValue(
Encode(
int(0)));
69void BaselineJIT::generate_LoadTrue()
71 as->loadValue(
Encode(
true));
74void BaselineJIT::generate_LoadFalse()
76 as->loadValue(
Encode(
false));
79void BaselineJIT::generate_LoadNull()
81 as->loadValue(Encode::null());
84void BaselineJIT::generate_LoadUndefined()
86 as->loadValue(Encode::undefined());
89void BaselineJIT::generate_LoadInt(
int value)
95void BaselineJIT::generate_MoveConst(
int constIndex,
int destTemp)
97 as->copyConst(constIndex, destTemp);
100void BaselineJIT::generate_LoadReg(
int reg)
105void BaselineJIT::generate_StoreReg(
int reg)
110void BaselineJIT::generate_MoveReg(
int srcReg,
int destReg)
113 as->moveReg(srcReg, destReg);
116void BaselineJIT::generate_LoadImport(
int index)
118 as->loadImport(
index);
121void BaselineJIT::generate_LoadLocal(
int index)
123 as->loadLocal(
index);
126void BaselineJIT::generate_StoreLocal(
int index)
128 as->checkException();
129 as->storeLocal(
index);
132void BaselineJIT::generate_LoadScopedLocal(
int scope,
int index)
134 as->loadLocal(
index, scope);
137void BaselineJIT::generate_StoreScopedLocal(
int scope,
int index)
139 as->checkException();
140 as->storeLocal(
index, scope);
143void BaselineJIT::generate_LoadRuntimeString(
int stringId)
145 as->loadString(stringId);
148void BaselineJIT::generate_MoveRegExp(
int regExpId,
int destReg)
150 as->prepareCallWithArgCount(2);
151 as->passInt32AsArg(regExpId, 1);
152 as->passEngineAsArg(0);
153 BASELINEJIT_GENERATE_RUNTIME_CALL(RegexpLiteral, CallResultDestination::InAccumulator);
154 as->storeReg(destReg);
157void BaselineJIT::generate_LoadClosure(
int value)
159 as->prepareCallWithArgCount(2);
160 as->passInt32AsArg(
value, 1);
161 as->passEngineAsArg(0);
162 BASELINEJIT_GENERATE_RUNTIME_CALL(Closure, CallResultDestination::InAccumulator);
165void BaselineJIT::generate_LoadName(
int name)
168 as->prepareCallWithArgCount(2);
169 as->passInt32AsArg(
name, 1);
170 as->passEngineAsArg(0);
171 BASELINEJIT_GENERATE_RUNTIME_CALL(LoadName, CallResultDestination::InAccumulator);
174void BaselineJIT::generate_LoadGlobalLookup(
int index)
177 as->prepareCallWithArgCount(3);
178 as->passInt32AsArg(
index, 2);
179 as->passFunctionAsArg(1);
180 as->passEngineAsArg(0);
181 BASELINEJIT_GENERATE_RUNTIME_CALL(LoadGlobalLookup, CallResultDestination::InAccumulator);
184void BaselineJIT::generate_LoadQmlContextPropertyLookup(
int index)
187 as->prepareCallWithArgCount(2);
188 as->passInt32AsArg(
index, 1);
189 as->passEngineAsArg(0);
190 BASELINEJIT_GENERATE_RUNTIME_CALL(LoadQmlContextPropertyLookup, CallResultDestination::InAccumulator);
193void BaselineJIT::generate_StoreNameSloppy(
int name)
197 as->prepareCallWithArgCount(3);
198 as->passAccumulatorAsArg(2);
199 as->passInt32AsArg(
name, 1);
200 as->passEngineAsArg(0);
201 BASELINEJIT_GENERATE_RUNTIME_CALL(StoreNameSloppy, CallResultDestination::Ignore);
205void BaselineJIT::generate_StoreNameStrict(
int name)
209 as->prepareCallWithArgCount(3);
210 as->passAccumulatorAsArg(2);
211 as->passInt32AsArg(
name, 1);
212 as->passEngineAsArg(0);
213 BASELINEJIT_GENERATE_RUNTIME_CALL(StoreNameStrict, CallResultDestination::Ignore);
217void BaselineJIT::generate_LoadElement(
int base)
221 as->prepareCallWithArgCount(3);
222 as->passAccumulatorAsArg(2);
223 as->passJSSlotAsArg(
base, 1);
224 as->passEngineAsArg(0);
225 BASELINEJIT_GENERATE_RUNTIME_CALL(LoadElement, CallResultDestination::InAccumulator);
228void BaselineJIT::generate_StoreElement(
int base,
int index)
232 as->prepareCallWithArgCount(4);
233 as->passAccumulatorAsArg(3);
234 as->passJSSlotAsArg(
index, 2);
235 as->passJSSlotAsArg(
base, 1);
236 as->passEngineAsArg(0);
237 BASELINEJIT_GENERATE_RUNTIME_CALL(StoreElement, CallResultDestination::Ignore);
241void BaselineJIT::generate_LoadProperty(
int name)
245 as->prepareCallWithArgCount(3);
246 as->passInt32AsArg(
name, 2);
247 as->passAccumulatorAsArg(1);
248 as->passEngineAsArg(0);
249 BASELINEJIT_GENERATE_RUNTIME_CALL(LoadProperty, CallResultDestination::InAccumulator);
252void BaselineJIT::generate_LoadOptionalProperty(
int name,
int offset)
254 labels.insert(as->jumpEqNull(absoluteOffset(
offset)));
256 generate_LoadProperty(
name);
259void BaselineJIT::generate_GetLookup(
int index)
263 as->prepareCallWithArgCount(4);
264 as->passInt32AsArg(
index, 3);
265 as->passAccumulatorAsArg(2);
266 as->passFunctionAsArg(1);
267 as->passEngineAsArg(0);
268 BASELINEJIT_GENERATE_RUNTIME_CALL(GetLookup, CallResultDestination::InAccumulator);
271void BaselineJIT::generate_GetOptionalLookup(
int index,
int offset)
273 labels.insert(as->jumpEqNull(absoluteOffset(
offset)));
275 generate_GetLookup(
index);
278void BaselineJIT::generate_StoreProperty(
int name,
int base)
282 as->prepareCallWithArgCount(4);
283 as->passAccumulatorAsArg(3);
284 as->passInt32AsArg(
name, 2);
285 as->passJSSlotAsArg(
base, 1);
286 as->passEngineAsArg(0);
287 BASELINEJIT_GENERATE_RUNTIME_CALL(StoreProperty, CallResultDestination::Ignore);
291void BaselineJIT::generate_SetLookup(
int index,
int base)
295 as->prepareCallWithArgCount(4);
296 as->passAccumulatorAsArg(3);
297 as->passInt32AsArg(
index, 2);
298 as->passJSSlotAsArg(
base, 1);
299 as->passFunctionAsArg(0);
301 BASELINEJIT_GENERATE_RUNTIME_CALL(SetLookupStrict, CallResultDestination::InAccumulator)
303 BASELINEJIT_GENERATE_RUNTIME_CALL(SetLookupSloppy, CallResultDestination::InAccumulator)
306void BaselineJIT::generate_LoadSuperProperty(
int property)
309 as->prepareCallWithArgCount(2);
311 as->passEngineAsArg(0);
312 BASELINEJIT_GENERATE_RUNTIME_CALL(LoadSuperProperty, CallResultDestination::InAccumulator);
315void BaselineJIT::generate_StoreSuperProperty(
int property)
319 as->prepareCallWithArgCount(3);
320 as->passAccumulatorAsArg(2);
322 as->passEngineAsArg(0);
323 BASELINEJIT_GENERATE_RUNTIME_CALL(StoreSuperProperty, CallResultDestination::Ignore);
327void BaselineJIT::generate_Yield()
333void BaselineJIT::generate_YieldStar()
339void BaselineJIT::generate_Resume(
int)
345void BaselineJIT::generate_CallValue(
int name,
int argc,
int argv)
348 as->prepareCallWithArgCount(4);
349 as->passInt32AsArg(argc, 3);
350 as->passJSSlotAsArg(argv, 2);
351 as->passJSSlotAsArg(
name, 1);
352 as->passEngineAsArg(0);
353 BASELINEJIT_GENERATE_RUNTIME_CALL(CallValue, CallResultDestination::InAccumulator);
356void BaselineJIT::generate_CallWithReceiver(
int name,
int thisObject,
int argc,
int argv)
359 as->prepareCallWithArgCount(5);
360 as->passInt32AsArg(argc, 4);
361 as->passJSSlotAsArg(argv, 3);
362 as->passJSSlotAsArg(thisObject, 2);
363 as->passJSSlotAsArg(
name, 1);
364 as->passEngineAsArg(0);
365 BASELINEJIT_GENERATE_RUNTIME_CALL(CallWithReceiver, CallResultDestination::InAccumulator);
368void BaselineJIT::generate_CallProperty(
int name,
int base,
int argc,
int argv)
371 as->prepareCallWithArgCount(5);
372 as->passInt32AsArg(argc, 4);
373 as->passJSSlotAsArg(argv, 3);
374 as->passInt32AsArg(
name, 2);
375 as->passJSSlotAsArg(
base, 1);
376 as->passEngineAsArg(0);
377 BASELINEJIT_GENERATE_RUNTIME_CALL(CallProperty, CallResultDestination::InAccumulator);
380void BaselineJIT::generate_CallPropertyLookup(
int lookupIndex,
int base,
int argc,
int argv)
383 as->prepareCallWithArgCount(5);
384 as->passInt32AsArg(argc, 4);
385 as->passJSSlotAsArg(argv, 3);
386 as->passInt32AsArg(lookupIndex, 2);
387 as->passJSSlotAsArg(
base, 1);
388 as->passEngineAsArg(0);
389 BASELINEJIT_GENERATE_RUNTIME_CALL(CallPropertyLookup, CallResultDestination::InAccumulator);
392void BaselineJIT::generate_CallName(
int name,
int argc,
int argv)
395 as->prepareCallWithArgCount(4);
396 as->passInt32AsArg(argc, 3);
397 as->passJSSlotAsArg(argv, 2);
398 as->passInt32AsArg(
name, 1);
399 as->passEngineAsArg(0);
400 BASELINEJIT_GENERATE_RUNTIME_CALL(CallName, CallResultDestination::InAccumulator);
403void BaselineJIT::generate_CallPossiblyDirectEval(
int argc,
int argv)
406 as->prepareCallWithArgCount(3);
407 as->passInt32AsArg(argc, 2);
408 as->passJSSlotAsArg(argv, 1);
409 as->passEngineAsArg(0);
410 BASELINEJIT_GENERATE_RUNTIME_CALL(CallPossiblyDirectEval, CallResultDestination::InAccumulator);
413void BaselineJIT::generate_CallGlobalLookup(
int index,
int argc,
int argv)
416 as->prepareCallWithArgCount(4);
417 as->passInt32AsArg(argc, 3);
418 as->passJSSlotAsArg(argv, 2);
419 as->passInt32AsArg(
index, 1);
420 as->passEngineAsArg(0);
421 BASELINEJIT_GENERATE_RUNTIME_CALL(CallGlobalLookup, CallResultDestination::InAccumulator);
424void BaselineJIT::generate_CallQmlContextPropertyLookup(
int index,
int argc,
int argv)
427 as->prepareCallWithArgCount(4);
428 as->passInt32AsArg(argc, 3);
429 as->passJSSlotAsArg(argv, 2);
430 as->passInt32AsArg(
index, 1);
431 as->passEngineAsArg(0);
432 BASELINEJIT_GENERATE_RUNTIME_CALL(CallQmlContextPropertyLookup, CallResultDestination::InAccumulator);
435void BaselineJIT::generate_CallWithSpread(
int func,
int thisObject,
int argc,
int argv)
438 as->prepareCallWithArgCount(5);
439 as->passInt32AsArg(argc, 4);
440 as->passJSSlotAsArg(argv, 3);
441 as->passJSSlotAsArg(thisObject, 2);
442 as->passJSSlotAsArg(
func, 1);
443 as->passEngineAsArg(0);
444 BASELINEJIT_GENERATE_RUNTIME_CALL(CallWithSpread, CallResultDestination::InAccumulator);
447void BaselineJIT::generate_TailCall(
int func,
int thisObject,
int argc,
int argv)
450 as->jsTailCall(
func, thisObject, argc, argv);
453void BaselineJIT::generate_Construct(
int func,
int argc,
int argv)
457 as->prepareCallWithArgCount(5);
458 as->passInt32AsArg(argc, 4);
459 as->passJSSlotAsArg(argv, 3);
460 as->passAccumulatorAsArg(2);
461 as->passJSSlotAsArg(
func, 1);
462 as->passEngineAsArg(0);
463 BASELINEJIT_GENERATE_RUNTIME_CALL(
Construct, CallResultDestination::InAccumulator);
466void BaselineJIT::generate_ConstructWithSpread(
int func,
int argc,
int argv)
470 as->prepareCallWithArgCount(5);
471 as->passInt32AsArg(argc, 4);
472 as->passJSSlotAsArg(argv, 3);
473 as->passAccumulatorAsArg(2);
474 as->passJSSlotAsArg(
func, 1);
475 as->passEngineAsArg(0);
476 BASELINEJIT_GENERATE_RUNTIME_CALL(ConstructWithSpread, CallResultDestination::InAccumulator);
479void BaselineJIT::generate_SetUnwindHandler(
int offset)
482 labels.insert(as->setUnwindHandler(absoluteOffset(
offset)));
484 as->clearUnwindHandler();
487void BaselineJIT::generate_UnwindDispatch()
489 as->unwindDispatch();
492void BaselineJIT::generate_UnwindToLabel(
int level,
int offset)
494 labels.insert(as->unwindToLabel(
level, absoluteOffset(
offset)));
497void BaselineJIT::generate_DeadTemporalZoneCheck(
int name)
499 as->deadTemporalZoneCheck(nextInstructionOffset(),
name);
502void BaselineJIT::generate_ThrowException()
506 as->prepareCallWithArgCount(2);
507 as->passAccumulatorAsArg(1);
508 as->passEngineAsArg(0);
509 BASELINEJIT_GENERATE_RUNTIME_CALL(ThrowException, CallResultDestination::Ignore);
510 as->gotoCatchException();
515void BaselineJIT::generate_GetException() { as->getException(); }
516void BaselineJIT::generate_SetException() { as->setException(); }
518void BaselineJIT::generate_CreateCallContext()
521 as->prepareCallWithArgCount(1);
522 as->passCppFrameAsArg(0);
523 BASELINEJIT_GENERATE_RUNTIME_CALL(PushCallContext, CallResultDestination::Ignore);
527void BaselineJIT::generate_PushCatchContext(
int index,
int name) { as->pushCatchContext(
index,
name); }
529void BaselineJIT::generate_PushWithContext()
532 as->saveAccumulatorInFrame();
533 as->prepareCallWithArgCount(2);
534 as->passJSSlotAsArg(CallData::Accumulator, 1);
535 as->passEngineAsArg(0);
536 BASELINEJIT_GENERATE_RUNTIME_CALL(PushWithContext, CallResultDestination::InAccumulator);
539void BaselineJIT::generate_PushBlockContext(
int index)
541 as->saveAccumulatorInFrame();
542 as->prepareCallWithArgCount(2);
543 as->passInt32AsArg(
index, 1);
544 as->passEngineAsArg(0);
545 BASELINEJIT_GENERATE_RUNTIME_CALL(PushBlockContext, CallResultDestination::Ignore);
546 as->loadAccumulatorFromFrame();
549void BaselineJIT::generate_CloneBlockContext()
551 as->saveAccumulatorInFrame();
552 as->prepareCallWithArgCount(1);
553 as->passEngineAsArg(0);
554 BASELINEJIT_GENERATE_RUNTIME_CALL(CloneBlockContext, CallResultDestination::Ignore);
555 as->loadAccumulatorFromFrame();
558void BaselineJIT::generate_PushScriptContext(
int index)
560 as->saveAccumulatorInFrame();
561 as->prepareCallWithArgCount(2);
562 as->passInt32AsArg(
index, 1);
563 as->passEngineAsArg(0);
564 BASELINEJIT_GENERATE_RUNTIME_CALL(PushScriptContext, CallResultDestination::Ignore);
565 as->loadAccumulatorFromFrame();
568void BaselineJIT::generate_PopScriptContext()
570 as->saveAccumulatorInFrame();
571 as->prepareCallWithArgCount(1);
572 as->passEngineAsArg(0);
573 BASELINEJIT_GENERATE_RUNTIME_CALL(PopScriptContext, CallResultDestination::Ignore);
574 as->loadAccumulatorFromFrame();
577void BaselineJIT::generate_PopContext() { as->popContext(); }
579void BaselineJIT::generate_GetIterator(
int iterator)
581 as->saveAccumulatorInFrame();
582 as->prepareCallWithArgCount(3);
583 as->passInt32AsArg(iterator, 2);
584 as->passAccumulatorAsArg(1);
585 as->passEngineAsArg(0);
586 BASELINEJIT_GENERATE_RUNTIME_CALL(GetIterator, CallResultDestination::InAccumulator);
589void BaselineJIT::generate_IteratorNext(
int value,
int done)
591 as->saveAccumulatorInFrame();
592 as->prepareCallWithArgCount(3);
593 as->passJSSlotAsArg(
value, 2);
594 as->passAccumulatorAsArg(1);
595 as->passEngineAsArg(0);
596 BASELINEJIT_GENERATE_RUNTIME_CALL(IteratorNext, CallResultDestination::InAccumulator);
600void BaselineJIT::generate_IteratorNextForYieldStar(
int iterator,
int object)
602 as->saveAccumulatorInFrame();
603 as->prepareCallWithArgCount(4);
604 as->passJSSlotAsArg(
object, 3);
605 as->passJSSlotAsArg(iterator, 2);
606 as->passAccumulatorAsArg(1);
607 as->passEngineAsArg(0);
608 BASELINEJIT_GENERATE_RUNTIME_CALL(IteratorNextForYieldStar, CallResultDestination::InAccumulator);
611void BaselineJIT::generate_IteratorClose(
int done)
613 as->saveAccumulatorInFrame();
614 as->prepareCallWithArgCount(3);
615 as->passJSSlotAsArg(
done, 2);
616 as->passAccumulatorAsArg(1);
617 as->passEngineAsArg(0);
618 BASELINEJIT_GENERATE_RUNTIME_CALL(IteratorClose, CallResultDestination::InAccumulator);
621void BaselineJIT::generate_DestructureRestElement()
623 as->saveAccumulatorInFrame();
624 as->prepareCallWithArgCount(2);
625 as->passAccumulatorAsArg(1);
626 as->passEngineAsArg(0);
627 BASELINEJIT_GENERATE_RUNTIME_CALL(DestructureRestElement, CallResultDestination::InAccumulator);
630void BaselineJIT::generate_DeleteProperty(
int base,
int index)
633 as->prepareCallWithArgCount(4);
634 as->passJSSlotAsArg(
index, 3);
635 as->passJSSlotAsArg(
base, 2);
636 as->passFunctionAsArg(1);
637 as->passEngineAsArg(0);
638 BASELINEJIT_GENERATE_RUNTIME_CALL(DeleteProperty, CallResultDestination::InAccumulator);
641void BaselineJIT::generate_DeleteName(
int name)
644 as->prepareCallWithArgCount(3);
645 as->passInt32AsArg(
name, 2);
646 as->passFunctionAsArg(1);
647 as->passEngineAsArg(0);
648 BASELINEJIT_GENERATE_RUNTIME_CALL(DeleteName, CallResultDestination::InAccumulator);
651void BaselineJIT::generate_TypeofName(
int name)
653 as->prepareCallWithArgCount(2);
654 as->passInt32AsArg(
name, 1);
655 as->passEngineAsArg(0);
656 BASELINEJIT_GENERATE_RUNTIME_CALL(TypeofName, CallResultDestination::InAccumulator);
659void BaselineJIT::generate_TypeofValue()
662 as->prepareCallWithArgCount(2);
663 as->passAccumulatorAsArg(1);
664 as->passEngineAsArg(0);
665 BASELINEJIT_GENERATE_RUNTIME_CALL(TypeofValue, CallResultDestination::InAccumulator);
668void BaselineJIT::generate_DeclareVar(
int varName,
int isDeletable)
671 as->prepareCallWithArgCount(3);
672 as->passInt32AsArg(varName, 2);
673 as->passInt32AsArg(isDeletable, 1);
674 as->passEngineAsArg(0);
675 BASELINEJIT_GENERATE_RUNTIME_CALL(DeclareVar, CallResultDestination::Ignore);
679void BaselineJIT::generate_DefineArray(
int argc,
int args)
681 as->prepareCallWithArgCount(3);
682 as->passInt32AsArg(argc, 2);
683 as->passJSSlotAsArg(
args, 1);
684 as->passEngineAsArg(0);
685 BASELINEJIT_GENERATE_RUNTIME_CALL(ArrayLiteral, CallResultDestination::InAccumulator);
688void BaselineJIT::generate_DefineObjectLiteral(
int internalClassId,
int argc,
int args)
690 as->prepareCallWithArgCount(4);
691 as->passInt32AsArg(argc, 3);
692 as->passJSSlotAsArg(
args, 2);
693 as->passInt32AsArg(internalClassId, 1);
694 as->passEngineAsArg(0);
695 BASELINEJIT_GENERATE_RUNTIME_CALL(ObjectLiteral, CallResultDestination::InAccumulator);
698void BaselineJIT::generate_CreateClass(
int classIndex,
int heritage,
int computedNames)
700 as->prepareCallWithArgCount(4);
701 as->passJSSlotAsArg(computedNames, 3);
702 as->passJSSlotAsArg(heritage, 2);
703 as->passInt32AsArg(classIndex, 1);
704 as->passEngineAsArg(0);
705 BASELINEJIT_GENERATE_RUNTIME_CALL(CreateClass, CallResultDestination::InAccumulator);
708void BaselineJIT::generate_CreateMappedArgumentsObject()
710 as->prepareCallWithArgCount(1);
711 as->passEngineAsArg(0);
712 BASELINEJIT_GENERATE_RUNTIME_CALL(CreateMappedArgumentsObject,
713 CallResultDestination::InAccumulator);
716void BaselineJIT::generate_CreateUnmappedArgumentsObject()
718 as->prepareCallWithArgCount(1);
719 as->passEngineAsArg(0);
720 BASELINEJIT_GENERATE_RUNTIME_CALL(CreateUnmappedArgumentsObject,
721 CallResultDestination::InAccumulator);
724void BaselineJIT::generate_CreateRestParameter(
int argIndex)
726 as->prepareCallWithArgCount(2);
727 as->passInt32AsArg(argIndex, 1);
728 as->passEngineAsArg(0);
729 BASELINEJIT_GENERATE_RUNTIME_CALL(CreateRestParameter, CallResultDestination::InAccumulator);
732void BaselineJIT::generate_ConvertThisToObject()
735 as->prepareCallWithArgCount(2);
736 as->passJSSlotAsArg(CallData::This, 1);
737 as->passEngineAsArg(0);
738 BASELINEJIT_GENERATE_RUNTIME_CALL(ConvertThisToObject, CallResultDestination::InAccumulator);
739 as->storeReg(CallData::This);
743void BaselineJIT::generate_LoadSuperConstructor()
745 as->prepareCallWithArgCount(2);
746 as->passJSSlotAsArg(CallData::Function, 1);
747 as->passEngineAsArg(0);
748 BASELINEJIT_GENERATE_RUNTIME_CALL(LoadSuperConstructor, CallResultDestination::InAccumulator);
751void BaselineJIT::generate_ToObject()
754 as->prepareCallWithArgCount(2);
755 as->passAccumulatorAsArg(1);
756 as->passEngineAsArg(0);
757 BASELINEJIT_GENERATE_RUNTIME_CALL(ToObject, CallResultDestination::InAccumulator);
761void BaselineJIT::generate_Jump(
int offset)
763 labels.insert(as->jump(absoluteOffset(
offset)));
766void BaselineJIT::generate_JumpTrue(
int offset)
768 labels.insert(as->jumpTrue(absoluteOffset(
offset)));
771void BaselineJIT::generate_JumpFalse(
int offset)
773 labels.insert(as->jumpFalse(absoluteOffset(
offset)));
776void BaselineJIT::generate_JumpNoException(
int offset)
778 labels.insert(as->jumpNoException(absoluteOffset(
offset)));
781void BaselineJIT::generate_JumpNotUndefined(
int offset)
783 labels.insert(as->jumpNotUndefined(absoluteOffset(
offset)));
786void BaselineJIT::generate_CheckException()
788 as->checkException();
791void BaselineJIT::generate_CmpEqNull() { as->cmpeqNull(); }
792void BaselineJIT::generate_CmpNeNull() { as->cmpneNull(); }
793void BaselineJIT::generate_CmpEqInt(
int lhs) { as->cmpeqInt(lhs); }
794void BaselineJIT::generate_CmpNeInt(
int lhs) { as->cmpneInt(lhs); }
795void BaselineJIT::generate_CmpEq(
int lhs) { as->cmpeq(lhs); }
796void BaselineJIT::generate_CmpNe(
int lhs) { as->cmpne(lhs); }
797void BaselineJIT::generate_CmpGt(
int lhs) { as->cmpgt(lhs); }
798void BaselineJIT::generate_CmpGe(
int lhs) { as->cmpge(lhs); }
799void BaselineJIT::generate_CmpLt(
int lhs) { as->cmplt(lhs); }
800void BaselineJIT::generate_CmpLe(
int lhs) { as->cmple(lhs); }
801void BaselineJIT::generate_CmpStrictEqual(
int lhs) { as->cmpStrictEqual(lhs); }
802void BaselineJIT::generate_CmpStrictNotEqual(
int lhs) { as->cmpStrictNotEqual(lhs); }
804void BaselineJIT::generate_CmpIn(
int lhs)
808 as->prepareCallWithArgCount(3);
809 as->passAccumulatorAsArg(2);
810 as->passJSSlotAsArg(lhs, 1);
811 as->passEngineAsArg(0);
812 BASELINEJIT_GENERATE_RUNTIME_CALL(In, CallResultDestination::InAccumulator);
815void BaselineJIT::generate_CmpInstanceOf(
int lhs)
818 as->prepareCallWithArgCount(3);
819 as->passAccumulatorAsArg(2);
820 as->passJSSlotAsArg(lhs, 1);
821 as->passEngineAsArg(0);
822 BASELINEJIT_GENERATE_RUNTIME_CALL(Instanceof, CallResultDestination::InAccumulator);
825void BaselineJIT::generate_As(
int lhs)
828 as->prepareCallWithArgCount(3);
829 as->passAccumulatorAsArg(2);
830 as->passJSSlotAsArg(lhs, 1);
831 as->passEngineAsArg(0);
832 BASELINEJIT_GENERATE_RUNTIME_CALL(As, CallResultDestination::InAccumulator);
835void BaselineJIT::generate_UNot() { as->unot(); }
836void BaselineJIT::generate_UPlus() { as->toNumber(); }
837void BaselineJIT::generate_UMinus() { as->uminus(); }
838void BaselineJIT::generate_UCompl() { as->ucompl(); }
839void BaselineJIT::generate_Increment() { as->inc(); }
840void BaselineJIT::generate_Decrement() { as->dec(); }
841void BaselineJIT::generate_Add(
int lhs) { as->add(lhs); }
843void BaselineJIT::generate_BitAnd(
int lhs) { as->bitAnd(lhs); }
844void BaselineJIT::generate_BitOr(
int lhs) { as->bitOr(lhs); }
845void BaselineJIT::generate_BitXor(
int lhs) { as->bitXor(lhs); }
846void BaselineJIT::generate_UShr(
int lhs) { as->ushr(lhs); }
847void BaselineJIT::generate_Shr(
int lhs) { as->shr(lhs); }
848void BaselineJIT::generate_Shl(
int lhs) { as->shl(lhs); }
850void BaselineJIT::generate_BitAndConst(
int rhs) { as->bitAndConst(rhs); }
851void BaselineJIT::generate_BitOrConst(
int rhs) { as->bitOrConst(rhs); }
852void BaselineJIT::generate_BitXorConst(
int rhs) { as->bitXorConst(rhs); }
853void BaselineJIT::generate_UShrConst(
int rhs) { as->ushrConst(rhs); }
854void BaselineJIT::generate_ShrConst(
int rhs) { as->shrConst(rhs); }
855void BaselineJIT::generate_ShlConst(
int rhs) { as->shlConst(rhs); }
857void BaselineJIT::generate_Exp(
int lhs) {
860 as->prepareCallWithArgCount(2);
861 as->passAccumulatorAsArg(1);
862 as->passJSSlotAsArg(lhs, 0);
863 BASELINEJIT_GENERATE_RUNTIME_CALL(Exp, CallResultDestination::InAccumulator);
865void BaselineJIT::generate_Mul(
int lhs) { as->mul(lhs); }
866void BaselineJIT::generate_Div(
int lhs) { as->div(lhs); }
867void BaselineJIT::generate_Mod(
int lhs) { as->mod(lhs); }
868void BaselineJIT::generate_Sub(
int lhs) { as->sub(lhs); }
882void BaselineJIT::generate_InitializeBlockDeadTemporalZone(
int firstReg,
int count)
884 as->loadValue(Value::emptyValue().rawValue());
889void BaselineJIT::generate_ThrowOnNullOrUndefined()
892 as->prepareCallWithArgCount(2);
893 as->passAccumulatorAsArg(1);
894 as->passEngineAsArg(0);
895 BASELINEJIT_GENERATE_RUNTIME_CALL(ThrowOnNullOrUndefined, CallResultDestination::Ignore);
899void BaselineJIT::generate_GetTemplateObject(
int index)
901 as->prepareCallWithArgCount(2);
902 as->passInt32AsArg(
index, 1);
903 as->passFunctionAsArg(0);
904 BASELINEJIT_GENERATE_RUNTIME_CALL(GetTemplateObject, CallResultDestination::InAccumulator);
909 if (labels.contains(currentInstructionOffset()))
910 as->addLabel(currentInstructionOffset());
911 return ProcessInstruction;
\qmltype Particle \inqmlmodule QtQuick.Particles
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction function
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
GLenum GLuint GLint level
GLenum GLenum GLsizei count
GLenum GLuint GLintptr offset