Changeset 225 in dev for trunk/abdev/BasicCompiler32/increment.cpp
- Timestamp:
- Jul 21, 2007, 11:47:40 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/increment.cpp
r206 r225 1 1 #include "stdafx.h" 2 3 #include <Compiler.h> 2 4 3 5 #include "../BasicCompiler_Common/common.h" … … 19 21 if(IsUse_ecx(&VarRelativeVar)){ 20 22 //push ecx 21 op_push(REG_ECX);23 compiler.codeGenerator.op_push(REG_ECX); 22 24 } 23 25 … … 48 50 49 51 //add eax,1 50 op_add_RV8(REG_EAX,1);52 compiler.codeGenerator.op_add_RV8(REG_EAX,1); 51 53 52 54 //adc edx,0 53 op_adc_RV8(REG_EDX,0);55 compiler.codeGenerator.op_adc_RV8(REG_EDX,0); 54 56 } 55 57 else if(idCalc==CALC_SUBTRACTION){ … … 57 59 58 60 //sub eax,1 59 op_sub_RV8(REG_EAX,1);61 compiler.codeGenerator.op_sub_RV8(REG_EAX,1); 60 62 61 63 //sbb edx,0 62 op_sbb_RV8(REG_EDX,0);64 compiler.codeGenerator.op_sbb_RV8(REG_EDX,0); 63 65 } 64 66 } … … 66 68 if(idCalc==CALC_ADDITION){ 67 69 //インクリメント 68 op_inc(REG_EAX);70 compiler.codeGenerator.op_inc(REG_EAX); 69 71 } 70 72 else if(idCalc==CALC_SUBTRACTION){ 71 73 //デクリメント 72 op_dec(REG_EAX);74 compiler.codeGenerator.op_dec(REG_EAX); 73 75 } 74 76 } … … 77 79 //変数オフセットを一時退避 78 80 //push ecx 79 op_push(REG_ECX);81 compiler.codeGenerator.op_push(REG_ECX); 80 82 81 83 if( varType.IsDouble() ){ 82 84 //sub esp,8 83 op_sub_esp(8);85 compiler.codeGenerator.op_sub_esp(8); 84 86 85 87 //fstp qword ptr[esp] 86 op_fstp_basereg(varType.GetBasicType(),REG_ESP);88 compiler.codeGenerator.op_fstp_basereg(varType.GetBasicType(),REG_ESP); 87 89 } 88 90 else if( varType.IsSingle() ){ 89 91 //sub esp,4 90 op_sub_esp(4);92 compiler.codeGenerator.op_sub_esp(4); 91 93 92 94 //fstp dword ptr[esp] 93 op_fstp_basereg(varType.GetBasicType(),REG_ESP);95 compiler.codeGenerator.op_fstp_basereg(varType.GetBasicType(),REG_ESP); 94 96 } 95 97 else if( varType.Is64() ){ 96 98 //push edx 97 op_push(REG_EDX);99 compiler.codeGenerator.op_push(REG_EDX); 98 100 99 101 //push eax 100 op_push(REG_EAX);102 compiler.codeGenerator.op_push(REG_EAX); 101 103 } 102 104 else{ 103 105 //push eax 104 op_push(REG_EAX);106 compiler.codeGenerator.op_push(REG_EAX); 105 107 } 106 108 … … 160 162 if( varType.IsDouble() ){ 161 163 //fld qword ptr[esp] 162 op_fld_basereg(varType.GetBasicType(),REG_ESP);164 compiler.codeGenerator.op_fld_basereg(varType.GetBasicType(),REG_ESP); 163 165 164 166 //add esp,8 165 op_add_esp(8);167 compiler.codeGenerator.op_add_esp(8); 166 168 } 167 169 else if( varType.IsSingle() ){ 168 170 //fld dword ptr[esp] 169 op_fld_basereg(varType.GetBasicType(),REG_ESP);171 compiler.codeGenerator.op_fld_basereg(varType.GetBasicType(),REG_ESP); 170 172 171 173 //add esp,4 172 op_add_esp(4);174 compiler.codeGenerator.op_add_esp(4); 173 175 } 174 176 else if( varType.Is64() ){ 175 177 //pop eax 176 op_pop(REG_EAX);178 compiler.codeGenerator.op_pop(REG_EAX); 177 179 178 180 //pop edx 179 op_pop(REG_EDX);181 compiler.codeGenerator.op_pop(REG_EDX); 180 182 } 181 183 else{ 182 184 //pop eax 183 op_pop(REG_EAX);185 compiler.codeGenerator.op_pop(REG_EAX); 184 186 } 185 187 … … 187 189 //変数オフセットを復元 188 190 //pop ecx 189 op_pop(REG_ECX);191 compiler.codeGenerator.op_pop(REG_ECX); 190 192 } 191 193 … … 197 199 if(IsUse_ecx(&VarRelativeVar)){ 198 200 //pop ecx 199 op_pop(REG_ECX);201 compiler.codeGenerator.op_pop(REG_ECX); 200 202 } 201 203
Note:
See TracChangeset
for help on using the changeset viewer.