Ignore:
Timestamp:
Jul 25, 2007, 4:04:11 AM (17 years ago)
Author:
dai_9181
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler64/Compile_Calc_PushVar.cpp

    r228 r232  
    1111        if(pRelativeVar->bOffsetOffset){
    1212            //movlpd xmm_reg,qword ptr[r11+offset]
    13             OpBuffer[obp++]=(char)0x66;
    14             OpBuffer[obp++]=(char)0x41;
    15             OpBuffer[obp++]=(char)0x0F;
    16             OpBuffer[obp++]=(char)0x12;
    17             OpBuffer[obp++]=(char)(0x83 | REGISTER_OPERAND(xmm_reg)<<3);
    18             *((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
    19             pobj_GlobalVarSchedule->add();
    20             obp+=sizeof(long);
     13            compiler.codeGenerator.op_movlpd_RM( xmm_reg, REG_R11, (long)pRelativeVar->offset, MOD_BASE_DISP32, Schedule::GlobalVar );
    2114        }
    2215        else{
    2316            //movlpd xmm_reg,qword ptr[offset]
    24             OpBuffer[obp++]=(char)0x66;
    25             OpBuffer[obp++]=(char)0x0F;
    26             OpBuffer[obp++]=(char)0x12;
    27             OpBuffer[obp++]=(char)(0x04 | REGISTER_OPERAND(xmm_reg)<<3);
    28             OpBuffer[obp++]=(char)0x25;
    29             *((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
    30             pobj_GlobalVarSchedule->add();
    31             obp+=sizeof(long);
     17            compiler.codeGenerator.op_movlpd_RM( xmm_reg, 0, (long)pRelativeVar->offset, MOD_DISP32, Schedule::GlobalVar );
    3218        }
    3319    }
     
    5036        else{
    5137            //movlpd xmm_reg,qword ptr[rsp+offset]
    52             OpBuffer[obp++]=(char)0x66;
    53             OpBuffer[obp++]=(char)0x0F;
    54             OpBuffer[obp++]=(char)0x12;
    55             OpBuffer[obp++]=(char)(0x84 | REGISTER_OPERAND(xmm_reg)<<3);
    56             OpBuffer[obp++]=(char)0x24;
    57             *((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
    58             AddLocalVarAddrSchedule();
    59             obp+=sizeof(long);
     38            compiler.codeGenerator.op_movlpd_RM( xmm_reg, REG_RSP, (long)pRelativeVar->offset, MOD_BASE_DISP32, Schedule::LocalVar );
    6039        }
    6140    }
     
    6342        if(pRelativeVar->bOffsetOffset){
    6443            //add r11,qword ptr[rsp+offset]
    65             OpBuffer[obp++]=(char)0x4C;
    66             OpBuffer[obp++]=(char)0x03;
    67             OpBuffer[obp++]=(char)0x9C;
    68             OpBuffer[obp++]=(char)0x24;
    69             *((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
    70             AddLocalVarAddrSchedule();
    71             obp+=sizeof(long);
     44            compiler.codeGenerator.op_add_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::LocalVar );
    7245        }
    7346        else{
    7447            //mov r11,qword ptr[rsp+offset]
    75             compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
    76             obp-=sizeof(long);
    77             AddLocalVarAddrSchedule();
    78             obp+=sizeof(long);
     48            compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::LocalVar );
    7949        }
    8050
     
    8454directmem:
    8555        //movlpd xmm_reg,qword ptr[r11]
    86         OpBuffer[obp++]=(char)0x66;
    87         OpBuffer[obp++]=(char)0x41;
    88         OpBuffer[obp++]=(char)0x0F;
    89         OpBuffer[obp++]=(char)0x12;
    90         OpBuffer[obp++]=(char)(0x03 | REGISTER_OPERAND(xmm_reg)<<3);
     56        compiler.codeGenerator.op_movlpd_RM( xmm_reg, REG_R11, 0, MOD_BASE);
    9157    }
    9258}
     
    9561        if(pRelativeVar->bOffsetOffset){
    9662            //movss xmm_reg,dword ptr[r11+offset]
    97             OpBuffer[obp++]=(char)0xF3;
    98             OpBuffer[obp++]=(char)0x41;
    99             OpBuffer[obp++]=(char)0x0F;
    100             OpBuffer[obp++]=(char)0x10;
    101             OpBuffer[obp++]=(char)(0x83 | REGISTER_OPERAND(xmm_reg)<<3);
    102             *((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
    103             pobj_GlobalVarSchedule->add();
    104             obp+=sizeof(long);
     63            compiler.codeGenerator.op_movss_RM( xmm_reg, REG_R11, (long)pRelativeVar->offset, MOD_BASE_DISP32, Schedule::GlobalVar );
    10564        }
    10665        else{
    10766            //movss xmm_reg,dword ptr[offset]
    108             OpBuffer[obp++]=(char)0xF3;
    109             OpBuffer[obp++]=(char)0x0F;
    110             OpBuffer[obp++]=(char)0x10;
    111             OpBuffer[obp++]=(char)(0x04 | REGISTER_OPERAND(xmm_reg)<<3);
    112             OpBuffer[obp++]=(char)0x25;
    113             *((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
    114             pobj_GlobalVarSchedule->add();
    115             obp+=sizeof(long);
     67            compiler.codeGenerator.op_movss_RM( xmm_reg, 0, (long)pRelativeVar->offset, MOD_BASE, Schedule::GlobalVar );
    11668        }
    11769    }
     
    13486        else{
    13587            //movss xmm_reg,dword ptr[rsp+offset]
    136             OpBuffer[obp++]=(char)0xF3;
    137             OpBuffer[obp++]=(char)0x0F;
    138             OpBuffer[obp++]=(char)0x10;
    139             OpBuffer[obp++]=(char)(0x84 | REGISTER_OPERAND(xmm_reg)<<3);
    140             OpBuffer[obp++]=(char)0x24;
    141             *((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
    142             AddLocalVarAddrSchedule();
    143             obp+=sizeof(long);
     88            compiler.codeGenerator.op_movss_RM( xmm_reg, REG_RSP, (long)pRelativeVar->offset, MOD_BASE_DISP32, Schedule::LocalVar );
    14489        }
    14590    }
     
    14792        if(pRelativeVar->bOffsetOffset){
    14893            //add r11,qword ptr[rsp+offset]
    149             OpBuffer[obp++]=(char)0x4C;
    150             OpBuffer[obp++]=(char)0x03;
    151             OpBuffer[obp++]=(char)0x9C;
    152             OpBuffer[obp++]=(char)0x24;
    153             *((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
    154             AddLocalVarAddrSchedule();
    155             obp+=sizeof(long);
     94            compiler.codeGenerator.op_add_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::LocalVar );
    15695        }
    15796        else{
    15897            //mov r11,qword ptr[rsp+offset]
    159             compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
    160             obp-=sizeof(long);
    161             AddLocalVarAddrSchedule();
    162             obp+=sizeof(long);
     98            compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::LocalVar );
    16399        }
    164100
     
    168104directmem:
    169105        //movss xmm_reg,dword ptr[r11]
    170         OpBuffer[obp++]=(char)0xF3;
    171         OpBuffer[obp++]=(char)0x41;
    172         OpBuffer[obp++]=(char)0x0F;
    173         OpBuffer[obp++]=(char)0x10;
    174         OpBuffer[obp++]=(char)(0x03 | REGISTER_OPERAND(xmm_reg)<<3);
     106        compiler.codeGenerator.op_movss_RM( xmm_reg, REG_R11, 0, MOD_BASE);
    175107    }
    176108}
Note: See TracChangeset for help on using the changeset viewer.