| 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 10231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10242 __ pop(edi); | 10242 __ pop(edi); |
| 10243 __ ret(0); | 10243 __ ret(0); |
| 10244 } | 10244 } |
| 10245 | 10245 |
| 10246 CodeDesc desc; | 10246 CodeDesc desc; |
| 10247 masm.GetCode(&desc); | 10247 masm.GetCode(&desc); |
| 10248 ASSERT(desc.reloc_size == 0); | 10248 ASSERT(desc.reloc_size == 0); |
| 10249 | 10249 |
| 10250 // Copy the generated code into an executable chunk and return a pointer | 10250 // Copy the generated code into an executable chunk and return a pointer |
| 10251 // to the first instruction in it as a C++ function pointer. | 10251 // to the first instruction in it as a C++ function pointer. |
| 10252 LargeObjectChunk* chunk = LargeObjectChunk::New(desc.instr_size, EXECUTABLE); | 10252 size_t size = RoundUp(desc.instr_size, OS::AllocateAlignment()); |
| 10253 if (chunk == NULL) return &MemCopyWrapper; | 10253 void* base = VirtualMemory::ReserveRegion(size); |
| 10254 memcpy(chunk->GetStartAddress(), desc.buffer, desc.instr_size); | 10254 if (base == NULL || !VirtualMemory::CommitRegion(base, size, true)) { |
| 10255 CPU::FlushICache(chunk->GetStartAddress(), desc.instr_size); | 10255 return &MemCopyWrapper; |
| 10256 return FUNCTION_CAST<MemCopyFunction>(chunk->GetStartAddress()); | 10256 } |
| 10257 memcpy(base, desc.buffer, desc.instr_size); |
| 10258 CPU::FlushICache(base, desc.instr_size); |
| 10259 return FUNCTION_CAST<MemCopyFunction>(reinterpret_cast<Address>(base)); |
| 10257 } | 10260 } |
| 10258 | 10261 |
| 10259 #undef __ | 10262 #undef __ |
| 10260 | 10263 |
| 10261 } } // namespace v8::internal | 10264 } } // namespace v8::internal |
| 10262 | 10265 |
| 10263 #endif // V8_TARGET_ARCH_IA32 | 10266 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |