Jonathan Roelofs
2014-Jul-17 02:36 UTC
[LLVMdev] [compiler-rt] CMake bug in building ARM builtins library
On 7/16/14, 6:09 PM, sgundapa wrote:> I see a couple of issues here. > > If I include .S files for ARM, the –no-integrated-as path complains about > Assembler errors. > > The integrated-as path works fine though. >These are very likely just differences between the old ARM assembler syntax and the new 'Unified' syntax. Can you use an assembler that accepts UAL syntax? Regards, Jon -- Jon Roelofs jonathan at codesourcery.com CodeSourcery / Mentor Embedded
sgundapa
2014-Jul-17 20:11 UTC
[LLVMdev] [compiler-rt] CMake bug in building ARM builtins library
+Tim Northover I added ".syntax unified" to the sync_fetch_* .S files and the "-no-integrated-as" path moved ahead and failed with Error: branch out of range No Integrated asm path: .p2align 2 ; .thumb ; .syntax unified ; ; .globl __sync_fetch_and_add_8 ; .type __sync_fetch_and_add_8,%function ; __sync_fetch_and_add_8: push {r4, r5, r6, lr} ; dmb ; mov r12, r0 ; .L_tryatomic_add_8: ldrexd r0, r1, [r12] ; adds r4, r0, r2 ; adc r5, r1, r3 ; strexd r6, r4, r5, [r12] ; cbnz r6, .L_tryatomic_add_8 ; dmb ; pop {r4, r5, r6, pc} The ARM manual on CBNZ says backward branching is not possible. Refer to http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489c/Cjaghef c.html Integrated asm path: Surprisingly, integrated-as compiles the file and the objdump looks invalid Disassembly of section .text: 00000000 <__sync_fetch_and_add_8>: 0: b570 push {r4, r5, r6, lr} 2: f3bf 8f5f dmb sy 6: 4684 mov ip, r0 8: e8dc 017f ldrexd r0, r1, [ip] c: 1884 adds r4, r0, r2 e: eb41 0503 adc.w r5, r1, r3 12: e8cc 4576 strexd r6, r4, r5, [ip] 16: bbbe cbnz r6, 88 <__sync_fetch_and_add_8+0x88> 18: f3bf 8f5f dmb sy 1c: bd70 pop {r4, r5, r6, pc} There is no <__sync_fetch_and_add_8+0x88> at least as I could tell There are two issues here: 1. We need to update the sync_fetch_* files to generate proper assembly 2. How clang ARM MC is accepting the above assembly to compile. --Sumanth G -----Original Message----- From: Jonathan Roelofs [mailto:jonathan at codesourcery.com] Sent: Wednesday, July 16, 2014 7:37 PM To: sgundapa; 'Alexey Samsonov' Cc: 'LLVM Dev' Subject: Re: [LLVMdev] [compiler-rt] CMake bug in building ARM builtins library On 7/16/14, 6:09 PM, sgundapa wrote:> I see a couple of issues here. > > If I include .S files for ARM, the -no-integrated-as path complains > about Assembler errors. > > The integrated-as path works fine though. >These are very likely just differences between the old ARM assembler syntax and the new 'Unified' syntax. Can you use an assembler that accepts UAL syntax? Regards, Jon -- Jon Roelofs jonathan at codesourcery.com CodeSourcery / Mentor Embedded
Jonathan Roelofs
2014-Jul-17 22:17 UTC
[LLVMdev] [compiler-rt] CMake bug in building ARM builtins library
Oh yeah, Tim and I discussed this exact issue on irc the other day... I should have filed a PR. Oops. Jon On 7/17/14, 1:11 PM, sgundapa wrote:> +Tim Northover > > I added ".syntax unified" to the sync_fetch_* .S files and the > "-no-integrated-as" path moved ahead and failed with > Error: branch out of range > > No Integrated asm path: > > .p2align 2 ; > .thumb ; > .syntax unified ; > ; > .globl __sync_fetch_and_add_8 ; > .type __sync_fetch_and_add_8,%function ; > __sync_fetch_and_add_8: push {r4, r5, r6, lr} ; > dmb ; > mov r12, r0 ; > .L_tryatomic_add_8: ldrexd r0, r1, [r12] ; > adds r4, r0, r2 ; > adc r5, r1, r3 ; > strexd r6, r4, r5, [r12] ; > cbnz r6, .L_tryatomic_add_8 ; > dmb ; > pop {r4, r5, r6, pc} > > The ARM manual on CBNZ says backward branching is not possible. > Refer to > http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489c/Cjaghef > c.html > > > > Integrated asm path: > Surprisingly, integrated-as compiles the file and the objdump looks invalid > > Disassembly of section .text: > 00000000 <__sync_fetch_and_add_8>: > 0: b570 push {r4, r5, r6, lr} > 2: f3bf 8f5f dmb sy > 6: 4684 mov ip, r0 > 8: e8dc 017f ldrexd r0, r1, [ip] > c: 1884 adds r4, r0, r2 > e: eb41 0503 adc.w r5, r1, r3 > 12: e8cc 4576 strexd r6, r4, r5, [ip] > 16: bbbe cbnz r6, 88 <__sync_fetch_and_add_8+0x88> > 18: f3bf 8f5f dmb sy > 1c: bd70 pop {r4, r5, r6, pc} > > There is no <__sync_fetch_and_add_8+0x88> at least as I could tell > > There are two issues here: > 1. We need to update the sync_fetch_* files to generate proper assembly > 2. How clang ARM MC is accepting the above assembly to compile. > > --Sumanth G > > -----Original Message----- > From: Jonathan Roelofs [mailto:jonathan at codesourcery.com] > Sent: Wednesday, July 16, 2014 7:37 PM > To: sgundapa; 'Alexey Samsonov' > Cc: 'LLVM Dev' > Subject: Re: [LLVMdev] [compiler-rt] CMake bug in building ARM builtins > library > > > > On 7/16/14, 6:09 PM, sgundapa wrote: >> I see a couple of issues here. >> >> If I include .S files for ARM, the -no-integrated-as path complains >> about Assembler errors. >> >> The integrated-as path works fine though. >> > > These are very likely just differences between the old ARM assembler syntax > and the new 'Unified' syntax. Can you use an assembler that accepts UAL > syntax? > > Regards, > Jon > > > -- > Jon Roelofs > jonathan at codesourcery.com > CodeSourcery / Mentor Embedded >-- Jon Roelofs jonathan at codesourcery.com CodeSourcery / Mentor Embedded