OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1203 | 1203 |
1204 void LCodeGen::DoShiftI(LShiftI* instr) { | 1204 void LCodeGen::DoShiftI(LShiftI* instr) { |
1205 LOperand* left = instr->left(); | 1205 LOperand* left = instr->left(); |
1206 LOperand* right = instr->right(); | 1206 LOperand* right = instr->right(); |
1207 ASSERT(left->Equals(instr->result())); | 1207 ASSERT(left->Equals(instr->result())); |
1208 ASSERT(left->IsRegister()); | 1208 ASSERT(left->IsRegister()); |
1209 if (right->IsRegister()) { | 1209 if (right->IsRegister()) { |
1210 ASSERT(ToRegister(right).is(rcx)); | 1210 ASSERT(ToRegister(right).is(rcx)); |
1211 | 1211 |
1212 switch (instr->op()) { | 1212 switch (instr->op()) { |
| 1213 case Token::ROR: |
| 1214 __ rorl_cl(ToRegister(left)); |
| 1215 break; |
1213 case Token::SAR: | 1216 case Token::SAR: |
1214 __ sarl_cl(ToRegister(left)); | 1217 __ sarl_cl(ToRegister(left)); |
1215 break; | 1218 break; |
1216 case Token::SHR: | 1219 case Token::SHR: |
1217 __ shrl_cl(ToRegister(left)); | 1220 __ shrl_cl(ToRegister(left)); |
1218 if (instr->can_deopt()) { | 1221 if (instr->can_deopt()) { |
1219 __ testl(ToRegister(left), ToRegister(left)); | 1222 __ testl(ToRegister(left), ToRegister(left)); |
1220 DeoptimizeIf(negative, instr->environment()); | 1223 DeoptimizeIf(negative, instr->environment()); |
1221 } | 1224 } |
1222 break; | 1225 break; |
1223 case Token::SHL: | 1226 case Token::SHL: |
1224 __ shll_cl(ToRegister(left)); | 1227 __ shll_cl(ToRegister(left)); |
1225 break; | 1228 break; |
1226 default: | 1229 default: |
1227 UNREACHABLE(); | 1230 UNREACHABLE(); |
1228 break; | 1231 break; |
1229 } | 1232 } |
1230 } else { | 1233 } else { |
1231 int value = ToInteger32(LConstantOperand::cast(right)); | 1234 int value = ToInteger32(LConstantOperand::cast(right)); |
1232 uint8_t shift_count = static_cast<uint8_t>(value & 0x1F); | 1235 uint8_t shift_count = static_cast<uint8_t>(value & 0x1F); |
1233 switch (instr->op()) { | 1236 switch (instr->op()) { |
| 1237 case Token::ROR: |
| 1238 if (shift_count != 0) { |
| 1239 __ rorl(ToRegister(left), Immediate(shift_count)); |
| 1240 } |
| 1241 break; |
1234 case Token::SAR: | 1242 case Token::SAR: |
1235 if (shift_count != 0) { | 1243 if (shift_count != 0) { |
1236 __ sarl(ToRegister(left), Immediate(shift_count)); | 1244 __ sarl(ToRegister(left), Immediate(shift_count)); |
1237 } | 1245 } |
1238 break; | 1246 break; |
1239 case Token::SHR: | 1247 case Token::SHR: |
1240 if (shift_count == 0 && instr->can_deopt()) { | 1248 if (shift_count == 0 && instr->can_deopt()) { |
1241 __ testl(ToRegister(left), ToRegister(left)); | 1249 __ testl(ToRegister(left), ToRegister(left)); |
1242 DeoptimizeIf(negative, instr->environment()); | 1250 DeoptimizeIf(negative, instr->environment()); |
1243 } else { | 1251 } else { |
(...skipping 4092 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5336 FixedArray::kHeaderSize - kPointerSize)); | 5344 FixedArray::kHeaderSize - kPointerSize)); |
5337 __ bind(&done); | 5345 __ bind(&done); |
5338 } | 5346 } |
5339 | 5347 |
5340 | 5348 |
5341 #undef __ | 5349 #undef __ |
5342 | 5350 |
5343 } } // namespace v8::internal | 5351 } } // namespace v8::internal |
5344 | 5352 |
5345 #endif // V8_TARGET_ARCH_X64 | 5353 #endif // V8_TARGET_ARCH_X64 |
OLD | NEW |