This is an automated email from the ASF dual-hosted git repository.

pkarashchenko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 9ab97df0a57d92caf509824c9bc15309a71bc242
Author: chao an <anc...@xiaomi.com>
AuthorDate: Fri Dec 2 02:20:09 2022 +0800

    arm/cortex-[a|r]/thumb: force assembler files to be interpreted as Thumb 
code
    
    The option '-mthumb' is only valid for C source files and it is not passed 
to the assembler.
    
    If 'thumb' is not considered in some assembly projects, the system will 
generate
    'undefined instructions' when running incompatible instruction:
    
    arm_undefinedinsn: Undefined instruction at 0x380cfc98
    
    This assembly file should be compiled with .thumb but it doesn't:
    
    380cfc90 <hobot_i8_i32_gemm_nn_m4_n8_neon>:
    380cfc90: e92d4ff0  push  {r4, r5, r6, r7, r8, r9, sl, fp, lr}
    380cfc94: ed2d8b10  vpush {d8-d15}
    380cfc98: e59d4064  ldr r4, [sp, #100]  ; 0x64   <-- Undefined instruction
    380cfc9c: e59d5068  ldr r5, [sp, #104]  ; 0x68
    380cfca0: e59d606c  ldr r6, [sp, #108]  ; 0x6c
    380cfca4: e59d7070  ldr r7, [sp, #112]  ; 0x70
    380cfca8: e1a08120  lsr r8, r0, #2
    380cfcac: e1a091a1  lsr r9, r1, #3
    380cfcb0: e1a0a122  lsr sl, r2, #2
    
    After enable thumb:
      .syntax unified
      .thumb
    or
      -Wa,-mthumb
    
    .Lhobot_i8_i32_gemm_nn_m4_n8_neon:
    38001100: e92d 4ff0   stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
    38001104: ed2d 8b10   vpush {d8-d15}
    38001108: 9c19        ldr r4, [sp, #100]  ; 0x64
    3800110a: 9d1a        ldr r5, [sp, #104]  ; 0x68
    3800110c: 9e1b        ldr r6, [sp, #108]  ; 0x6c
    3800110e: 9f1c        ldr r7, [sp, #112]  ; 0x70
    38001110: ea4f 0890   mov.w r8, r0, lsr #2
    38001114: ea4f 09d1   mov.w r9, r1, lsr #3
    38001118: ea4f 0a92   mov.w sl, r2, lsr #2
    
    This commit will enable the thumb option of the assembly file by default,
    so that when compiling the assembly file, the machine code and the system 
will be in a consistent state.
    
    ----------------------------------------------------------------
    https://gcc.gnu.org/onlinedocs/gcc-4.5.2/gcc/ARM-Options.html
    
    GCC Manual:
    -mthumb
      Generate code for the Thumb instruction set. The default is to use the 
32-bit ARM
      instruction set. This option automatically enables either 16-bit Thumb-1 
or mixed 16/32-bit
      Thumb-2 instructions based on the -mcpu=name and -march=name options.
    
      ** This option is not passed to the assembler. **
      ** If you want to force assembler files to be interpreted as Thumb code,
         either add a `.thumb' directive to the source or pass the -mthumb 
option
         directly to the assembler by prefixing it with -Wa. **
    
    Signed-off-by: chao an <anc...@xiaomi.com>
---
 arch/arm/src/common/Toolchain.defs | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/arch/arm/src/common/Toolchain.defs 
b/arch/arm/src/common/Toolchain.defs
index c5c762bced..fa3624d2b0 100644
--- a/arch/arm/src/common/Toolchain.defs
+++ b/arch/arm/src/common/Toolchain.defs
@@ -72,6 +72,14 @@ endif
 
 ifeq ($(CONFIG_ARM_THUMB),y)
   ARCHOPTIMIZATION += -mthumb
+
+  # GCC Manual:
+  # -mthumb
+  # ... If you want to force assembler files to be interpreted as Thumb
+  # code, either add a `.thumb' directive to the source or pass the
+  # -mthumb option directly to the assembler by prefixing it with -Wa.
+
+  ARCHOPTIMIZATION += -Wa,-mthumb
 endif
 
 ifeq ($(CONFIG_UNWINDER_ARM),y)

Reply via email to