OSDN Git Service

Merge branch 'master' of git.sourceforge.jp:/gitroot/heavyosecpu/HeavyOSECPU
[heavyosecpu/HeavyOSECPU.git] / main.c
diff --git a/main.c b/main.c
index ca22a10..2a8cdba 100644 (file)
--- a/main.c
+++ b/main.c
@@ -41,10 +41,10 @@ int HeavyOSECPUMain(int argc, char **argv)
        //unsigned char *sysjit0 = mallocRWE(SJITSIZ1), *sysjit1 = sysjit0, *sysjit00 = sysjit0;
        // syslib.oseのjitc結果を格納する領域を確保。
        sysjit00 = mallocRWE(SJITSIZ1);
+    sysjit = sysjit00;
        // 現在の、jitc結果を格納するメモリへの書き込み位置のアドレス
     // sysjit: 現在のjitc書き込み位置
     // sysjit00: jitc結果の先頭
-       sysjit = sysjit00;
     //ワークメモリを三つくらいもらう
        systmp0 = malloc(SYSTMP0SIZ);   /* syslibのjitc用 */
        systmp1 = malloc(SYSTMP1SIZ);
@@ -63,18 +63,13 @@ int HeavyOSECPUMain(int argc, char **argv)
        }
        ptrCtrl[0].size = -2;
 
-       /* syslibの読み込み */
-       syslib = Init_LoadSysLib(argv[0], systmp0);
+    /* syslibの読み込み */
+    syslib = Init_LoadSysLib(argv[0], systmp0);
     
-       // jitc.cのerrHndl()をCALLするネィティブコードを挿入。
-       // sysjitの値は次の書き込み位置へずらされる。
-       // 元々のsysjitはsysjit00へ保存されている。
-       sysjit = jitCompInit(sysjit);
-
-       // sysjit (アドレス変数)は下の関数の実行で変更される(だから参照渡し)
-       // もちろんsysjitの値は次の書き込み位置へずらされる。
+    sysjit = jitCompInit(sysjit);
+    sysjit00 = sysjit;
        // labelはjitc0()内で初期化される。
-       i = jitc0(&sysjit, sysjit00 + SJITSIZ1, syslib + 32, syslib + SYSLIBSIZ1, JITC_LV_FASTEST, label);
+       i = jitc0(&sysjit, sysjit00 + SJITSIZ1, syslib + 32, syslib + SYSLIBSIZ1, JITC_LV_SLOWEST+9, label);
        if (i != 0){
                fputs("syslib-file JITC error.\n", stderr);
                return 1;
@@ -128,7 +123,7 @@ int HeavyOSECPUMain(int argc, char **argv)
                env.preg[0x0b].p = (void *)pxxFlag;
                env.preg[0x0c].p = (void *)typLabel;
                env.preg[0x0d].p = opTbl;
-               jitfunc = (void *)sysjit;
+               jitfunc = (void *)sysjit00;
                (*jitfunc)(((char *)&env) + 128); /* サイズを節約するためにEBPを128バイトずらす */
                if (env.ireg[0] != 0) {
                        jp = env.preg[2].p - 1;
@@ -145,13 +140,15 @@ int HeavyOSECPUMain(int argc, char **argv)
                memcpy(systmp0, env.appBin, env.appSize1);
                tmpsiz = env.appSize1;
        }
-
+    
        if ((argDebug & 2) != 0) {
+         /*変換後のバックエンドコードをファイルへ保存*/
                fp = fopen("debug2.bin", "wb");
                fwrite(systmp0, 1, tmpsiz, fp);
                fclose(fp);
        }
 
+    //JITコンパイル
        i = jitc0(&jp, jitbuf + 1024 * 1024, systmp0, systmp0 + tmpsiz, env.executionLevel, label);
        if (i == 1){
         fputs("app-file header error.\n", stderr);
@@ -180,8 +177,6 @@ int HeavyOSECPUMain(int argc, char **argv)
                env.preg[i].p1 = NULL;
        }
 
-       env.argc = argc;
-       env.argv = (const char **)argv;
        env.buf0 = env.buf1 = NULL;
        env.preg[0x28].p = p28;
        env.preg[0x28].typ = 0; // TYP_CODE