Ignore:
Timestamp:
Jul 21, 2007, 11:47:40 PM (17 years ago)
Author:
dai_9181
Message:

CodeGeneratorクラスのベースを実装

File:
1 edited

Legend:

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

    r224 r225  
    1515    if(type==DEF_OBJECT || type==DEF_STRUCT){
    1616        //push eax
    17         op_push(REG_EAX);
     17        compiler.codeGenerator.op_push(REG_EAX);
    1818    }
    1919    else if(type==DEF_DOUBLE){
    2020        //sub esp,8
    21         op_sub_esp(8);
     21        compiler.codeGenerator.op_sub_esp(8);
    2222
    2323        //fstp qword ptr[esp]
    24         OpBuffer[obp++]=(char)0xDD;
    25         OpBuffer[obp++]=(char)0x1C;
    26         OpBuffer[obp++]=(char)0x24;
     24        compiler.codeGenerator.op_fstp_basereg( DEF_DOUBLE, REG_ESP );
    2725    }
    2826    else if(type==DEF_SINGLE){
    2927        //sub esp,4
    30         op_sub_esp(4);
     28        compiler.codeGenerator.op_sub_esp(4);
    3129
    3230        //fstp dword ptr[esp]
    33         OpBuffer[obp++]=(char)0xD9;
    34         OpBuffer[obp++]=(char)0x1C;
    35         OpBuffer[obp++]=(char)0x24;
     31        compiler.codeGenerator.op_fstp_basereg( DEF_SINGLE, REG_ESP );
    3632    }
    3733    else if(type==DEF_INT64||type==DEF_QWORD){
    3834        //push edx
    39         op_push(REG_EDX);
     35        compiler.codeGenerator.op_push(REG_EDX);
    4036
    4137        //push eax
    42         op_push(REG_EAX);
     38        compiler.codeGenerator.op_push(REG_EAX);
    4339    }
    4440    else if(type==DEF_LONG){
    4541        //push eax
    46         op_push(REG_EAX);
     42        compiler.codeGenerator.op_push(REG_EAX);
    4743    }
    4844    else if(type==DEF_INTEGER || (Smoothie::IsUnicode()&&type==DEF_CHAR)){
    4945        //movsx ebx,ax
    50         OpBuffer[obp++]=(char)0x0F;
    51         OpBuffer[obp++]=(char)0xBF;
    52         OpBuffer[obp++]=(char)0xD8;
     46        compiler.codeGenerator.op_movsx_R32R16( REG_EBX, REG_EAX );
    5347
    5448        //push ebx
    55         op_push(REG_EBX);
     49        compiler.codeGenerator.op_push(REG_EBX);
    5650    }
    5751    else if(type==DEF_SBYTE || (Smoothie::IsUnicode()==false&&type==DEF_CHAR)){
    5852        //movsx ebx,al
    59         OpBuffer[obp++]=(char)0x0F;
    60         OpBuffer[obp++]=(char)0xBE;
    61         OpBuffer[obp++]=(char)0xD8;
     53        compiler.codeGenerator.op_movsx_R32R8( REG_EBX, REG_EAX );
    6254
    6355        //push ebx
    64         op_push(REG_EBX);
     56        compiler.codeGenerator.op_push(REG_EBX);
    6557    }
    6658    else if(type==DEF_DWORD||type==DEF_WORD||type==DEF_BYTE||type==DEF_BOOLEAN||
    6759        IsPtrType(type)){
    6860        //push eax
    69         op_push(REG_EAX);
     61        compiler.codeGenerator.op_push(REG_EAX);
    7062    }
    7163    else{
     
    157149
    158150        //オブジェクトポインタをecxにコピー
    159         op_mov_RR( REG_ECX, useReg );
     151        compiler.codeGenerator.op_mov_RR( REG_ECX, useReg );
    160152
    161153        RELATIVE_VAR relativeVar;
     
    200192                //オブジェクトポインタをスタックに入れておく
    201193                //push reg
    202                 op_push( useReg );
     194                compiler.codeGenerator.op_push( useReg );
    203195
    204196                if( !Opcode_CallProc(parameter,pUserProc,PROCFLAG_NEW,termLeft,0 ) ){
     
    207199                }
    208200
    209                 op_pop();
     201                compiler.codeGenerator.op_pop();
    210202
    211203                /////////////////////
     
    521513    if( resultType.IsReal() ){
    522514        //fld ptr[esp]
    523         op_fld_ptr_esp( resultType.GetBasicType() );
     515        compiler.codeGenerator.op_fld_ptr_esp( resultType.GetBasicType() );
    524516
    525517        //add esp,size
    526         op_add_esp( resultType.GetBasicSize() );
     518        compiler.codeGenerator.op_add_esp( resultType.GetBasicSize() );
    527519    }
    528520    else{
    529521        //pop eax
    530         op_pop(REG_EAX);
     522        compiler.codeGenerator.op_pop(REG_EAX);
    531523
    532524        if( resultType.Is64() ){
    533525            //pop edx
    534             op_pop(REG_EDX);
     526            compiler.codeGenerator.op_pop(REG_EDX);
    535527        }
    536528    }
     
    603595
    604596        //mov eax,i2
    605         op_mov_RV(REG_EAX,i2);
     597        compiler.codeGenerator.op_mov_RV(REG_EAX,i2);
    606598        obp-=sizeof(long);
    607599        pobj_DataTableSchedule->add();
     
    613605
    614606        //push eax
    615         op_push( REG_EAX );
     607        compiler.codeGenerator.op_push( REG_EAX );
    616608
    617609        return true;
     
    815807                                //sub esp,size
    816808                                //fstp ptr[esp]
    817                                 op_fstp_push( resultType );
     809                                compiler.codeGenerator.op_fstp_push( resultType );
    818810                            }
    819811                            else{
    820812                                if( resultType.Is64() ){
    821813                                    //push edx
    822                                     op_push( REG_EDX );
     814                                    compiler.codeGenerator.op_push( REG_EDX );
    823815                                }
    824816                                else{
     
    827819
    828820                                //push eax
    829                                 op_push( REG_EAX );
     821                                compiler.codeGenerator.op_push( REG_EAX );
    830822                            }
    831823                        }
     
    851843
    852844                        //push 0
    853                         op_push_V( 0 );
     845                        compiler.codeGenerator.op_push_V( 0 );
    854846
    855847                        sp++;
     
    912904
    913905                        //push HILONG(dbl)
    914                         op_push_V((long)*(long *)(((char *)(&i64data))+4));
     906                        compiler.codeGenerator.op_push_V((long)*(long *)(((char *)(&i64data))+4));
    915907
    916908                        //push LOLONG(dbl)
    917                         op_push_V(*(long *)(&i64data));
     909                        compiler.codeGenerator.op_push_V(*(long *)(&i64data));
    918910                    }
    919911                    else if(type_stack[sp]==DEF_SINGLE){
     
    926918
    927919                        //push term
    928                         op_push_V(i3);
     920                        compiler.codeGenerator.op_push_V(i3);
    929921                    }
    930922                    else{
     
    932924
    933925                        //push term
    934                         op_push_V((long)i64data);
     926                        compiler.codeGenerator.op_push_V((long)i64data);
    935927
    936928                        if((long)i64data==0) index_stack[sp]=LITERAL_NULL;
     
    10821074
    10831075            //push HILONG(i64data)
    1084             op_push_V((long)*(long *)(((char *)(&i64data))+4));
     1076            compiler.codeGenerator.op_push_V((long)*(long *)(((char *)(&i64data))+4));
    10851077
    10861078            //push LOLONG(i64data)
    1087             op_push_V(*(long *)(&i64data));
     1079            compiler.codeGenerator.op_push_V(*(long *)(&i64data));
    10881080        }
    10891081        else if( resultType.IsSingle() ){
     
    10971089
    10981090            //push flt
    1099             op_push_V(i3);
     1091            compiler.codeGenerator.op_push_V(i3);
    11001092        }
    11011093        else{
     
    11081100
    11091101            //push term
    1110             op_push_V(i3);
     1102            compiler.codeGenerator.op_push_V(i3);
    11111103        }
    11121104
Note: See TracChangeset for help on using the changeset viewer.