int vc[MAX_TC + 1];
if (icq0[0] == 0x8b && isConstM(&icq0[1])) {
int reg = (icq0[1] >> 3) & 7, i = getConstM(&icq0[1]);
+ vc[((AInt *) get32(&icq0[2])) - var]--;
icq = icq0;
if (i == 0) { putIcX86("31_%0c", (IntP) (reg * 9 + 0xc0), 0, 0, 0); }
else { putIcX86("%0c_%1i", (IntP) (reg + 0xb8), (IntP) i, 0, 0); }
}
if (icq0[0] <= 0x3f && (icq0[0] & 7) == 3 && isConstM(&icq0[1])) {
int reg = (icq0[1] >> 3) & 7, i = getConstM(&icq0[1]);
+ vc[((AInt *) get32(&icq0[2])) - var]--;
icq = icq0;
if (-0x80 <= i && i <= 0x7f) { putIcX86("83_%0c_%1c", (IntP) ((icq0[0] & 0x38) + reg + 0xc0), (IntP) i, 0, 0); }
else { putIcX86("81_%0c_%1i", (IntP) ((icq0[0] & 0x38) + reg + 0xc0), (IntP) i, 0, 0); }
}
if (icq0[0] == 0x0f && icq0[1] == 0xaf && isConstM(&icq0[2])) {
int reg = (icq0[2] >> 3) & 7, i = getConstM(&icq0[2]);
+ vc[((AInt *) get32(&icq0[3])) - var]--;
icq = icq0;
if (-0x80 <= i && i <= 0x7f) { putIcX86("6b_%0c_%1c", (IntP) (reg * 9 + 0xc0), (IntP) i, 0, 0); }
else { putIcX86("69_%0c_%1i", (IntP) (reg * 9 + 0xc0), (IntP) i, 0, 0); }
} if (icq0[0] == 0x8b && icq1 != 0 && icq1[0] == 0x89 && icq0[1] == 0x05 && icq1[1] == 0x05 && get32(icq0 + 2) == get32(icq1 + 2)) {
icq = icq0; // 8b命令は削除.
i = (IntP) get32(icq1 + 2) - var;
+ vc[i]--;
if (TcTmp0 <= i && i <= TcTmp9) {
+ vc[i]--;
icq = icq1; // 89命令も削除.
}
} if (s[i + 2] == 'm') { // mod r/m.
k = s[i + 3] - '0';
i += 4;
subcmd_m:
if (regVar(a[j]) < 0) {
*icq = 0x05 + k * 8 + addVal;
put32(icq + 1, (int) a[j]);
+ vc[a[j] - var]++;
icq += 5;
} else {
*icq = 0xc0 + regVarNo[regVar(a[j])] + k * 8 + addVal;
icq++;
}
addVal = 0;
continue;
}int compile(String s)
{
(中略)
for (i = 0; i < 10; i++) {
tmp_flag[i] = 0;
}
tmpLabelNo = 0;
+ for (i = 0; i < MAX_TC + 1; i++) {
+ vc[i] = 0;
+ }
bd = lbd = 0;
toExit = tmpLabelAlloc();
for (pc = 0; pc < pc1; ) { // コンパイル開始.
(中略)
}int run(String s)
{
if (compile(s) < 0)
return 1;
if (codedump == 0) {
void (*func)() = (void (*)()) ic;
t0 = clock();
func();
if (win != 0) {
aFlushAll(win);
}
} else {
int i, i1 = dump1 - dump0;
for (i = 0; i < i1; i++) {
printf("%02x ", dump0[i]);
}
printf("\n(len=%d)\n", i1);
+ for (i = 0; i < MAX_TC + 1; i++) {
+ if (vc[i] != 0) {
+ printf("#%04d(%08x): %06d: %s\n", i, (int) &var[i], vc[i], ts[i]);
+ }
+ }
}
return 0;
}| HL-13a | HL-14 | HL-14a | HL-15 | HL-15a | HL-16 | HL-16a | 備考 | |
| mandel.c | 1087 | 1007 | 942 | 768 | 726 | 657 | 657 | regVar(0,zx,zy,xx,yy)[HL-14以降] |
| maze.c | 2192 | 2192 | 2192 | 1770 | 1536 | 1533 | 1265 | regVar(0,xx,yy,dd,x)[HL-16a以降] |
| kcube.c | 4623 | 4623 | 4623 | 3695 | 3495 | 3494 | 3116 | regVar(0,i,l,x,y)[HL-16a以降] |
| invader.c | 3260 | 3260 | 3260 | 2750 | 2399 | 2357 | 1949 | regVar(0,i,j,ly,ix)[HL-16a以降] |
| コメント | お名前 | NameLink | |