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

Side by Side Diff: src/arm/cpu-arm.cc

Issue 986643004: Use a different variant of CpuFeatures::FlushICache asm with clang. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 9 months 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2009 the V8 project authors. All rights reserved. 1 // Copyright 2006-2009 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 // CPU specific code for arm independent of OS goes here. 5 // CPU specific code for arm independent of OS goes here.
6 #ifdef __arm__ 6 #ifdef __arm__
7 #ifdef __QNXNTO__ 7 #ifdef __QNXNTO__
8 #include <sys/mman.h> // for cache flushing. 8 #include <sys/mman.h> // for cache flushing.
9 #undef MAP_TYPE 9 #undef MAP_TYPE
10 #else 10 #else
(...skipping 27 matching lines...) Expand all
38 Simulator::FlushICache(Isolate::Current()->simulator_i_cache(), start, size); 38 Simulator::FlushICache(Isolate::Current()->simulator_i_cache(), start, size);
39 39
40 #elif V8_OS_QNX 40 #elif V8_OS_QNX
41 msync(start, size, MS_SYNC | MS_INVALIDATE_ICACHE); 41 msync(start, size, MS_SYNC | MS_INVALIDATE_ICACHE);
42 42
43 #else 43 #else
44 register uint32_t beg asm("r0") = reinterpret_cast<uint32_t>(start); 44 register uint32_t beg asm("r0") = reinterpret_cast<uint32_t>(start);
45 register uint32_t end asm("r1") = beg + size; 45 register uint32_t end asm("r1") = beg + size;
46 register uint32_t flg asm("r2") = 0; 46 register uint32_t flg asm("r2") = 0;
47 47
48 #ifdef __clang__
49 // This variant of the asm avoids a constant pool entry, which can be
50 // problematic when LTO'ing. It is also slightly shorter.
51 register uint32_t scno asm("r7") = __ARM_NR_cacheflush;
bnoordhuis 2015/03/07 18:34:49 I don't think it's safe to assume that the compile
pcc1 2015/03/07 21:26:39 Please see https://gcc.gnu.org/onlinedocs/gcc/Loca
52
53 asm volatile("svc 0\n"
54 :
55 : "r"(beg), "r"(end), "r"(flg), "r"(scno)
56 : "memory");
57 #else
58 // Use a different variant of the asm with GCC because some versions doesn't
59 // support r7 as an asm input.
48 asm volatile( 60 asm volatile(
49 // This assembly works for both ARM and Thumb targets. 61 // This assembly works for both ARM and Thumb targets.
50 62
51 // Preserve r7; it is callee-saved, and GCC uses it as a frame pointer for 63 // Preserve r7; it is callee-saved, and GCC uses it as a frame pointer for
52 // Thumb targets. 64 // Thumb targets.
53 " push {r7}\n" 65 " push {r7}\n"
54 // r0 = beg 66 // r0 = beg
55 // r1 = end 67 // r1 = end
56 // r2 = flags (0) 68 // r2 = flags (0)
57 " ldr r7, =%c[scno]\n" // r7 = syscall number 69 " ldr r7, =%c[scno]\n" // r7 = syscall number
58 " svc 0\n" 70 " svc 0\n"
59 71
60 " pop {r7}\n" 72 " pop {r7}\n"
61 : 73 :
62 : "r" (beg), "r" (end), "r" (flg), [scno] "i" (__ARM_NR_cacheflush) 74 : "r" (beg), "r" (end), "r" (flg), [scno] "i" (__ARM_NR_cacheflush)
63 : "memory"); 75 : "memory");
64 #endif 76 #endif
77 #endif
65 } 78 }
66 79
67 } } // namespace v8::internal 80 } } // namespace v8::internal
68 81
69 #endif // V8_TARGET_ARCH_ARM 82 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698