From 4ee8ec6931e6a5958d2a5710c6a8f7cd7c0f3862 Mon Sep 17 00:00:00 2001 From: Damien George Date: Tue, 25 May 2021 22:15:58 +1000 Subject: [PATCH] py/asmarm: Use builtin func to flush I- and D-cache on ARM 7 archs. The inline assembler code does not work for __ARM_ARCH == 7. Signed-off-by: Damien George --- py/asmarm.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/py/asmarm.c b/py/asmarm.c index e91421578b..5662d75e19 100644 --- a/py/asmarm.c +++ b/py/asmarm.c @@ -40,7 +40,7 @@ void asm_arm_end_pass(asm_arm_t *as) { if (as->base.pass == MP_ASM_PASS_EMIT) { - #if defined(__linux__) && defined(__GNUC__) + #if (defined(__linux__) && defined(__GNUC__)) || __ARM_ARCH == 7 char *start = mp_asm_base_get_code(&as->base); char *end = start + mp_asm_base_get_code_size(&as->base); __builtin___clear_cache(start, end); @@ -48,10 +48,10 @@ void asm_arm_end_pass(asm_arm_t *as) { // flush I- and D-cache asm volatile ( "0:" - "mrc p15, 0, r15, c7, c10, 3\n" + "mrc p15, 0, r15, c7, c10, 3\n" // test and clean D-cache "bne 0b\n" "mov r0, #0\n" - "mcr p15, 0, r0, c7, c7, 0\n" + "mcr p15, 0, r0, c7, c7, 0\n" // invalidate I-cache and D-cache : : : "r0", "cc"); #endif }