Changeset 225 in dev for trunk/abdev/BasicCompiler32/Compile_Func.cpp
- Timestamp:
- Jul 21, 2007, 11:47:40 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/Compile_Func.cpp
r206 r225 33 33 if( resultType.IsDouble() ){ 34 34 //fld qword ptr[esp] 35 op_fld_ptr_esp(DEF_DOUBLE);35 compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE); 36 36 37 37 //fnstcw word ptr[esp] … … 76 76 77 77 //add esp,4 78 op_add_esp(4);78 compiler.codeGenerator.op_add_esp(4); 79 79 } 80 80 else if( resultType.IsSingle() ){ 81 81 //fld dword ptr[esp] 82 op_fld_ptr_esp(DEF_SINGLE);82 compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE); 83 83 84 84 //sub esp,4 85 op_sub_esp(4);85 compiler.codeGenerator.op_sub_esp(4); 86 86 87 87 //fnstcw word ptr[esp] … … 126 126 127 127 //add esp,4 128 op_add_esp(4);128 compiler.codeGenerator.op_add_esp(4); 129 129 } 130 130 else if( resultType.Is64() ){ 131 131 //pop eax 132 op_pop(REG_EAX);132 compiler.codeGenerator.op_pop(REG_EAX); 133 133 134 134 //add esp,4 135 op_add_esp(4);135 compiler.codeGenerator.op_add_esp(4); 136 136 137 137 //push eax 138 op_push(REG_EAX);138 compiler.codeGenerator.op_push(REG_EAX); 139 139 } 140 140 141 141 //pop eax 142 op_pop(REG_EAX);142 compiler.codeGenerator.op_pop(REG_EAX); 143 143 } 144 144 … … 151 151 152 152 //pop eax 153 op_pop(REG_EAX);153 compiler.codeGenerator.op_pop(REG_EAX); 154 154 155 155 //push 0 … … 158 158 159 159 //push eax 160 op_push(REG_EAX);160 compiler.codeGenerator.op_push(REG_EAX); 161 161 162 162 //fild qword ptr[esp] … … 166 166 167 167 //add esp,8 168 op_add_esp(8);168 compiler.codeGenerator.op_add_esp(8); 169 169 } 170 170 void Opcode_Func_Len(const char *Parameter){ … … 193 193 194 194 //pop eax 195 op_pop(REG_EAX);195 compiler.codeGenerator.op_pop(REG_EAX); 196 196 197 197 return; … … 270 270 271 271 //mov ecx,eax 272 op_mov_RR(REG_ECX,REG_EAX);272 compiler.codeGenerator.op_mov_RR(REG_ECX,REG_EAX); 273 273 274 274 //参照タイプが整合しているかをチェック … … 277 277 if(type.IsObjectPtr()){ 278 278 //mov ecx,dword ptr[ecx] 279 op_mov_RM(sizeof(long),REG_ECX,REG_ECX,0,MOD_BASE);279 compiler.codeGenerator.op_mov_RM(sizeof(long),REG_ECX,REG_ECX,0,MOD_BASE); 280 280 } 281 281 } … … 303 303 //mov eax,dword ptr[edx+func_index] 304 304 if(i2*PTR_SIZE<=0x7F){ 305 op_mov_RM(sizeof(long),REG_EAX,REG_EDX,i2*PTR_SIZE,MOD_BASE_DISP8);305 compiler.codeGenerator.op_mov_RM(sizeof(long),REG_EAX,REG_EDX,i2*PTR_SIZE,MOD_BASE_DISP8); 306 306 } 307 307 else{ 308 op_mov_RM(sizeof(long),REG_EAX,REG_EDX,i2*PTR_SIZE,MOD_BASE_DISP32);308 compiler.codeGenerator.op_mov_RM(sizeof(long),REG_EAX,REG_EDX,i2*PTR_SIZE,MOD_BASE_DISP32); 309 309 } 310 310 } … … 331 331 332 332 //mov eax,size 333 op_mov_RV( REG_EAX, typeSize );333 compiler.codeGenerator.op_mov_RV( REG_EAX, typeSize ); 334 334 } 335 335 void Opcode_Func_VarPtr( const char *Parameter, Type &resultType, bool isCallOn ){ … … 362 362 363 363 //mov eax,dword ptr[eax] 364 op_mov_RM( sizeof(long), REG_EAX, REG_EAX, 0, MOD_BASE );364 compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EAX, REG_EAX, 0, MOD_BASE ); 365 365 366 366 SetError(-120,NULL,cp); … … 397 397 398 398 //mov eax,dword ptr[eax] 399 op_mov_RM( sizeof(long), REG_EAX, REG_EAX, 0, MOD_BASE );399 compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EAX, REG_EAX, 0, MOD_BASE ); 400 400 } 401 401 else{ … … 416 416 if(type==DEF_DOUBLE){ 417 417 //pop eax 418 op_pop(REG_EAX);418 compiler.codeGenerator.op_pop(REG_EAX); 419 419 420 420 //fld qword ptr[eax] … … 424 424 else if(type==DEF_SINGLE||type==DEF_DWORD){ 425 425 //pop eax 426 op_pop(REG_EAX);426 compiler.codeGenerator.op_pop(REG_EAX); 427 427 428 428 //mov eax,dword ptr[eax] … … 432 432 else if(type==DEF_QWORD){ 433 433 //pop ecx 434 op_pop(REG_ECX);434 compiler.codeGenerator.op_pop(REG_ECX); 435 435 436 436 //mov eax,dword ptr[ecx] 437 op_mov_RM(sizeof(long),REG_EAX,REG_ECX,0,MOD_BASE);437 compiler.codeGenerator.op_mov_RM(sizeof(long),REG_EAX,REG_ECX,0,MOD_BASE); 438 438 439 439 //mov edx,dword ptr[ecx+sizeof(long)] 440 op_mov_RM(sizeof(long),REG_EDX,REG_ECX,sizeof(long),MOD_BASE_DISP8);440 compiler.codeGenerator.op_mov_RM(sizeof(long),REG_EDX,REG_ECX,sizeof(long),MOD_BASE_DISP8); 441 441 } 442 442 else if(type==DEF_WORD){ 443 443 //pop ebx 444 op_pop(REG_EBX);444 compiler.codeGenerator.op_pop(REG_EBX); 445 445 446 446 //xor eax,eax … … 455 455 else if(type==DEF_BYTE){ 456 456 //pop ebx 457 op_pop(REG_EBX);457 compiler.codeGenerator.op_pop(REG_EBX); 458 458 459 459 //xor eax,eax
Note:
See TracChangeset
for help on using the changeset viewer.