📄 bytecodes.c
字号:
/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(SASTORE) /* Store into short array */ long value = popStack(); long index = popStack(); SHORTARRAY thisArray = popStackAsType(SHORTARRAY); CHECKARRAY(thisArray, index); thisArray->sdata[index] = (short)value; ENDCHECKARRAYDONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(POP) /* Pop top operand stack word */ oneLess;DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(POP2) /* Pop two top operand stack words */ lessStack(2);DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(DUP) /* Duplicate top operand stack word */ long temp = topStack; pushStack(temp);DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(DUP_X1) /* Duplicate top operand stack word and put two down */ long a = topStack; long b = secondStack; secondStack = a; topStack = b; pushStack(a);DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(DUP_X2) /* Duplicate top operand stack word and put three down */ long a = topStack; long b = secondStack; long c = thirdStack; thirdStack = a; secondStack = c; topStack = b; pushStack(a);DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(DUP2) /* Duplicate top two operand stack words */ long a = topStack; long b = secondStack; pushStack(b); pushStack(a);DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(DUP2_X1) /* Duplicate top two operand stack words and put three down */ long a = topStack; long b = secondStack; long c = thirdStack; thirdStack = b; secondStack = a; topStack = c; pushStack(b); pushStack(a);DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(DUP2_X2) /* Duplicate top two operand stack words and put four down */ long a = topStack; long b = secondStack; long c = thirdStack; long d = fourthStack; fourthStack = b; thirdStack = a; secondStack = d; topStack = c; pushStack(b); pushStack(a);DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(SWAP) /* Swap top two operand stack words */ long a = topStack; long b = secondStack; topStack = b; secondStack = a;DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(IADD) /* Add integer */ long temp = popStack(); *(long*)sp += temp;DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(LADD) /* Add long */ long64 lvalue = GET_LONG(sp - 3); long64 rvalue = GET_LONG(sp - 1); ll_inc(lvalue, rvalue); SET_LONG(sp - 3, lvalue); lessStack(2);DONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(FADD) /* Add float */ float temp = *(float*)sp--; *(float*)sp += temp;DONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(DADD) /* Add double */ double rvalue = GET_DOUBLE(sp-1); double lvalue = GET_DOUBLE(sp-3); SET_DOUBLE(sp-3, lvalue + rvalue); lessStack(2);DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(ISUB) /* Sub integer */ long temp = popStack(); *(long*)sp -= temp;DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(LSUB) /* Sub long */ long64 lvalue = GET_LONG(sp - 3); long64 rvalue = GET_LONG(sp - 1); ll_dec(lvalue, rvalue); SET_LONG(sp - 3, lvalue); lessStack(2);DONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(FSUB) /* Sub float */ float temp = *(float*)sp--; *(float*)sp -= temp;DONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(DSUB) /* Sub double */ double rvalue = GET_DOUBLE(sp-1); double lvalue = GET_DOUBLE(sp-3); SET_DOUBLE(sp-3, lvalue - rvalue); lessStack(2);DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(IMUL) /* Mul integer */ long temp = popStack(); *(long*)sp *= temp;DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(LMUL) /* Mul long */ long64 rvalue = GET_LONG(sp - 1); long64 lvalue = GET_LONG(sp - 3); SET_LONG(sp - 3, ll_mul(lvalue, rvalue)); lessStack(2);DONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(FMUL) /* Mul float */ float temp = *(float*)sp--; *(float*)sp *= temp;DONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(DMUL) /* Mul double */ double rvalue = GET_DOUBLE(sp-1); double lvalue = GET_DOUBLE(sp-3); SET_DOUBLE(sp-3, lvalue * rvalue); lessStack(2);DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(IDIV) /* Div integer */ long rValue = popStack(); long lValue = topStack; if (rValue == 0) { goto handleArithmeticException; } else if (lValue == 0x80000000 && rValue == -1) { topStack = lValue; } else { topStack = lValue / rValue; }DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(LDIV) /* Div long */ long64 rvalue = GET_LONG(sp - 1); long64 lvalue = GET_LONG(sp - 3); if (ll_zero_eq(rvalue)) { goto handleArithmeticException; } else { SET_LONG(sp - 3, ll_div(lvalue, rvalue)); lessStack(2); }DONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(FDIV) /* Div float */ float temp = *(float*)sp--; *(float*)sp /= temp;DONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(DDIV) /* Div double */ double rvalue = GET_DOUBLE(sp-1); double lvalue = GET_DOUBLE(sp-3); SET_DOUBLE(sp-3, lvalue / rvalue); lessStack(2);DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(IREM) /* Rem integer */ long rValue = popStack(); long lValue = topStack; if (rValue == 0) { goto handleArithmeticException; } else if (lValue == 0x80000000 && rValue == -1) { topStack = lValue % 1; } else { topStack = lValue % rValue; }DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(LREM) /* Rem long */ long64 rvalue = GET_LONG(sp - 1); long64 lvalue = GET_LONG(sp - 3); if (ll_zero_eq(rvalue)) { goto handleArithmeticException; } else { SET_LONG(sp - 3, ll_rem(lvalue, rvalue)); lessStack(2); }DONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(FREM) /* Rem float */ float rvalue = *(float*)sp--; float lvalue = *(float*)sp; double result = DOUBLE_REMAINDER(lvalue, rvalue); *(float *)sp = (float)result;DONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(DREM) /* Rem double */ double rvalue = GET_DOUBLE(sp-1); double lvalue = GET_DOUBLE(sp-3); double result = DOUBLE_REMAINDER(lvalue, rvalue); SET_DOUBLE(sp-3, result); lessStack(2);DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(INEG) /* Negate integer */ *(long*)sp = 0 - *(long*)sp;DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(LNEG) /* Negate long */ long64 lvalue = GET_LONG(sp - 1); ll_negate(lvalue); SET_LONG(sp - 1, lvalue);DONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(FNEG) /* Negate float */ *(float*)sp = 0.0f - *(float*)sp;DONE(1)#endif/* --------------------------------------------------------------------- */#if FLOATBYTECODESSELECT(DNEG) /* Negate double */ double value = - GET_DOUBLE(sp-1); SET_DOUBLE(sp-1, value);DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(ISHL) /* Arithmetic shift left integer */ /* Note: shift range is limited to 31 (0x1F) */ long s = popStack() & 0x0000001F; *(long*)sp <<= s;DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(LSHL) /* Arithmetic shift left long */ /* Note: shift range is limited to 63 (0x3F) */ long s = popStack() & 0x0000003F; long64 value = GET_LONG(sp - 1); SET_LONG(sp - 1, ll_shl(value, s));DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(ISHR) /* Arithmetic shift right integer */ /* Note: shift range is limited to 31 (0x1F) */ long s = popStack() & 0x0000001F; /* Extends sign for negative numbers */ *(long*)sp >>= s;DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(LSHR) /* Arithmetic shift right long */ /* Note: shift range is limited to 63 (0x3F) */ long s = popStack() & 0x0000003F; long64 value = GET_LONG(sp - 1); SET_LONG(sp - 1, ll_shr(value, s));DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(IUSHR) /* Logical shift right integer */ long s = popStack() & 0x0000001F; *(unsigned long*)sp >>= s; /* No sign extension */DONE(1)#endif/* --------------------------------------------------------------------- */#if STANDARDBYTECODESSELECT(LUSHR) /* Logical shift right long */ long s = popStack() & 0x0000003F;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -