Chromium Code Reviews| Index: src/arm/cpu-arm.cc | 
| diff --git a/src/arm/cpu-arm.cc b/src/arm/cpu-arm.cc | 
| index 4a340708f9334faa7a59d127e9518067beca85e4..4bbfd375a8bd2465d1433c89e7163d45086e6489 100644 | 
| --- a/src/arm/cpu-arm.cc | 
| +++ b/src/arm/cpu-arm.cc | 
| @@ -45,6 +45,18 @@ void CpuFeatures::FlushICache(void* start, size_t size) { | 
| register uint32_t end asm("r1") = beg + size; | 
| register uint32_t flg asm("r2") = 0; | 
| +#ifdef __clang__ | 
| + // This variant of the asm avoids a constant pool entry, which can be | 
| + // problematic when LTO'ing. It is also slightly shorter. | 
| + 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
 
 | 
| + | 
| + asm volatile("svc 0\n" | 
| + : | 
| + : "r"(beg), "r"(end), "r"(flg), "r"(scno) | 
| + : "memory"); | 
| +#else | 
| + // Use a different variant of the asm with GCC because some versions doesn't | 
| + // support r7 as an asm input. | 
| asm volatile( | 
| // This assembly works for both ARM and Thumb targets. | 
| @@ -62,6 +74,7 @@ void CpuFeatures::FlushICache(void* start, size_t size) { | 
| : "r" (beg), "r" (end), "r" (flg), [scno] "i" (__ARM_NR_cacheflush) | 
| : "memory"); | 
| #endif | 
| +#endif | 
| } | 
| } } // namespace v8::internal |