Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(954)

Side by Side Diff: src/ia32/assembler-ia32.cc

Issue 391051: Allow a platform to indicate that some CPU features are always... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 1994-2006 Sun Microsystems Inc. 1 // Copyright (c) 1994-2006 Sun Microsystems Inc.
2 // All Rights Reserved. 2 // All Rights Reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions 5 // modification, are permitted provided that the following conditions
6 // are met: 6 // are met:
7 // 7 //
8 // - Redistributions of source code must retain the above copyright notice, 8 // - Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer. 9 // this list of conditions and the following disclaimer.
10 // 10 //
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 42
43 namespace v8 { 43 namespace v8 {
44 namespace internal { 44 namespace internal {
45 45
46 // ----------------------------------------------------------------------------- 46 // -----------------------------------------------------------------------------
47 // Implementation of CpuFeatures 47 // Implementation of CpuFeatures
48 48
49 // Safe default is no features. 49 // Safe default is no features.
50 uint64_t CpuFeatures::supported_ = 0; 50 uint64_t CpuFeatures::supported_ = 0;
51 uint64_t CpuFeatures::enabled_ = 0; 51 uint64_t CpuFeatures::enabled_ = 0;
52 uint64_t CpuFeatures::found_by_runtime_probing_ = 0;
52 53
53 54
54 // The Probe method needs executable memory, so it uses Heap::CreateCode. 55 // The Probe method needs executable memory, so it uses Heap::CreateCode.
55 // Allocation failure is silent and leads to safe default. 56 // Allocation failure is silent and leads to safe default.
56 void CpuFeatures::Probe() { 57 void CpuFeatures::Probe() {
57 ASSERT(Heap::HasBeenSetup()); 58 ASSERT(Heap::HasBeenSetup());
58 ASSERT(supported_ == 0); 59 ASSERT(supported_ == 0);
59 if (Serializer::enabled()) return; // No features if we might serialize. 60 if (Serializer::enabled()) {
61 supported_ |= OS::CpuFeaturesImpliedByPlatform();
62 return; // No features if we might serialize.
63 }
60 64
61 Assembler assm(NULL, 0); 65 Assembler assm(NULL, 0);
62 Label cpuid, done; 66 Label cpuid, done;
63 #define __ assm. 67 #define __ assm.
64 // Save old esp, since we are going to modify the stack. 68 // Save old esp, since we are going to modify the stack.
65 __ push(ebp); 69 __ push(ebp);
66 __ pushfd(); 70 __ pushfd();
67 __ push(ecx); 71 __ push(ecx);
68 __ push(ebx); 72 __ push(ebx);
69 __ mov(ebp, Operand(esp)); 73 __ mov(ebp, Operand(esp));
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 Object* code = Heap::CreateCode(desc, 121 Object* code = Heap::CreateCode(desc,
118 NULL, 122 NULL,
119 Code::ComputeFlags(Code::STUB), 123 Code::ComputeFlags(Code::STUB),
120 Handle<Code>::null()); 124 Handle<Code>::null());
121 if (!code->IsCode()) return; 125 if (!code->IsCode()) return;
122 LOG(CodeCreateEvent(Logger::BUILTIN_TAG, 126 LOG(CodeCreateEvent(Logger::BUILTIN_TAG,
123 Code::cast(code), "CpuFeatures::Probe")); 127 Code::cast(code), "CpuFeatures::Probe"));
124 typedef uint64_t (*F0)(); 128 typedef uint64_t (*F0)();
125 F0 probe = FUNCTION_CAST<F0>(Code::cast(code)->entry()); 129 F0 probe = FUNCTION_CAST<F0>(Code::cast(code)->entry());
126 supported_ = probe(); 130 supported_ = probe();
131 found_by_runtime_probing_ = supported_;
132 uint64_t os_guarantees = OS::CpuFeaturesImpliedByPlatform();
133 supported_ |= os_guarantees;
134 found_by_runtime_probing_ &= ~os_guarantees;
127 } 135 }
128 136
129 137
130 // ----------------------------------------------------------------------------- 138 // -----------------------------------------------------------------------------
131 // Implementation of Displacement 139 // Implementation of Displacement
132 140
133 void Displacement::init(Label* L, Type type) { 141 void Displacement::init(Label* L, Type type) {
134 ASSERT(!L->is_bound()); 142 ASSERT(!L->is_bound());
135 int next = 0; 143 int next = 0;
136 if (L->is_linked()) { 144 if (L->is_linked()) {
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 361
354 void Assembler::Align(int m) { 362 void Assembler::Align(int m) {
355 ASSERT(IsPowerOf2(m)); 363 ASSERT(IsPowerOf2(m));
356 while ((pc_offset() & (m - 1)) != 0) { 364 while ((pc_offset() & (m - 1)) != 0) {
357 nop(); 365 nop();
358 } 366 }
359 } 367 }
360 368
361 369
362 void Assembler::cpuid() { 370 void Assembler::cpuid() {
363 ASSERT(CpuFeatures::IsEnabled(CpuFeatures::CPUID)); 371 ASSERT(CpuFeatures::IsEnabled(CPUID));
364 EnsureSpace ensure_space(this); 372 EnsureSpace ensure_space(this);
365 last_pc_ = pc_; 373 last_pc_ = pc_;
366 EMIT(0x0F); 374 EMIT(0x0F);
367 EMIT(0xA2); 375 EMIT(0xA2);
368 } 376 }
369 377
370 378
371 void Assembler::pushad() { 379 void Assembler::pushad() {
372 EnsureSpace ensure_space(this); 380 EnsureSpace ensure_space(this);
373 last_pc_ = pc_; 381 last_pc_ = pc_;
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
705 void Assembler::movzx_w(Register dst, const Operand& src) { 713 void Assembler::movzx_w(Register dst, const Operand& src) {
706 EnsureSpace ensure_space(this); 714 EnsureSpace ensure_space(this);
707 last_pc_ = pc_; 715 last_pc_ = pc_;
708 EMIT(0x0F); 716 EMIT(0x0F);
709 EMIT(0xB7); 717 EMIT(0xB7);
710 emit_operand(dst, src); 718 emit_operand(dst, src);
711 } 719 }
712 720
713 721
714 void Assembler::cmov(Condition cc, Register dst, int32_t imm32) { 722 void Assembler::cmov(Condition cc, Register dst, int32_t imm32) {
715 ASSERT(CpuFeatures::IsEnabled(CpuFeatures::CMOV)); 723 ASSERT(CpuFeatures::IsEnabled(CMOV));
716 EnsureSpace ensure_space(this); 724 EnsureSpace ensure_space(this);
717 last_pc_ = pc_; 725 last_pc_ = pc_;
718 UNIMPLEMENTED(); 726 UNIMPLEMENTED();
719 USE(cc); 727 USE(cc);
720 USE(dst); 728 USE(dst);
721 USE(imm32); 729 USE(imm32);
722 } 730 }
723 731
724 732
725 void Assembler::cmov(Condition cc, Register dst, Handle<Object> handle) { 733 void Assembler::cmov(Condition cc, Register dst, Handle<Object> handle) {
726 ASSERT(CpuFeatures::IsEnabled(CpuFeatures::CMOV)); 734 ASSERT(CpuFeatures::IsEnabled(CMOV));
727 EnsureSpace ensure_space(this); 735 EnsureSpace ensure_space(this);
728 last_pc_ = pc_; 736 last_pc_ = pc_;
729 UNIMPLEMENTED(); 737 UNIMPLEMENTED();
730 USE(cc); 738 USE(cc);
731 USE(dst); 739 USE(dst);
732 USE(handle); 740 USE(handle);
733 } 741 }
734 742
735 743
736 void Assembler::cmov(Condition cc, Register dst, const Operand& src) { 744 void Assembler::cmov(Condition cc, Register dst, const Operand& src) {
737 ASSERT(CpuFeatures::IsEnabled(CpuFeatures::CMOV)); 745 ASSERT(CpuFeatures::IsEnabled(CMOV));
738 EnsureSpace ensure_space(this); 746 EnsureSpace ensure_space(this);
739 last_pc_ = pc_; 747 last_pc_ = pc_;
740 // Opcode: 0f 40 + cc /r 748 // Opcode: 0f 40 + cc /r
741 EMIT(0x0F); 749 EMIT(0x0F);
742 EMIT(0x40 + cc); 750 EMIT(0x40 + cc);
743 emit_operand(dst, src); 751 emit_operand(dst, src);
744 } 752 }
745 753
746 754
747 void Assembler::xchg(Register dst, Register src) { 755 void Assembler::xchg(Register dst, Register src) {
(...skipping 561 matching lines...) Expand 10 before | Expand all | Expand 10 after
1309 1317
1310 1318
1311 void Assembler::nop() { 1319 void Assembler::nop() {
1312 EnsureSpace ensure_space(this); 1320 EnsureSpace ensure_space(this);
1313 last_pc_ = pc_; 1321 last_pc_ = pc_;
1314 EMIT(0x90); 1322 EMIT(0x90);
1315 } 1323 }
1316 1324
1317 1325
1318 void Assembler::rdtsc() { 1326 void Assembler::rdtsc() {
1319 ASSERT(CpuFeatures::IsEnabled(CpuFeatures::RDTSC)); 1327 ASSERT(CpuFeatures::IsEnabled(RDTSC));
1320 EnsureSpace ensure_space(this); 1328 EnsureSpace ensure_space(this);
1321 last_pc_ = pc_; 1329 last_pc_ = pc_;
1322 EMIT(0x0F); 1330 EMIT(0x0F);
1323 EMIT(0x31); 1331 EMIT(0x31);
1324 } 1332 }
1325 1333
1326 1334
1327 void Assembler::ret(int imm16) { 1335 void Assembler::ret(int imm16) {
1328 EnsureSpace ensure_space(this); 1336 EnsureSpace ensure_space(this);
1329 last_pc_ = pc_; 1337 last_pc_ = pc_;
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
1655 1663
1656 void Assembler::fistp_s(const Operand& adr) { 1664 void Assembler::fistp_s(const Operand& adr) {
1657 EnsureSpace ensure_space(this); 1665 EnsureSpace ensure_space(this);
1658 last_pc_ = pc_; 1666 last_pc_ = pc_;
1659 EMIT(0xDB); 1667 EMIT(0xDB);
1660 emit_operand(ebx, adr); 1668 emit_operand(ebx, adr);
1661 } 1669 }
1662 1670
1663 1671
1664 void Assembler::fisttp_s(const Operand& adr) { 1672 void Assembler::fisttp_s(const Operand& adr) {
1665 ASSERT(CpuFeatures::IsEnabled(CpuFeatures::SSE3)); 1673 ASSERT(CpuFeatures::IsEnabled(SSE3));
1666 EnsureSpace ensure_space(this); 1674 EnsureSpace ensure_space(this);
1667 last_pc_ = pc_; 1675 last_pc_ = pc_;
1668 EMIT(0xDB); 1676 EMIT(0xDB);
1669 emit_operand(ecx, adr); 1677 emit_operand(ecx, adr);
1670 } 1678 }
1671 1679
1672 1680
1673 void Assembler::fist_s(const Operand& adr) { 1681 void Assembler::fist_s(const Operand& adr) {
1674 EnsureSpace ensure_space(this); 1682 EnsureSpace ensure_space(this);
1675 last_pc_ = pc_; 1683 last_pc_ = pc_;
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
1916 ASSERT(reg.is_byte_register()); 1924 ASSERT(reg.is_byte_register());
1917 EnsureSpace ensure_space(this); 1925 EnsureSpace ensure_space(this);
1918 last_pc_ = pc_; 1926 last_pc_ = pc_;
1919 EMIT(0x0F); 1927 EMIT(0x0F);
1920 EMIT(0x90 | cc); 1928 EMIT(0x90 | cc);
1921 EMIT(0xC0 | reg.code()); 1929 EMIT(0xC0 | reg.code());
1922 } 1930 }
1923 1931
1924 1932
1925 void Assembler::cvttss2si(Register dst, const Operand& src) { 1933 void Assembler::cvttss2si(Register dst, const Operand& src) {
1926 ASSERT(CpuFeatures::IsEnabled(CpuFeatures::SSE2)); 1934 ASSERT(CpuFeatures::IsEnabled(SSE2));
1927 EnsureSpace ensure_space(this); 1935 EnsureSpace ensure_space(this);
1928 last_pc_ = pc_; 1936 last_pc_ = pc_;
1929 EMIT(0xF3); 1937 EMIT(0xF3);
1930 EMIT(0x0F); 1938 EMIT(0x0F);
1931 EMIT(0x2C); 1939 EMIT(0x2C);
1932 emit_operand(dst, src); 1940 emit_operand(dst, src);
1933 } 1941 }
1934 1942
1935 1943
1936 void Assembler::cvttsd2si(Register dst, const Operand& src) { 1944 void Assembler::cvttsd2si(Register dst, const Operand& src) {
1937 ASSERT(CpuFeatures::IsEnabled(CpuFeatures::SSE2)); 1945 ASSERT(CpuFeatures::IsEnabled(SSE2));
1938 EnsureSpace ensure_space(this); 1946 EnsureSpace ensure_space(this);
1939 last_pc_ = pc_; 1947 last_pc_ = pc_;
1940 EMIT(0xF2); 1948 EMIT(0xF2);
1941 EMIT(0x0F); 1949 EMIT(0x0F);
1942 EMIT(0x2C); 1950 EMIT(0x2C);
1943 emit_operand(dst, src); 1951 emit_operand(dst, src);
1944 } 1952 }
1945 1953
1946 1954
1947 void Assembler::cvtsi2sd(XMMRegister dst, const Operand& src) { 1955 void Assembler::cvtsi2sd(XMMRegister dst, const Operand& src) {
1948 ASSERT(CpuFeatures::IsEnabled(CpuFeatures::SSE2)); 1956 ASSERT(CpuFeatures::IsEnabled(SSE2));
1949 EnsureSpace ensure_space(this); 1957 EnsureSpace ensure_space(this);
1950 last_pc_ = pc_; 1958 last_pc_ = pc_;
1951 EMIT(0xF2); 1959 EMIT(0xF2);
1952 EMIT(0x0F); 1960 EMIT(0x0F);
1953 EMIT(0x2A); 1961 EMIT(0x2A);
1954 emit_sse_operand(dst, src); 1962 emit_sse_operand(dst, src);
1955 } 1963 }
1956 1964
1957 1965
1958 void Assembler::addsd(XMMRegister dst, XMMRegister src) { 1966 void Assembler::addsd(XMMRegister dst, XMMRegister src) {
1959 ASSERT(CpuFeatures::IsEnabled(CpuFeatures::SSE2)); 1967 ASSERT(CpuFeatures::IsEnabled(SSE2));
1960 EnsureSpace ensure_space(this); 1968 EnsureSpace ensure_space(this);
1961 last_pc_ = pc_; 1969 last_pc_ = pc_;
1962 EMIT(0xF2); 1970 EMIT(0xF2);
1963 EMIT(0x0F); 1971 EMIT(0x0F);
1964 EMIT(0x58); 1972 EMIT(0x58);
1965 emit_sse_operand(dst, src); 1973 emit_sse_operand(dst, src);
1966 } 1974 }
1967 1975
1968 1976
1969 void Assembler::mulsd(XMMRegister dst, XMMRegister src) { 1977 void Assembler::mulsd(XMMRegister dst, XMMRegister src) {
1970 ASSERT(CpuFeatures::IsEnabled(CpuFeatures::SSE2)); 1978 ASSERT(CpuFeatures::IsEnabled(SSE2));
1971 EnsureSpace ensure_space(this); 1979 EnsureSpace ensure_space(this);
1972 last_pc_ = pc_; 1980 last_pc_ = pc_;
1973 EMIT(0xF2); 1981 EMIT(0xF2);
1974 EMIT(0x0F); 1982 EMIT(0x0F);
1975 EMIT(0x59); 1983 EMIT(0x59);
1976 emit_sse_operand(dst, src); 1984 emit_sse_operand(dst, src);
1977 } 1985 }
1978 1986
1979 1987
1980 void Assembler::subsd(XMMRegister dst, XMMRegister src) { 1988 void Assembler::subsd(XMMRegister dst, XMMRegister src) {
1981 ASSERT(CpuFeatures::IsEnabled(CpuFeatures::SSE2)); 1989 ASSERT(CpuFeatures::IsEnabled(SSE2));
1982 EnsureSpace ensure_space(this); 1990 EnsureSpace ensure_space(this);
1983 last_pc_ = pc_; 1991 last_pc_ = pc_;
1984 EMIT(0xF2); 1992 EMIT(0xF2);
1985 EMIT(0x0F); 1993 EMIT(0x0F);
1986 EMIT(0x5C); 1994 EMIT(0x5C);
1987 emit_sse_operand(dst, src); 1995 emit_sse_operand(dst, src);
1988 } 1996 }
1989 1997
1990 1998
1991 void Assembler::divsd(XMMRegister dst, XMMRegister src) { 1999 void Assembler::divsd(XMMRegister dst, XMMRegister src) {
1992 ASSERT(CpuFeatures::IsEnabled(CpuFeatures::SSE2)); 2000 ASSERT(CpuFeatures::IsEnabled(SSE2));
1993 EnsureSpace ensure_space(this); 2001 EnsureSpace ensure_space(this);
1994 last_pc_ = pc_; 2002 last_pc_ = pc_;
1995 EMIT(0xF2); 2003 EMIT(0xF2);
1996 EMIT(0x0F); 2004 EMIT(0x0F);
1997 EMIT(0x5E); 2005 EMIT(0x5E);
1998 emit_sse_operand(dst, src); 2006 emit_sse_operand(dst, src);
1999 } 2007 }
2000 2008
2001 2009
2002 void Assembler::comisd(XMMRegister dst, XMMRegister src) { 2010 void Assembler::comisd(XMMRegister dst, XMMRegister src) {
2003 ASSERT(CpuFeatures::IsEnabled(CpuFeatures::SSE2)); 2011 ASSERT(CpuFeatures::IsEnabled(SSE2));
2004 EnsureSpace ensure_space(this); 2012 EnsureSpace ensure_space(this);
2005 last_pc_ = pc_; 2013 last_pc_ = pc_;
2006 EMIT(0x66); 2014 EMIT(0x66);
2007 EMIT(0x0F); 2015 EMIT(0x0F);
2008 EMIT(0x2F); 2016 EMIT(0x2F);
2009 emit_sse_operand(dst, src); 2017 emit_sse_operand(dst, src);
2010 } 2018 }
2011 2019
2012 2020
2013 void Assembler::movdbl(XMMRegister dst, const Operand& src) { 2021 void Assembler::movdbl(XMMRegister dst, const Operand& src) {
2014 EnsureSpace ensure_space(this); 2022 EnsureSpace ensure_space(this);
2015 last_pc_ = pc_; 2023 last_pc_ = pc_;
2016 movsd(dst, src); 2024 movsd(dst, src);
2017 } 2025 }
2018 2026
2019 2027
2020 void Assembler::movdbl(const Operand& dst, XMMRegister src) { 2028 void Assembler::movdbl(const Operand& dst, XMMRegister src) {
2021 EnsureSpace ensure_space(this); 2029 EnsureSpace ensure_space(this);
2022 last_pc_ = pc_; 2030 last_pc_ = pc_;
2023 movsd(dst, src); 2031 movsd(dst, src);
2024 } 2032 }
2025 2033
2026 2034
2027 void Assembler::movsd(const Operand& dst, XMMRegister src ) { 2035 void Assembler::movsd(const Operand& dst, XMMRegister src ) {
2028 ASSERT(CpuFeatures::IsEnabled(CpuFeatures::SSE2)); 2036 ASSERT(CpuFeatures::IsEnabled(SSE2));
2029 EnsureSpace ensure_space(this); 2037 EnsureSpace ensure_space(this);
2030 last_pc_ = pc_; 2038 last_pc_ = pc_;
2031 EMIT(0xF2); // double 2039 EMIT(0xF2); // double
2032 EMIT(0x0F); 2040 EMIT(0x0F);
2033 EMIT(0x11); // store 2041 EMIT(0x11); // store
2034 emit_sse_operand(src, dst); 2042 emit_sse_operand(src, dst);
2035 } 2043 }
2036 2044
2037 2045
2038 void Assembler::movsd(XMMRegister dst, const Operand& src) { 2046 void Assembler::movsd(XMMRegister dst, const Operand& src) {
2039 ASSERT(CpuFeatures::IsEnabled(CpuFeatures::SSE2)); 2047 ASSERT(CpuFeatures::IsEnabled(SSE2));
2040 EnsureSpace ensure_space(this); 2048 EnsureSpace ensure_space(this);
2041 last_pc_ = pc_; 2049 last_pc_ = pc_;
2042 EMIT(0xF2); // double 2050 EMIT(0xF2); // double
2043 EMIT(0x0F); 2051 EMIT(0x0F);
2044 EMIT(0x10); // load 2052 EMIT(0x10); // load
2045 emit_sse_operand(dst, src); 2053 emit_sse_operand(dst, src);
2046 } 2054 }
2047 2055
2048 2056
2049 void Assembler::emit_sse_operand(XMMRegister reg, const Operand& adr) { 2057 void Assembler::emit_sse_operand(XMMRegister reg, const Operand& adr) {
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
2238 2246
2239 void Assembler::dd(uint32_t data, RelocInfo::Mode reloc_info) { 2247 void Assembler::dd(uint32_t data, RelocInfo::Mode reloc_info) {
2240 EnsureSpace ensure_space(this); 2248 EnsureSpace ensure_space(this);
2241 emit(data, reloc_info); 2249 emit(data, reloc_info);
2242 } 2250 }
2243 2251
2244 2252
2245 void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) { 2253 void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) {
2246 ASSERT(rmode != RelocInfo::NONE); 2254 ASSERT(rmode != RelocInfo::NONE);
2247 // Don't record external references unless the heap will be serialized. 2255 // Don't record external references unless the heap will be serialized.
2248 if (rmode == RelocInfo::EXTERNAL_REFERENCE && 2256 if (rmode == RelocInfo::EXTERNAL_REFERENCE) {
2249 !Serializer::enabled() && 2257 #ifdef DEBUG
2250 !FLAG_debug_code) { 2258 if (!Serializer::enabled()) {
2251 return; 2259 Serializer::TooLateToEnableNow();
2260 }
2261 #endif
2262 if (!Serializer::enabled() && !FLAG_debug_code) {
2263 return;
2264 }
2252 } 2265 }
2253 RelocInfo rinfo(pc_, rmode, data); 2266 RelocInfo rinfo(pc_, rmode, data);
2254 reloc_info_writer.Write(&rinfo); 2267 reloc_info_writer.Write(&rinfo);
2255 } 2268 }
2256 2269
2257 2270
2258 #ifdef GENERATED_CODE_COVERAGE 2271 #ifdef GENERATED_CODE_COVERAGE
2259 static FILE* coverage_log = NULL; 2272 static FILE* coverage_log = NULL;
2260 2273
2261 2274
(...skipping 12 matching lines...) Expand all
2274 push_insn[1] = 13; // Skip over coverage insns. 2287 push_insn[1] = 13; // Skip over coverage insns.
2275 if (coverage_log != NULL) { 2288 if (coverage_log != NULL) {
2276 fprintf(coverage_log, "%s\n", file_line); 2289 fprintf(coverage_log, "%s\n", file_line);
2277 fflush(coverage_log); 2290 fflush(coverage_log);
2278 } 2291 }
2279 } 2292 }
2280 2293
2281 #endif 2294 #endif
2282 2295
2283 } } // namespace v8::internal 2296 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698