Changeset 64 in dev for BasicCompiler32/op32_main.cpp


Ignore:
Timestamp:
Mar 8, 2007, 2:49:34 AM (17 years ago)
Author:
dai_9181
Message:

すべてのオブジェクトを参照型に切り替えた。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/op32_main.cpp

    r36 r64  
    372372
    373373
     374////////////////////////
     375// imul関連
     376////////////////////////
     377
     378void op_imul_RR(int reg1,int reg2){
     379    //imul reg1,reg2
     380
     381    //オペコード
     382    OpBuffer[obp++]=(char)0x0F;
     383    OpBuffer[obp++]=(char)0xAF;
     384
     385    //レジスタ
     386    OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg1)<<3 | REGISTER_OPERAND(reg2));
     387}
     388
     389void op_imul_RV(int reg,int i32data){
     390    //imul reg,i32data
     391
     392    if(-128<=i32data&&i32data<=127){
     393        //オペコード
     394        OpBuffer[obp++]=(char)0x6B;
     395
     396        //レジスタ
     397        OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg)<<3 | REGISTER_OPERAND(reg));
     398
     399        //値
     400        OpBuffer[obp++]=(char)i32data;
     401    }
     402    else{
     403        //オペコード
     404        OpBuffer[obp++]=(char)0x69;
     405
     406        //レジスタ
     407        OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg)<<3 | REGISTER_OPERAND(reg));
     408
     409        //値
     410        *((long *)(OpBuffer+obp))=i32data;
     411        obp+=sizeof(long);
     412    }
     413}
     414
     415
    374416
    375417//////////////////////
     
    468510void op_push(int reg){
    469511    //push reg
     512
     513    if( reg == REG_NON ){
     514        op_sub_esp( PTR_SIZE );
     515        return;
     516    }
    470517
    471518    //オペコード、レジスタ
     
    489536    //pop reg
    490537
     538    if( reg == REG_NON ){
     539        op_add_esp( PTR_SIZE );
     540        return;
     541    }
     542
    491543    //オペコード、レジスタ
    492544    __op_format(0,(char)0x58,reg);
     
    532584// cmp関連
    533585/////////////////////
     586void op_cmp_RR( int reg1, int reg2 ){
     587    //オペコード
     588    OpBuffer[obp++]=(char)0x3B;
     589
     590    //レジスタ
     591    OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg1)<<3 | REGISTER_OPERAND(reg2));
     592}
    534593void op_cmp_value(int op_size,int reg,char byte_data){
    535594    //cmp reg,byte_data
Note: See TracChangeset for help on using the changeset viewer.