Changeset 20 in dev for BasicCompiler64/stack_frame.cpp


Ignore:
Timestamp:
Dec 28, 2006, 5:24:48 AM (17 years ago)
Author:
dai_9181
Message:

参照型パラメータに関数の戻り値オブジェクトを指定した場合などの、一時オブジェクトの扱いを可能にした。
Dimで指定される初期値を見分けることで、As指定を省略できるようにした。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler64/stack_frame.cpp

    r3 r20  
    3939    return -(answer_sp-0x08);
    4040}
    41 void CStackFrame::push(int reg){
     41int CStackFrame::push(int reg){
    4242    now_sp-=sizeof(_int64);
    4343    if(lowest_sp>now_sp) lowest_sp=now_sp;
    4444
    45     if(reg==REG_NON) return;
     45    if(reg==REG_NON) return now_sp;
    4646
    4747    //mov qword ptr[rsp+offset],reg
     
    5252    add();
    5353    obp+=sizeof(long);
     54
     55    return now_sp;
    5456}
    5557void CStackFrame::push(int xmm_reg,int var_size){
     
    7779    obp+=sizeof(long);
    7880}
    79 void CStackFrame::ref(int reg){
     81void CStackFrame::ref_offset_data( int reg, int sp_offset ){
    8082    //mov reg,qword ptr[rsp+offset]     ※スタックフレームを利用
    81     op_mov_RM(sizeof(_int64),reg,REG_RSP,now_sp,MOD_BASE_DISP32);
     83    op_mov_RM(sizeof(_int64),reg,REG_RSP,sp_offset,MOD_BASE_DISP32);
    8284
    8385    //スケジュールをセット
     
    8587    add();
    8688    obp+=sizeof(long);
     89}
     90void CStackFrame::ref(int reg){
     91    ref_offset_data( reg, now_sp );
    8792}
    8893void CStackFrame::ref(int xmm_reg,int var_size){
Note: See TracChangeset for help on using the changeset viewer.