arkcompiler_ets_runtime/ecmascript/compiler/baseline/baseline_compiler_builtins.h
qiuyu f86405e0ca Optimize default ctor for derivative class
Issue: https://gitee.com/openharmony/arkcompiler_runtime_core/issues/IA8WK8

1. adapt interpreter for the new isa callruntime.SuperCallForwardAllArgs
2. adapt asm-interpreter for callruntime.SuperCallForwardAllArgs
3. adapt jit/aot for callruntime.SuperCallForwardAllArgs
4. adapt baseline jit for callruntime.SuperCallForwardAllArgs
5. remove the constraint for functions with zero icSlotSize so that
the default ctor for derivative class can be compiled into native code.

Signed-off-by: qiuyu <qiuyu22@huawei.com>
Change-Id: I346da77403de0d14f53532bc51c40a3ca27fc689
2024-08-25 18:07:36 +08:00

281 lines
20 KiB
C++

/*
* Copyright (c) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef ECMASCRIPT_COMPILER_BASELINE_BASELINE_COMPILER_BUILTINS_H
#define ECMASCRIPT_COMPILER_BASELINE_BASELINE_COMPILER_BUILTINS_H
namespace panda::ecmascript::kungfu {
#define BASELINE_COMPILER_BUILTIN_LIST(V) \
V(BaselineTryLdGLobalByNameImm8ID16) \
V(BaselineStToGlobalRecordImm16ID16) \
V(BaselineLdaStrID16) \
V(BaselineCallArg1Imm8V8) \
V(BaselineLdsymbol) \
V(BaselineLdglobal) \
V(BaselinePoplexenv) \
V(BaselineGetunmappedargs) \
V(BaselineAsyncfunctionenter) \
V(BaselineCreateasyncgeneratorobjV8) \
V(BaselineDebugger) \
V(BaselineGetpropiterator) \
V(BaselineGetiteratorImm8) \
V(BaselineGetiteratorImm16) \
V(BaselineCloseiteratorImm8V8) \
V(BaselineCloseiteratorImm16V8) \
V(BaselineAsyncgeneratorresolveV8V8V8) \
V(BaselineCreateemptyobject) \
V(BaselineCreateemptyarrayImm8) \
V(BaselineCreateemptyarrayImm16) \
V(BaselineCreategeneratorobjV8) \
V(BaselineCreateiterresultobjV8V8) \
V(BaselineCreateobjectwithexcludedkeysImm8V8V8) \
V(BaselineCallthis0Imm8V8) \
V(BaselineCreatearraywithbufferImm8Id16) \
V(BaselineCreatearraywithbufferImm16Id16) \
V(BaselineCallthis1Imm8V8V8) \
V(BaselineCallthis2Imm8V8V8V8) \
V(BaselineCreateobjectwithbufferImm8Id16) \
V(BaselineCreateobjectwithbufferImm16Id16) \
V(BaselineCreateregexpwithliteralImm8Id16Imm8) \
V(BaselineCreateregexpwithliteralImm16Id16Imm8) \
V(BaselineNewobjapplyImm8V8) \
V(BaselineNewobjapplyImm16V8) \
V(BaselineNewlexenvImm8) \
V(BaselineNewlexenvwithnameImm8Id16) \
V(BaselineAdd2Imm8V8) \
V(BaselineSub2Imm8V8) \
V(BaselineMul2Imm8V8) \
V(BaselineDiv2Imm8V8) \
V(BaselineMod2Imm8V8) \
V(BaselineEqImm8V8) \
V(BaselineNoteqImm8V8) \
V(BaselineLessImm8V8) \
V(BaselineLesseqImm8V8) \
V(BaselineGreaterImm8V8) \
V(BaselineGreatereqImm8V8) \
V(BaselineShl2Imm8V8) \
V(BaselineShr2Imm8V8) \
V(BaselineAshr2Imm8V8) \
V(BaselineAnd2Imm8V8) \
V(BaselineOr2Imm8V8) \
V(BaselineXor2Imm8V8) \
V(BaselineExpImm8V8) \
V(BaselineTypeofImm8) \
V(BaselineTypeofImm16) \
V(BaselineTonumberImm8) \
V(BaselineTonumericImm8) \
V(BaselineNegImm8) \
V(BaselineNotImm8) \
V(BaselineIncImm8) \
V(BaselineDecImm8) \
V(BaselineIsinImm8V8) \
V(BaselineInstanceofImm8V8) \
V(BaselineStrictnoteqImm8V8) \
V(BaselineStricteqImm8V8) \
V(BaselineIstrue) \
V(BaselineIsfalse) \
V(BaselineCallthis3Imm8V8V8V8V8) \
V(BaselineCallthisrangeImm8Imm8V8) \
V(BaselineSupercallthisrangeImm8Imm8V8) \
V(BaselineSupercallarrowrangeImm8Imm8V8) \
V(BaselineDefinefuncImm8Id16Imm8) \
V(BaselineDefinefuncImm16Id16Imm8) \
V(BaselineDefinemethodImm8Id16Imm8) \
V(BaselineDefinemethodImm16Id16Imm8) \
V(BaselineCallarg0Imm8) \
V(BaselineSupercallspreadImm8V8) \
V(BaselineCallRuntimeSupercallforwardallargsPrefV8) \
V(BaselineApplyImm8V8V8) \
V(BaselineCallargs2Imm8V8V8) \
V(BaselineCallargs3Imm8V8V8V8) \
V(BaselineCallrangeImm8Imm8V8) \
V(BaselineLdexternalmodulevarImm8) \
V(BaselineLdthisbynameImm8Id16) \
V(BaselineDefinegettersetterbyvalueV8V8V8V8) \
V(BaselineLdthisbynameImm16Id16) \
V(BaselineStthisbynameImm8Id16) \
V(BaselineStthisbynameImm16Id16) \
V(BaselineLdthisbyvalueImm8) \
V(BaselineLdthisbyvalueImm16) \
V(BaselineStthisbyvalueImm8V8) \
V(BaselineStthisbyvalueImm16V8) \
V(BaselineDynamicimport) \
V(BaselineDefineclasswithbufferImm8Id16Id16Imm16V8) \
V(BaselineDefineclasswithbufferImm16Id16Id16Imm16V8) \
V(BaselineResumegenerator) \
V(BaselineGetresumemod) \
V(BaselineGettemplateobjectImm8) \
V(BaselineGettemplateobjectImm16) \
V(BaselineGetnextpropnameV8) \
V(BaselineSetobjectwithprotoImm8V8) \
V(BaselineDelobjpropV8) \
V(BaselineSuspendgeneratorV8) \
V(BaselineAsyncfunctionawaituncaughtV8) \
V(BaselineCopydatapropertiesV8) \
V(BaselineStarrayspreadV8V8) \
V(BaselineSetobjectwithprotoImm16V8) \
V(BaselineLdobjbyvalueImm8V8) \
V(BaselineLdobjbyvalueImm16V8) \
V(BaselineStobjbyvalueImm8V8V8) \
V(BaselineStobjbyvalueImm16V8V8) \
V(BaselineStownbyvalueImm8V8V8) \
V(BaselineStownbyvalueImm16V8V8) \
V(BaselineLdsuperbyvalueImm8V8) \
V(BaselineLdsuperbyvalueImm16V8) \
V(BaselineStsuperbyvalueImm8V8V8) \
V(BaselineStsuperbyvalueImm16V8V8) \
V(BaselineLdobjbyindexImm8Imm16) \
V(BaselineLdobjbyindexImm16Imm16) \
V(BaselineStobjbyindexImm8V8Imm16) \
V(BaselineStobjbyindexImm16V8Imm16) \
V(BaselineStownbyindexImm8V8Imm16) \
V(BaselineStownbyindexImm16V8Imm16) \
V(BaselineAsyncfunctionresolveV8) \
V(BaselineAsyncfunctionrejectV8) \
V(BaselineCopyrestargsImm8) \
V(BaselineLdlexvarImm4Imm4) \
V(BaselineStlexvarImm4Imm4) \
V(BaselineGetmodulenamespaceImm8) \
V(BaselineStmodulevarImm8) \
V(BaselineTryldglobalbynameImm16Id16) \
V(BaselineTrystglobalbynameImm8Id16) \
V(BaselineTrystglobalbynameImm16Id16) \
V(BaselineLdglobalvarImm16Id16) \
V(BaselineStglobalvarImm16Id16) \
V(BaselineLdobjbynameImm8Id16) \
V(BaselineLdobjbynameImm16Id16) \
V(BaselineStobjbynameImm8Id16V8) \
V(BaselineStobjbynameImm16Id16V8) \
V(BaselineStownbynameImm8Id16V8) \
V(BaselineStownbynameImm16Id16V8) \
V(BaselineLdsuperbynameImm8Id16) \
V(BaselineLdsuperbynameImm16Id16) \
V(BaselineStsuperbynameImm8Id16V8) \
V(BaselineStsuperbynameImm16Id16V8) \
V(BaselineLdlocalmodulevarImm8) \
V(BaselineStconsttoglobalrecordImm16Id16) \
V(BaselineStownbyvaluewithnamesetImm8V8V8) \
V(BaselineStownbyvaluewithnamesetImm16V8V8) \
V(BaselineStownbynamewithnamesetImm8Id16V8) \
V(BaselineStownbynamewithnamesetImm16Id16V8) \
V(BaselineLdbigintId16) \
V(BaselineFldaiImm64) \
V(BaselineReturn) \
V(BaselineLdlexvarImm8Imm8) \
V(BaselineStlexvarImm8Imm8) \
V(BaselineJnstricteqV8Imm16) \
V(BaselineAsyncgeneratorrejectV8) \
V(BaselineSetgeneratorstateImm8) \
V(BaselineGetasynciteratorImm8) \
V(BaselineLdPrivatePropertyImm8Imm16Imm16) \
V(BaselineStPrivatePropertyImm8Imm16Imm16V8) \
V(BaselineTestInImm8Imm16Imm16) \
V(BaselineDeprecatedLdlexenvPrefNone) \
V(BaselineWideCreateobjectwithexcludedkeysPrefImm16V8V8) \
V(BaselineThrowPrefNone) \
V(BaselineDeprecatedPoplexenvPrefNone) \
V(BaselineWideNewobjrangePrefImm16V8) \
V(BaselineThrowNotexistsPrefNone) \
V(BaselineDeprecatedGetiteratornextPrefV8V8) \
V(BaselineWideNewlexenvPrefImm16) \
V(BaselineThrowPatternnoncoerciblePrefNone) \
V(BaselineDeprecatedCreatearraywithbufferPrefImm16) \
V(BaselineWideNewlexenvwithnamePrefImm16Id16) \
V(BaselineThrowDeletesuperpropertyPrefNone) \
V(BaselineDeprecatedCreateobjectwithbufferPrefImm16) \
V(BaselineNewobjrangeImm8Imm8V8) \
V(BaselineNewobjrangeImm16Imm8V8) \
V(BaselineWideCallrangePrefImm16V8) \
V(BaselineThrowConstassignmentPrefV8) \
V(BaselineDeprecatedTonumberPrefV8) \
V(BaselineWideCallthisrangePrefImm16V8) \
V(BaselineThrowIfnotobjectPrefV8) \
V(BaselineDeprecatedTonumericPrefV8) \
V(BaselineWideSupercallthisrangePrefImm16V8) \
V(BaselineThrowUndefinedifholePrefV8V8) \
V(BaselineThrowUndefinedifholewithnamePrefId16) \
V(BaselineDeprecatedNegPrefV8) \
V(BaselineWideSupercallarrowrangePrefImm16V8) \
V(BaselineThrowIfsupernotcorrectcallPrefImm8) \
V(BaselineDeprecatedNotPrefV8) \
V(BaselineWideLdobjbyindexPrefImm32) \
V(BaselineThrowIfsupernotcorrectcallPrefImm16) \
V(BaselineDeprecatedIncPrefV8) \
V(BaselineWideStobjbyindexPrefV8Imm32) \
V(BaselineDeprecatedDecPrefV8) \
V(BaselineWideStownbyindexPrefV8Imm32) \
V(BaselineDeprecatedCallarg0PrefV8) \
V(BaselineWideCopyrestargsPrefImm16) \
V(BaselineDeprecatedCallarg1PrefV8V8) \
V(BaselineWideLdlexvarPrefImm16Imm16) \
V(BaselineDeprecatedCallargs2PrefV8V8V8) \
V(BaselineWideStlexvarPrefImm16Imm16) \
V(BaselineDeprecatedCallargs3PrefV8V8V8V8) \
V(BaselineWideGetmodulenamespacePrefImm16) \
V(BaselineDeprecatedCallrangePrefImm16V8) \
V(BaselineWideStmodulevarPrefImm16) \
V(BaselineDeprecatedCallspreadPrefV8V8V8) \
V(BaselineWideLdlocalmodulevarPrefImm16) \
V(BaselineDeprecatedCallthisrangePrefImm16V8) \
V(BaselineWideLdexternalmodulevarPrefImm16) \
V(BaselineDeprecatedDefineclasswithbufferPrefId16Imm16Imm16V8V8) \
V(BaselineWideLdpatchvarPrefImm16) \
V(BaselineDeprecatedResumegeneratorPrefV8) \
V(BaselineWideStpatchvarPrefImm16) \
V(BaselineDeprecatedGetresumemodePrefV8) \
V(BaselineDeprecatedGettemplateobjectPrefV8) \
V(BaselineDeprecatedDelobjpropPrefV8V8) \
V(BaselineDeprecatedSuspendgeneratorPrefV8V8) \
V(BaselineDeprecatedAsyncfunctionawaituncaughtPrefV8V8) \
V(BaselineDeprecatedCopydatapropertiesPrefV8V8) \
V(BaselineDeprecatedSetobjectwithprotoPrefV8V8) \
V(BaselineDeprecatedLdobjbyvaluePrefV8V8) \
V(BaselineDeprecatedLdsuperbyvaluePrefV8V8) \
V(BaselineDeprecatedLdobjbyindexPrefV8Imm32) \
V(BaselineDeprecatedAsyncfunctionresolvePrefV8V8V8) \
V(BaselineDeprecatedAsyncfunctionrejectPrefV8V8V8) \
V(BaselineDeprecatedStlexvarPrefImm4Imm4V8) \
V(BaselineDeprecatedStlexvarPrefImm8Imm8V8) \
V(BaselineDeprecatedStlexvarPrefImm16Imm16V8) \
V(BaselineDeprecatedGetmodulenamespacePrefId32) \
V(BaselineDeprecatedStmodulevarPrefId32) \
V(BaselineDeprecatedLdobjbynamePrefId32V8) \
V(BaselineDeprecatedLdsuperbynamePrefId32V8) \
V(BaselineDeprecatedLdmodulevarPrefId32Imm8) \
V(BaselineDeprecatedStconsttoglobalrecordPrefId32) \
V(BaselineDeprecatedStlettoglobalrecordPrefId32) \
V(BaselineDeprecatedStclasstoglobalrecordPrefId32) \
V(BaselineDeprecatedLdhomeobjectPrefNone) \
V(BaselineDeprecatedCreateobjecthavingmethodPrefImm16) \
V(BaselineDeprecatedDynamicimportPrefV8) \
V(BaselineCallRuntimeNotifyConcurrentResultPrefNone) \
V(BaselineDefineFieldByNameImm8Id16V8) \
V(BaselineDefinePropertyByNameImm8Id16V8) \
V(BaselineCallRuntimeDefineFieldByValuePrefImm8V8V8) \
V(BaselineCallRuntimeDefineFieldByIndexPrefImm8Imm32V8) \
V(BaselineCallRuntimeToPropertyKeyPrefNone) \
V(BaselineCallRuntimeCreatePrivatePropertyPrefImm16Id16) \
V(BaselineCallRuntimeDefinePrivatePropertyPrefImm8Imm16Imm16V8) \
V(BaselineCallRuntimeCallInitPrefImm8V8) \
V(BaselineCallRuntimeDefineSendableClassPrefImm16Id16Id16Imm16V8) \
V(BaselineCallRuntimeLdSendableClassPrefImm16) \
V(BaselineCallRuntimeIstruePrefImm8) \
V(BaselineCallRuntimeIsfalsePrefImm8) \
V(BaselineReturnundefined) \
V(BaselineExceptionHandler) \
V(BaselineUpdateHotness) \
} // namespace panda::ecmascript::kungfu
#endif // ECMASCRIPT_COMPILER_BASELINE_BASELINE_COMPILER_BUILTINS_H