Changeset 232 in dev for trunk/abdev/BasicCompiler_Common


Ignore:
Timestamp:
Jul 25, 2007, 4:04:11 AM (17 years ago)
Author:
dai_9181
Message:
 
Location:
trunk/abdev/BasicCompiler_Common
Files:
1 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler_Common/BasicCompiler.cpp

    r212 r232  
    9898
    9999    extern int obp;
    100     if(obp==1115){
     100    if(obp>=0x988DE){
     101        int test=0;
    101102    }
    102103}
  • trunk/abdev/BasicCompiler_Common/Compile.cpp

    r206 r232  
    684684            }
    685685
    686 #ifdef _DEBUG
     686
    687687            epi_check();
    688 #endif
     688
    689689
    690690            //コンパイルを中断するとき
  • trunk/abdev/BasicCompiler_Common/Debug.cpp

    r206 r232  
    596596            if(de.u.Exception.ExceptionRecord.ExceptionCode==EXCEPTION_ACCESS_VIOLATION){
    597597
    598                 //"スレッド(&H%X)でアクセス違反がありました(EPI=&H%08X)。\r\n"
     598                //"スレッド(&H%X)でアクセス違反がありました(EIP=&H%08X)。\r\n"
    599599                sprintf(temporary,STRING_DEBUG_THREAD_ACCESSVIOLATION,de.dwThreadId,(ULONG_PTR)de.u.Exception.ExceptionRecord.ExceptionAddress);
    600600                DebugMessage(temporary);
     
    621621                    if(de.dwThreadId==_DebugSys_dwThreadID[i4]) break;
    622622                }
    623                 Context.ContextFlags=CONTEXT_CONTROL;
     623                Context.ContextFlags=CONTEXT_CONTROL | CONTEXT_INTEGER;
    624624                GetThreadContext(array_hDebugThread[i4],&Context);
    625625
     
    627627                    i3&&(!(ImageBase+MemPos_CodeSection<=EIP_RIP(Context)&&EIP_RIP(Context)<ImageBase+MemPos_CodeSection+FileSize_CodeSection))
    628628                    ){
    629                     //"スレッド(&H%X)のブレーク ポイント(EPI=&H%08X)。\r\n"
    630                     sprintf(temporary,STRING_DEBUG_BREAKPOINT,de.dwThreadId,(ULONG_PTR)de.u.Exception.ExceptionRecord.ExceptionAddress);
     629                    //"スレッド(&H%X)のブレーク ポイント(EIP=&H%08X)。\r\n"
     630                    sprintf(temporary,
     631                        STRING_DEBUG_BREAKPOINT,
     632                        de.dwThreadId,
     633                        (ULONG_PTR)de.u.Exception.ExceptionRecord.ExceptionAddress,
     634                        (ULONG_PTR)Context.Rsp);
    631635                    DebugMessage(temporary);
    632636                }
     
    726730            }
    727731            else if(de.u.Exception.ExceptionRecord.ExceptionCode==STATUS_INTEGER_DIVIDE_BY_ZERO){
    728                 //"0による除算が行われました。スレッド(&H%X) ブレーク ポイント(EPI=&H%08X)。\r\n"
     732                //"0による除算が行われました。スレッド(&H%X) ブレーク ポイント(EIP=&H%08X)。\r\n"
    729733                sprintf(temporary,STRING_DEBUG_DIVIDE_BY_ZERO,de.dwThreadId,(ULONG_PTR)de.u.Exception.ExceptionRecord.ExceptionAddress);
    730734                DebugMessage(temporary);
     
    734738            }
    735739            else if(de.u.Exception.ExceptionRecord.ExceptionCode==STATUS_NO_MEMORY){
    736                 //"メモリ不足、またはヒープが壊れていることが原因で、メモリの割り当てに失敗しました。スレッド(&H%X) ブレーク ポイント(EPI=&H%08X)。\r\n"
     740                //"メモリ不足、またはヒープが壊れていることが原因で、メモリの割り当てに失敗しました。スレッド(&H%X) ブレーク ポイント(EIP=&H%08X)。\r\n"
    737741                sprintf(temporary,STRING_DEBUG_DIVIDE_NO_MEMORY,de.dwThreadId,(ULONG_PTR)de.u.Exception.ExceptionRecord.ExceptionAddress);
    738742                DebugMessage(temporary);
  • trunk/abdev/BasicCompiler_Common/DebugMiddleFile.cpp

    r206 r232  
    325325
    326326        //アラインメント
    327         *(long *)(buffer+i2)=pobj_c->iAlign;
     327        *(long *)(buffer+i2)=pobj_c->GetFixedAlignment();
    328328        i2+=sizeof(long);
    329329
     
    705705
    706706        //アラインメント
    707         pobj_c->iAlign=*(long *)(buffer+i2);
     707        pobj_c->SetFixedAlignment( *(long *)(buffer+i2) );
    708708        i2+=sizeof(long);
    709709
  • trunk/abdev/BasicCompiler_Common/VariableOpe.cpp

    r206 r232  
    10021002    int alignment = 0;
    10031003    if( pVar->GetType().IsStruct() ){
    1004         alignment = pVar->GetType().GetClass().iAlign;
     1004        alignment = pVar->GetType().GetClass().GetFixedAlignment();
    10051005    }
    10061006
  • trunk/abdev/BasicCompiler_Common/common_msg_eng.h

    r4 r232  
    3939#define STRING_DEBUG_THREADFINISH           "Thread(&H%X) exited with code &H%X.\r\n"
    4040#define STRING_DEBUG_PROCESSFINISH          "Program exited with code &H%X.\r\n"
    41 #define STRING_DEBUG_THREAD_INVALID_HANDLE  "Handle violation.   Thread=&H%X   EPI=&H%08X\r\n"
    42 #define STRING_DEBUG_THREAD_ACCESSVIOLATION "Access violation.   Thread=&H%X   EPI=&H%08X\r\n"
    43 #define STRING_DEBUG_BREAKPOINT             "Breakpoint.         Thread=&H%X   EPI=&H%08X\r\n"
    44 #define STRING_DEBUG_DIVIDE_BY_ZERO         "Divided by zero.    Thread=&H%X   EPI=&H%08X\r\n"
     41#define STRING_DEBUG_THREAD_INVALID_HANDLE  "Handle violation.   Thread=&H%X   EIP=&H%08X\r\n"
     42#define STRING_DEBUG_THREAD_ACCESSVIOLATION "Access violation.   Thread=&H%X   EIP=&H%08X\r\n"
     43#define STRING_DEBUG_BREAKPOINT             "Breakpoint.         Thread=&H%X   EIP=&H%08X/ESP=&H%08X\r\n"
     44#define STRING_DEBUG_DIVIDE_BY_ZERO         "Divided by zero.    Thread=&H%X   EIP=&H%08X\r\n"
    4545#define STRING_DEBUG_ERROR                  "Unknown error.\ncode:%X"
    4646#define STRING_DEBUG_FAILED                 "Failed to read the debug information."
  • trunk/abdev/BasicCompiler_Common/common_msg_jpn.h

    r4 r232  
    3939#define STRING_DEBUG_THREADFINISH           "スレッド(&H%X)はコード &H%X で終了しました。\r\n"
    4040#define STRING_DEBUG_PROCESSFINISH          "プログラムはコード &H%X で終了しました。\r\n"
    41 #define STRING_DEBUG_THREAD_INVALID_HANDLE  "スレッド(&H%X)でハンドル違反がありました(EPI=&H%08X)。\r\n"
    42 #define STRING_DEBUG_THREAD_ACCESSVIOLATION "スレッド(&H%X)でアクセス違反がありました(EPI=&H%08X)。\r\n"
    43 #define STRING_DEBUG_BREAKPOINT             "スレッド(&H%X)のブレーク ポイント(EPI=&H%08X)。\r\n"
    44 #define STRING_DEBUG_DIVIDE_BY_ZERO         "0による除算が行われました。スレッド(&H%X) ブレーク ポイント(EPI=&H%08X)。\r\n"
    45 #define STRING_DEBUG_DIVIDE_NO_MEMORY       "メモリ不足、またはヒープが壊れていることが原因で、メモリの割り当てに失敗しました。スレッド(&H%X) ブレーク ポイント(EPI=&H%08X)。\r\n"
     41#define STRING_DEBUG_THREAD_INVALID_HANDLE  "スレッド(&H%X)でハンドル違反がありました(EIP=&H%08X)。\r\n"
     42#define STRING_DEBUG_THREAD_ACCESSVIOLATION "スレッド(&H%X)でアクセス違反がありました(EIP=&H%08X)。\r\n"
     43#define STRING_DEBUG_BREAKPOINT             "スレッド(&H%X)のブレーク ポイント(EIP=&H%08X/ESP=&H%08X)。\r\n"
     44#define STRING_DEBUG_DIVIDE_BY_ZERO         "0による除算が行われました。スレッド(&H%X) ブレーク ポイント(EIP=&H%08X)。\r\n"
     45#define STRING_DEBUG_DIVIDE_NO_MEMORY       "メモリ不足、またはヒープが壊れていることが原因で、メモリの割り当てに失敗しました。スレッド(&H%X) ブレーク ポイント(EIP=&H%08X)。\r\n"
    4646#define STRING_DEBUG_ERROR                  "例外処理(code:&H%08X)\r\n"
    4747#define STRING_DEBUG_FAILED                 "デバッグ情報の取得に失敗"
  • trunk/abdev/BasicCompiler_Common/include/Class.h

    r208 r232  
    7171    // 静的メソッド
    7272    Methods staticMethods;
     73
     74    //アラインメント値
     75    int fixedAlignment;
    7376
    7477    // XMLシリアライズ用
     
    9396        ar & BOOST_SERIALIZATION_NVP( vtblNum );
    9497        ar & BOOST_SERIALIZATION_NVP( staticMethods );
     98        ar & BOOST_SERIALIZATION_NVP( fixedAlignment );
    9599    }
    96100
    97101    bool isReady;
    98102public:
    99 
    100     //アラインメント値
    101     int iAlign;
    102103
    103104    CClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const string &name )
     
    107108        , pSuperClass( NULL )
    108109        , isReady( false )
    109         , iAlign( 0 )
     110        , fixedAlignment( 0 )
    110111        , ConstructorMemberSubIndex( -1 )
    111112        , DestructorMemberSubIndex( -1 )
     
    123124        , pSuperClass( NULL )
    124125        , isReady( false )
    125         , iAlign( 0 )
     126        , fixedAlignment( 0 )
    126127        , ConstructorMemberSubIndex( -1 )
    127128        , DestructorMemberSubIndex( -1 )
     
    320321    }
    321322
     323    // ユーザ指定のアラインメント固定値
     324    int GetFixedAlignment() const
     325    {
     326        return fixedAlignment;
     327    }
     328    void SetFixedAlignment( int fixedAlignment )
     329    {
     330        this->fixedAlignment = fixedAlignment;
     331    }
     332
    322333    // メンバの総合サイズを取得
    323334    int GetSize() const;
  • trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h

    r230 r232  
    4141    void __jmp_op_format( char opcode, long offset, int op_size );
    4242public:
    43     void op_mov_RV                  (int op_size,int reg,long i32data);
     43    void op_mov_RV                  (int op_size,int reg,long i32data, Schedule::Type scheduleType = Schedule::None );
    4444    void op_mov_RV64                (int reg,_int64 i64data);
    4545    void op_mov_RM                  (int op_size,int reg,int base_reg,long offset,char mod, Schedule::Type scheduleType = Schedule::None );
    4646    void op_mov_RM_ex               (int op_size,int reg,int base_reg1,int base_reg2,long offset,BOOL bUseOffset, Schedule::Type scheduleType = Schedule::None );
    47     void op_mov_MR                  (int op_size,int reg,int base_reg,long offset,char mod);
    48     void op_mov_MR_ex               (int op_size,int reg,int base_reg1,int base_reg2,long offset,BOOL bUseOffset);
     47    void op_mov_MR                  (int op_size,int reg,int base_reg,long offset,char mod, Schedule::Type scheduleType = Schedule::None );
     48    void op_mov_MR_ex               (int op_size,int reg,int base_reg1,int base_reg2,long offset,BOOL bUseOffset, Schedule::Type scheduleType = Schedule::None );
    4949    void op_mov_MV                  (int op_size,int base_reg,int offset,BOOL bUseOffset,long i32data);
    5050    void op_mov_RR                  (int reg1,int reg2);
    51     void op_mov64_ToReg             (int reg,_int64 i64data);
    52     void op_mov64_ToReg             (int reg,long i32data);
    5351    void op_movsxd                  (int reg64,int reg32);
    5452    void op_movsx64_FromReg16       (int reg64,int reg16);
     
    6159    void op_dec                     (int reg);
    6260    void op_add_RM                  (int op_size,int reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None );
    63     void op_add_RV                  (int reg,long offset);
     61    void op_add_RV                  (int reg,long offset, Schedule::Type scheduleType = Schedule::None );
    6462    void op_add_RR              (int reg1,int reg2);
    6563    void op_add32_reg               (int reg1,int reg2);
     
    8684    void op_cmp_value               (int op_size,int reg,char byte_data);
    8785    void op_setne                   (int reg);
    88     void op_movlpd_MR               (int xmm_reg,int base_reg,int offset,char mod);
    89     void op_movlpd_RM               (int xmm_reg,int base_reg,int offset,char mod);
     86    void op_movlpd_MR               (int xmm_reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None );
     87    void op_movlpd_RM               (int xmm_reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None );
    9088    void op_movsd_RR                (int xmm_reg1,int xmm_reg2);
    91     void op_movsd_MR                (int xmm_reg,int base_reg,int offset,char mod);
     89    void op_movsd_MR                (int xmm_reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None );
    9290    void op_movss_RR                (int xmm_reg1,int xmm_reg2);
    93     void op_movss_RM                (int xmm_reg,int base_reg,int offset,char mod);
    94     void op_movss_MR                (int xmm_reg,int base_reg,int offset,char mod);
     91    void op_movss_RM                (int xmm_reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None );
     92    void op_movss_MR                (int xmm_reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None );
    9593    void op_movd_RX                 (int reg,int xmm_reg);
    9694    void op_cvtsd2ss                (int xmm_reg1,int xmm_reg2);
  • trunk/abdev/BasicCompiler_Common/include/NativeCode.h

    r228 r232  
    88
    99void AddLocalVarAddrSchedule();
     10void ObpPlus( int step = 1 );
    1011
    1112class Schedule
     
    137138        extern int obp;
    138139        memcpy( OpBuffer + obp, codeBuffer, size );
    139         obp += size;
     140        ObpPlus( size );
    140141    }
    141142    void Put( const NativeCode &nativeCode )
     
    180181        extern int obp;
    181182        *((long *)(OpBuffer+obp))=l;
    182         obp+=sizeof(long);
     183        ObpPlus( sizeof(long) );
    183184    }
    184185    void Put( short s )
     
    196197        extern char *OpBuffer;
    197198        extern int obp;
    198         OpBuffer[obp++]=c;
     199        OpBuffer[obp]=c;
     200        ObpPlus();
    199201    }
    200202};
  • trunk/abdev/BasicCompiler_Common/src/Class.cpp

    r224 r232  
    581581    int offset = IsExistVirtualFunctions() ? PTR_SIZE : 0;
    582582
    583     int alignment;
    584     if(iAlign) alignment=iAlign;
    585     else alignment=1;
     583    int alignment = 1;
     584    if( GetFixedAlignment() )
     585    {
     586        alignment = GetFixedAlignment();
     587    }
    586588
    587589    int iMaxAlign=0;
     
    605607
    606608        //アラインメントを考慮
    607         if(iAlign&&iAlign<member_size){
     609        if(GetFixedAlignment()&&GetFixedAlignment()<member_size){
    608610            if(offset%alignment) offset+=alignment-(offset%alignment);
    609611        }
     
    667669    if(alignment==0) return 0;
    668670
    669     if(iAlign) alignment=iAlign;
     671    if(GetFixedAlignment()) alignment=GetFixedAlignment();
    670672
    671673    return alignment;
     
    12541256            }
    12551257
    1256             pobj_c->iAlign=iAlign;
     1258            pobj_c->SetFixedAlignment( iAlign );
    12571259
    12581260            pobj_c->Readed();
Note: See TracChangeset for help on using the changeset viewer.