📄 bytecodes.c
字号:
/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(ALOAD_3) /* Load integer from fourth local variable */ pushStack(lp[3]);DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(IALOAD) /* Load integer from array */ long index = popStack(); ARRAY thisArray = topStackAsType(ARRAY); CHECKARRAY(thisArray, index); topStack = thisArray->data[index].cell; ENDCHECKARRAYDONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(LALOAD) /* Load long from array */ long index = topStack; ARRAY thisArray = secondStackAsType(ARRAY); CHECKARRAY(thisArray, index); secondStack = thisArray->data[index * 2].cell; topStack = thisArray->data[index * 2 + 1].cell; ENDCHECKARRAYDONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(FALOAD) /* Load float from array */ long index = popStack(); ARRAY thisArray = topStackAsType(ARRAY); CHECKARRAY(thisArray, index); topStack = thisArray->data[index].cell; ENDCHECKARRAYDONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(DALOAD) /* Load double from array */ long index = topStack; ARRAY thisArray = secondStackAsType(ARRAY); CHECKARRAY(thisArray, index); secondStack = thisArray->data[index * 2].cell; topStack = thisArray->data[index * 2 + 1].cell; ENDCHECKARRAYDONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(AALOAD) /* Load address from array */ long index = popStack(); ARRAY thisArray = topStackAsType(ARRAY); CHECKARRAY(thisArray, index); topStack = thisArray->data[index].cell; ENDCHECKARRAYDONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(BALOAD) /* Load byte from array */ long index = popStack(); BYTEARRAY thisArray = topStackAsType(BYTEARRAY); CHECKARRAY(thisArray, index); topStack = (long)thisArray->bdata[index]; ENDCHECKARRAYDONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(CALOAD) /* Load UNICODE character (16 bits) from array */ long index = popStack(); SHORTARRAY thisArray = topStackAsType(SHORTARRAY); CHECKARRAY(thisArray, index); topStack = (thisArray->sdata[index]&0xFFFF); ENDCHECKARRAYDONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(SALOAD) /* Load short from array */ long index = popStack(); SHORTARRAY thisArray = topStackAsType(SHORTARRAY); CHECKARRAY(thisArray, index); topStack = thisArray->sdata[index]; ENDCHECKARRAYDONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(ISTORE) /* Store integer into local variable */ unsigned int index = ip[1]; lp[index] = popStack();DONE(2)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(LSTORE) /* Store long into local variable */ unsigned int index = ip[1]; lp[index+1] = popStack(); lp[index] = popStack();DONE(2)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(FSTORE) /* Store integer into local variable */ unsigned int index = ip[1]; lp[index] = popStack();DONE(2)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(DSTORE) /* Store double into local variable */ unsigned int index = ip[1]; lp[index+1] = popStack(); lp[index] = popStack();DONE(2)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(ASTORE) /* Store reference into local variable */ unsigned int index = ip[1]; lp[index] = popStack();DONE(2)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(ISTORE_0) /* Store integer into first (zeroeth) local variable */ lp[0] = popStack();DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(ISTORE_1) /* Store integer into second local variable */ lp[1] = popStack();DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(ISTORE_2) /* Store integer into third local variable */ lp[2] = popStack();DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(ISTORE_3) /* Store integer into fourth local variable */ lp[3] = popStack();DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(LSTORE_0) /* Store long into first (zeroeth) local variable */ lp[1] = popStack(); lp[0] = popStack();DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(LSTORE_1) /* Store long into second local variable */ lp[2] = popStack(); lp[1] = popStack();DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(LSTORE_2) /* Store long into third local variable */ lp[3] = popStack(); lp[2] = popStack();DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(LSTORE_3) /* Store long into fourth local variable */ lp[4] = popStack(); lp[3] = popStack();DONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(FSTORE_0) /* Store float into first (zeroeth) local variable */ lp[0] = popStack();DONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(FSTORE_1) /* Store float into second local variable */ lp[1] = popStack();DONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(FSTORE_2) /* Store float into third local variable */ lp[2] = popStack();DONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(FSTORE_3) /* Store float into fourth local variable */ lp[3] = popStack();DONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(DSTORE_0) /* Store double into first (zeroeth) local variable */ lp[1] = popStack(); lp[0] = popStack();DONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(DSTORE_1) /* Store double into second local variable */ lp[2] = popStack(); lp[1] = popStack();DONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(DSTORE_2) /* Store double into third local variable */ lp[3] = popStack(); lp[2] = popStack();DONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(DSTORE_3) /* Store double into fourth local variable */ lp[4] = popStack(); lp[3] = popStack();DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(ASTORE_0) /* Store address into first (zeroeth) local variable */ lp[0] = popStack();DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(ASTORE_1) /* Store address into second local variable */ lp[1] = popStack();DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(ASTORE_2) /* Store address into third local variable */ lp[2] = popStack();DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(ASTORE_3) /* Store address into fourth local variable */ lp[3] = popStack();DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(IASTORE) /* Store into integer array */ long value = popStack(); long index = popStack(); ARRAY thisArray = popStackAsType(ARRAY); CHECKARRAY(thisArray, index); thisArray->data[index].cell = value; ENDCHECKARRAYDONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(LASTORE) /* Store into long array */ cell hiValue = popStack(); cell loValue = popStack(); long index = popStack(); ARRAY thisArray = popStackAsType(ARRAY); CHECKARRAY(thisArray, index); thisArray->data[index * 2].cell = loValue; thisArray->data[index * 2 + 1].cell = hiValue; ENDCHECKARRAYDONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(FASTORE) /* Store into float array */ long value = popStack(); long index = popStack(); ARRAY thisArray = popStackAsType(ARRAY); CHECKARRAY(thisArray, index); thisArray->data[index].cell = value; ENDCHECKARRAYDONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(DASTORE) /* Store into double array */ cell hiValue = popStack(); cell loValue = popStack(); long index = popStack(); ARRAY thisArray = popStackAsType(ARRAY); CHECKARRAY(thisArray, index); thisArray->data[index * 2].cell = loValue; thisArray->data[index * 2 + 1].cell = hiValue; ENDCHECKARRAYDONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(AASTORE) /* Store into object array */ /* We cannot pop these off the stack, since a GC might happen * before we perform the assignment */ OBJECT value = topStackAsType(OBJECT); long index = secondStack; ARRAY thisArray = thirdStackAsType(ARRAY); int res; CLASS targetClass; CHECKARRAY(thisArray, index); targetClass = thisArray->ofClass->u.elemClass; if (value == NULL || isAssignableToFast(value->ofClass, targetClass)) { res = TRUE; } else { VMSAVE /* This may cause a GC */ res = isAssignableTo(value->ofClass, targetClass); VMRESTORE /* GC may have occurred, need to update volatile args */ value = topStackAsType(OBJECT); thisArray = thirdStackAsType(ARRAY); } lessStack(3); if (res) { thisArray->data[index].cellp = (cell*)value; } else { goto handleArrayStoreException; } ENDCHECKARRAYDONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(BASTORE) /* Store into byte array */ long value = popStack(); long index = popStack(); BYTEARRAY thisArray = popStackAsType(BYTEARRAY); CHECKARRAY(thisArray, index); thisArray->bdata[index] = (char)value; ENDCHECKARRAYDONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(CASTORE) /* Store into UNICODE character (16-bit) array */ long value = popStack(); long index = popStack(); SHORTARRAY thisArray = popStackAsType(SHORTARRAY); CHECKARRAY(thisArray, index); thisArray->sdata[index] = (short)value; ENDCHECKARRAYDONE(1)#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -