• R/O
  • HTTP
  • SSH
  • HTTPS

HeavyOSECPU: Commit


Commit MetaInfo

Revisión386b9b5a4ad42304daca2075e0fce745f974f892 (tree)
Tiempo2014-03-10 16:59:08
Autorttwilb <ttwilb@user...>
Commiterttwilb

Log Message

comment added

Cambiar Resumen

Diferencia incremental

--- a/jitc.c
+++ b/jitc.c
@@ -558,9 +558,13 @@ int jitCompiler(unsigned char *dst, unsigned char *dst1, const unsigned char *sr
558558 break;
559559
560560 case 0x04: /* CND (prefix) */
561- if (src[1] >= 0x40) w.err = JITC_ERR_REGNUM;
561+ if (src[1] >= 0x40) w.err = JITC_ERR_REGNUM; // R00-R3F 以外のレジスタは比較対象にできない
562+
563+ // 比較対象のレジスタがメモリ上にあれば-1, それ以外なら適切なレジスタ番号を返す
562564 reg0 = jitCompA000_selectRegCache(src[1], -1 /* mem */);
563- if (reg0 < 0) {
565+
566+ /* TEST命令を発行 */
567+ if (reg0 < 0) { //比較対象のレジスタはメモリ上にある
564568 jitCompPutByte1(w.dst, 0xf7); /* TEST([EBP+?],1); */
565569 jitCompA0001_85DispN(&w, src[1] * 4, 0);
566570 }
@@ -568,12 +572,14 @@ int jitCompiler(unsigned char *dst, unsigned char *dst1, const unsigned char *sr
568572 jitCompPutByte2(w.dst, 0xf7, 0xc0 | reg0); /* TEST(reg0,1); */
569573 }
570574 jitCompPutImm32(&w, 1);
575+
576+ /* JZ命令を発行 */
571577 jitCompPutByte2(w.dst, 0x74, 0x00); /* JZ($+2) */
572578 cmp0reg = -1;
573579 if (w.err != 0) goto err_w;
574580 src += 2;
575- w.prefix = 1;
576- w.dst0 = w.dst;
581+ w.prefix = 1; // プリフィックスをセット
582+ w.dst0 = w.dst;
577583 goto prefix_continue;
578584
579585 case 0x08: /* LMEM */ /* 完成 */
Show on old repository browser