WebCPU-VMの内部仕様

OpCodeMap(Backend)

/+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
+00NOPLBLIMMPLIMMCND+5+6+7LMEMSMEM+A+B+C+DPADDPDIF
+10CP/ORXORAND+3ADDSUBMUL+7SHLSARDIVMOD+C+DPCP+F
+20CMPECMPNECMPLCMPGECMPLECMPGTSTZTSTNZPCMPEPCMPNEPCMPLPCMPGEPCMPLEPCMPG+E+F
+30+0+1MALLOC+3DATA+5+6+7+8+9+A+B+C+D+E+F
+40+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
+50+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
+60+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
+70+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
+80+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
+90+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
+A0+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
+B0+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
+C0+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
+D0+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
+E0+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
+F0+0+1+2+3+4+5+6+7+8+9+A+B+C+DREMARK+F
OSECPUOSECPUOSECPUOSECPUOSECPUOSECPUOSECPUOSECPUOSECPUOSECPUOSECPUOSECPUOSECPUOSECPUOSECPUOSECPU

実装済みの命令

オペコードデバッグモード表記説明
...1......2......3......4......5......6......7......8......9.....10...
00NOP();(No operation)
01optimm32LB(opt, imm32);set label#imm32 to current address.
02reg0imm32LIMM(reg0, imm32);reg0 = imm32;
03reg0imm32PLIMM(reg0, imm32);reg0 = Pointer of label #imm32;
04reg0RCND(reg0R);if((reg0R & 1) == 1){ execute next; } else { pass next; }
08reg0Rtyp32reg1P00LMEM(reg0R, typ32, reg1P, 0);reg0R = *((typ32 *) reg1P);
09reg0Rtyp32reg1P00SMEM(reg0R, typ32, reg1P, 0);*((typ32 *) reg1P) = reg0R;
0Ereg0Ptyp32reg1Preg2RPADD(reg0P, typ32, reg1P, reg2R);reg0P = reg1P + reg2R;
0Freg0Rtyp32reg1Preg2PPDIF(reg0R, typ32, reg1P, reg2P);reg0R = reg1P - reg2P;
10reg0reg1FFCP(reg0, reg1);reg0 = reg1;
10reg0reg1reg2OR(reg0, reg1, reg2);reg0 = (reg1 | reg2);
11reg0reg1reg2XOR(reg0, reg1, reg2);reg0 = (reg1 ^ reg2);
12reg0reg1reg2AND(reg0, reg1, reg2);reg0 = (reg1 & reg2);
14reg0reg1reg2ADD(reg0, reg1, reg2);reg0 = (reg1 + reg2);
15reg0reg1reg2SUB(reg0, reg1, reg2);reg0 = (reg1 - reg2);
16reg0reg1reg2MUL(reg0, reg1, reg2);reg0 = (reg1 * reg2);
18reg0reg1reg2SHL(reg0, reg1, reg2);reg0 = (reg1 << reg2);
19reg0reg1reg2SAR(reg0, reg1, reg2);reg0 = (reg1 >> reg2);
1Areg0reg1reg2DIV(reg0, reg1, reg2);reg0 = (reg1 / reg2);
1Breg0reg1reg2MOD(reg0, reg1, reg2);reg0 = (reg1 % reg2);
1Ereg0Preg1PPCP(reg0P, reg1P);reg0P = reg1P
20reg0reg1reg2CMPE(reg0, reg1, reg2);reg0 = (reg1 == reg2) ? -1 : 0;
21reg0reg1reg2CMPNE(reg0, reg1, reg2);reg0 = (reg1 != reg2) ? -1 : 0;
22reg0reg1reg2CMPL(reg0, reg1, reg2);reg0 = (reg1 < reg2) ? -1 : 0;
23reg0reg1reg2CMPGE(reg0, reg1, reg2);reg0 = (reg1 >= reg2) ? -1 : 0;
24reg0reg1reg2CMPLE(reg0, reg1, reg2);reg0 = (reg1 <= reg2) ? -1 : 0;
25reg0reg1reg2CMPG(reg0, reg1, reg2);reg0 = (reg1 > reg2) ? -1 : 0;
26reg0reg1reg2TSTZ(reg0, reg1, reg2);reg0 = ((reg1 & reg2) == 0) ? -1 : 0;
27reg0reg1reg2TSTNZ(reg0, reg1, reg2);reg0 = ((reg1 & reg2) != 0) ? -1 : 0;
28reg0Rreg1Preg2PPCMPE(reg0R, reg1P, reg2P);reg0R = (reg1P == reg2P) ? -1 : 0;
29reg0Rreg1Preg2PPCMPNE(reg0R, reg1P, reg2P);reg0R = (reg1P != reg2P) ? -1 : 0;
2Areg0Rreg1Preg2PPCMPL(reg0R, reg1P, reg2P);reg0R = (reg1P < reg2P) ? -1 : 0;
2Breg0Rreg1Preg2PPCMPGE(reg0R, reg1P, reg2P);reg0R = (reg1P >= reg2P) ? -1 : 0;
2Creg0Rreg1Preg2PPCMPLE(reg0R, reg1P, reg2P);reg0R = (reg1P <= reg2P) ? -1 : 0;
2Dreg0Rreg1Preg2PPCMPG(reg0R, reg1P, reg2P);reg0R = (reg1P > reg2P) ? -1 : 0;
32reg0Preg1Rreg2RMALLOC(reg0P, reg1R, reg2R);reg0P = &(reg1R *)[reg2R];
34typ32len32data...DATA(type32, length32);[data]
FElen...REMARK(len);[...]

実装済みのAPI

間違い等の指摘があればお願いします…


コメントお名前NameLink

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS