Changeset 227 in dev for trunk/abdev/BasicCompiler32/NumOpe_Relation.cpp
- Timestamp:
- Jul 22, 2007, 9:13:57 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/NumOpe_Relation.cpp
r225 r227 176 176 177 177 //cmp eax,ebx 178 OpBuffer[obp++]=(char)0x3B; 179 OpBuffer[obp++]=(char)0xC3; 178 compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX ); 180 179 181 180 //ja FalseSchedule2(偽へジャンプ) … … 188 187 189 188 //mov eax,1 190 OpBuffer[obp++]=(char)0xB8; 191 *((long *)(OpBuffer+obp))=1; 192 obp+=sizeof(long); 189 compiler.codeGenerator.op_mov_RV( REG_EAX, 1 ); 193 190 194 191 //jmp 2(演算終了位置へジャンプ) … … 224 221 225 222 //mov ecx,1 226 OpBuffer[obp++]=(char)0xB9; 227 *((long *)(OpBuffer+obp))=1; 228 obp+=sizeof(long); 223 compiler.codeGenerator.op_mov_RV( REG_ECX, 1 ); 229 224 230 225 //cmp eax,ebx 231 OpBuffer[obp++]=(char)0x3B; 232 OpBuffer[obp++]=(char)0xC3; 226 compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX ); 233 227 234 228 if(IsSignedType(type_stack[sp-2])==0&&IsSignedType(type_stack[sp-1])==0){ 235 229 //符号なし演算 236 230 237 //jbe 5(次のmovを飛び越す)231 //jbe 2(次のxorを飛び越す) 238 232 OpBuffer[obp++]=(char)0x76; 239 OpBuffer[obp++]=(char)0x0 5;233 OpBuffer[obp++]=(char)0x02; 240 234 } 241 235 else{ 242 236 //符号あり演算 243 237 244 //jle 5(次のmovを飛び越す)238 //jle 2(次のxorを飛び越す) 245 239 OpBuffer[obp++]=(char)0x7E; 246 OpBuffer[obp++]=(char)0x05; 247 } 248 249 //mov ecx,0 250 OpBuffer[obp++]=(char)0xB9; 251 *((long *)(OpBuffer+obp))=0; 252 obp+=sizeof(long); 240 OpBuffer[obp++]=(char)0x02; 241 } 242 243 //xor ecx,ecx 244 compiler.codeGenerator.op_xor_RR( REG_ECX ); 253 245 254 246 //mov dword ptr[esp],ecx … … 342 334 343 335 //mov ecx,1 344 OpBuffer[obp++]=(char)0xB9; 345 *((long *)(OpBuffer+obp))=1; 346 obp+=sizeof(long); 336 compiler.codeGenerator.op_mov_RV( REG_ECX, 1 ); 347 337 348 338 //test ah,1 349 339 compiler.codeGenerator.op_test_ah( (char)0x01 ); 350 340 351 //je 5341 //je 2(次のxorを飛び越す) 352 342 OpBuffer[obp++]=(char)0x74; 353 OpBuffer[obp++]=(char)0x05; 354 355 //mov ecx,0 356 OpBuffer[obp++]=(char)0xB9; 357 *((long *)(OpBuffer+obp))=0; 358 obp+=sizeof(long); 343 OpBuffer[obp++]=(char)0x02; 344 345 //xor ecx,ecx 346 compiler.codeGenerator.op_xor_RR( REG_ECX ); 359 347 360 348 //mov dword ptr[esp],ecx … … 376 364 377 365 //cmp edx,ecx 378 OpBuffer[obp++]=(char)0x3B; 379 OpBuffer[obp++]=(char)0xD1; 366 compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX ); 380 367 381 368 if(IsSignedType(AnswerType)){ … … 410 397 411 398 //cmp eax,ebx 412 OpBuffer[obp++]=(char)0x3B; 413 OpBuffer[obp++]=(char)0xC3; 399 compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX ); 414 400 415 401 //jb FalseSchedule2(偽へジャンプ) … … 422 408 423 409 //mov eax,1 424 OpBuffer[obp++]=(char)0xB8; 425 *((long *)(OpBuffer+obp))=1; 426 obp+=sizeof(long); 410 compiler.codeGenerator.op_mov_RV( REG_EAX, 1 ); 427 411 428 412 //jmp 2(演算終了位置へジャンプ) … … 458 442 459 443 //mov ecx,1 460 OpBuffer[obp++]=(char)0xB9; 461 *((long *)(OpBuffer+obp))=1; 462 obp+=sizeof(long); 444 compiler.codeGenerator.op_mov_RV( REG_ECX, 1 ); 463 445 464 446 //cmp eax,ebx 465 OpBuffer[obp++]=(char)0x3B; 466 OpBuffer[obp++]=(char)0xC3; 447 compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX ); 467 448 468 449 if(IsSignedType(AnswerType)){ 469 450 //符号あり演算 470 451 471 //jge 5(次のmovを飛び越す)符号有り452 //jge 2(次のxorを飛び越す)符号有り 472 453 OpBuffer[obp++]=(char)0x7D; 473 OpBuffer[obp++]=(char)0x0 5;454 OpBuffer[obp++]=(char)0x02; 474 455 } 475 456 else{ 476 457 //符号なし演算 477 458 478 //jae 5(次のmovを飛び越す)459 //jae 2(次のxorを飛び越す) 479 460 OpBuffer[obp++]=(char)0x73; 480 OpBuffer[obp++]=(char)0x05; 481 } 482 483 //mov ecx,0 484 OpBuffer[obp++]=(char)0xB9; 485 *((long *)(OpBuffer+obp))=0; 486 obp+=sizeof(long); 461 OpBuffer[obp++]=(char)0x02; 462 } 463 464 //xor ecx,ecx 465 compiler.codeGenerator.op_xor_RR( REG_ECX ); 487 466 488 467 //mov dword ptr[esp],ecx … … 578 557 579 558 //mov ecx,1 580 OpBuffer[obp++]=(char)0xB9; 581 *((long *)(OpBuffer+obp))=1; 582 obp+=sizeof(long); 559 compiler.codeGenerator.op_mov_RV( REG_ECX, 1 ); 583 560 584 561 //test ah,01h 585 562 compiler.codeGenerator.op_test_ah( (char)0x41 ); 586 563 587 //jne 5564 //jne 2 588 565 OpBuffer[obp++]=(char)0x75; 589 566 OpBuffer[obp++]=(char)0x05; 590 567 591 //mov ecx,0 592 OpBuffer[obp++]=(char)0xB9; 593 *((long *)(OpBuffer+obp))=0; 594 obp+=sizeof(long); 568 //xor ecx,ecx 569 compiler.codeGenerator.op_xor_RR( REG_ECX ); 595 570 596 571 //mov dword ptr[esp],ecx … … 612 587 613 588 //cmp edx,ecx 614 OpBuffer[obp++]=(char)0x3B; 615 OpBuffer[obp++]=(char)0xD1; 589 compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX ); 616 590 617 591 if(IsSignedType(AnswerType)){ … … 646 620 647 621 //cmp eax,ebx 648 OpBuffer[obp++]=(char)0x3B; 649 OpBuffer[obp++]=(char)0xC3; 622 compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX ); 650 623 651 624 //jb TrueSchedule2(真へジャンプ) … … 669 642 670 643 //mov eax,1 671 OpBuffer[obp++]=(char)0xB8; 672 *((long *)(OpBuffer+obp))=1; 673 obp+=sizeof(long); 644 compiler.codeGenerator.op_mov_RV( REG_EAX, 1 ); 674 645 675 646 //push eax … … 694 665 695 666 //mov ecx,1 696 OpBuffer[obp++]=(char)0xB9; 697 *((long *)(OpBuffer+obp))=1; 698 obp+=sizeof(long); 667 compiler.codeGenerator.op_mov_RV( REG_ECX, 1 ); 699 668 700 669 //cmp eax,ebx 701 OpBuffer[obp++]=(char)0x3B; 702 OpBuffer[obp++]=(char)0xC3; 670 compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX ); 703 671 704 672 if(IsSignedType(AnswerType)){ 705 673 //符号あり演算 706 674 707 //jl 5(次のmovを飛び越す)675 //jl 2(次のxorを飛び越す) 708 676 OpBuffer[obp++]=(char)0x7C; 709 OpBuffer[obp++]=(char)0x0 5;677 OpBuffer[obp++]=(char)0x02; 710 678 } 711 679 else{ 712 680 //符号なし演算 713 681 714 //jb 5(次のmovを飛び越す)682 //jb 2(次のxorを飛び越す) 715 683 OpBuffer[obp++]=(char)0x72; 716 OpBuffer[obp++]=(char)0x05; 717 } 718 719 //mov ecx,0 720 OpBuffer[obp++]=(char)0xB9; 721 *((long *)(OpBuffer+obp))=0; 722 obp+=sizeof(long); 684 OpBuffer[obp++]=(char)0x02; 685 } 686 687 //xor ecx,ecx 688 compiler.codeGenerator.op_xor_RR( REG_ECX ); 723 689 724 690 //mov dword ptr[esp],ecx … … 810 776 811 777 //mov ecx,1 812 OpBuffer[obp++]=(char)0xB9; 813 *((long *)(OpBuffer+obp))=1; 814 obp+=sizeof(long); 778 compiler.codeGenerator.op_mov_RV( REG_ECX, 1 ); 815 779 816 780 //test ah,41 817 781 compiler.codeGenerator.op_test_ah( (char)0x41 ); 818 782 819 //je 5783 //je 2(次のxorを飛び越す) 820 784 OpBuffer[obp++]=(char)0x74; 821 OpBuffer[obp++]=(char)0x05; 822 823 //mov ecx,0 824 OpBuffer[obp++]=(char)0xB9; 825 *((long *)(OpBuffer+obp))=0; 826 obp+=sizeof(long); 785 OpBuffer[obp++]=(char)0x02; 786 787 //xor ecx,ecx 788 compiler.codeGenerator.op_xor_RR( REG_ECX ); 827 789 828 790 //mov dword ptr[esp],ecx … … 844 806 845 807 //cmp edx,ecx 846 OpBuffer[obp++]=(char)0x3B; 847 OpBuffer[obp++]=(char)0xD1; 808 compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX ); 848 809 849 810 if(IsSignedType(AnswerType)){ … … 878 839 879 840 //cmp eax,ebx 880 OpBuffer[obp++]=(char)0x3B; 881 OpBuffer[obp++]=(char)0xC3; 841 compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX ); 882 842 883 843 //ja TrueSchedule2(真へジャンプ) … … 901 861 902 862 //mov eax,1 903 OpBuffer[obp++]=(char)0xB8; 904 *((long *)(OpBuffer+obp))=1; 905 obp+=sizeof(long); 863 compiler.codeGenerator.op_mov_RV( REG_EAX, 1 ); 906 864 907 865 //push eax … … 926 884 927 885 //mov ecx,1 928 OpBuffer[obp++]=(char)0xB9; 929 *((long *)(OpBuffer+obp))=1; 930 obp+=sizeof(long); 886 compiler.codeGenerator.op_mov_RV( REG_ECX, 1 ); 931 887 932 888 //cmp eax,ebx 933 OpBuffer[obp++]=(char)0x3B; 934 OpBuffer[obp++]=(char)0xC3; 889 compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX ); 935 890 936 891 if(IsSignedType(AnswerType)){ 937 //jg 5(次のmovを飛び越す)892 //jg 2(次のxorを飛び越す) 938 893 OpBuffer[obp++]=(char)0x7F; 939 OpBuffer[obp++]=(char)0x0 5;940 } 941 else{ 942 //ja 5(次のmovを飛び越す)894 OpBuffer[obp++]=(char)0x02; 895 } 896 else{ 897 //ja 2(次のxorを飛び越す) 943 898 OpBuffer[obp++]=(char)0x77; 944 OpBuffer[obp++]=(char)0x05; 945 } 946 947 //mov ecx,0 948 OpBuffer[obp++]=(char)0xB9; 949 *((long *)(OpBuffer+obp))=0; 950 obp+=sizeof(long); 899 OpBuffer[obp++]=(char)0x02; 900 } 901 902 //xor ecx,ecx 903 compiler.codeGenerator.op_xor_RR( REG_ECX ); 951 904 952 905 //mov dword ptr[esp],ecx … … 1036 989 1037 990 //mov ecx,1 1038 OpBuffer[obp++]=(char)0xB9; 1039 *((long *)(OpBuffer+obp))=1; 1040 obp+=sizeof(long); 991 compiler.codeGenerator.op_mov_RV( REG_ECX, 1 ); 1041 992 1042 993 //test ah,40 1043 994 compiler.codeGenerator.op_test_ah( (char)0x40 ); 1044 995 1045 //je 5996 //je 2 1046 997 OpBuffer[obp++]=(char)0x74; 1047 OpBuffer[obp++]=(char)0x05; 1048 1049 //mov ecx,0 1050 OpBuffer[obp++]=(char)0xB9; 1051 *((long *)(OpBuffer+obp))=0; 1052 obp+=sizeof(long); 998 OpBuffer[obp++]=(char)0x02; 999 1000 //xor ecx,ecx 1001 compiler.codeGenerator.op_xor_RR( REG_ECX ); 1053 1002 1054 1003 //mov dword ptr[esp],ecx … … 1070 1019 1071 1020 //cmp eax,ebx 1072 OpBuffer[obp++]=(char)0x3B; 1073 OpBuffer[obp++]=(char)0xC3; 1021 compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX ); 1074 1022 1075 1023 //jnz TrueSchedule1(真へジャンプ) … … 1079 1027 1080 1028 //cmp edx,ecx 1081 OpBuffer[obp++]=(char)0x3B; 1082 OpBuffer[obp++]=(char)0xD1; 1029 compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX ); 1083 1030 1084 1031 //jnz TrueSchedule2(真へジャンプ) … … 1099 1046 1100 1047 //mov eax,1 1101 OpBuffer[obp++]=(char)0xB8; 1102 *((long *)(OpBuffer+obp))=1; 1103 obp+=sizeof(long); 1048 compiler.codeGenerator.op_mov_RV( REG_EAX, 1 ); 1104 1049 1105 1050 //push eax … … 1132 1077 1133 1078 //mov eax,1 1134 OpBuffer[obp++]=(char)0xB8; 1135 *((long *)(OpBuffer+obp))=1; 1136 obp+=sizeof(long); 1079 compiler.codeGenerator.op_mov_RV( REG_EAX, 1 ); 1137 1080 1138 1081 //mov dword ptr[esp],eax … … 1222 1165 1223 1166 //mov ecx,1 1224 OpBuffer[obp++]=(char)0xB9; 1225 *((long *)(OpBuffer+obp))=1; 1226 obp+=sizeof(long); 1167 compiler.codeGenerator.op_mov_RV( REG_ECX, 1 ); 1227 1168 1228 1169 //test ah,40 1229 1170 compiler.codeGenerator.op_test_ah( (char)0x40 ); 1230 1171 1231 //jne 51172 //jne 2(次のxorを飛び越す) 1232 1173 OpBuffer[obp++]=(char)0x75; 1233 OpBuffer[obp++]=(char)0x05; 1234 1235 //mov ecx,0 1236 OpBuffer[obp++]=(char)0xB9; 1237 *((long *)(OpBuffer+obp))=0; 1238 obp+=sizeof(long); 1174 OpBuffer[obp++]=(char)0x02; 1175 1176 //xor ecx,ecx 1177 compiler.codeGenerator.op_xor_RR( REG_ECX ); 1239 1178 1240 1179 //mov dword ptr[esp],ecx … … 1256 1195 1257 1196 //cmp eax,ebx 1258 OpBuffer[obp++]=(char)0x3B; 1259 OpBuffer[obp++]=(char)0xC3; 1197 compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX ); 1260 1198 1261 1199 //jnz FalseSchedule1(偽へジャンプ) … … 1265 1203 1266 1204 //cmp edx,ecx 1267 OpBuffer[obp++]=(char)0x3B; 1268 OpBuffer[obp++]=(char)0xD1; 1205 compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX ); 1269 1206 1270 1207 //jnz FalseSchedule2(偽へジャンプ) … … 1274 1211 1275 1212 //mov eax,1 1276 OpBuffer[obp++]=(char)0xB8; 1277 *((long *)(OpBuffer+obp))=1; 1278 obp+=sizeof(long); 1213 compiler.codeGenerator.op_mov_RV( REG_EAX, 1 ); 1279 1214 1280 1215 //jmp 2(演算終了位置へジャンプ) … … 1326 1261 1327 1262 //mov eax,1 1328 OpBuffer[obp++]=(char)0xB8; 1329 *((long *)(OpBuffer+obp))=1; 1330 obp+=sizeof(long); 1263 compiler.codeGenerator.op_mov_RV( REG_EAX, 1 ); 1331 1264 1332 1265 //mov dword ptr[esp],eax
Note:
See TracChangeset
for help on using the changeset viewer.