Ignore:
Timestamp:
Jul 25, 2007, 12:17:24 PM (17 years ago)
Author:
dai_9181
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler32/Compile_Statement.cpp

    r227 r236  
    105105        if( resultType.IsReal() ){
    106106            //fstp st(0)
    107             OpBuffer[obp++]=(char)0xDD;
    108             OpBuffer[obp++]=(char)0xD8;
     107            compiler.codeGenerator.PutOld(
     108                (char)0xDD,
     109                (char)0xD8
     110            );
    109111        }
    110112        else if( resultType.IsStruct() ){
     
    212214
    213215        //cmp eax,0
    214         OpBuffer[obp++]=(char)0x83;
    215         OpBuffer[obp++]=(char)0xF8;
    216         OpBuffer[obp++]=(char)0x00;
     216        compiler.codeGenerator.op_cmp_value( sizeof(long), REG_EAX, 0 );
    217217
    218218        //jne
     
    224224
    225225        //cmp ebx,0
    226         OpBuffer[obp++]=(char)0x83;
    227         OpBuffer[obp++]=(char)0xFB;
    228         OpBuffer[obp++]=(char)0x00;
     226        compiler.codeGenerator.op_cmp_value( sizeof(long), REG_EBX, 0 );
    229227
    230228        //jne
     
    253251
    254252        //cmp eax,0
    255         OpBuffer[obp++]=(char)0x83;
    256         OpBuffer[obp++]=(char)0xF8;
    257         OpBuffer[obp++]=(char)0x00;
     253        compiler.codeGenerator.op_cmp_value( sizeof(long), REG_EAX, 0 );
    258254
    259255        //je (endif、または else まで条件ジャンプ)
     
    461457
    462458        //cmp eax,0
    463         OpBuffer[obp++]=(char)0x83;
    464         OpBuffer[obp++]=(char)0xF8;
    465         OpBuffer[obp++]=(char)0x00;
     459        compiler.codeGenerator.op_cmp_value( sizeof(long), REG_EAX, 0 );
    466460
    467461        //jne
     
    473467
    474468        //cmp ebx,0
    475         OpBuffer[obp++]=(char)0x83;
    476         OpBuffer[obp++]=(char)0xFB;
    477         OpBuffer[obp++]=(char)0x00;
     469        compiler.codeGenerator.op_cmp_value( sizeof(long), REG_EBX, 0 );
    478470
    479471        //jne
     
    501493
    502494        //cmp eax,0
    503         OpBuffer[obp++]=(char)0x83;
    504         OpBuffer[obp++]=(char)0xF8;
    505         OpBuffer[obp++]=(char)0x00;
     495        compiler.codeGenerator.op_cmp_value( sizeof(long), REG_EAX, 0 );
    506496
    507497        //je (Wend まで)
     
    603593
    604594    //cmp eax,0
    605     OpBuffer[obp++]=(char)0x83;
    606     OpBuffer[obp++]=(char)0xF8;
    607     OpBuffer[obp++]=(char)0x00;
     595    compiler.codeGenerator.op_cmp_value( sizeof(long), REG_EAX, 0 );
    608596
    609597    //je [カウンタ減少の場合の判定]
     
    637625
    638626    //cmp eax,0
    639     OpBuffer[obp++]=(char)0x83;
    640     OpBuffer[obp++]=(char)0xF8;
    641     OpBuffer[obp++]=(char)0x00;
     627    compiler.codeGenerator.op_cmp_value( sizeof(long), REG_EAX, 0 );
    642628
    643629ErrorStep:
     
    803789
    804790                //cmp eax,0
    805                 OpBuffer[obp++]=(char)0x83;
    806                 OpBuffer[obp++]=(char)0xF8;
    807                 OpBuffer[obp++]=(char)0x00;
     791                compiler.codeGenerator.op_cmp_value( sizeof(long), REG_EAX, 0 );
    808792
    809793                //jne
     
    815799
    816800                //cmp ebx,0
    817                 OpBuffer[obp++]=(char)0x83;
    818                 OpBuffer[obp++]=(char)0xFB;
    819                 OpBuffer[obp++]=(char)0x00;
     801                compiler.codeGenerator.op_cmp_value( sizeof(long), REG_EBX, 0 );
    820802
    821803                //jne
     
    856838
    857839                //cmp eax,0
    858                 OpBuffer[obp++]=(char)0x83;
    859                 OpBuffer[obp++]=(char)0xF8;
    860                 OpBuffer[obp++]=(char)0x00;
     840                compiler.codeGenerator.op_cmp_value( sizeof(long), REG_EAX, 0 );
    861841
    862842                if(basbuf[i3]=='0'){
     
    11611141
    11621142                    //mov eax,dword ptr[esp]
    1163                     OpBuffer[obp++]=(char)0x8B;
    1164                     OpBuffer[obp++]=(char)0x04;
    1165                     OpBuffer[obp++]=(char)0x24;
     1143                    compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EAX, REG_ESP, 0, MOD_BASE );
    11661144
    11671145                    //cmp eax,ebx
     
    13681346
    13691347        //fstp qword ptr[eax]
    1370         OpBuffer[obp++]=(char)0xDD;
    1371         OpBuffer[obp++]=(char)0x18;
     1348        compiler.codeGenerator.PutOld(
     1349            (char)0xDD,
     1350            (char)0x18
     1351        );
    13721352    }
    13731353    else if(type==DEF_SINGLE){
     
    14231403
    14241404        //mov word ptr[eax],bx
    1425         OpBuffer[obp++]=(char)0x66;
    1426         OpBuffer[obp++]=(char)0x89;
    1427         OpBuffer[obp++]=(char)0x18;
     1405        compiler.codeGenerator.op_mov_MR( sizeof(short), REG_EBX, REG_EAX, 0, MOD_BASE );
    14281406    }
    14291407    else if(type==DEF_BYTE){
     
    14371415
    14381416        //mov byte ptr[eax],bl
    1439         OpBuffer[obp++]=(char)0x88;
    1440         OpBuffer[obp++]=(char)0x18;
     1417        compiler.codeGenerator.op_mov_MR( sizeof(char), REG_EBX, REG_EAX, 0, MOD_BASE );
    14411418    }
    14421419}
Note: See TracChangeset for help on using the changeset viewer.