| OLD | NEW |
| 1 // Copyright 2008 the V8 project authors. All rights reserved. | 1 // Copyright 2008 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 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 // There was an early bailout for invalid and synced elements | 72 // There was an early bailout for invalid and synced elements |
| 73 // (memory elements are always synced). | 73 // (memory elements are always synced). |
| 74 UNREACHABLE(); | 74 UNREACHABLE(); |
| 75 break; | 75 break; |
| 76 | 76 |
| 77 case FrameElement::REGISTER: | 77 case FrameElement::REGISTER: |
| 78 __ mov(Operand(ebp, fp_relative(index)), element.reg()); | 78 __ mov(Operand(ebp, fp_relative(index)), element.reg()); |
| 79 break; | 79 break; |
| 80 | 80 |
| 81 case FrameElement::CONSTANT: | 81 case FrameElement::CONSTANT: |
| 82 __ Set(Operand(ebp, fp_relative(index)), Immediate(element.handle())); | 82 if (cgen_->IsUnsafeSmi(element.handle())) { |
| 83 Result temp = cgen_->allocator()->Allocate(); |
| 84 ASSERT(temp.is_valid()); |
| 85 cgen_->LoadUnsafeSmi(temp.reg(), element.handle()); |
| 86 __ mov(Operand(ebp, fp_relative(index)), temp.reg()); |
| 87 } else { |
| 88 __ Set(Operand(ebp, fp_relative(index)), |
| 89 Immediate(element.handle())); |
| 90 } |
| 83 break; | 91 break; |
| 84 | 92 |
| 85 case FrameElement::COPY: { | 93 case FrameElement::COPY: { |
| 86 int backing_index = element.index(); | 94 int backing_index = element.index(); |
| 87 FrameElement backing_element = elements_[backing_index]; | 95 FrameElement backing_element = elements_[backing_index]; |
| 88 if (backing_element.is_memory()) { | 96 if (backing_element.is_memory()) { |
| 89 Result temp = cgen_->allocator()->Allocate(); | 97 Result temp = cgen_->allocator()->Allocate(); |
| 90 ASSERT(temp.is_valid()); | 98 ASSERT(temp.is_valid()); |
| 91 __ mov(temp.reg(), Operand(ebp, fp_relative(backing_index))); | 99 __ mov(temp.reg(), Operand(ebp, fp_relative(backing_index))); |
| 92 __ mov(Operand(ebp, fp_relative(index)), temp.reg()); | 100 __ mov(Operand(ebp, fp_relative(index)), temp.reg()); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 110 // There was an early bailout for invalid and synced elements | 118 // There was an early bailout for invalid and synced elements |
| 111 // (memory elements are always synced). | 119 // (memory elements are always synced). |
| 112 UNREACHABLE(); | 120 UNREACHABLE(); |
| 113 break; | 121 break; |
| 114 | 122 |
| 115 case FrameElement::REGISTER: | 123 case FrameElement::REGISTER: |
| 116 __ push(element.reg()); | 124 __ push(element.reg()); |
| 117 break; | 125 break; |
| 118 | 126 |
| 119 case FrameElement::CONSTANT: | 127 case FrameElement::CONSTANT: |
| 120 __ push(Immediate(element.handle())); | 128 if (cgen_->IsUnsafeSmi(element.handle())) { |
| 129 Result temp = cgen_->allocator()->Allocate(); |
| 130 ASSERT(temp.is_valid()); |
| 131 cgen_->LoadUnsafeSmi(temp.reg(), element.handle()); |
| 132 __ push(temp.reg()); |
| 133 } else { |
| 134 __ push(Immediate(element.handle())); |
| 135 } |
| 121 break; | 136 break; |
| 122 | 137 |
| 123 case FrameElement::COPY: { | 138 case FrameElement::COPY: { |
| 124 int backing_index = element.index(); | 139 int backing_index = element.index(); |
| 125 FrameElement backing = elements_[backing_index]; | 140 FrameElement backing = elements_[backing_index]; |
| 126 ASSERT(backing.is_memory() || backing.is_register()); | 141 ASSERT(backing.is_memory() || backing.is_register()); |
| 127 if (backing.is_memory()) { | 142 if (backing.is_memory()) { |
| 128 __ push(Operand(ebp, fp_relative(backing_index))); | 143 __ push(Operand(ebp, fp_relative(backing_index))); |
| 129 } else { | 144 } else { |
| 130 __ push(backing.reg()); | 145 __ push(backing.reg()); |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 | 225 |
| 211 case FrameElement::REGISTER: | 226 case FrameElement::REGISTER: |
| 212 Unuse(source.reg()); | 227 Unuse(source.reg()); |
| 213 if (!source.is_synced()) { | 228 if (!source.is_synced()) { |
| 214 __ mov(Operand(ebp, fp_relative(i)), source.reg()); | 229 __ mov(Operand(ebp, fp_relative(i)), source.reg()); |
| 215 } | 230 } |
| 216 break; | 231 break; |
| 217 | 232 |
| 218 case FrameElement::CONSTANT: | 233 case FrameElement::CONSTANT: |
| 219 if (!source.is_synced()) { | 234 if (!source.is_synced()) { |
| 220 __ Set(Operand(ebp, fp_relative(i)), Immediate(source.handle())); | 235 if (cgen_->IsUnsafeSmi(source.handle())) { |
| 236 esi_caches = i; |
| 237 cgen_->LoadUnsafeSmi(esi, source.handle()); |
| 238 __ mov(Operand(ebp, fp_relative(i)), esi); |
| 239 } else { |
| 240 __ Set(Operand(ebp, fp_relative(i)), Immediate(source.handle())); |
| 241 } |
| 221 } | 242 } |
| 222 break; | 243 break; |
| 223 | 244 |
| 224 case FrameElement::COPY: | 245 case FrameElement::COPY: |
| 225 if (!source.is_synced()) { | 246 if (!source.is_synced()) { |
| 226 int backing_index = source.index(); | 247 int backing_index = source.index(); |
| 227 FrameElement backing_element = elements_[backing_index]; | 248 FrameElement backing_element = elements_[backing_index]; |
| 228 if (backing_element.is_memory()) { | 249 if (backing_element.is_memory()) { |
| 229 // If we have to spill a register, we spill esi. | 250 // If we have to spill a register, we spill esi. |
| 230 if (esi_caches != backing_index) { | 251 if (esi_caches != backing_index) { |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 328 case FrameElement::REGISTER: | 349 case FrameElement::REGISTER: |
| 329 UNREACHABLE(); | 350 UNREACHABLE(); |
| 330 break; | 351 break; |
| 331 | 352 |
| 332 case FrameElement::MEMORY: | 353 case FrameElement::MEMORY: |
| 333 ASSERT(i <= stack_pointer_); | 354 ASSERT(i <= stack_pointer_); |
| 334 __ mov(target.reg(), Operand(ebp, fp_relative(i))); | 355 __ mov(target.reg(), Operand(ebp, fp_relative(i))); |
| 335 break; | 356 break; |
| 336 | 357 |
| 337 case FrameElement::CONSTANT: | 358 case FrameElement::CONSTANT: |
| 338 __ Set(target.reg(), Immediate(source.handle())); | 359 if (cgen_->IsUnsafeSmi(source.handle())) { |
| 360 cgen_->LoadUnsafeSmi(target.reg(), source.handle()); |
| 361 } else { |
| 362 __ Set(target.reg(), Immediate(source.handle())); |
| 363 } |
| 339 break; | 364 break; |
| 340 | 365 |
| 341 case FrameElement::COPY: { | 366 case FrameElement::COPY: { |
| 342 FrameElement backing = elements_[source.index()]; | 367 FrameElement backing = elements_[source.index()]; |
| 343 ASSERT(backing.is_memory() || backing.is_register()); | 368 ASSERT(backing.is_memory() || backing.is_register()); |
| 344 if (backing.is_memory()) { | 369 if (backing.is_memory()) { |
| 345 ASSERT(source.index() <= stack_pointer_); | 370 ASSERT(source.index() <= stack_pointer_); |
| 346 __ mov(target.reg(), Operand(ebp, fp_relative(source.index()))); | 371 __ mov(target.reg(), Operand(ebp, fp_relative(source.index()))); |
| 347 } else { | 372 } else { |
| 348 __ mov(target.reg(), backing.reg()); | 373 __ mov(target.reg(), backing.reg()); |
| (...skipping 594 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 943 ASSERT(stack_pointer_ == elements_.length() - 1); | 968 ASSERT(stack_pointer_ == elements_.length() - 1); |
| 944 elements_.Add(FrameElement::MemoryElement()); | 969 elements_.Add(FrameElement::MemoryElement()); |
| 945 stack_pointer_++; | 970 stack_pointer_++; |
| 946 __ push(immediate); | 971 __ push(immediate); |
| 947 } | 972 } |
| 948 | 973 |
| 949 | 974 |
| 950 #undef __ | 975 #undef __ |
| 951 | 976 |
| 952 } } // namespace v8::internal | 977 } } // namespace v8::internal |
| OLD | NEW |