Changeset 123 in dev
- Timestamp:
- May 14, 2007, 1:08:14 AM (18 years ago)
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler32/Compile_Object.cpp
r94 r123 134 134 obp+=sizeof(long); 135 135 136 //add eax, sizeof(DWORD)*2136 //add eax,OBJECT_HEAD_SIZE 137 137 OpBuffer[obp++]=(char)0x05; 138 *((long *)(OpBuffer+obp))= sizeof(DWORD)*3;138 *((long *)(OpBuffer+obp))=OBJECT_HEAD_SIZE; 139 139 obp+=sizeof(long); 140 140 … … 150 150 obp+=sizeof(long); 151 151 152 //push size 152 //push size + OBJECT_HEAD_SIZE 153 153 OpBuffer[obp++]=(char)0x68; 154 *((long *)(OpBuffer+obp))=typeSize +sizeof(DWORD)*3;154 *((long *)(OpBuffer+obp))=typeSize + OBJECT_HEAD_SIZE; 155 155 obp+=sizeof(long); 156 156 } … … 176 176 /* 177 177 確保されたヒープ領域のポインタ(callocの戻り値eax)をpPtrとすると、 178 pPtr-=sizeof(DWORD)*3179 178 pPtr[0]=オブジェクトの個数 180 179 pPtr[1]=オブジェクトのサイズ 181 180 pPtr[2]=デストラクタの関数ポインタ 181 pPtr[3]=reserve 182 182 */ 183 183 … … 198 198 obp+=sizeof(long); 199 199 200 //mov dword ptr[eax],ecx 200 //mov dword ptr[eax],ecx(オブジェクトのサイズ) 201 201 OpBuffer[obp++]=(char)0x89; 202 202 OpBuffer[obp++]=(char)0x08; … … 217 217 obp+=sizeof(long); 218 218 219 //mov dword ptr[eax],ecx 219 //mov dword ptr[eax],ecx(デストラクタの関数ポインタ) 220 220 OpBuffer[obp++]=(char)0x89; 221 221 OpBuffer[obp++]=(char)0x08; 222 222 223 //add eax,sizeof(DWORD) 224 OpBuffer[obp++]=(char)0x05; 225 *((long *)(OpBuffer+obp))=sizeof(DWORD); 226 obp+=sizeof(long); 227 228 229 // リザーブ領域 223 230 //add eax,sizeof(DWORD) 224 231 OpBuffer[obp++]=(char)0x05; … … 251 258 252 259 //sub eax,sizeof(DWORD)*3 253 OpBuffer[obp++]=(char)0x83; 254 OpBuffer[obp++]=(char)0xE8; 255 OpBuffer[obp++]=(char)0x0C; 260 op_sub_RV8( REG_EAX, OBJECT_HEAD_SIZE ); 256 261 257 262 //push eax … … 283 288 OpBuffer[obp++]=(char)0x10; 284 289 290 //add eax,sizeof(DWORD) 291 OpBuffer[obp++]=(char)0x05; 292 *((long *)(OpBuffer+obp))=sizeof(DWORD); 293 obp+=sizeof(long); 294 295 296 // リザーブ領域 285 297 //add eax,sizeof(DWORD) 286 298 OpBuffer[obp++]=(char)0x05; -
BasicCompiler64/Compile_Object.cpp
r94 r123 121 121 op_imul_RV(sizeof(_int64),REG_RAX,typeSize); 122 122 123 //add rax, PTR_SIZE*3124 op_add_RV(REG_RAX, PTR_SIZE*3);123 //add rax,OBJECT_HEAD_SIZE 124 op_add_RV(REG_RAX,OBJECT_HEAD_SIZE); 125 125 126 126 //mov rcx,rax … … 133 133 op_mov_RV(sizeof(_int64),REG_RBX,1); 134 134 135 //mov rcx,typeSize+ PTR_SIZE*3136 op_mov_RV(sizeof(_int64),REG_RCX,typeSize+ PTR_SIZE*3);135 //mov rcx,typeSize+OBJECT_HEAD_SIZE 136 op_mov_RV(sizeof(_int64),REG_RCX,typeSize+OBJECT_HEAD_SIZE); 137 137 } 138 138 … … 157 157 /* 158 158 確保されたヒープ領域のポインタ(callocの戻り値eax)をpPtrとすると、 159 pPtr-= sizeof(DWORD)*3159 pPtr-=OBJECT_HEAD_SIZE ... ( sizeof(DWORD)*4 ) 160 160 pPtr[0]=オブジェクトの個数 161 161 pPtr[1]=オブジェクトのサイズ 162 162 pPtr[2]=デストラクタの関数ポインタ 163 pPtr[3]=reserve 163 164 */ 164 165 … … 181 182 if( method == NULL ) return; 182 183 183 //mov rcx,DestructorProcAddr 184 //mov rcx,DestructorProcAddr(デストラクタの関数ポインタ) 184 185 op_mov_RV(sizeof(_int64),REG_RCX,0); 185 186 obp-=sizeof(long); … … 191 192 op_mov_MR(sizeof(_int64),REG_RCX,REG_RAX,0,MOD_BASE); 192 193 194 //add rax,PTR_SIZE 195 op_add_RV(REG_RAX,PTR_SIZE); 196 197 198 // リザーブ領域 193 199 //add rax,PTR_SIZE 194 200 op_add_RV(REG_RAX,PTR_SIZE); … … 220 226 if(!( tempType.IsObjectPtr() || tempType.IsVoidPtr() )) SetError(122,NULL,cp); 221 227 222 //sub rax, PTR_SIZE*3223 op_sub_RV(sizeof(_int64),REG_RAX, PTR_SIZE*3);228 //sub rax,OBJECT_HEAD_SIZE 229 op_sub_RV(sizeof(_int64),REG_RAX,OBJECT_HEAD_SIZE); 224 230 225 231 //mov qword ptr[rsp+offset],rax ※スタックフレームを利用 … … 244 250 op_mov_RM(sizeof(_int64),REG_RDI,REG_RAX,0,MOD_BASE); 245 251 252 //add rax,PTR_SIZE 253 op_add_RV(REG_RAX,PTR_SIZE); 254 255 256 // リザーブ領域 246 257 //add rax,PTR_SIZE 247 258 op_add_RV(REG_RAX,PTR_SIZE); -
BasicCompiler_Common/common.h
r118 r123 62 62 63 63 #define PTR_SIZE sizeof(LONG_PTR) 64 #define OBJECT_HEAD_SIZE PTR_SIZE*4 64 65 65 66 #define MAX_LEN 65535 -
ProjectEditor/ProjectEditor.vcproj
r107 r123 266 266 <Tool 267 267 Name="VCLinkerTool" 268 AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib imm32.lib htmlhelp.lib rpcrt4.lib "268 AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib imm32.lib htmlhelp.lib rpcrt4.lib libcp.lib" 269 269 OutputFile="../TheText/TheText.exe" 270 270 LinkIncremental="1"
Note:
See TracChangeset
for help on using the changeset viewer.