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 1272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1283 } | 1283 } |
1284 | 1284 |
1285 | 1285 |
1286 Object* FrameDescription::GetExpression(int index) { | 1286 Object* FrameDescription::GetExpression(int index) { |
1287 ASSERT_EQ(StackFrame::JAVA_SCRIPT, type_); | 1287 ASSERT_EQ(StackFrame::JAVA_SCRIPT, type_); |
1288 unsigned offset = GetOffsetFromSlotIndex(index); | 1288 unsigned offset = GetOffsetFromSlotIndex(index); |
1289 return reinterpret_cast<Object*>(*GetFrameSlotPointer(offset)); | 1289 return reinterpret_cast<Object*>(*GetFrameSlotPointer(offset)); |
1290 } | 1290 } |
1291 | 1291 |
1292 | 1292 |
1293 void TranslationBuffer::Add(int32_t value) { | 1293 void TranslationBuffer::Add(int32_t value, Zone* zone) { |
1294 // Encode the sign bit in the least significant bit. | 1294 // Encode the sign bit in the least significant bit. |
1295 bool is_negative = (value < 0); | 1295 bool is_negative = (value < 0); |
1296 uint32_t bits = ((is_negative ? -value : value) << 1) | | 1296 uint32_t bits = ((is_negative ? -value : value) << 1) | |
1297 static_cast<int32_t>(is_negative); | 1297 static_cast<int32_t>(is_negative); |
1298 // Encode the individual bytes using the least significant bit of | 1298 // Encode the individual bytes using the least significant bit of |
1299 // each byte to indicate whether or not more bytes follow. | 1299 // each byte to indicate whether or not more bytes follow. |
1300 do { | 1300 do { |
1301 uint32_t next = bits >> 7; | 1301 uint32_t next = bits >> 7; |
1302 contents_.Add(((bits << 1) & 0xFF) | (next != 0)); | 1302 contents_.Add(((bits << 1) & 0xFF) | (next != 0), zone); |
1303 bits = next; | 1303 bits = next; |
1304 } while (bits != 0); | 1304 } while (bits != 0); |
1305 } | 1305 } |
1306 | 1306 |
1307 | 1307 |
1308 int32_t TranslationIterator::Next() { | 1308 int32_t TranslationIterator::Next() { |
1309 // Run through the bytes until we reach one with a least significant | 1309 // Run through the bytes until we reach one with a least significant |
1310 // bit of zero (marks the end). | 1310 // bit of zero (marks the end). |
1311 uint32_t bits = 0; | 1311 uint32_t bits = 0; |
1312 for (int i = 0; true; i += 7) { | 1312 for (int i = 0; true; i += 7) { |
(...skipping 12 matching lines...) Expand all Loading... |
1325 Handle<ByteArray> TranslationBuffer::CreateByteArray() { | 1325 Handle<ByteArray> TranslationBuffer::CreateByteArray() { |
1326 int length = contents_.length(); | 1326 int length = contents_.length(); |
1327 Handle<ByteArray> result = | 1327 Handle<ByteArray> result = |
1328 Isolate::Current()->factory()->NewByteArray(length, TENURED); | 1328 Isolate::Current()->factory()->NewByteArray(length, TENURED); |
1329 memcpy(result->GetDataStartAddress(), contents_.ToVector().start(), length); | 1329 memcpy(result->GetDataStartAddress(), contents_.ToVector().start(), length); |
1330 return result; | 1330 return result; |
1331 } | 1331 } |
1332 | 1332 |
1333 | 1333 |
1334 void Translation::BeginConstructStubFrame(int literal_id, unsigned height) { | 1334 void Translation::BeginConstructStubFrame(int literal_id, unsigned height) { |
1335 buffer_->Add(CONSTRUCT_STUB_FRAME); | 1335 buffer_->Add(CONSTRUCT_STUB_FRAME, zone()); |
1336 buffer_->Add(literal_id); | 1336 buffer_->Add(literal_id, zone()); |
1337 buffer_->Add(height); | 1337 buffer_->Add(height, zone()); |
1338 } | 1338 } |
1339 | 1339 |
1340 | 1340 |
1341 void Translation::BeginArgumentsAdaptorFrame(int literal_id, unsigned height) { | 1341 void Translation::BeginArgumentsAdaptorFrame(int literal_id, unsigned height) { |
1342 buffer_->Add(ARGUMENTS_ADAPTOR_FRAME); | 1342 buffer_->Add(ARGUMENTS_ADAPTOR_FRAME, zone()); |
1343 buffer_->Add(literal_id); | 1343 buffer_->Add(literal_id, zone()); |
1344 buffer_->Add(height); | 1344 buffer_->Add(height, zone()); |
1345 } | 1345 } |
1346 | 1346 |
1347 | 1347 |
1348 void Translation::BeginJSFrame(int node_id, int literal_id, unsigned height) { | 1348 void Translation::BeginJSFrame(int node_id, int literal_id, unsigned height) { |
1349 buffer_->Add(JS_FRAME); | 1349 buffer_->Add(JS_FRAME, zone()); |
1350 buffer_->Add(node_id); | 1350 buffer_->Add(node_id, zone()); |
1351 buffer_->Add(literal_id); | 1351 buffer_->Add(literal_id, zone()); |
1352 buffer_->Add(height); | 1352 buffer_->Add(height, zone()); |
1353 } | 1353 } |
1354 | 1354 |
1355 | 1355 |
1356 void Translation::StoreRegister(Register reg) { | 1356 void Translation::StoreRegister(Register reg) { |
1357 buffer_->Add(REGISTER); | 1357 buffer_->Add(REGISTER, zone()); |
1358 buffer_->Add(reg.code()); | 1358 buffer_->Add(reg.code(), zone()); |
1359 } | 1359 } |
1360 | 1360 |
1361 | 1361 |
1362 void Translation::StoreInt32Register(Register reg) { | 1362 void Translation::StoreInt32Register(Register reg) { |
1363 buffer_->Add(INT32_REGISTER); | 1363 buffer_->Add(INT32_REGISTER, zone()); |
1364 buffer_->Add(reg.code()); | 1364 buffer_->Add(reg.code(), zone()); |
1365 } | 1365 } |
1366 | 1366 |
1367 | 1367 |
1368 void Translation::StoreDoubleRegister(DoubleRegister reg) { | 1368 void Translation::StoreDoubleRegister(DoubleRegister reg) { |
1369 buffer_->Add(DOUBLE_REGISTER); | 1369 buffer_->Add(DOUBLE_REGISTER, zone()); |
1370 buffer_->Add(DoubleRegister::ToAllocationIndex(reg)); | 1370 buffer_->Add(DoubleRegister::ToAllocationIndex(reg), zone()); |
1371 } | 1371 } |
1372 | 1372 |
1373 | 1373 |
1374 void Translation::StoreStackSlot(int index) { | 1374 void Translation::StoreStackSlot(int index) { |
1375 buffer_->Add(STACK_SLOT); | 1375 buffer_->Add(STACK_SLOT, zone()); |
1376 buffer_->Add(index); | 1376 buffer_->Add(index, zone()); |
1377 } | 1377 } |
1378 | 1378 |
1379 | 1379 |
1380 void Translation::StoreInt32StackSlot(int index) { | 1380 void Translation::StoreInt32StackSlot(int index) { |
1381 buffer_->Add(INT32_STACK_SLOT); | 1381 buffer_->Add(INT32_STACK_SLOT, zone()); |
1382 buffer_->Add(index); | 1382 buffer_->Add(index, zone()); |
1383 } | 1383 } |
1384 | 1384 |
1385 | 1385 |
1386 void Translation::StoreDoubleStackSlot(int index) { | 1386 void Translation::StoreDoubleStackSlot(int index) { |
1387 buffer_->Add(DOUBLE_STACK_SLOT); | 1387 buffer_->Add(DOUBLE_STACK_SLOT, zone()); |
1388 buffer_->Add(index); | 1388 buffer_->Add(index, zone()); |
1389 } | 1389 } |
1390 | 1390 |
1391 | 1391 |
1392 void Translation::StoreLiteral(int literal_id) { | 1392 void Translation::StoreLiteral(int literal_id) { |
1393 buffer_->Add(LITERAL); | 1393 buffer_->Add(LITERAL, zone()); |
1394 buffer_->Add(literal_id); | 1394 buffer_->Add(literal_id, zone()); |
1395 } | 1395 } |
1396 | 1396 |
1397 | 1397 |
1398 void Translation::StoreArgumentsObject() { | 1398 void Translation::StoreArgumentsObject() { |
1399 buffer_->Add(ARGUMENTS_OBJECT); | 1399 buffer_->Add(ARGUMENTS_OBJECT, zone()); |
1400 } | 1400 } |
1401 | 1401 |
1402 | 1402 |
1403 void Translation::MarkDuplicate() { | 1403 void Translation::MarkDuplicate() { |
1404 buffer_->Add(DUPLICATE); | 1404 buffer_->Add(DUPLICATE, zone()); |
1405 } | 1405 } |
1406 | 1406 |
1407 | 1407 |
1408 int Translation::NumberOfOperandsFor(Opcode opcode) { | 1408 int Translation::NumberOfOperandsFor(Opcode opcode) { |
1409 switch (opcode) { | 1409 switch (opcode) { |
1410 case ARGUMENTS_OBJECT: | 1410 case ARGUMENTS_OBJECT: |
1411 case DUPLICATE: | 1411 case DUPLICATE: |
1412 return 0; | 1412 return 0; |
1413 case REGISTER: | 1413 case REGISTER: |
1414 case INT32_REGISTER: | 1414 case INT32_REGISTER: |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1659 | 1659 |
1660 void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) { | 1660 void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) { |
1661 v->VisitPointer(BitCast<Object**>(&function_)); | 1661 v->VisitPointer(BitCast<Object**>(&function_)); |
1662 v->VisitPointers(parameters_, parameters_ + parameters_count_); | 1662 v->VisitPointers(parameters_, parameters_ + parameters_count_); |
1663 v->VisitPointers(expression_stack_, expression_stack_ + expression_count_); | 1663 v->VisitPointers(expression_stack_, expression_stack_ + expression_count_); |
1664 } | 1664 } |
1665 | 1665 |
1666 #endif // ENABLE_DEBUGGER_SUPPORT | 1666 #endif // ENABLE_DEBUGGER_SUPPORT |
1667 | 1667 |
1668 } } // namespace v8::internal | 1668 } } // namespace v8::internal |
OLD | NEW |