Changeset 232 in dev for trunk/abdev/BasicCompiler_Common
- Timestamp:
- Jul 25, 2007, 4:04:11 AM (17 years ago)
- Location:
- trunk/abdev/BasicCompiler_Common
- Files:
-
- 1 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler_Common/BasicCompiler.cpp
r212 r232 98 98 99 99 extern int obp; 100 if(obp==1115){ 100 if(obp>=0x988DE){ 101 int test=0; 101 102 } 102 103 } -
trunk/abdev/BasicCompiler_Common/Compile.cpp
r206 r232 684 684 } 685 685 686 #ifdef _DEBUG 686 687 687 epi_check(); 688 #endif 688 689 689 690 690 //コンパイルを中断するとき -
trunk/abdev/BasicCompiler_Common/Debug.cpp
r206 r232 596 596 if(de.u.Exception.ExceptionRecord.ExceptionCode==EXCEPTION_ACCESS_VIOLATION){ 597 597 598 //"スレッド(&H%X)でアクセス違反がありました(E PI=&H%08X)。\r\n"598 //"スレッド(&H%X)でアクセス違反がありました(EIP=&H%08X)。\r\n" 599 599 sprintf(temporary,STRING_DEBUG_THREAD_ACCESSVIOLATION,de.dwThreadId,(ULONG_PTR)de.u.Exception.ExceptionRecord.ExceptionAddress); 600 600 DebugMessage(temporary); … … 621 621 if(de.dwThreadId==_DebugSys_dwThreadID[i4]) break; 622 622 } 623 Context.ContextFlags=CONTEXT_CONTROL ;623 Context.ContextFlags=CONTEXT_CONTROL | CONTEXT_INTEGER; 624 624 GetThreadContext(array_hDebugThread[i4],&Context); 625 625 … … 627 627 i3&&(!(ImageBase+MemPos_CodeSection<=EIP_RIP(Context)&&EIP_RIP(Context)<ImageBase+MemPos_CodeSection+FileSize_CodeSection)) 628 628 ){ 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); 631 635 DebugMessage(temporary); 632 636 } … … 726 730 } 727 731 else if(de.u.Exception.ExceptionRecord.ExceptionCode==STATUS_INTEGER_DIVIDE_BY_ZERO){ 728 //"0による除算が行われました。スレッド(&H%X) ブレーク ポイント(E PI=&H%08X)。\r\n"732 //"0による除算が行われました。スレッド(&H%X) ブレーク ポイント(EIP=&H%08X)。\r\n" 729 733 sprintf(temporary,STRING_DEBUG_DIVIDE_BY_ZERO,de.dwThreadId,(ULONG_PTR)de.u.Exception.ExceptionRecord.ExceptionAddress); 730 734 DebugMessage(temporary); … … 734 738 } 735 739 else if(de.u.Exception.ExceptionRecord.ExceptionCode==STATUS_NO_MEMORY){ 736 //"メモリ不足、またはヒープが壊れていることが原因で、メモリの割り当てに失敗しました。スレッド(&H%X) ブレーク ポイント(E PI=&H%08X)。\r\n"740 //"メモリ不足、またはヒープが壊れていることが原因で、メモリの割り当てに失敗しました。スレッド(&H%X) ブレーク ポイント(EIP=&H%08X)。\r\n" 737 741 sprintf(temporary,STRING_DEBUG_DIVIDE_NO_MEMORY,de.dwThreadId,(ULONG_PTR)de.u.Exception.ExceptionRecord.ExceptionAddress); 738 742 DebugMessage(temporary); -
trunk/abdev/BasicCompiler_Common/DebugMiddleFile.cpp
r206 r232 325 325 326 326 //アラインメント 327 *(long *)(buffer+i2)=pobj_c-> iAlign;327 *(long *)(buffer+i2)=pobj_c->GetFixedAlignment(); 328 328 i2+=sizeof(long); 329 329 … … 705 705 706 706 //アラインメント 707 pobj_c-> iAlign=*(long *)(buffer+i2);707 pobj_c->SetFixedAlignment( *(long *)(buffer+i2) ); 708 708 i2+=sizeof(long); 709 709 -
trunk/abdev/BasicCompiler_Common/VariableOpe.cpp
r206 r232 1002 1002 int alignment = 0; 1003 1003 if( pVar->GetType().IsStruct() ){ 1004 alignment = pVar->GetType().GetClass(). iAlign;1004 alignment = pVar->GetType().GetClass().GetFixedAlignment(); 1005 1005 } 1006 1006 -
trunk/abdev/BasicCompiler_Common/common_msg_eng.h
r4 r232 39 39 #define STRING_DEBUG_THREADFINISH "Thread(&H%X) exited with code &H%X.\r\n" 40 40 #define STRING_DEBUG_PROCESSFINISH "Program exited with code &H%X.\r\n" 41 #define STRING_DEBUG_THREAD_INVALID_HANDLE "Handle violation. Thread=&H%X E PI=&H%08X\r\n"42 #define STRING_DEBUG_THREAD_ACCESSVIOLATION "Access violation. Thread=&H%X E PI=&H%08X\r\n"43 #define STRING_DEBUG_BREAKPOINT "Breakpoint. Thread=&H%X E PI=&H%08X\r\n"44 #define STRING_DEBUG_DIVIDE_BY_ZERO "Divided by zero. Thread=&H%X E PI=&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" 45 45 #define STRING_DEBUG_ERROR "Unknown error.\ncode:%X" 46 46 #define STRING_DEBUG_FAILED "Failed to read the debug information." -
trunk/abdev/BasicCompiler_Common/common_msg_jpn.h
r4 r232 39 39 #define STRING_DEBUG_THREADFINISH "スレッド(&H%X)はコード &H%X で終了しました。\r\n" 40 40 #define STRING_DEBUG_PROCESSFINISH "プログラムはコード &H%X で終了しました。\r\n" 41 #define STRING_DEBUG_THREAD_INVALID_HANDLE "スレッド(&H%X)でハンドル違反がありました(E PI=&H%08X)。\r\n"42 #define STRING_DEBUG_THREAD_ACCESSVIOLATION "スレッド(&H%X)でアクセス違反がありました(E PI=&H%08X)。\r\n"43 #define STRING_DEBUG_BREAKPOINT "スレッド(&H%X)のブレーク ポイント(E PI=&H%08X)。\r\n"44 #define STRING_DEBUG_DIVIDE_BY_ZERO "0による除算が行われました。スレッド(&H%X) ブレーク ポイント(E PI=&H%08X)。\r\n"45 #define STRING_DEBUG_DIVIDE_NO_MEMORY "メモリ不足、またはヒープが壊れていることが原因で、メモリの割り当てに失敗しました。スレッド(&H%X) ブレーク ポイント(E PI=&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" 46 46 #define STRING_DEBUG_ERROR "例外処理(code:&H%08X)\r\n" 47 47 #define STRING_DEBUG_FAILED "デバッグ情報の取得に失敗" -
trunk/abdev/BasicCompiler_Common/include/Class.h
r208 r232 71 71 // 静的メソッド 72 72 Methods staticMethods; 73 74 //アラインメント値 75 int fixedAlignment; 73 76 74 77 // XMLシリアライズ用 … … 93 96 ar & BOOST_SERIALIZATION_NVP( vtblNum ); 94 97 ar & BOOST_SERIALIZATION_NVP( staticMethods ); 98 ar & BOOST_SERIALIZATION_NVP( fixedAlignment ); 95 99 } 96 100 97 101 bool isReady; 98 102 public: 99 100 //アラインメント値101 int iAlign;102 103 103 104 CClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const string &name ) … … 107 108 , pSuperClass( NULL ) 108 109 , isReady( false ) 109 , iAlign( 0 )110 , fixedAlignment( 0 ) 110 111 , ConstructorMemberSubIndex( -1 ) 111 112 , DestructorMemberSubIndex( -1 ) … … 123 124 , pSuperClass( NULL ) 124 125 , isReady( false ) 125 , iAlign( 0 )126 , fixedAlignment( 0 ) 126 127 , ConstructorMemberSubIndex( -1 ) 127 128 , DestructorMemberSubIndex( -1 ) … … 320 321 } 321 322 323 // ユーザ指定のアラインメント固定値 324 int GetFixedAlignment() const 325 { 326 return fixedAlignment; 327 } 328 void SetFixedAlignment( int fixedAlignment ) 329 { 330 this->fixedAlignment = fixedAlignment; 331 } 332 322 333 // メンバの総合サイズを取得 323 334 int GetSize() const; -
trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h
r230 r232 41 41 void __jmp_op_format( char opcode, long offset, int op_size ); 42 42 public: 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 ); 44 44 void op_mov_RV64 (int reg,_int64 i64data); 45 45 void op_mov_RM (int op_size,int reg,int base_reg,long offset,char mod, Schedule::Type scheduleType = Schedule::None ); 46 46 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 ); 49 49 void op_mov_MV (int op_size,int base_reg,int offset,BOOL bUseOffset,long i32data); 50 50 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);53 51 void op_movsxd (int reg64,int reg32); 54 52 void op_movsx64_FromReg16 (int reg64,int reg16); … … 61 59 void op_dec (int reg); 62 60 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 ); 64 62 void op_add_RR (int reg1,int reg2); 65 63 void op_add32_reg (int reg1,int reg2); … … 86 84 void op_cmp_value (int op_size,int reg,char byte_data); 87 85 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 ); 90 88 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 ); 92 90 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 ); 95 93 void op_movd_RX (int reg,int xmm_reg); 96 94 void op_cvtsd2ss (int xmm_reg1,int xmm_reg2); -
trunk/abdev/BasicCompiler_Common/include/NativeCode.h
r228 r232 8 8 9 9 void AddLocalVarAddrSchedule(); 10 void ObpPlus( int step = 1 ); 10 11 11 12 class Schedule … … 137 138 extern int obp; 138 139 memcpy( OpBuffer + obp, codeBuffer, size ); 139 obp += size;140 ObpPlus( size ); 140 141 } 141 142 void Put( const NativeCode &nativeCode ) … … 180 181 extern int obp; 181 182 *((long *)(OpBuffer+obp))=l; 182 obp+=sizeof(long);183 ObpPlus( sizeof(long) ); 183 184 } 184 185 void Put( short s ) … … 196 197 extern char *OpBuffer; 197 198 extern int obp; 198 OpBuffer[obp++]=c; 199 OpBuffer[obp]=c; 200 ObpPlus(); 199 201 } 200 202 }; -
trunk/abdev/BasicCompiler_Common/src/Class.cpp
r224 r232 581 581 int offset = IsExistVirtualFunctions() ? PTR_SIZE : 0; 582 582 583 int alignment; 584 if(iAlign) alignment=iAlign; 585 else alignment=1; 583 int alignment = 1; 584 if( GetFixedAlignment() ) 585 { 586 alignment = GetFixedAlignment(); 587 } 586 588 587 589 int iMaxAlign=0; … … 605 607 606 608 //アラインメントを考慮 607 if( iAlign&&iAlign<member_size){609 if(GetFixedAlignment()&&GetFixedAlignment()<member_size){ 608 610 if(offset%alignment) offset+=alignment-(offset%alignment); 609 611 } … … 667 669 if(alignment==0) return 0; 668 670 669 if( iAlign) alignment=iAlign;671 if(GetFixedAlignment()) alignment=GetFixedAlignment(); 670 672 671 673 return alignment; … … 1254 1256 } 1255 1257 1256 pobj_c-> iAlign=iAlign;1258 pobj_c->SetFixedAlignment( iAlign ); 1257 1259 1258 1260 pobj_c->Readed();
Note:
See TracChangeset
for help on using the changeset viewer.