OLD | NEW |
---|---|
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_UTILS_H_ | 5 #ifndef V8_UTILS_H_ |
6 #define V8_UTILS_H_ | 6 #define V8_UTILS_H_ |
7 | 7 |
8 #include <limits.h> | 8 #include <limits.h> |
9 #include <stdlib.h> | 9 #include <stdlib.h> |
10 #include <string.h> | 10 #include <string.h> |
(...skipping 1306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1317 INLINE(static void CopyCharsUnsigned(sinkchar* dest, | 1317 INLINE(static void CopyCharsUnsigned(sinkchar* dest, |
1318 const sourcechar* src, | 1318 const sourcechar* src, |
1319 int chars)); | 1319 int chars)); |
1320 #if defined(V8_HOST_ARCH_ARM) | 1320 #if defined(V8_HOST_ARCH_ARM) |
1321 INLINE(void CopyCharsUnsigned(uint8_t* dest, const uint8_t* src, int chars)); | 1321 INLINE(void CopyCharsUnsigned(uint8_t* dest, const uint8_t* src, int chars)); |
1322 INLINE(void CopyCharsUnsigned(uint16_t* dest, const uint8_t* src, int chars)); | 1322 INLINE(void CopyCharsUnsigned(uint16_t* dest, const uint8_t* src, int chars)); |
1323 INLINE(void CopyCharsUnsigned(uint16_t* dest, const uint16_t* src, int chars)); | 1323 INLINE(void CopyCharsUnsigned(uint16_t* dest, const uint16_t* src, int chars)); |
1324 #elif defined(V8_HOST_ARCH_MIPS) | 1324 #elif defined(V8_HOST_ARCH_MIPS) |
1325 INLINE(void CopyCharsUnsigned(uint8_t* dest, const uint8_t* src, int chars)); | 1325 INLINE(void CopyCharsUnsigned(uint8_t* dest, const uint8_t* src, int chars)); |
1326 INLINE(void CopyCharsUnsigned(uint16_t* dest, const uint16_t* src, int chars)); | 1326 INLINE(void CopyCharsUnsigned(uint16_t* dest, const uint16_t* src, int chars)); |
1327 #elif defined(V8_HOST_ARCH_PPC) | |
1328 INLINE(void CopyCharsUnsigned(uint8_t* dest, const uint8_t* src, int chars)); | |
1329 INLINE(void CopyCharsUnsigned(uint16_t* dest, const uint16_t* src, int chars)); | |
1327 #endif | 1330 #endif |
1328 | 1331 |
1329 // Copy from 8bit/16bit chars to 8bit/16bit chars. | 1332 // Copy from 8bit/16bit chars to 8bit/16bit chars. |
1330 template <typename sourcechar, typename sinkchar> | 1333 template <typename sourcechar, typename sinkchar> |
1331 INLINE(void CopyChars(sinkchar* dest, const sourcechar* src, int chars)); | 1334 INLINE(void CopyChars(sinkchar* dest, const sourcechar* src, int chars)); |
1332 | 1335 |
1333 template<typename sourcechar, typename sinkchar> | 1336 template<typename sourcechar, typename sinkchar> |
1334 void CopyChars(sinkchar* dest, const sourcechar* src, int chars) { | 1337 void CopyChars(sinkchar* dest, const sourcechar* src, int chars) { |
1335 DCHECK(sizeof(sourcechar) <= 2); | 1338 DCHECK(sizeof(sourcechar) <= 2); |
1336 DCHECK(sizeof(sinkchar) <= 2); | 1339 DCHECK(sizeof(sinkchar) <= 2); |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1476 } | 1479 } |
1477 } | 1480 } |
1478 | 1481 |
1479 void CopyCharsUnsigned(uint16_t* dest, const uint16_t* src, int chars) { | 1482 void CopyCharsUnsigned(uint16_t* dest, const uint16_t* src, int chars) { |
1480 if (chars < kMinComplexMemCopy) { | 1483 if (chars < kMinComplexMemCopy) { |
1481 memcpy(dest, src, chars * sizeof(*dest)); | 1484 memcpy(dest, src, chars * sizeof(*dest)); |
1482 } else { | 1485 } else { |
1483 MemCopy(dest, src, chars * sizeof(*dest)); | 1486 MemCopy(dest, src, chars * sizeof(*dest)); |
1484 } | 1487 } |
1485 } | 1488 } |
1489 #elif defined(V8_HOST_ARCH_PPC) | |
1490 #define CASE(n) \ | |
1491 case n: \ | |
1492 memcpy(dest, src, n); \ | |
1493 break | |
1494 void CopyCharsUnsigned(uint8_t* dest, const uint8_t* src, int chars) { | |
Sven Panne
2015/01/08 10:13:53
Do we really need this huge switch (and below)? Do
michael_dawson
2015/01/08 23:51:11
We don't have the concrete numbers anymore but the
| |
1495 switch (static_cast<unsigned>(chars)) { | |
1496 case 0: | |
1497 break; | |
1498 case 1: | |
1499 *dest = *src; | |
1500 break; | |
1501 CASE(2); | |
1502 CASE(3); | |
1503 CASE(4); | |
1504 CASE(5); | |
1505 CASE(6); | |
1506 CASE(7); | |
1507 CASE(8); | |
1508 CASE(9); | |
1509 CASE(10); | |
1510 CASE(11); | |
1511 CASE(12); | |
1512 CASE(13); | |
1513 CASE(14); | |
1514 CASE(15); | |
1515 CASE(16); | |
1516 CASE(17); | |
1517 CASE(18); | |
1518 CASE(19); | |
1519 CASE(20); | |
1520 CASE(21); | |
1521 CASE(22); | |
1522 CASE(23); | |
1523 CASE(24); | |
1524 CASE(25); | |
1525 CASE(26); | |
1526 CASE(27); | |
1527 CASE(28); | |
1528 CASE(29); | |
1529 CASE(30); | |
1530 CASE(31); | |
1531 CASE(32); | |
1532 CASE(33); | |
1533 CASE(34); | |
1534 CASE(35); | |
1535 CASE(36); | |
1536 CASE(37); | |
1537 CASE(38); | |
1538 CASE(39); | |
1539 CASE(40); | |
1540 CASE(41); | |
1541 CASE(42); | |
1542 CASE(43); | |
1543 CASE(44); | |
1544 CASE(45); | |
1545 CASE(46); | |
1546 CASE(47); | |
1547 CASE(48); | |
1548 CASE(49); | |
1549 CASE(50); | |
1550 CASE(51); | |
1551 CASE(52); | |
1552 CASE(53); | |
1553 CASE(54); | |
1554 CASE(55); | |
1555 CASE(56); | |
1556 CASE(57); | |
1557 CASE(58); | |
1558 CASE(59); | |
1559 CASE(60); | |
1560 CASE(61); | |
1561 CASE(62); | |
1562 CASE(63); | |
1563 CASE(64); | |
1564 default: | |
1565 memcpy(dest, src, chars); | |
1566 break; | |
1567 } | |
1568 } | |
1569 #undef CASE | |
1570 | |
1571 #define CASE(n) \ | |
1572 case n: \ | |
1573 memcpy(dest, src, n * 2); \ | |
1574 break | |
1575 void CopyCharsUnsigned(uint16_t* dest, const uint16_t* src, int chars) { | |
1576 switch (static_cast<unsigned>(chars)) { | |
1577 case 0: | |
1578 break; | |
1579 case 1: | |
1580 *dest = *src; | |
1581 break; | |
1582 CASE(2); | |
1583 CASE(3); | |
1584 CASE(4); | |
1585 CASE(5); | |
1586 CASE(6); | |
1587 CASE(7); | |
1588 CASE(8); | |
1589 CASE(9); | |
1590 CASE(10); | |
1591 CASE(11); | |
1592 CASE(12); | |
1593 CASE(13); | |
1594 CASE(14); | |
1595 CASE(15); | |
1596 CASE(16); | |
1597 CASE(17); | |
1598 CASE(18); | |
1599 CASE(19); | |
1600 CASE(20); | |
1601 CASE(21); | |
1602 CASE(22); | |
1603 CASE(23); | |
1604 CASE(24); | |
1605 CASE(25); | |
1606 CASE(26); | |
1607 CASE(27); | |
1608 CASE(28); | |
1609 CASE(29); | |
1610 CASE(30); | |
1611 CASE(31); | |
1612 CASE(32); | |
1613 default: | |
1614 memcpy(dest, src, chars * 2); | |
1615 break; | |
1616 } | |
1617 } | |
1618 #undef CASE | |
1486 #endif | 1619 #endif |
1487 | 1620 |
1488 | 1621 |
1489 class StringBuilder : public SimpleStringBuilder { | 1622 class StringBuilder : public SimpleStringBuilder { |
1490 public: | 1623 public: |
1491 explicit StringBuilder(int size) : SimpleStringBuilder(size) { } | 1624 explicit StringBuilder(int size) : SimpleStringBuilder(size) { } |
1492 StringBuilder(char* buffer, int size) : SimpleStringBuilder(buffer, size) { } | 1625 StringBuilder(char* buffer, int size) : SimpleStringBuilder(buffer, size) { } |
1493 | 1626 |
1494 // Add formatted contents to the builder just like printf(). | 1627 // Add formatted contents to the builder just like printf(). |
1495 void AddFormatted(const char* format, ...); | 1628 void AddFormatted(const char* format, ...); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1537 // Takes the address of the limit variable in order to find out where | 1670 // Takes the address of the limit variable in order to find out where |
1538 // the top of stack is right now. | 1671 // the top of stack is right now. |
1539 uintptr_t limit = reinterpret_cast<uintptr_t>(&limit); | 1672 uintptr_t limit = reinterpret_cast<uintptr_t>(&limit); |
1540 return limit; | 1673 return limit; |
1541 } | 1674 } |
1542 | 1675 |
1543 } // namespace internal | 1676 } // namespace internal |
1544 } // namespace v8 | 1677 } // namespace v8 |
1545 | 1678 |
1546 #endif // V8_UTILS_H_ | 1679 #endif // V8_UTILS_H_ |
OLD | NEW |