Changeset 226 in dev for trunk/abdev/BasicCompiler64/NumOpe_Logical.cpp
- Timestamp:
- Jul 22, 2007, 4:58:47 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler64/NumOpe_Logical.cpp
r206 r226 1 1 #include "stdafx.h" 2 3 #include <Compiler.h> 2 4 3 5 #include "../BasicCompiler_Common/common.h" … … 28 30 if(idCalc==CALC_XOR){ 29 31 //xor reg1,reg2 30 op_xor_reg(sizeof(_int64),reg1,reg2);32 compiler.codeGenerator.op_xor_reg(sizeof(_int64),reg1,reg2); 31 33 } 32 34 else if(idCalc==CALC_OR){ 33 35 //or reg1,reg2 34 op_or_reg(sizeof(_int64),reg1,reg2);36 compiler.codeGenerator.op_or_reg(sizeof(_int64),reg1,reg2); 35 37 } 36 38 else if(idCalc==CALC_AND){ 37 39 //and reg1,reg2 38 op_and_reg(sizeof(_int64),reg1,reg2);40 compiler.codeGenerator.op_and_reg(sizeof(_int64),reg1,reg2); 39 41 } 40 42 … … 54 56 if(idCalc==CALC_ADDITION){ 55 57 //add reg1,reg2 56 op_xor_reg(sizeof(long),reg1,reg2);58 compiler.codeGenerator.op_xor_reg(sizeof(long),reg1,reg2); 57 59 } 58 60 else if(idCalc==CALC_OR){ 59 61 //or reg1,reg2 60 op_or_reg(sizeof(long),reg1,reg2);62 compiler.codeGenerator.op_or_reg(sizeof(long),reg1,reg2); 61 63 } 62 64 else if(idCalc==CALC_AND){ 63 65 //and reg1,reg2 64 op_and_reg(sizeof(long),reg1,reg2);66 compiler.codeGenerator.op_and_reg(sizeof(long),reg1,reg2); 65 67 } 66 68 … … 99 101 100 102 //cmp reg,0 101 op_cmp_value(GetTypeSize(type[sp-1],-1),reg,0);103 compiler.codeGenerator.op_cmp_value(GetTypeSize(type[sp-1],-1),reg,0); 102 104 103 105 //setne al 104 op_setne( REG_RAX );106 compiler.codeGenerator.op_setne( REG_RAX ); 105 107 106 108 //and rax,000000FFh 107 op_and64_value(REG_RAX,(int)0xFF);109 compiler.codeGenerator.op_and64_value(REG_RAX,(int)0xFF); 108 110 109 111 //neg 110 op_neg( REG_RAX );112 compiler.codeGenerator.op_neg( REG_RAX ); 111 113 112 114 //sbb rax, rax 113 op_sbb_RR( sizeof(_int64), REG_RAX, REG_RAX );115 compiler.codeGenerator.op_sbb_RR( sizeof(_int64), REG_RAX, REG_RAX ); 114 116 115 117 //add rax, 1 116 op_add_RV( REG_RAX, 1 );118 compiler.codeGenerator.op_add_RV( REG_RAX, 1 ); 117 119 118 120 if( reg != REG_RAX ){ 119 121 //mov reg,rax 120 op_mov_RR( reg, REG_RAX );122 compiler.codeGenerator.op_mov_RR( reg, REG_RAX ); 121 123 122 124 //mov qword ptr[rsp+offset],rax ※スタックフレームを利用 … … 133 135 134 136 //not reg 135 op_not_reg(sizeof(_int64),reg);137 compiler.codeGenerator.op_not_reg(sizeof(_int64),reg); 136 138 137 139 if(reg==REG_R14){ … … 144 146 145 147 //not reg 146 op_not_reg(sizeof(long),reg);148 compiler.codeGenerator.op_not_reg(sizeof(long),reg); 147 149 148 150 if(reg==REG_R14){
Note:
See TracChangeset
for help on using the changeset viewer.