Changeset 225 in dev for trunk/abdev/BasicCompiler32/NumOpe.cpp
- Timestamp:
- Jul 21, 2007, 11:47:40 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/NumOpe.cpp
r224 r225 15 15 if(type==DEF_OBJECT || type==DEF_STRUCT){ 16 16 //push eax 17 op_push(REG_EAX);17 compiler.codeGenerator.op_push(REG_EAX); 18 18 } 19 19 else if(type==DEF_DOUBLE){ 20 20 //sub esp,8 21 op_sub_esp(8);21 compiler.codeGenerator.op_sub_esp(8); 22 22 23 23 //fstp qword ptr[esp] 24 OpBuffer[obp++]=(char)0xDD; 25 OpBuffer[obp++]=(char)0x1C; 26 OpBuffer[obp++]=(char)0x24; 24 compiler.codeGenerator.op_fstp_basereg( DEF_DOUBLE, REG_ESP ); 27 25 } 28 26 else if(type==DEF_SINGLE){ 29 27 //sub esp,4 30 op_sub_esp(4);28 compiler.codeGenerator.op_sub_esp(4); 31 29 32 30 //fstp dword ptr[esp] 33 OpBuffer[obp++]=(char)0xD9; 34 OpBuffer[obp++]=(char)0x1C; 35 OpBuffer[obp++]=(char)0x24; 31 compiler.codeGenerator.op_fstp_basereg( DEF_SINGLE, REG_ESP ); 36 32 } 37 33 else if(type==DEF_INT64||type==DEF_QWORD){ 38 34 //push edx 39 op_push(REG_EDX);35 compiler.codeGenerator.op_push(REG_EDX); 40 36 41 37 //push eax 42 op_push(REG_EAX);38 compiler.codeGenerator.op_push(REG_EAX); 43 39 } 44 40 else if(type==DEF_LONG){ 45 41 //push eax 46 op_push(REG_EAX);42 compiler.codeGenerator.op_push(REG_EAX); 47 43 } 48 44 else if(type==DEF_INTEGER || (Smoothie::IsUnicode()&&type==DEF_CHAR)){ 49 45 //movsx ebx,ax 50 OpBuffer[obp++]=(char)0x0F; 51 OpBuffer[obp++]=(char)0xBF; 52 OpBuffer[obp++]=(char)0xD8; 46 compiler.codeGenerator.op_movsx_R32R16( REG_EBX, REG_EAX ); 53 47 54 48 //push ebx 55 op_push(REG_EBX);49 compiler.codeGenerator.op_push(REG_EBX); 56 50 } 57 51 else if(type==DEF_SBYTE || (Smoothie::IsUnicode()==false&&type==DEF_CHAR)){ 58 52 //movsx ebx,al 59 OpBuffer[obp++]=(char)0x0F; 60 OpBuffer[obp++]=(char)0xBE; 61 OpBuffer[obp++]=(char)0xD8; 53 compiler.codeGenerator.op_movsx_R32R8( REG_EBX, REG_EAX ); 62 54 63 55 //push ebx 64 op_push(REG_EBX);56 compiler.codeGenerator.op_push(REG_EBX); 65 57 } 66 58 else if(type==DEF_DWORD||type==DEF_WORD||type==DEF_BYTE||type==DEF_BOOLEAN|| 67 59 IsPtrType(type)){ 68 60 //push eax 69 op_push(REG_EAX);61 compiler.codeGenerator.op_push(REG_EAX); 70 62 } 71 63 else{ … … 157 149 158 150 //オブジェクトポインタをecxにコピー 159 op_mov_RR( REG_ECX, useReg );151 compiler.codeGenerator.op_mov_RR( REG_ECX, useReg ); 160 152 161 153 RELATIVE_VAR relativeVar; … … 200 192 //オブジェクトポインタをスタックに入れておく 201 193 //push reg 202 op_push( useReg );194 compiler.codeGenerator.op_push( useReg ); 203 195 204 196 if( !Opcode_CallProc(parameter,pUserProc,PROCFLAG_NEW,termLeft,0 ) ){ … … 207 199 } 208 200 209 op_pop();201 compiler.codeGenerator.op_pop(); 210 202 211 203 ///////////////////// … … 521 513 if( resultType.IsReal() ){ 522 514 //fld ptr[esp] 523 op_fld_ptr_esp( resultType.GetBasicType() );515 compiler.codeGenerator.op_fld_ptr_esp( resultType.GetBasicType() ); 524 516 525 517 //add esp,size 526 op_add_esp( resultType.GetBasicSize() );518 compiler.codeGenerator.op_add_esp( resultType.GetBasicSize() ); 527 519 } 528 520 else{ 529 521 //pop eax 530 op_pop(REG_EAX);522 compiler.codeGenerator.op_pop(REG_EAX); 531 523 532 524 if( resultType.Is64() ){ 533 525 //pop edx 534 op_pop(REG_EDX);526 compiler.codeGenerator.op_pop(REG_EDX); 535 527 } 536 528 } … … 603 595 604 596 //mov eax,i2 605 op_mov_RV(REG_EAX,i2);597 compiler.codeGenerator.op_mov_RV(REG_EAX,i2); 606 598 obp-=sizeof(long); 607 599 pobj_DataTableSchedule->add(); … … 613 605 614 606 //push eax 615 op_push( REG_EAX );607 compiler.codeGenerator.op_push( REG_EAX ); 616 608 617 609 return true; … … 815 807 //sub esp,size 816 808 //fstp ptr[esp] 817 op_fstp_push( resultType );809 compiler.codeGenerator.op_fstp_push( resultType ); 818 810 } 819 811 else{ 820 812 if( resultType.Is64() ){ 821 813 //push edx 822 op_push( REG_EDX );814 compiler.codeGenerator.op_push( REG_EDX ); 823 815 } 824 816 else{ … … 827 819 828 820 //push eax 829 op_push( REG_EAX );821 compiler.codeGenerator.op_push( REG_EAX ); 830 822 } 831 823 } … … 851 843 852 844 //push 0 853 op_push_V( 0 );845 compiler.codeGenerator.op_push_V( 0 ); 854 846 855 847 sp++; … … 912 904 913 905 //push HILONG(dbl) 914 op_push_V((long)*(long *)(((char *)(&i64data))+4));906 compiler.codeGenerator.op_push_V((long)*(long *)(((char *)(&i64data))+4)); 915 907 916 908 //push LOLONG(dbl) 917 op_push_V(*(long *)(&i64data));909 compiler.codeGenerator.op_push_V(*(long *)(&i64data)); 918 910 } 919 911 else if(type_stack[sp]==DEF_SINGLE){ … … 926 918 927 919 //push term 928 op_push_V(i3);920 compiler.codeGenerator.op_push_V(i3); 929 921 } 930 922 else{ … … 932 924 933 925 //push term 934 op_push_V((long)i64data);926 compiler.codeGenerator.op_push_V((long)i64data); 935 927 936 928 if((long)i64data==0) index_stack[sp]=LITERAL_NULL; … … 1082 1074 1083 1075 //push HILONG(i64data) 1084 op_push_V((long)*(long *)(((char *)(&i64data))+4));1076 compiler.codeGenerator.op_push_V((long)*(long *)(((char *)(&i64data))+4)); 1085 1077 1086 1078 //push LOLONG(i64data) 1087 op_push_V(*(long *)(&i64data));1079 compiler.codeGenerator.op_push_V(*(long *)(&i64data)); 1088 1080 } 1089 1081 else if( resultType.IsSingle() ){ … … 1097 1089 1098 1090 //push flt 1099 op_push_V(i3);1091 compiler.codeGenerator.op_push_V(i3); 1100 1092 } 1101 1093 else{ … … 1108 1100 1109 1101 //push term 1110 op_push_V(i3);1102 compiler.codeGenerator.op_push_V(i3); 1111 1103 } 1112 1104
Note:
See TracChangeset
for help on using the changeset viewer.