@@ -1575,26 +1575,6 @@ private Object bytecodeLoop(VirtualFrame virtualFrame, Frame localFrame, Bytecod
15751575 stackTop = bytecodeClosureFromStack (virtualFrame , stackTop , oparg );
15761576 break ;
15771577 }
1578- case OpCodesConstants .LOAD_LOCALS : {
1579- if (locals == null ) {
1580- CompilerDirectives .transferToInterpreterAndInvalidate ();
1581- throw PRaiseNode .raiseStatic (this , SystemError , ErrorMessages .NO_LOCALS_FOUND );
1582- }
1583- virtualFrame .setObject (++stackTop , locals );
1584- break ;
1585- }
1586- case OpCodesConstants .LOAD_FROM_DICT_OR_DEREF : {
1587- setCurrentBci (virtualFrame , bciSlot , bci );
1588- oparg |= Byte .toUnsignedInt (localBC [++bci ]);
1589- stackTop = bytecodeLoadFromDictOrDeref (virtualFrame , localFrame , stackTop , beginBci , localNodes , oparg , localCelloffset , useCachedNodes );
1590- break ;
1591- }
1592- case OpCodesConstants .LOAD_FROM_DICT_OR_GLOBALS : {
1593- setCurrentBci (virtualFrame , bciSlot , bci );
1594- oparg |= Byte .toUnsignedInt (localBC [++bci ]);
1595- stackTop = bytecodeLoadFromDictOrGlobals (virtualFrame , globals , stackTop , beginBci , localNames [oparg ], localNodes , useCachedNodes );
1596- break ;
1597- }
15981578 case OpCodesConstants .LOAD_DEREF : {
15991579 oparg |= Byte .toUnsignedInt (localBC [++bci ]);
16001580 stackTop = bytecodeLoadDeref (virtualFrame , localFrame , stackTop , beginBci , localNodes , oparg , localCelloffset , useCachedNodes );
@@ -2325,21 +2305,12 @@ private Object bytecodeLoop(VirtualFrame virtualFrame, Frame localFrame, Bytecod
23252305 bci ++;
23262306 continue ;
23272307 }
2328- case OpCodesConstants .MAKE_TYPE_PARAM : {
2329- oparg |= Byte .toUnsignedInt (localBC [++bci ]);
2330- stackTop = bytecodeMakeTypeParam (virtualFrame , useCachedNodes , stackTop , localNodes , beginBci , oparg );
2331- break ;
2308+ default : {
2309+ long r = infrequentBytecodes (virtualFrame , localFrame , bc , bci , stackTop , beginBci , oparg , localBC , globals , locals , localNames , localNodes , bciSlot , localCelloffset ,
2310+ useCachedNodes );
2311+ stackTop = (int ) (r >> 32 );
2312+ bci = (int ) r ;
23322313 }
2333- case OpCodesConstants .MAKE_TYPE_ALIAS : {
2334- stackTop = bytecodeMakeTypeAlias (virtualFrame , useCachedNodes , stackTop , localNodes , beginBci );
2335- break ;
2336- }
2337- case OpCodesConstants .MAKE_GENERIC : {
2338- stackTop = bytecodeMakeGeneric (virtualFrame , useCachedNodes , stackTop , localNodes , beginBci );
2339- break ;
2340- }
2341- default :
2342- throw raiseUnknownBytecodeError (bc );
23432314 }
23442315 // prepare next loop
23452316 oparg = 0 ;
@@ -2429,6 +2400,52 @@ private Object bytecodeLoop(VirtualFrame virtualFrame, Frame localFrame, Bytecod
24292400 }
24302401 }
24312402
2403+ private long infrequentBytecodes (VirtualFrame virtualFrame , Frame localFrame , byte bc , int bci , int stackTop , int beginBci , int oparg , byte [] localBC , Object globals , Object locals ,
2404+ TruffleString [] localNames , Node [] localNodes , int bciSlot , int localCelloffset , boolean useCachedNodes ) {
2405+ switch (bc ) {
2406+ case OpCodesConstants .LOAD_LOCALS : {
2407+ if (locals == null ) {
2408+ CompilerDirectives .transferToInterpreterAndInvalidate ();
2409+ throw PRaiseNode .raiseStatic (this , SystemError , ErrorMessages .NO_LOCALS_FOUND );
2410+ }
2411+ virtualFrame .setObject (++stackTop , locals );
2412+ break ;
2413+ }
2414+ case OpCodesConstants .LOAD_FROM_DICT_OR_DEREF : {
2415+ setCurrentBci (virtualFrame , bciSlot , bci );
2416+ oparg |= Byte .toUnsignedInt (localBC [++bci ]);
2417+ stackTop = bytecodeLoadFromDictOrDeref (virtualFrame , localFrame , stackTop , beginBci , localNodes ,
2418+ oparg , localCelloffset , useCachedNodes );
2419+ break ;
2420+ }
2421+ case OpCodesConstants .LOAD_FROM_DICT_OR_GLOBALS : {
2422+ setCurrentBci (virtualFrame , bciSlot , bci );
2423+ oparg |= Byte .toUnsignedInt (localBC [++bci ]);
2424+ stackTop = bytecodeLoadFromDictOrGlobals (virtualFrame , globals , stackTop , beginBci ,
2425+ localNames [oparg ], localNodes , useCachedNodes );
2426+ break ;
2427+ }
2428+ case OpCodesConstants .MAKE_TYPE_PARAM : {
2429+ oparg |= Byte .toUnsignedInt (localBC [++bci ]);
2430+ stackTop = bytecodeMakeTypeParam (virtualFrame , useCachedNodes , stackTop , localNodes , beginBci ,
2431+ oparg );
2432+ break ;
2433+ }
2434+ case OpCodesConstants .MAKE_TYPE_ALIAS : {
2435+ stackTop = bytecodeMakeTypeAlias (virtualFrame , useCachedNodes , stackTop , localNodes , beginBci );
2436+ break ;
2437+ }
2438+ case OpCodesConstants .MAKE_GENERIC : {
2439+ stackTop = bytecodeMakeGeneric (virtualFrame , useCachedNodes , stackTop , localNodes , beginBci );
2440+ break ;
2441+ }
2442+ default :
2443+ throw raiseUnknownBytecodeError (bc );
2444+
2445+ }
2446+ return (long ) stackTop << 32 | bci ;
2447+ }
2448+
24322449 @ BytecodeInterpreterSwitch
24332450 private int bytecodeGetAIter (VirtualFrame virtualFrame , boolean useCachedNodes , int stackTop , Node [] localNodes , int bci ) {
24342451 GetAIterNode node = insertChildNode (localNodes , bci , UNCACHED_GET_AITER , GetAIterNodeGen .class , NODE_GET_AITER , useCachedNodes );
0 commit comments