📄 interp.c
字号:
tl = *pc.cp++; /* tl has shift amount */ tl1 = pop4(); tl1 = (tl1 - *pc.sp++) << tl; tcp = popaddr(); pushaddr(tcp + tl1); continue; case O_INX2: tl = *pc.cp++; /* tl has element size */ if (tl == 0) tl = *pc.usp++; tl1 = pop2(); /* index */ tl2 = *pc.sp++; tcp = popaddr(); pushaddr(tcp + (tl1 - tl2) * tl); tl = *pc.usp++; if (_runtst) SUBSC(tl1, tl2, tl); /* range check */ continue; case O_INX4: tl = *pc.cp++; /* tl has element size */ if (tl == 0) tl = *pc.usp++; tl1 = pop4(); /* index */ tl2 = *pc.sp++; tcp = popaddr(); pushaddr(tcp + (tl1 - tl2) * tl); tl = *pc.usp++; if (_runtst) SUBSC(tl1, tl2, tl); /* range check */ continue; case O_VINX2: pc.cp++; tl = pop2(); /* tl has element size */ tl1 = pop2(); /* upper bound */ tl2 = pop2(); /* lower bound */ tl3 = pop2(); /* index */ tcp = popaddr(); pushaddr(tcp + (tl3 - tl2) * tl); if (_runtst) SUBSC(tl3, tl2, tl1); /* range check */ continue; case O_VINX24: pc.cp++; tl = pop2(); /* tl has element size */ tl1 = pop2(); /* upper bound */ tl2 = pop2(); /* lower bound */ tl3 = pop4(); /* index */ tcp = popaddr(); pushaddr(tcp + (tl3 - tl2) * tl); if (_runtst) SUBSC(tl3, tl2, tl1); /* range check */ continue; case O_VINX42: pc.cp++; tl = pop4(); /* tl has element size */ tl1 = pop4(); /* upper bound */ tl2 = pop4(); /* lower bound */ tl3 = pop2(); /* index */ tcp = popaddr(); pushaddr(tcp + (tl3 - tl2) * tl); if (_runtst) SUBSC(tl3, tl2, tl1); /* range check */ continue; case O_VINX4: pc.cp++; tl = pop4(); /* tl has element size */ tl1 = pop4(); /* upper bound */ tl2 = pop4(); /* lower bound */ tl3 = pop4(); /* index */ tcp = popaddr(); pushaddr(tcp + (tl3 - tl2) * tl); if (_runtst) SUBSC(tl3, tl2, tl1); /* range check */ continue; case O_OFF: tl = *pc.cp++; if (tl == 0) tl = *pc.usp++; tcp = popaddr(); pushaddr(tcp + tl); continue; case O_NIL: pc.cp++; tcp = popaddr(); NIL(tcp); pushaddr(tcp); continue; case O_ADD2: pc.cp++; tl = pop2(); tl1 = pop2(); push4(tl1 + tl); continue; case O_ADD4: pc.cp++; tl = pop4(); tl1 = pop4(); push4(tl1 + tl); continue; case O_ADD24: pc.cp++; tl = pop2(); tl1 = pop4(); push4(tl1 + tl); continue; case O_ADD42: pc.cp++; tl = pop4(); tl1 = pop2(); push4(tl1 + tl); continue; case O_ADD28: pc.cp++; tl = pop2(); td = pop8(); push8(td + tl); continue; case O_ADD48: pc.cp++; tl = pop4(); td = pop8(); push8(td + tl); continue; case O_ADD82: pc.cp++; td = pop8(); td1 = pop2(); push8(td1 + td); continue; case O_ADD84: pc.cp++; td = pop8(); td1 = pop4(); push8(td1 + td); continue; case O_SUB2: pc.cp++; tl = pop2(); tl1 = pop2(); push4(tl1 - tl); continue; case O_SUB4: pc.cp++; tl = pop4(); tl1 = pop4(); push4(tl1 - tl); continue; case O_SUB24: pc.cp++; tl = pop2(); tl1 = pop4(); push4(tl1 - tl); continue; case O_SUB42: pc.cp++; tl = pop4(); tl1 = pop2(); push4(tl1 - tl); continue; case O_SUB28: pc.cp++; tl = pop2(); td = pop8(); push8(td - tl); continue; case O_SUB48: pc.cp++; tl = pop4(); td = pop8(); push8(td - tl); continue; case O_SUB82: pc.cp++; td = pop8(); td1 = pop2(); push8(td1 - td); continue; case O_SUB84: pc.cp++; td = pop8(); td1 = pop4(); push8(td1 - td); continue; case O_MUL2: pc.cp++; tl = pop2(); tl1 = pop2(); push4(tl1 * tl); continue; case O_MUL4: pc.cp++; tl = pop4(); tl1 = pop4(); push4(tl1 * tl); continue; case O_MUL24: pc.cp++; tl = pop2(); tl1 = pop4(); push4(tl1 * tl); continue; case O_MUL42: pc.cp++; tl = pop4(); tl1 = pop2(); push4(tl1 * tl); continue; case O_MUL28: pc.cp++; tl = pop2(); td = pop8(); push8(td * tl); continue; case O_MUL48: pc.cp++; tl = pop4(); td = pop8(); push8(td * tl); continue; case O_MUL82: pc.cp++; td = pop8(); td1 = pop2(); push8(td1 * td); continue; case O_MUL84: pc.cp++; td = pop8(); td1 = pop4(); push8(td1 * td); continue; case O_ABS2: case O_ABS4: pc.cp++; tl = pop4(); push4(tl >= 0 ? tl : -tl); continue; case O_ABS8: pc.cp++; td = pop8(); push8(td >= 0.0 ? td : -td); continue; case O_NEG2: pc.cp++; ts = -pop2(); push4((long)ts); continue; case O_NEG4: pc.cp++; tl = -pop4(); push4(tl); continue; case O_NEG8: pc.cp++; td = -pop8(); push8(td); continue; case O_DIV2: pc.cp++; tl = pop2(); tl1 = pop2(); push4(tl1 / tl); continue; case O_DIV4: pc.cp++; tl = pop4(); tl1 = pop4(); push4(tl1 / tl); continue; case O_DIV24: pc.cp++; tl = pop2(); tl1 = pop4(); push4(tl1 / tl); continue; case O_DIV42: pc.cp++; tl = pop4(); tl1 = pop2(); push4(tl1 / tl); continue; case O_MOD2: pc.cp++; tl = pop2(); tl1 = pop2(); push4(tl1 % tl); continue; case O_MOD4: pc.cp++; tl = pop4(); tl1 = pop4(); push4(tl1 % tl); continue; case O_MOD24: pc.cp++; tl = pop2(); tl1 = pop4(); push4(tl1 % tl); continue; case O_MOD42: pc.cp++; tl = pop4(); tl1 = pop2(); push4(tl1 % tl); continue; case O_ADD8: pc.cp++; td = pop8(); td1 = pop8(); push8(td1 + td); continue; case O_SUB8: pc.cp++; td = pop8(); td1 = pop8(); push8(td1 - td); continue; case O_MUL8: pc.cp++; td = pop8(); td1 = pop8(); push8(td1 * td); continue; case O_DVD8: pc.cp++; td = pop8(); td1 = pop8(); push8(td1 / td); continue; case O_STOI: pc.cp++; ts = pop2(); push4((long)ts); continue; case O_STOD: pc.cp++; td = pop2(); push8(td); continue; case O_ITOD: pc.cp++; td = pop4(); push8(td); continue; case O_ITOS: pc.cp++; tl = pop4(); push2((short)tl); continue; case O_DVD2: pc.cp++; td = pop2(); td1 = pop2(); push8(td1 / td); continue; case O_DVD4: pc.cp++; td = pop4(); td1 = pop4(); push8(td1 / td); continue; case O_DVD24: pc.cp++; td = pop2(); td1 = pop4(); push8(td1 / td); continue; case O_DVD42: pc.cp++; td = pop4(); td1 = pop2(); push8(td1 / td); continue; case O_DVD28: pc.cp++; td = pop2(); td1 = pop8(); push8(td1 / td); continue; case O_DVD48: pc.cp++; td = pop4(); td1 = pop8(); push8(td1 / td); continue; case O_DVD82: pc.cp++; td = pop8(); td1 = pop2(); push8(td1 / td); continue; case O_DVD84: pc.cp++; td = pop8(); td1 = pop4(); push8(td1 / td); continue; case O_RV1: tcp = _display.raw[*pc.ucp++]; push2((short)(*(tcp + *pc.sp++))); continue; case O_RV14: tcp = _display.raw[*pc.ucp++]; push4((long)(*(tcp + *pc.sp++))); continue; case O_RV2: tcp = _display.raw[*pc.ucp++]; push2(*(short *)(tcp + *pc.sp++)); continue; case O_RV24: tcp = _display.raw[*pc.ucp++]; push4((long)(*(short *)(tcp + *pc.sp++))); continue; case O_RV4: tcp = _display.raw[*pc.ucp++]; push4(*(long *)(tcp + *pc.sp++)); continue; case O_RV8: tcp = _display.raw[*pc.ucp++]; pushsze8(*(struct sze8 *)(tcp + *pc.sp++)); continue; case O_RV: tcp = _display.raw[*pc.ucp++]; tcp += *pc.sp++; tl = *pc.usp++; STACKALIGN(tl1, tl); tcp1 = pushsp(tl1); blkcpy(tcp, tcp1, tl); continue; case O_LV: tcp = _display.raw[*pc.ucp++]; pushaddr(tcp + *pc.sp++); continue; case O_LRV1: tcp = _display.raw[*pc.ucp++]; PCLONGVAL(tl); push2((short)(*(tcp + tl))); continue; case O_LRV14: tcp = _display.raw[*pc.ucp++]; PCLONGVAL(tl); push4((long)(*(tcp + tl))); continue; case O_LRV2: tcp = _display.raw[*pc.ucp++]; PCLONGVAL(tl); push2(*(short *)(tcp + tl)); continue; case O_LRV24: tcp = _display.raw[*pc.ucp++]; PCLONGVAL(tl); push4((long)(*(short *)(tcp + tl))); continue; case O_LRV4: tcp = _display.raw[*pc.ucp++]; PCLONGVAL(tl); push4(*(long *)(tcp + tl)); continue; case O_LRV8: tcp = _display.raw[*pc.ucp++]; PCLONGVAL(tl); pushsze8(*(struct sze8 *)(tcp + tl)); continue; case O_LRV: tcp = _display.raw[*pc.ucp++]; PCLONGVAL(tl); tcp += tl; tl = *pc.usp++; STACKALIGN(tl1, tl); tcp1 = pushsp(tl1); blkcpy(tcp, tcp1, tl); continue; case O_LLV: tcp = _display.raw[*pc.ucp++]; PCLONGVAL(tl); pushaddr(tcp + tl); continue; case O_IND1: pc.cp++; ts = *popaddr(); push2(ts); continue; case O_IND14: pc.cp++; ti = *popaddr(); push4((long)ti); continue; case O_IND2: pc.cp++; ts = *(short *)(popaddr()); push2(ts); continue; case O_IND24: pc.cp++; ts = *(short *)(popaddr()); push4((long)ts); continue; case O_IND4: pc.cp++; tl = *(long *)(popaddr()); push4(tl); continue; case O_IND8: pc.cp++; t8 = *(struct sze8 *)(popaddr()); pushsze8(t8); continue; case O_IND: tl = *pc.cp++; if (tl == 0) tl = *pc.usp++; tcp = popaddr(); STACKALIGN(tl1, tl); tcp1 = pushsp(tl1); blkcpy(tcp, tcp1, tl); continue; case O_CON1: push2((short)(*pc.cp++)); continue; case O_CON14: push4((long)(*pc.cp++)); continue; case O_CON2: pc.cp++; push2(*pc.sp++); continue; case O_CON24: pc.cp++; push4((long)(*pc.sp++)); continue; case O_CON4: pc.cp++; PCLONGVAL(tl); push4(tl); continue; case O_CON8: pc.cp++; tcp = pushsp(sizeof(double)); blkcpy(pc.cp, tcp, sizeof(double)); pc.dbp++; continue; case O_CON: tl = *pc.cp++; if (tl == 0) tl = *pc.usp++; STACKALIGN(tl1, tl); tcp = pushsp(tl1); blkcpy(pc.cp, tcp, tl); pc.cp += (int)tl; continue; case O_CONG: tl = *pc.cp++; if (tl == 0) tl = *pc.usp++; STACKALIGN(tl1, tl); tcp = pushsp(tl1); blkcpy(pc.cp, tcp, tl1); pc.cp += (int)((tl + 2) & ~1); continue; case O_LVCON: tl = *pc.cp++; if (tl == 0) tl = *pc.usp++; pushaddr(pc.cp); tl = (tl + 1) & ~1; pc.cp += (int)tl; continue; case O_RANG2: tl = *pc.cp++; if (tl == 0) tl = *pc.sp++; tl1 = pop2(); push2((short)(RANG4(tl1, tl, (long)(*pc.sp++)))); continue; case O_RANG42: tl = *pc.cp++; if (tl == 0) tl = *pc.sp++; tl1 = pop4(); push4(RANG4(tl1, tl, (long)(*pc.sp++))); continue; case O_RSNG2: tl = *pc.cp++; if (tl == 0) tl = *pc.sp++; tl1 = pop2(); push2((short)(RSNG4(tl1, tl))); continue; case O_RSNG42: tl = *pc.cp++; if (tl == 0) tl = *pc.sp++; tl1 = pop4(); push4(RSNG4(tl1, tl)); continue; case O_RANG4: tl = *pc.cp++; if (tl == 0) PCLONGVAL(tl); tl1 = pop4(); PCLONGVAL(tl2); push4(RANG4(tl1, tl, tl2)); continue; case O_RANG24: tl = *pc.cp++; if (tl == 0) PCLONGVAL(tl); tl1 = pop2(); PCLONGVAL(tl2); push2((short)(RANG4(tl1, tl, tl2))); continue; case O_RSNG4: tl = *pc.cp++; if (tl == 0) PCLONGVAL(tl); tl1 = pop4(); push4(RSNG4(tl1, tl)); continue; case O_RSNG24: tl = *pc.cp++; if (tl == 0) PCLONGVAL(tl); tl1 = pop2(); push2((short)(RSNG4(tl1, tl))); continue; case O_STLIM: pc.cp++; tl = pop4(); STLIM(tl); continue; case O_LLIMIT: pc.cp++; tcp = popaddr(); tl = pop4(); LLIMIT(tcp, tl); continue; case O_BUFF: BUFF((long)(*pc.cp++)); continue; case O_HALT: pc.cp++; if (_nodump == TRUE) psexit(0); fputs("\nCall to procedure halt\n", stderr); backtrace("Halted"); psexit(0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -