Changeset 226 in dev for trunk/abdev/BasicCompiler64/NumOpe_Arithmetic.cpp
- Timestamp:
- Jul 22, 2007, 4:58:47 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler64/NumOpe_Arithmetic.cpp
r224 r226 104 104 if(idCalc==CALC_ADDITION){ 105 105 //add reg1,reg2 106 op_add64_reg(reg1,reg2);106 compiler.codeGenerator.op_add64_reg(reg1,reg2); 107 107 } 108 108 else if(idCalc==CALC_SUBTRACTION){ 109 109 //sub reg1,reg2 110 op_sub64_reg(reg1,reg2);110 compiler.codeGenerator.op_sub64_reg(reg1,reg2); 111 111 } 112 112 else if(idCalc==CALC_PRODUCT){ 113 113 //mul reg1,reg2 114 op_imul_RR(sizeof(_int64),reg1,reg2);114 compiler.codeGenerator.op_imul_RR(sizeof(_int64),reg1,reg2); 115 115 } 116 116 … … 127 127 if(idCalc==CALC_ADDITION){ 128 128 //add reg1,reg2 129 op_add32_reg(reg1,reg2);129 compiler.codeGenerator.op_add32_reg(reg1,reg2); 130 130 } 131 131 else if(idCalc==CALC_SUBTRACTION){ 132 132 //sub reg1,reg2 133 op_sub32_reg(reg1,reg2);133 compiler.codeGenerator.op_sub32_reg(reg1,reg2); 134 134 } 135 135 else if(idCalc==CALC_PRODUCT){ 136 136 //mul reg1,reg2 137 op_imul_RR(sizeof(long),reg1,reg2);137 compiler.codeGenerator.op_imul_RR(sizeof(long),reg1,reg2); 138 138 } 139 139 … … 181 181 if(reg2==REG_RAX||reg2==REG_RDX){ 182 182 //mov r15,reg2 183 op_mov_RR(REG_R15,reg2);183 compiler.codeGenerator.op_mov_RR(REG_R15,reg2); 184 184 185 185 reg2=REG_R15; … … 207 207 208 208 //mov rax,reg1 209 op_mov_RR(REG_RAX,reg1);209 compiler.codeGenerator.op_mov_RR(REG_RAX,reg1); 210 210 211 211 if(IsSignedType(type[sp-2])){ … … 222 222 223 223 //xor rdx,rdx 224 op_zero_reg(REG_RDX);224 compiler.codeGenerator.op_zero_reg(REG_RDX); 225 225 } 226 226 227 227 if(IsSignedType(AnswerType)){ 228 228 //idiv reg2 229 op_idiv64_reg(reg2);229 compiler.codeGenerator.op_idiv64_reg(reg2); 230 230 } 231 231 else{ 232 232 //div reg2 233 op_div64_reg(reg2);233 compiler.codeGenerator.op_div64_reg(reg2); 234 234 } 235 235 236 236 //mov reg1,rdx 237 op_mov_RR(reg1,REG_RDX);237 compiler.codeGenerator.op_mov_RR(reg1,REG_RDX); 238 238 239 239 } … … 357 357 if(reg2==REG_RAX||reg2==REG_RDX){ 358 358 //mov r15,reg2 359 op_mov_RR(REG_R15,reg2);359 compiler.codeGenerator.op_mov_RR(REG_R15,reg2); 360 360 361 361 reg2=REG_R15; … … 383 383 384 384 //mov rax,reg1 385 op_mov_RR(REG_RAX,reg1);385 compiler.codeGenerator.op_mov_RR(REG_RAX,reg1); 386 386 387 387 if(IsSignedType(type[sp-2])){ … … 398 398 399 399 //xor rdx,rdx 400 op_zero_reg(REG_RDX);400 compiler.codeGenerator.op_zero_reg(REG_RDX); 401 401 } 402 402 403 403 if(IsSignedType(AnswerType)){ 404 404 //idiv reg2 405 op_idiv64_reg(reg2);405 compiler.codeGenerator.op_idiv64_reg(reg2); 406 406 } 407 407 else{ 408 408 //div reg2 409 op_div64_reg(reg2);409 compiler.codeGenerator.op_div64_reg(reg2); 410 410 } 411 411 412 412 //mov reg1,rax 413 op_mov_RR(reg1,REG_RAX);413 compiler.codeGenerator.op_mov_RR(reg1,REG_RAX); 414 414 415 415 } … … 499 499 500 500 //imul reg,-1 501 op_imul_RV(sizeof(_int64),reg,-1);501 compiler.codeGenerator.op_imul_RV(sizeof(_int64),reg,-1); 502 502 503 503 if(reg==REG_R14){ … … 512 512 513 513 //imul reg,-1 514 op_imul_RV(sizeof(long),reg,-1);514 compiler.codeGenerator.op_imul_RV(sizeof(long),reg,-1); 515 515 516 516 if(reg==REG_R14){ … … 549 549 if(xmm_reg1==REG_XMM1){ 550 550 //movsd xmm0,xmm_reg1 551 op_movsd_RR(REG_XMM0,xmm_reg1);551 compiler.codeGenerator.op_movsd_RR(REG_XMM0,xmm_reg1); 552 552 553 553 //movsd xmm1,xmm_reg2 554 op_movsd_RR(REG_XMM1,xmm_reg2);554 compiler.codeGenerator.op_movsd_RR(REG_XMM1,xmm_reg2); 555 555 } 556 556 else{ 557 557 //movsd xmm1,xmm_reg2 558 op_movsd_RR(REG_XMM1,xmm_reg2);558 compiler.codeGenerator.op_movsd_RR(REG_XMM1,xmm_reg2); 559 559 560 560 //movsd xmm0,xmm_reg1 561 op_movsd_RR(REG_XMM0,xmm_reg1);561 compiler.codeGenerator.op_movsd_RR(REG_XMM0,xmm_reg1); 562 562 } 563 563 564 564 //call pow 565 565 extern const UserProc *pSub_pow; 566 op_call(pSub_pow);566 compiler.codeGenerator.op_call(pSub_pow); 567 567 568 568 //movsd xmm4,xmm0 569 op_movsd_RR(REG_XMM4,REG_XMM0);569 compiler.codeGenerator.op_movsd_RR(REG_XMM4,REG_XMM0); 570 570 571 571 … … 586 586 else{ 587 587 //movsd xmm_reg1,xmm4 588 op_movsd_RR(xmm_reg1,REG_XMM4);588 compiler.codeGenerator.op_movsd_RR(xmm_reg1,REG_XMM4); 589 589 } 590 590 … … 621 621 if(reg1==REG_RCX){ 622 622 //mov r15,rcx 623 op_mov_RR(REG_R15,REG_RCX);623 compiler.codeGenerator.op_mov_RR(REG_R15,REG_RCX); 624 624 625 625 reg1=REG_R15; … … 633 633 634 634 //mov rcx,reg2 635 op_mov_RR(REG_RCX,reg2);635 compiler.codeGenerator.op_mov_RR(REG_RCX,reg2); 636 636 637 637 if(idCalc==CALC_SHL){ … … 647 647 648 648 //shl reg1,cl 649 op_shl_reg(GetTypeSize(type[sp-2],-1),reg1);649 compiler.codeGenerator.op_shl_reg(GetTypeSize(type[sp-2],-1),reg1); 650 650 } 651 651 else if(idCalc==CALC_SHR){ … … 654 654 655 655 //sar 656 op_sar_reg(GetTypeSize(type[sp-2],-1),reg1);656 compiler.codeGenerator.op_sar_reg(GetTypeSize(type[sp-2],-1),reg1); 657 657 } 658 658 else{ … … 660 660 661 661 //shr 662 op_shr_reg(GetTypeSize(type[sp-2],-1),reg1);662 compiler.codeGenerator.op_shr_reg(GetTypeSize(type[sp-2],-1),reg1); 663 663 } 664 664 } … … 666 666 if(sw==0){ 667 667 //mov rcx,r15 668 op_mov_RR(REG_RCX,REG_R15);668 compiler.codeGenerator.op_mov_RR(REG_RCX,REG_R15); 669 669 } 670 670 else{
Note:
See TracChangeset
for help on using the changeset viewer.