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 |