1.1 --- a/src/cpu/mips/vm/mips_64.ad Wed Jul 26 15:19:03 2017 +0800 1.2 +++ b/src/cpu/mips/vm/mips_64.ad Thu Aug 03 14:05:50 2017 +0800 1.3 @@ -5554,55 +5554,6 @@ 1.4 %} 1.5 %} 1.6 1.7 -/* 1.8 -// Comparison Code, unsigned compare. Used by FP also, with 1.9 -// C2 (unordered) turned into GT or LT already. The other bits 1.10 -// C0 and C3 are turned into Carry & Zero flags. 1.11 -operand cmpOpU() %{ 1.12 - match(Bool); 1.13 - 1.14 - format %{ "" %} 1.15 - interface(COND_INTER) %{ 1.16 - equal(0x4); 1.17 - not_equal(0x5); 1.18 - less(0x2); 1.19 - greater_equal(0x3); 1.20 - less_equal(0x6); 1.21 - greater(0x7); 1.22 - %} 1.23 -%} 1.24 -*/ 1.25 -/* 1.26 -// Comparison Code for FP conditional move 1.27 -operand cmpOp_fcmov() %{ 1.28 - match(Bool); 1.29 - 1.30 - format %{ "" %} 1.31 - interface(COND_INTER) %{ 1.32 - equal (0x01); 1.33 - not_equal (0x02); 1.34 - greater (0x03); 1.35 - greater_equal(0x04); 1.36 - less (0x05); 1.37 - less_equal (0x06); 1.38 - %} 1.39 -%} 1.40 - 1.41 -// Comparision Code used in long compares 1.42 -operand cmpOp_commute() %{ 1.43 - match(Bool); 1.44 - 1.45 - format %{ "" %} 1.46 - interface(COND_INTER) %{ 1.47 - equal(0x4); 1.48 - not_equal(0x5); 1.49 - less(0xF); 1.50 - greater_equal(0xE); 1.51 - less_equal(0xD); 1.52 - greater(0xC); 1.53 - %} 1.54 -%} 1.55 -*/ 1.56 1.57 //----------Special Memory Operands-------------------------------------------- 1.58 // Stack Slot Operand - This operand is used for loading and storing temporary 1.59 @@ -6791,36 +6742,6 @@ 1.60 else 1.61 __ bne(op1, op2, (int)0); 1.62 break; 1.63 -/* 1.64 - case 0x03: //above 1.65 - __ sltu(AT, op2, op1); 1.66 - if(&L) 1.67 - __ bne(R0, AT, L); 1.68 - else 1.69 - __ bne(R0, AT, (int)0); 1.70 - break; 1.71 - case 0x04: //above_equal 1.72 - __ sltu(AT, op1, op2); 1.73 - if(&L) 1.74 - __ beq(AT, R0, L); 1.75 - else 1.76 - __ beq(AT, R0, (int)0); 1.77 - break; 1.78 - case 0x05: //below 1.79 - __ sltu(AT, op1, op2); 1.80 - if(&L) 1.81 - __ bne(R0, AT, L); 1.82 - else 1.83 - __ bne(R0, AT, (int)0); 1.84 - break; 1.85 - case 0x06: //below_equal 1.86 - __ sltu(AT, op2, op1); 1.87 - if(&L) 1.88 - __ beq(AT, R0, L); 1.89 - else 1.90 - __ beq(AT, R0, (int)0); 1.91 - break; 1.92 -*/ 1.93 default: 1.94 Unimplemented(); 1.95 } 1.96 @@ -7561,128 +7482,6 @@ 1.97 ins_pipe( pipe_alu_branch ); 1.98 %} 1.99 1.100 -instruct branchConL_reg_immL16_sub(cmpOp cmp, mRegL src1, immL16_sub src2, label labl) %{ 1.101 - match( If cmp (CmpL src1 src2) ); 1.102 - effect(USE labl); 1.103 - ins_cost(180); 1.104 - format %{ "BR$cmp $src1, $src2, $labl #@branchConL_reg_immL16_sub" %} 1.105 - 1.106 - ins_encode %{ 1.107 - Register op1 = $src1$$Register; 1.108 - int val = $src2$$constant; 1.109 - Label &L = *($labl$$label); 1.110 - int flag = $cmp$$cmpcode; 1.111 - 1.112 - __ daddiu(AT, op1, -1 * val); 1.113 - switch(flag) 1.114 - { 1.115 - case 0x01: //equal 1.116 - if (&L) 1.117 - __ beq(R0, AT, L); 1.118 - else 1.119 - __ beq(R0, AT, (int)0); 1.120 - break; 1.121 - case 0x02: //not_equal 1.122 - if (&L) 1.123 - __ bne(R0, AT, L); 1.124 - else 1.125 - __ bne(R0, AT, (int)0); 1.126 - break; 1.127 - case 0x03: //greater 1.128 - if(&L) 1.129 - __ bgtz(AT, L); 1.130 - else 1.131 - __ bgtz(AT, (int)0); 1.132 - break; 1.133 - case 0x04: //greater_equal 1.134 - if(&L) 1.135 - __ bgez(AT, L); 1.136 - else 1.137 - __ bgez(AT, (int)0); 1.138 - break; 1.139 - case 0x05: //less 1.140 - if(&L) 1.141 - __ bltz(AT, L); 1.142 - else 1.143 - __ bltz(AT, (int)0); 1.144 - break; 1.145 - case 0x06: //less_equal 1.146 - if(&L) 1.147 - __ blez(AT, L); 1.148 - else 1.149 - __ blez(AT, (int)0); 1.150 - break; 1.151 - default: 1.152 - Unimplemented(); 1.153 - } 1.154 - __ nop(); 1.155 - %} 1.156 - 1.157 - ins_pc_relative(1); 1.158 - ins_pipe( pipe_alu_branch ); 1.159 -%} 1.160 - 1.161 - 1.162 -instruct branchConI_reg_imm16_sub(cmpOp cmp, mRegI src1, immI16_sub src2, label labl) %{ 1.163 - match( If cmp (CmpI src1 src2) ); 1.164 - effect(USE labl); 1.165 - ins_cost(180); 1.166 - format %{ "BR$cmp $src1, $src2, $labl #@branchConI_reg_imm16_sub" %} 1.167 - 1.168 - ins_encode %{ 1.169 - Register op1 = $src1$$Register; 1.170 - int val = $src2$$constant; 1.171 - Label &L = *($labl$$label); 1.172 - int flag = $cmp$$cmpcode; 1.173 - 1.174 - __ addiu32(AT, op1, -1 * val); 1.175 - switch(flag) 1.176 - { 1.177 - case 0x01: //equal 1.178 - if (&L) 1.179 - __ beq(R0, AT, L); 1.180 - else 1.181 - __ beq(R0, AT, (int)0); 1.182 - break; 1.183 - case 0x02: //not_equal 1.184 - if (&L) 1.185 - __ bne(R0, AT, L); 1.186 - else 1.187 - __ bne(R0, AT, (int)0); 1.188 - break; 1.189 - case 0x03: //greater 1.190 - if(&L) 1.191 - __ bgtz(AT, L); 1.192 - else 1.193 - __ bgtz(AT, (int)0); 1.194 - break; 1.195 - case 0x04: //greater_equal 1.196 - if(&L) 1.197 - __ bgez(AT, L); 1.198 - else 1.199 - __ bgez(AT, (int)0); 1.200 - break; 1.201 - case 0x05: //less 1.202 - if(&L) 1.203 - __ bltz(AT, L); 1.204 - else 1.205 - __ bltz(AT, (int)0); 1.206 - break; 1.207 - case 0x06: //less_equal 1.208 - if(&L) 1.209 - __ blez(AT, L); 1.210 - else 1.211 - __ blez(AT, (int)0); 1.212 - break; 1.213 - default: 1.214 - Unimplemented(); 1.215 - } 1.216 - __ nop(); 1.217 - %} 1.218 - 1.219 - ins_pc_relative(1); 1.220 - ins_pipe( pipe_alu_branch ); 1.221 -%} 1.222 1.223 instruct branchConL_regL_immL0(cmpOp cmp, mRegL src1, immL0 zero, label labl) %{ 1.224 match( If cmp (CmpL src1 zero) ); 1.225 @@ -12883,96 +12682,6 @@ 1.226 %} 1.227 1.228 1.229 - instruct jmpLoopEnd_reg_imm16_sub(cmpOp cop, mRegI src1, immI16_sub src2, label labl) %{ 1.230 - match(CountedLoopEnd cop (CmpI src1 src2)); 1.231 - effect(USE labl); 1.232 - 1.233 - ins_cost(250); 1.234 - format %{ "J$cop $src1, $src2, $labl\t# Loop end @ jmpLoopEnd_reg_imm16_sub" %} 1.235 - ins_encode %{ 1.236 - Register op1 = $src1$$Register; 1.237 - int op2 = $src2$$constant; 1.238 - Label &L = *($labl$$label); 1.239 - int flag = $cop$$cmpcode; 1.240 - 1.241 - __ addiu32(AT, op1, -1 * op2); 1.242 - 1.243 - switch(flag) 1.244 - { 1.245 - case 0x01: //equal 1.246 - if (&L) 1.247 - __ beq(AT, R0, L); 1.248 - else 1.249 - __ beq(AT, R0, (int)0); 1.250 - break; 1.251 - case 0x02: //not_equal 1.252 - if (&L) 1.253 - __ bne(AT, R0, L); 1.254 - else 1.255 - __ bne(AT, R0, (int)0); 1.256 - break; 1.257 - case 0x03: //above 1.258 - if(&L) 1.259 - __ bgtz(AT, L); 1.260 - else 1.261 - __ bgtz(AT, (int)0); 1.262 - break; 1.263 - case 0x04: //above_equal 1.264 - if(&L) 1.265 - __ bgez(AT, L); 1.266 - else 1.267 - __ bgez(AT,(int)0); 1.268 - break; 1.269 - case 0x05: //below 1.270 - if(&L) 1.271 - __ bltz(AT, L); 1.272 - else 1.273 - __ bltz(AT, (int)0); 1.274 - break; 1.275 - case 0x06: //below_equal 1.276 - if(&L) 1.277 - __ blez(AT, L); 1.278 - else 1.279 - __ blez(AT, (int)0); 1.280 - break; 1.281 - default: 1.282 - Unimplemented(); 1.283 - } 1.284 - __ nop(); 1.285 - %} 1.286 - ins_pipe( pipe_jump ); 1.287 - ins_pc_relative(1); 1.288 -%} 1.289 - 1.290 - 1.291 -/* 1.292 -// Jump Direct Conditional - Label defines a relative address from Jcc+1 1.293 -instruct jmpLoopEndU(cmpOpU cop, eFlagsRegU cmp, label labl) %{ 1.294 - match(CountedLoopEnd cop cmp); 1.295 - effect(USE labl); 1.296 - 1.297 - ins_cost(300); 1.298 - format %{ "J$cop,u $labl\t# Loop end" %} 1.299 - size(6); 1.300 - opcode(0x0F, 0x80); 1.301 - ins_encode( Jcc( cop, labl) ); 1.302 - ins_pipe( pipe_jump ); 1.303 - ins_pc_relative(1); 1.304 -%} 1.305 - 1.306 -instruct jmpLoopEndUCF(cmpOpUCF cop, eFlagsRegUCF cmp, label labl) %{ 1.307 - match(CountedLoopEnd cop cmp); 1.308 - effect(USE labl); 1.309 - 1.310 - ins_cost(200); 1.311 - format %{ "J$cop,u $labl\t# Loop end" %} 1.312 - opcode(0x0F, 0x80); 1.313 - ins_encode( Jcc( cop, labl) ); 1.314 - ins_pipe( pipe_jump ); 1.315 - ins_pc_relative(1); 1.316 -%} 1.317 -*/ 1.318 - 1.319 // This match pattern is created for StoreIConditional since I cannot match IfNode without a RegFlags! fujie 2012/07/17 1.320 instruct jmpCon_flags(cmpOp cop, FlagsReg cr, label labl) %{ 1.321 match(If cop cr);