OSDN Git Service

comment added
authorttwilb <ttwilb@users.sourceforge.jp>
Mon, 10 Mar 2014 07:59:08 +0000 (16:59 +0900)
committerttwilb <ttwilb@users.sourceforge.jp>
Mon, 10 Mar 2014 07:59:08 +0000 (16:59 +0900)
jitc.c

diff --git a/jitc.c b/jitc.c
index ffb9370..9986d4c 100644 (file)
--- a/jitc.c
+++ b/jitc.c
@@ -558,9 +558,13 @@ int jitCompiler(unsigned char *dst, unsigned char *dst1, const unsigned char *sr
                        break;
 
                case 0x04:      /* CND (prefix) */
-                       if (src[1] >= 0x40) w.err = JITC_ERR_REGNUM;
+                       if (src[1] >= 0x40) w.err = JITC_ERR_REGNUM;    // R00-R3F 以外のレジスタは比較対象にできない
+
+                       // 比較対象のレジスタがメモリ上にあれば-1, それ以外なら適切なレジスタ番号を返す
                        reg0 = jitCompA000_selectRegCache(src[1], -1 /* mem */);
-                       if (reg0 < 0) {
+
+                       /* TEST命令を発行 */
+                       if (reg0 < 0) { //比較対象のレジスタはメモリ上にある
                                jitCompPutByte1(w.dst, 0xf7); /* TEST([EBP+?],1); */
                                jitCompA0001_85DispN(&w, src[1] * 4, 0);
                        }
@@ -568,12 +572,14 @@ int jitCompiler(unsigned char *dst, unsigned char *dst1, const unsigned char *sr
                                jitCompPutByte2(w.dst, 0xf7, 0xc0 | reg0); /* TEST(reg0,1); */
                        }
                        jitCompPutImm32(&w, 1);
+
+                       /* JZ命令を発行 */
                        jitCompPutByte2(w.dst, 0x74, 0x00);     /* JZ($+2) */
                        cmp0reg = -1;
                        if (w.err != 0) goto err_w;
                        src += 2;
-                       w.prefix = 1;
-                       w.dst0 = w.dst;
+                       w.prefix = 1;   // プリフィックスをセット
+                       w.dst0 = w.dst; 
                        goto prefix_continue;
 
                case 0x08: /* LMEM */   /* 完成 */