| OLD | NEW |
| 1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 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 8292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8303 if (in_safe_int32_mode()) { | 8303 if (in_safe_int32_mode()) { |
| 8304 Visit(node->expression()); | 8304 Visit(node->expression()); |
| 8305 Result value = frame_->Pop(); | 8305 Result value = frame_->Pop(); |
| 8306 ASSERT(value.is_untagged_int32()); | 8306 ASSERT(value.is_untagged_int32()); |
| 8307 // Registers containing an int32 value are not multiply used. | 8307 // Registers containing an int32 value are not multiply used. |
| 8308 ASSERT(!value.is_register() || !frame_->is_used(value.reg())); | 8308 ASSERT(!value.is_register() || !frame_->is_used(value.reg())); |
| 8309 value.ToRegister(); | 8309 value.ToRegister(); |
| 8310 switch (op) { | 8310 switch (op) { |
| 8311 case Token::SUB: { | 8311 case Token::SUB: { |
| 8312 __ neg(value.reg()); | 8312 __ neg(value.reg()); |
| 8313 frame_->Push(&value); |
| 8313 if (node->no_negative_zero()) { | 8314 if (node->no_negative_zero()) { |
| 8314 // -MIN_INT is MIN_INT with the overflow flag set. | 8315 // -MIN_INT is MIN_INT with the overflow flag set. |
| 8315 unsafe_bailout_->Branch(overflow); | 8316 unsafe_bailout_->Branch(overflow); |
| 8316 } else { | 8317 } else { |
| 8317 // MIN_INT and 0 both have bad negations. They both have 31 zeros. | 8318 // MIN_INT and 0 both have bad negations. They both have 31 zeros. |
| 8318 __ test(value.reg(), Immediate(0x7FFFFFFF)); | 8319 __ test(value.reg(), Immediate(0x7FFFFFFF)); |
| 8319 unsafe_bailout_->Branch(zero); | 8320 unsafe_bailout_->Branch(zero); |
| 8320 } | 8321 } |
| 8321 break; | 8322 break; |
| 8322 } | 8323 } |
| 8323 case Token::BIT_NOT: { | 8324 case Token::BIT_NOT: { |
| 8324 __ not_(value.reg()); | 8325 __ not_(value.reg()); |
| 8326 frame_->Push(&value); |
| 8325 break; | 8327 break; |
| 8326 } | 8328 } |
| 8327 case Token::ADD: { | 8329 case Token::ADD: { |
| 8328 // Unary plus has no effect on int32 values. | 8330 // Unary plus has no effect on int32 values. |
| 8331 frame_->Push(&value); |
| 8329 break; | 8332 break; |
| 8330 } | 8333 } |
| 8331 default: | 8334 default: |
| 8332 UNREACHABLE(); | 8335 UNREACHABLE(); |
| 8333 break; | 8336 break; |
| 8334 } | 8337 } |
| 8335 frame_->Push(&value); | |
| 8336 } else { | 8338 } else { |
| 8337 Load(node->expression()); | 8339 Load(node->expression()); |
| 8338 bool can_overwrite = node->expression()->ResultOverwriteAllowed(); | 8340 bool can_overwrite = node->expression()->ResultOverwriteAllowed(); |
| 8339 UnaryOverwriteMode overwrite = | 8341 UnaryOverwriteMode overwrite = |
| 8340 can_overwrite ? UNARY_OVERWRITE : UNARY_NO_OVERWRITE; | 8342 can_overwrite ? UNARY_OVERWRITE : UNARY_NO_OVERWRITE; |
| 8341 bool no_negative_zero = node->expression()->no_negative_zero(); | 8343 bool no_negative_zero = node->expression()->no_negative_zero(); |
| 8342 switch (op) { | 8344 switch (op) { |
| 8343 case Token::NOT: | 8345 case Token::NOT: |
| 8344 case Token::DELETE: | 8346 case Token::DELETE: |
| 8345 case Token::TYPEOF: | 8347 case Token::TYPEOF: |
| (...skipping 1988 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10334 memcpy(chunk->GetStartAddress(), desc.buffer, desc.instr_size); | 10336 memcpy(chunk->GetStartAddress(), desc.buffer, desc.instr_size); |
| 10335 CPU::FlushICache(chunk->GetStartAddress(), desc.instr_size); | 10337 CPU::FlushICache(chunk->GetStartAddress(), desc.instr_size); |
| 10336 return FUNCTION_CAST<MemCopyFunction>(chunk->GetStartAddress()); | 10338 return FUNCTION_CAST<MemCopyFunction>(chunk->GetStartAddress()); |
| 10337 } | 10339 } |
| 10338 | 10340 |
| 10339 #undef __ | 10341 #undef __ |
| 10340 | 10342 |
| 10341 } } // namespace v8::internal | 10343 } } // namespace v8::internal |
| 10342 | 10344 |
| 10343 #endif // V8_TARGET_ARCH_IA32 | 10345 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |