* [U-Boot] armv5 and OMAP3 Question
@ 2017-07-25 13:14 Adam Ford
2017-07-25 16:09 ` Tom Rini
0 siblings, 1 reply; 10+ messages in thread
From: Adam Ford @ 2017-07-25 13:14 UTC (permalink / raw)
To: u-boot
The readme file for OMAP indicates that we compile using armv5 to "to
allow more compilers to work"
We have our arch/arm/mach-omap2/omap3/lowlevel_init.S file also noting
some special assembly insturctions becuse we use armv5. The barriers
defined also indicate we're using CP15 instead of the separate barrier
instructions for armv7 because we're using armv5 instead.
I just wonder in this day and age when we're noting a GCC version and
generating warnings based on the GCC warning, do we still need to
compile as armv5 any more? It seems like "to allow more compilers to
work" would not really apply any more we're trying to push newer
versions of GCC.
(please don't flame me, I am honestly curious).
adam
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] armv5 and OMAP3 Question
2017-07-25 13:14 [U-Boot] armv5 and OMAP3 Question Adam Ford
@ 2017-07-25 16:09 ` Tom Rini
2018-08-03 10:43 ` Adam Ford
0 siblings, 1 reply; 10+ messages in thread
From: Tom Rini @ 2017-07-25 16:09 UTC (permalink / raw)
To: u-boot
On Tue, Jul 25, 2017 at 08:14:57AM -0500, Adam Ford wrote:
> The readme file for OMAP indicates that we compile using armv5 to "to
> allow more compilers to work"
>
> We have our arch/arm/mach-omap2/omap3/lowlevel_init.S file also noting
> some special assembly insturctions becuse we use armv5. The barriers
> defined also indicate we're using CP15 instead of the separate barrier
> instructions for armv7 because we're using armv5 instead.
>
> I just wonder in this day and age when we're noting a GCC version and
> generating warnings based on the GCC warning, do we still need to
> compile as armv5 any more? It seems like "to allow more compilers to
> work" would not really apply any more we're trying to push newer
> versions of GCC.
So, these are historical notes that really should be corrected.
Initially, when ARMv7 support was added, most people did not have
compilers new enough to recognize -march=armv7-a. We still even support
them, see the logic in arch/arm/Makefile around CONFIG_CPU_V7 (the
options are any sort of modern gcc, llvm, ancient gcc). When we move to
gcc-6 being the oldest gcc supported for ARM we can fixup those comments
and logic as well.
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170725/bf324a44/attachment.sig>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] armv5 and OMAP3 Question
2017-07-25 16:09 ` Tom Rini
@ 2018-08-03 10:43 ` Adam Ford
2018-08-03 14:59 ` Tom Rini
0 siblings, 1 reply; 10+ messages in thread
From: Adam Ford @ 2018-08-03 10:43 UTC (permalink / raw)
To: u-boot
On Tue, Jul 25, 2017 at 11:08 AM Tom Rini <trini@konsulko.com> wrote:
>
> On Tue, Jul 25, 2017 at 08:14:57AM -0500, Adam Ford wrote:
>
> > The readme file for OMAP indicates that we compile using armv5 to "to
> > allow more compilers to work"
> >
> > We have our arch/arm/mach-omap2/omap3/lowlevel_init.S file also noting
> > some special assembly insturctions becuse we use armv5. The barriers
> > defined also indicate we're using CP15 instead of the separate barrier
> > instructions for armv7 because we're using armv5 instead.
> >
> > I just wonder in this day and age when we're noting a GCC version and
> > generating warnings based on the GCC warning, do we still need to
> > compile as armv5 any more? It seems like "to allow more compilers to
> > work" would not really apply any more we're trying to push newer
> > versions of GCC.
>
> So, these are historical notes that really should be corrected.
> Initially, when ARMv7 support was added, most people did not have
> compilers new enough to recognize -march=armv7-a. We still even support
> them, see the logic in arch/arm/Makefile around CONFIG_CPU_V7 (the
> options are any sort of modern gcc, llvm, ancient gcc). When we move to
> gcc-6 being the oldest gcc supported for ARM we can fixup those comments
> and logic as well.
My understanding is that we've made the requirement for GCC 6 now. I
just pushed a patch which enabled mtune=armv7-a-generic when
CONFIG_CPU_V7A is enabled and that seems to shrink the code a bit on
omap3_logic. Does it make sense to remove the , -march=armv5 from
arch/arm/Makefile and or the plain -march=armv7 since CONFIG_CPU_V7A
implies armv-a?
adam
>
> --
> Tom
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] armv5 and OMAP3 Question
2018-08-03 10:43 ` Adam Ford
@ 2018-08-03 14:59 ` Tom Rini
2018-08-03 15:02 ` Adam Ford
0 siblings, 1 reply; 10+ messages in thread
From: Tom Rini @ 2018-08-03 14:59 UTC (permalink / raw)
To: u-boot
On Fri, Aug 03, 2018 at 05:43:46AM -0500, Adam Ford wrote:
> On Tue, Jul 25, 2017 at 11:08 AM Tom Rini <trini@konsulko.com> wrote:
> >
> > On Tue, Jul 25, 2017 at 08:14:57AM -0500, Adam Ford wrote:
> >
> > > The readme file for OMAP indicates that we compile using armv5 to "to
> > > allow more compilers to work"
> > >
> > > We have our arch/arm/mach-omap2/omap3/lowlevel_init.S file also noting
> > > some special assembly insturctions becuse we use armv5. The barriers
> > > defined also indicate we're using CP15 instead of the separate barrier
> > > instructions for armv7 because we're using armv5 instead.
> > >
> > > I just wonder in this day and age when we're noting a GCC version and
> > > generating warnings based on the GCC warning, do we still need to
> > > compile as armv5 any more? It seems like "to allow more compilers to
> > > work" would not really apply any more we're trying to push newer
> > > versions of GCC.
> >
> > So, these are historical notes that really should be corrected.
> > Initially, when ARMv7 support was added, most people did not have
> > compilers new enough to recognize -march=armv7-a. We still even support
> > them, see the logic in arch/arm/Makefile around CONFIG_CPU_V7 (the
> > options are any sort of modern gcc, llvm, ancient gcc). When we move to
> > gcc-6 being the oldest gcc supported for ARM we can fixup those comments
> > and logic as well.
>
> My understanding is that we've made the requirement for GCC 6 now. I
> just pushed a patch which enabled mtune=armv7-a-generic when
> CONFIG_CPU_V7A is enabled and that seems to shrink the code a bit on
> omap3_logic. Does it make sense to remove the , -march=armv5 from
> arch/arm/Makefile and or the plain -march=armv7 since CONFIG_CPU_V7A
> implies armv-a?
Yes, we can probably at least drop the v5 portion of that logic. As
noted in the other patch, LLVM and GCC disagree on "armv7" vs "armv7-a"
as being the appropriate name, or at least did in the past.
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20180803/dada87df/attachment.sig>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] armv5 and OMAP3 Question
2018-08-03 14:59 ` Tom Rini
@ 2018-08-03 15:02 ` Adam Ford
2018-08-03 15:20 ` Tom Rini
0 siblings, 1 reply; 10+ messages in thread
From: Adam Ford @ 2018-08-03 15:02 UTC (permalink / raw)
To: u-boot
On Fri, Aug 3, 2018 at 10:00 AM Tom Rini <trini@konsulko.com> wrote:
>
> On Fri, Aug 03, 2018 at 05:43:46AM -0500, Adam Ford wrote:
> > On Tue, Jul 25, 2017 at 11:08 AM Tom Rini <trini@konsulko.com> wrote:
> > >
> > > On Tue, Jul 25, 2017 at 08:14:57AM -0500, Adam Ford wrote:
> > >
> > > > The readme file for OMAP indicates that we compile using armv5 to "to
> > > > allow more compilers to work"
> > > >
> > > > We have our arch/arm/mach-omap2/omap3/lowlevel_init.S file also noting
> > > > some special assembly insturctions becuse we use armv5. The barriers
> > > > defined also indicate we're using CP15 instead of the separate barrier
> > > > instructions for armv7 because we're using armv5 instead.
> > > >
> > > > I just wonder in this day and age when we're noting a GCC version and
> > > > generating warnings based on the GCC warning, do we still need to
> > > > compile as armv5 any more? It seems like "to allow more compilers to
> > > > work" would not really apply any more we're trying to push newer
> > > > versions of GCC.
> > >
> > > So, these are historical notes that really should be corrected.
> > > Initially, when ARMv7 support was added, most people did not have
> > > compilers new enough to recognize -march=armv7-a. We still even support
> > > them, see the logic in arch/arm/Makefile around CONFIG_CPU_V7 (the
> > > options are any sort of modern gcc, llvm, ancient gcc). When we move to
> > > gcc-6 being the oldest gcc supported for ARM we can fixup those comments
> > > and logic as well.
> >
> > My understanding is that we've made the requirement for GCC 6 now. I
> > just pushed a patch which enabled mtune=armv7-a-generic when
> > CONFIG_CPU_V7A is enabled and that seems to shrink the code a bit on
> > omap3_logic. Does it make sense to remove the , -march=armv5 from
> > arch/arm/Makefile and or the plain -march=armv7 since CONFIG_CPU_V7A
> > implies armv-a?
>
> Yes, we can probably at least drop the v5 portion of that logic. As
> noted in the other patch, LLVM and GCC disagree on "armv7" vs "armv7-a"
> as being the appropriate name, or at least did in the past.
Can you point me to an example of how to tune armv7 for both GCC and
LLVM? I was looking around and I'm not seeing an obvious syntax.
I'll do a 2-part patch. One to remove the armv5, and one to enable
the armv7 optimization.
adam
>
> --
> Tom
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] armv5 and OMAP3 Question
2018-08-03 15:02 ` Adam Ford
@ 2018-08-03 15:20 ` Tom Rini
2018-08-04 10:32 ` Adam Ford
0 siblings, 1 reply; 10+ messages in thread
From: Tom Rini @ 2018-08-03 15:20 UTC (permalink / raw)
To: u-boot
On Fri, Aug 03, 2018 at 10:02:17AM -0500, Adam Ford wrote:
> On Fri, Aug 3, 2018 at 10:00 AM Tom Rini <trini@konsulko.com> wrote:
> >
> > On Fri, Aug 03, 2018 at 05:43:46AM -0500, Adam Ford wrote:
> > > On Tue, Jul 25, 2017 at 11:08 AM Tom Rini <trini@konsulko.com> wrote:
> > > >
> > > > On Tue, Jul 25, 2017 at 08:14:57AM -0500, Adam Ford wrote:
> > > >
> > > > > The readme file for OMAP indicates that we compile using armv5 to "to
> > > > > allow more compilers to work"
> > > > >
> > > > > We have our arch/arm/mach-omap2/omap3/lowlevel_init.S file also noting
> > > > > some special assembly insturctions becuse we use armv5. The barriers
> > > > > defined also indicate we're using CP15 instead of the separate barrier
> > > > > instructions for armv7 because we're using armv5 instead.
> > > > >
> > > > > I just wonder in this day and age when we're noting a GCC version and
> > > > > generating warnings based on the GCC warning, do we still need to
> > > > > compile as armv5 any more? It seems like "to allow more compilers to
> > > > > work" would not really apply any more we're trying to push newer
> > > > > versions of GCC.
> > > >
> > > > So, these are historical notes that really should be corrected.
> > > > Initially, when ARMv7 support was added, most people did not have
> > > > compilers new enough to recognize -march=armv7-a. We still even support
> > > > them, see the logic in arch/arm/Makefile around CONFIG_CPU_V7 (the
> > > > options are any sort of modern gcc, llvm, ancient gcc). When we move to
> > > > gcc-6 being the oldest gcc supported for ARM we can fixup those comments
> > > > and logic as well.
> > >
> > > My understanding is that we've made the requirement for GCC 6 now. I
> > > just pushed a patch which enabled mtune=armv7-a-generic when
> > > CONFIG_CPU_V7A is enabled and that seems to shrink the code a bit on
> > > omap3_logic. Does it make sense to remove the , -march=armv5 from
> > > arch/arm/Makefile and or the plain -march=armv7 since CONFIG_CPU_V7A
> > > implies armv-a?
> >
> > Yes, we can probably at least drop the v5 portion of that logic. As
> > noted in the other patch, LLVM and GCC disagree on "armv7" vs "armv7-a"
> > as being the appropriate name, or at least did in the past.
>
> Can you point me to an example of how to tune armv7 for both GCC and
> LLVM? I was looking around and I'm not seeing an obvious syntax.
> I'll do a 2-part patch. One to remove the armv5, and one to enable
> the armv7 optimization.
In arch/arm/Makefile:
arch-$(CONFIG_CPU_V7A) =$(call cc-option, -march=armv7-a, \
$(call cc-option, -march=armv7, -march=armv5))
this works in both cases. And doc/README.clang is correct on how to
build with LLVM on ARM.
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20180803/bd14b386/attachment.sig>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] armv5 and OMAP3 Question
2018-08-03 15:20 ` Tom Rini
@ 2018-08-04 10:32 ` Adam Ford
2018-08-04 11:44 ` Tom Rini
0 siblings, 1 reply; 10+ messages in thread
From: Adam Ford @ 2018-08-04 10:32 UTC (permalink / raw)
To: u-boot
On Fri, Aug 3, 2018 at 10:20 AM Tom Rini <trini@konsulko.com> wrote:
>
> On Fri, Aug 03, 2018 at 10:02:17AM -0500, Adam Ford wrote:
> > On Fri, Aug 3, 2018 at 10:00 AM Tom Rini <trini@konsulko.com> wrote:
> > >
> > > On Fri, Aug 03, 2018 at 05:43:46AM -0500, Adam Ford wrote:
> > > > On Tue, Jul 25, 2017 at 11:08 AM Tom Rini <trini@konsulko.com> wrote:
> > > > >
> > > > > On Tue, Jul 25, 2017 at 08:14:57AM -0500, Adam Ford wrote:
> > > > >
> > > > > > The readme file for OMAP indicates that we compile using armv5 to "to
> > > > > > allow more compilers to work"
> > > > > >
> > > > > > We have our arch/arm/mach-omap2/omap3/lowlevel_init.S file also noting
> > > > > > some special assembly insturctions becuse we use armv5. The barriers
> > > > > > defined also indicate we're using CP15 instead of the separate barrier
> > > > > > instructions for armv7 because we're using armv5 instead.
> > > > > >
> > > > > > I just wonder in this day and age when we're noting a GCC version and
> > > > > > generating warnings based on the GCC warning, do we still need to
> > > > > > compile as armv5 any more? It seems like "to allow more compilers to
> > > > > > work" would not really apply any more we're trying to push newer
> > > > > > versions of GCC.
> > > > >
> > > > > So, these are historical notes that really should be corrected.
> > > > > Initially, when ARMv7 support was added, most people did not have
> > > > > compilers new enough to recognize -march=armv7-a. We still even support
> > > > > them, see the logic in arch/arm/Makefile around CONFIG_CPU_V7 (the
> > > > > options are any sort of modern gcc, llvm, ancient gcc). When we move to
> > > > > gcc-6 being the oldest gcc supported for ARM we can fixup those comments
> > > > > and logic as well.
> > > >
> > > > My understanding is that we've made the requirement for GCC 6 now. I
> > > > just pushed a patch which enabled mtune=armv7-a-generic when
> > > > CONFIG_CPU_V7A is enabled and that seems to shrink the code a bit on
> > > > omap3_logic. Does it make sense to remove the , -march=armv5 from
> > > > arch/arm/Makefile and or the plain -march=armv7 since CONFIG_CPU_V7A
> > > > implies armv-a?
> > >
> > > Yes, we can probably at least drop the v5 portion of that logic. As
> > > noted in the other patch, LLVM and GCC disagree on "armv7" vs "armv7-a"
> > > as being the appropriate name, or at least did in the past.
> >
> > Can you point me to an example of how to tune armv7 for both GCC and
> > LLVM? I was looking around and I'm not seeing an obvious syntax.
> > I'll do a 2-part patch. One to remove the armv5, and one to enable
> > the armv7 optimization.
>
> In arch/arm/Makefile:
> arch-$(CONFIG_CPU_V7A) =$(call cc-option, -march=armv7-a, \
> $(call cc-option, -march=armv7, -march=armv5))
>
> this works in both cases. And doc/README.clang is correct on how to
> build with LLVM on ARM.
I reset my head to origin/master, but using the following, I am not
able to build omap3_logic with clang on Ubuntu 18.04:
make HOSTCC=clang omap3_logic
make HOSTCC=clang CROSS_COMPILE=arm-linux-gnueabi- \
CC="clang -target arm-linux-gnueabi" -j8
arch/arm/lib/memset.S:43:2: error: predicated instructions must be in IT block
stmiage ip!, {r1, r3, r8, lr} @ 64 bytes at a time.
^
arch/arm/lib/memset.S:44:2: error: predicated instructions must be in IT block
stmiage ip!, {r1, r3, r8, lr}
^
arch/arm/lib/memset.S:45:2: error: predicated instructions must be in IT block
stmiage ip!, {r1, r3, r8, lr}
^
arch/arm/lib/memset.S:46:2: error: predicated instructions must be in IT block
stmiage ip!, {r1, r3, r8, lr}
^
arch/arm/lib/memset.S:48:2: error: predicated instructions must be in IT block
ldmfdeq sp!, {r8, pc} @ Now <64 bytes to go.
^
arch/arm/lib/memset.S:53:2: error: predicated instructions must be in IT block
stmiane ip!, {r1, r3, r8, lr}
^
arch/arm/lib/memset.S:54:2: error: predicated instructions must be in IT block
stmiane ip!, {r1, r3, r8, lr}
^
arch/arm/lib/memset.S:56:2: error: predicated instructions must be in IT block
stmiane ip!, {r1, r3, r8, lr}
^
arch/arm/lib/memset.S:103:2: error: predicated instructions must be in IT block
stmiane ip!, {r1, r3}
^
arch/arm/lib/memset.S:105:2: error: predicated instructions must be in IT block
strne r1, [ip], #4
^
arch/arm/lib/memset.S:111:2: error: predicated instructions must be in IT block
strbne r1, [ip], #1
^
arch/arm/lib/memset.S:112:2: error: predicated instructions must be in IT block
strbne r1, [ip], #1
^
arch/arm/lib/memset.S:114:2: error: predicated instructions must be in IT block
strbne r1, [ip], #1
^
arch/arm/lib/memset.S:120:2: error: predicated instructions must be in IT block
strblt r1, [ip], #1 @ 1
^
arch/arm/lib/memset.S:121:2: error: predicated instructions must be in IT block
strble r1, [ip], #1 @ 1
^
scripts/Makefile.build:314: recipe for target 'arch/arm/lib/memset.o' failed
make[1]: *** [arch/arm/lib/memset.o] Error 1
Makefile:1373: recipe for target 'arch/arm/lib' failed
make: *** [arch/arm/lib] Error 2
aford@aford-IdeaCentre-A730:~/src/u-boot$
If you have any suggestions, I'm open to try them. I have never used
clang before, but I would really like to get these armv7a
optimizations in to make SPL smaller.
adam
>
> --
> Tom
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] armv5 and OMAP3 Question
2018-08-04 10:32 ` Adam Ford
@ 2018-08-04 11:44 ` Tom Rini
2018-08-04 14:39 ` Adam Ford
0 siblings, 1 reply; 10+ messages in thread
From: Tom Rini @ 2018-08-04 11:44 UTC (permalink / raw)
To: u-boot
On Sat, Aug 04, 2018 at 05:32:18AM -0500, Adam Ford wrote:
> On Fri, Aug 3, 2018 at 10:20 AM Tom Rini <trini@konsulko.com> wrote:
> >
> > On Fri, Aug 03, 2018 at 10:02:17AM -0500, Adam Ford wrote:
> > > On Fri, Aug 3, 2018 at 10:00 AM Tom Rini <trini@konsulko.com> wrote:
> > > >
> > > > On Fri, Aug 03, 2018 at 05:43:46AM -0500, Adam Ford wrote:
> > > > > On Tue, Jul 25, 2017 at 11:08 AM Tom Rini <trini@konsulko.com> wrote:
> > > > > >
> > > > > > On Tue, Jul 25, 2017 at 08:14:57AM -0500, Adam Ford wrote:
> > > > > >
> > > > > > > The readme file for OMAP indicates that we compile using armv5 to "to
> > > > > > > allow more compilers to work"
> > > > > > >
> > > > > > > We have our arch/arm/mach-omap2/omap3/lowlevel_init.S file also noting
> > > > > > > some special assembly insturctions becuse we use armv5. The barriers
> > > > > > > defined also indicate we're using CP15 instead of the separate barrier
> > > > > > > instructions for armv7 because we're using armv5 instead.
> > > > > > >
> > > > > > > I just wonder in this day and age when we're noting a GCC version and
> > > > > > > generating warnings based on the GCC warning, do we still need to
> > > > > > > compile as armv5 any more? It seems like "to allow more compilers to
> > > > > > > work" would not really apply any more we're trying to push newer
> > > > > > > versions of GCC.
> > > > > >
> > > > > > So, these are historical notes that really should be corrected.
> > > > > > Initially, when ARMv7 support was added, most people did not have
> > > > > > compilers new enough to recognize -march=armv7-a. We still even support
> > > > > > them, see the logic in arch/arm/Makefile around CONFIG_CPU_V7 (the
> > > > > > options are any sort of modern gcc, llvm, ancient gcc). When we move to
> > > > > > gcc-6 being the oldest gcc supported for ARM we can fixup those comments
> > > > > > and logic as well.
> > > > >
> > > > > My understanding is that we've made the requirement for GCC 6 now. I
> > > > > just pushed a patch which enabled mtune=armv7-a-generic when
> > > > > CONFIG_CPU_V7A is enabled and that seems to shrink the code a bit on
> > > > > omap3_logic. Does it make sense to remove the , -march=armv5 from
> > > > > arch/arm/Makefile and or the plain -march=armv7 since CONFIG_CPU_V7A
> > > > > implies armv-a?
> > > >
> > > > Yes, we can probably at least drop the v5 portion of that logic. As
> > > > noted in the other patch, LLVM and GCC disagree on "armv7" vs "armv7-a"
> > > > as being the appropriate name, or at least did in the past.
> > >
> > > Can you point me to an example of how to tune armv7 for both GCC and
> > > LLVM? I was looking around and I'm not seeing an obvious syntax.
> > > I'll do a 2-part patch. One to remove the armv5, and one to enable
> > > the armv7 optimization.
> >
> > In arch/arm/Makefile:
> > arch-$(CONFIG_CPU_V7A) =$(call cc-option, -march=armv7-a, \
> > $(call cc-option, -march=armv7, -march=armv5))
> >
> > this works in both cases. And doc/README.clang is correct on how to
> > build with LLVM on ARM.
>
> I reset my head to origin/master, but using the following, I am not
> able to build omap3_logic with clang on Ubuntu 18.04:
>
> make HOSTCC=clang omap3_logic
> make HOSTCC=clang CROSS_COMPILE=arm-linux-gnueabi- \
> CC="clang -target arm-linux-gnueabi" -j8
>
> arch/arm/lib/memset.S:43:2: error: predicated instructions must be in IT block
> stmiage ip!, {r1, r3, r8, lr} @ 64 bytes at a time.
> ^
> arch/arm/lib/memset.S:44:2: error: predicated instructions must be in IT block
> stmiage ip!, {r1, r3, r8, lr}
> ^
> arch/arm/lib/memset.S:45:2: error: predicated instructions must be in IT block
> stmiage ip!, {r1, r3, r8, lr}
> ^
> arch/arm/lib/memset.S:46:2: error: predicated instructions must be in IT block
> stmiage ip!, {r1, r3, r8, lr}
> ^
> arch/arm/lib/memset.S:48:2: error: predicated instructions must be in IT block
> ldmfdeq sp!, {r8, pc} @ Now <64 bytes to go.
> ^
> arch/arm/lib/memset.S:53:2: error: predicated instructions must be in IT block
> stmiane ip!, {r1, r3, r8, lr}
> ^
> arch/arm/lib/memset.S:54:2: error: predicated instructions must be in IT block
> stmiane ip!, {r1, r3, r8, lr}
> ^
> arch/arm/lib/memset.S:56:2: error: predicated instructions must be in IT block
> stmiane ip!, {r1, r3, r8, lr}
> ^
> arch/arm/lib/memset.S:103:2: error: predicated instructions must be in IT block
> stmiane ip!, {r1, r3}
> ^
> arch/arm/lib/memset.S:105:2: error: predicated instructions must be in IT block
> strne r1, [ip], #4
> ^
> arch/arm/lib/memset.S:111:2: error: predicated instructions must be in IT block
> strbne r1, [ip], #1
> ^
> arch/arm/lib/memset.S:112:2: error: predicated instructions must be in IT block
> strbne r1, [ip], #1
> ^
> arch/arm/lib/memset.S:114:2: error: predicated instructions must be in IT block
> strbne r1, [ip], #1
> ^
> arch/arm/lib/memset.S:120:2: error: predicated instructions must be in IT block
> strblt r1, [ip], #1 @ 1
> ^
> arch/arm/lib/memset.S:121:2: error: predicated instructions must be in IT block
> strble r1, [ip], #1 @ 1
> ^
> scripts/Makefile.build:314: recipe for target 'arch/arm/lib/memset.o' failed
> make[1]: *** [arch/arm/lib/memset.o] Error 1
> Makefile:1373: recipe for target 'arch/arm/lib' failed
> make: *** [arch/arm/lib] Error 2
> aford at aford-IdeaCentre-A730:~/src/u-boot$
>
> If you have any suggestions, I'm open to try them. I have never used
> clang before, but I would really like to get these armv7a
> optimizations in to make SPL smaller.
I guess I forgot that you will need to turn off ARCH_MEMCPY/ARCH_MEMSET
and EFI support for clang. That said, since you're just making sure the
right options are being passed in, in both cases, you can also just use
V=1 and just build common/main.o or something like that.
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20180804/02077417/attachment.sig>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] armv5 and OMAP3 Question
2018-08-04 11:44 ` Tom Rini
@ 2018-08-04 14:39 ` Adam Ford
2018-08-04 15:50 ` Tom Rini
0 siblings, 1 reply; 10+ messages in thread
From: Adam Ford @ 2018-08-04 14:39 UTC (permalink / raw)
To: u-boot
On Sat, Aug 4, 2018 at 6:44 AM Tom Rini <trini@konsulko.com> wrote:
>
> On Sat, Aug 04, 2018 at 05:32:18AM -0500, Adam Ford wrote:
> > On Fri, Aug 3, 2018 at 10:20 AM Tom Rini <trini@konsulko.com> wrote:
> > >
> > > On Fri, Aug 03, 2018 at 10:02:17AM -0500, Adam Ford wrote:
> > > > On Fri, Aug 3, 2018 at 10:00 AM Tom Rini <trini@konsulko.com> wrote:
> > > > >
> > > > > On Fri, Aug 03, 2018 at 05:43:46AM -0500, Adam Ford wrote:
> > > > > > On Tue, Jul 25, 2017 at 11:08 AM Tom Rini <trini@konsulko.com> wrote:
> > > > > > >
> > > > > > > On Tue, Jul 25, 2017 at 08:14:57AM -0500, Adam Ford wrote:
> > > > > > >
> > > > > > > > The readme file for OMAP indicates that we compile using armv5 to "to
> > > > > > > > allow more compilers to work"
> > > > > > > >
> > > > > > > > We have our arch/arm/mach-omap2/omap3/lowlevel_init.S file also noting
> > > > > > > > some special assembly insturctions becuse we use armv5. The barriers
> > > > > > > > defined also indicate we're using CP15 instead of the separate barrier
> > > > > > > > instructions for armv7 because we're using armv5 instead.
> > > > > > > >
> > > > > > > > I just wonder in this day and age when we're noting a GCC version and
> > > > > > > > generating warnings based on the GCC warning, do we still need to
> > > > > > > > compile as armv5 any more? It seems like "to allow more compilers to
> > > > > > > > work" would not really apply any more we're trying to push newer
> > > > > > > > versions of GCC.
> > > > > > >
> > > > > > > So, these are historical notes that really should be corrected.
> > > > > > > Initially, when ARMv7 support was added, most people did not have
> > > > > > > compilers new enough to recognize -march=armv7-a. We still even support
> > > > > > > them, see the logic in arch/arm/Makefile around CONFIG_CPU_V7 (the
> > > > > > > options are any sort of modern gcc, llvm, ancient gcc). When we move to
> > > > > > > gcc-6 being the oldest gcc supported for ARM we can fixup those comments
> > > > > > > and logic as well.
> > > > > >
> > > > > > My understanding is that we've made the requirement for GCC 6 now. I
> > > > > > just pushed a patch which enabled mtune=armv7-a-generic when
> > > > > > CONFIG_CPU_V7A is enabled and that seems to shrink the code a bit on
> > > > > > omap3_logic. Does it make sense to remove the , -march=armv5 from
> > > > > > arch/arm/Makefile and or the plain -march=armv7 since CONFIG_CPU_V7A
> > > > > > implies armv-a?
> > > > >
> > > > > Yes, we can probably at least drop the v5 portion of that logic. As
> > > > > noted in the other patch, LLVM and GCC disagree on "armv7" vs "armv7-a"
> > > > > as being the appropriate name, or at least did in the past.
> > > >
> > > > Can you point me to an example of how to tune armv7 for both GCC and
> > > > LLVM? I was looking around and I'm not seeing an obvious syntax.
> > > > I'll do a 2-part patch. One to remove the armv5, and one to enable
> > > > the armv7 optimization.
> > >
> > > In arch/arm/Makefile:
> > > arch-$(CONFIG_CPU_V7A) =$(call cc-option, -march=armv7-a, \
> > > $(call cc-option, -march=armv7, -march=armv5))
> > >
> > > this works in both cases. And doc/README.clang is correct on how to
> > > build with LLVM on ARM.
> >
> > I reset my head to origin/master, but using the following, I am not
> > able to build omap3_logic with clang on Ubuntu 18.04:
> >
> > make HOSTCC=clang omap3_logic
> > make HOSTCC=clang CROSS_COMPILE=arm-linux-gnueabi- \
> > CC="clang -target arm-linux-gnueabi" -j8
> >
> > arch/arm/lib/memset.S:43:2: error: predicated instructions must be in IT block
> > stmiage ip!, {r1, r3, r8, lr} @ 64 bytes at a time.
> > ^
> > arch/arm/lib/memset.S:44:2: error: predicated instructions must be in IT block
> > stmiage ip!, {r1, r3, r8, lr}
> > ^
> > arch/arm/lib/memset.S:45:2: error: predicated instructions must be in IT block
> > stmiage ip!, {r1, r3, r8, lr}
> > ^
> > arch/arm/lib/memset.S:46:2: error: predicated instructions must be in IT block
> > stmiage ip!, {r1, r3, r8, lr}
> > ^
> > arch/arm/lib/memset.S:48:2: error: predicated instructions must be in IT block
> > ldmfdeq sp!, {r8, pc} @ Now <64 bytes to go.
> > ^
> > arch/arm/lib/memset.S:53:2: error: predicated instructions must be in IT block
> > stmiane ip!, {r1, r3, r8, lr}
> > ^
> > arch/arm/lib/memset.S:54:2: error: predicated instructions must be in IT block
> > stmiane ip!, {r1, r3, r8, lr}
> > ^
> > arch/arm/lib/memset.S:56:2: error: predicated instructions must be in IT block
> > stmiane ip!, {r1, r3, r8, lr}
> > ^
> > arch/arm/lib/memset.S:103:2: error: predicated instructions must be in IT block
> > stmiane ip!, {r1, r3}
> > ^
> > arch/arm/lib/memset.S:105:2: error: predicated instructions must be in IT block
> > strne r1, [ip], #4
> > ^
> > arch/arm/lib/memset.S:111:2: error: predicated instructions must be in IT block
> > strbne r1, [ip], #1
> > ^
> > arch/arm/lib/memset.S:112:2: error: predicated instructions must be in IT block
> > strbne r1, [ip], #1
> > ^
> > arch/arm/lib/memset.S:114:2: error: predicated instructions must be in IT block
> > strbne r1, [ip], #1
> > ^
> > arch/arm/lib/memset.S:120:2: error: predicated instructions must be in IT block
> > strblt r1, [ip], #1 @ 1
> > ^
> > arch/arm/lib/memset.S:121:2: error: predicated instructions must be in IT block
> > strble r1, [ip], #1 @ 1
> > ^
> > scripts/Makefile.build:314: recipe for target 'arch/arm/lib/memset.o' failed
> > make[1]: *** [arch/arm/lib/memset.o] Error 1
> > Makefile:1373: recipe for target 'arch/arm/lib' failed
> > make: *** [arch/arm/lib] Error 2
> > aford at aford-IdeaCentre-A730:~/src/u-boot$
> >
> > If you have any suggestions, I'm open to try them. I have never used
> > clang before, but I would really like to get these armv7a
> > optimizations in to make SPL smaller.
>
> I guess I forgot that you will need to turn off ARCH_MEMCPY/ARCH_MEMSET
> and EFI support for clang. That said, since you're just making sure the
> right options are being passed in, in both cases, you can also just use
> V=1 and just build common/main.o or something like that.
I am not getting compiler errors due to the-mtune=generic-armv7-a on
clang, or at least the clang version that comes with Ubuntu 18.04
clang -target arm-none-eabi -Wp,-MD,common/.main.o.d -nostdinc
-isystem /usr/lib/llvm-6.0/lib/clang/6.0.0/include -Iinclude
-I./arch/arm/include -include ./include/linux/kconfig.h -D__KERNEL__
-D__UBOOT__ -Qunused-arguments -Wall -Wstrict-prototypes
-Wno-format-security -fno-builtin -ffreestanding -std=gnu11
-fshort-wchar -Os -fno-stack-protector -g -Wno-format-nonliteral
-Wno-format-invalid-specifier -Wno-gnu -Wno-address-of-packed-member
-Werror=date-time -D__ARM__ -marm -mabi=aapcs-linux -fno-pic
-mno-unaligned-access -ffunction-sections -fdata-sections -fno-common
-ffixed-r9 -msoft-float -mno-movt -pipe -march=armv7-a
-D__LINUX_ARM_ARCH__=7 -mtune=generic-armv7-a
-I./arch/arm/mach-omap2/include -D"KBUILD_STR(s)=#s"
-D"KBUILD_BASENAME=KBUILD_STR(main)"
-D"KBUILD_MODNAME=KBUILD_STR(main)" -c -o common/main.o common/main.c
aford at aford-IdeaCentre-A730:~/src/u-boot$ arm-linux-gnueabi-size common/main.o
text data bss dec hex filename
181 0 0 181 b5 common/main.o
If this is good enough for you, I'd like to push a patch that removes
the armv5 reference in the Makefile, adds mtune to the Makefile and
removes the armv5 reference in doc/README.omap3.
Stock
text data bss dec hex filename
50910 429 67580 118919 1d087 spl/u-boot-spl
540713 22700 327072 890485 d9675 u-boot
Without Armv5
text data bss dec hex filename
50916 429 67580 118925 1d08d spl/u-boot-spl
540719 22700 327064 890483 d9673 u-boot
-mtune=generic-armv7-a
text data bss dec hex filename
50932 429 67580 118941 1d09d spl/u-boot-spl
540519 22700 327080 890299 d95bb u-boot
SPL grew a little, but U-Boot seems to shrink (with GCC)
I don't know much about the omap3 assembly code found in
Lowlevel_init.S, but I was hoping someone might know a better way to
optimize (or eliminate) it.
adam
>
> --
> Tom
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] armv5 and OMAP3 Question
2018-08-04 14:39 ` Adam Ford
@ 2018-08-04 15:50 ` Tom Rini
0 siblings, 0 replies; 10+ messages in thread
From: Tom Rini @ 2018-08-04 15:50 UTC (permalink / raw)
To: u-boot
On Sat, Aug 04, 2018 at 09:39:12AM -0500, Adam Ford wrote:
> On Sat, Aug 4, 2018 at 6:44 AM Tom Rini <trini@konsulko.com> wrote:
> >
> > On Sat, Aug 04, 2018 at 05:32:18AM -0500, Adam Ford wrote:
> > > On Fri, Aug 3, 2018 at 10:20 AM Tom Rini <trini@konsulko.com> wrote:
> > > >
> > > > On Fri, Aug 03, 2018 at 10:02:17AM -0500, Adam Ford wrote:
> > > > > On Fri, Aug 3, 2018 at 10:00 AM Tom Rini <trini@konsulko.com> wrote:
> > > > > >
> > > > > > On Fri, Aug 03, 2018 at 05:43:46AM -0500, Adam Ford wrote:
> > > > > > > On Tue, Jul 25, 2017 at 11:08 AM Tom Rini <trini@konsulko.com> wrote:
> > > > > > > >
> > > > > > > > On Tue, Jul 25, 2017 at 08:14:57AM -0500, Adam Ford wrote:
> > > > > > > >
> > > > > > > > > The readme file for OMAP indicates that we compile using armv5 to "to
> > > > > > > > > allow more compilers to work"
> > > > > > > > >
> > > > > > > > > We have our arch/arm/mach-omap2/omap3/lowlevel_init.S file also noting
> > > > > > > > > some special assembly insturctions becuse we use armv5. The barriers
> > > > > > > > > defined also indicate we're using CP15 instead of the separate barrier
> > > > > > > > > instructions for armv7 because we're using armv5 instead.
> > > > > > > > >
> > > > > > > > > I just wonder in this day and age when we're noting a GCC version and
> > > > > > > > > generating warnings based on the GCC warning, do we still need to
> > > > > > > > > compile as armv5 any more? It seems like "to allow more compilers to
> > > > > > > > > work" would not really apply any more we're trying to push newer
> > > > > > > > > versions of GCC.
> > > > > > > >
> > > > > > > > So, these are historical notes that really should be corrected.
> > > > > > > > Initially, when ARMv7 support was added, most people did not have
> > > > > > > > compilers new enough to recognize -march=armv7-a. We still even support
> > > > > > > > them, see the logic in arch/arm/Makefile around CONFIG_CPU_V7 (the
> > > > > > > > options are any sort of modern gcc, llvm, ancient gcc). When we move to
> > > > > > > > gcc-6 being the oldest gcc supported for ARM we can fixup those comments
> > > > > > > > and logic as well.
> > > > > > >
> > > > > > > My understanding is that we've made the requirement for GCC 6 now. I
> > > > > > > just pushed a patch which enabled mtune=armv7-a-generic when
> > > > > > > CONFIG_CPU_V7A is enabled and that seems to shrink the code a bit on
> > > > > > > omap3_logic. Does it make sense to remove the , -march=armv5 from
> > > > > > > arch/arm/Makefile and or the plain -march=armv7 since CONFIG_CPU_V7A
> > > > > > > implies armv-a?
> > > > > >
> > > > > > Yes, we can probably at least drop the v5 portion of that logic. As
> > > > > > noted in the other patch, LLVM and GCC disagree on "armv7" vs "armv7-a"
> > > > > > as being the appropriate name, or at least did in the past.
> > > > >
> > > > > Can you point me to an example of how to tune armv7 for both GCC and
> > > > > LLVM? I was looking around and I'm not seeing an obvious syntax.
> > > > > I'll do a 2-part patch. One to remove the armv5, and one to enable
> > > > > the armv7 optimization.
> > > >
> > > > In arch/arm/Makefile:
> > > > arch-$(CONFIG_CPU_V7A) =$(call cc-option, -march=armv7-a, \
> > > > $(call cc-option, -march=armv7, -march=armv5))
> > > >
> > > > this works in both cases. And doc/README.clang is correct on how to
> > > > build with LLVM on ARM.
> > >
> > > I reset my head to origin/master, but using the following, I am not
> > > able to build omap3_logic with clang on Ubuntu 18.04:
> > >
> > > make HOSTCC=clang omap3_logic
> > > make HOSTCC=clang CROSS_COMPILE=arm-linux-gnueabi- \
> > > CC="clang -target arm-linux-gnueabi" -j8
> > >
> > > arch/arm/lib/memset.S:43:2: error: predicated instructions must be in IT block
> > > stmiage ip!, {r1, r3, r8, lr} @ 64 bytes at a time.
> > > ^
> > > arch/arm/lib/memset.S:44:2: error: predicated instructions must be in IT block
> > > stmiage ip!, {r1, r3, r8, lr}
> > > ^
> > > arch/arm/lib/memset.S:45:2: error: predicated instructions must be in IT block
> > > stmiage ip!, {r1, r3, r8, lr}
> > > ^
> > > arch/arm/lib/memset.S:46:2: error: predicated instructions must be in IT block
> > > stmiage ip!, {r1, r3, r8, lr}
> > > ^
> > > arch/arm/lib/memset.S:48:2: error: predicated instructions must be in IT block
> > > ldmfdeq sp!, {r8, pc} @ Now <64 bytes to go.
> > > ^
> > > arch/arm/lib/memset.S:53:2: error: predicated instructions must be in IT block
> > > stmiane ip!, {r1, r3, r8, lr}
> > > ^
> > > arch/arm/lib/memset.S:54:2: error: predicated instructions must be in IT block
> > > stmiane ip!, {r1, r3, r8, lr}
> > > ^
> > > arch/arm/lib/memset.S:56:2: error: predicated instructions must be in IT block
> > > stmiane ip!, {r1, r3, r8, lr}
> > > ^
> > > arch/arm/lib/memset.S:103:2: error: predicated instructions must be in IT block
> > > stmiane ip!, {r1, r3}
> > > ^
> > > arch/arm/lib/memset.S:105:2: error: predicated instructions must be in IT block
> > > strne r1, [ip], #4
> > > ^
> > > arch/arm/lib/memset.S:111:2: error: predicated instructions must be in IT block
> > > strbne r1, [ip], #1
> > > ^
> > > arch/arm/lib/memset.S:112:2: error: predicated instructions must be in IT block
> > > strbne r1, [ip], #1
> > > ^
> > > arch/arm/lib/memset.S:114:2: error: predicated instructions must be in IT block
> > > strbne r1, [ip], #1
> > > ^
> > > arch/arm/lib/memset.S:120:2: error: predicated instructions must be in IT block
> > > strblt r1, [ip], #1 @ 1
> > > ^
> > > arch/arm/lib/memset.S:121:2: error: predicated instructions must be in IT block
> > > strble r1, [ip], #1 @ 1
> > > ^
> > > scripts/Makefile.build:314: recipe for target 'arch/arm/lib/memset.o' failed
> > > make[1]: *** [arch/arm/lib/memset.o] Error 1
> > > Makefile:1373: recipe for target 'arch/arm/lib' failed
> > > make: *** [arch/arm/lib] Error 2
> > > aford at aford-IdeaCentre-A730:~/src/u-boot$
> > >
> > > If you have any suggestions, I'm open to try them. I have never used
> > > clang before, but I would really like to get these armv7a
> > > optimizations in to make SPL smaller.
> >
> > I guess I forgot that you will need to turn off ARCH_MEMCPY/ARCH_MEMSET
> > and EFI support for clang. That said, since you're just making sure the
> > right options are being passed in, in both cases, you can also just use
> > V=1 and just build common/main.o or something like that.
>
> I am not getting compiler errors due to the-mtune=generic-armv7-a on
> clang, or at least the clang version that comes with Ubuntu 18.04
>
> clang -target arm-none-eabi -Wp,-MD,common/.main.o.d -nostdinc
> -isystem /usr/lib/llvm-6.0/lib/clang/6.0.0/include -Iinclude
> -I./arch/arm/include -include ./include/linux/kconfig.h -D__KERNEL__
> -D__UBOOT__ -Qunused-arguments -Wall -Wstrict-prototypes
> -Wno-format-security -fno-builtin -ffreestanding -std=gnu11
> -fshort-wchar -Os -fno-stack-protector -g -Wno-format-nonliteral
> -Wno-format-invalid-specifier -Wno-gnu -Wno-address-of-packed-member
> -Werror=date-time -D__ARM__ -marm -mabi=aapcs-linux -fno-pic
> -mno-unaligned-access -ffunction-sections -fdata-sections -fno-common
> -ffixed-r9 -msoft-float -mno-movt -pipe -march=armv7-a
> -D__LINUX_ARM_ARCH__=7 -mtune=generic-armv7-a
> -I./arch/arm/mach-omap2/include -D"KBUILD_STR(s)=#s"
> -D"KBUILD_BASENAME=KBUILD_STR(main)"
> -D"KBUILD_MODNAME=KBUILD_STR(main)" -c -o common/main.o common/main.c
>
>
> aford at aford-IdeaCentre-A730:~/src/u-boot$ arm-linux-gnueabi-size common/main.o
> text data bss dec hex filename
> 181 0 0 181 b5 common/main.o
>
> If this is good enough for you, I'd like to push a patch that removes
> the armv5 reference in the Makefile, adds mtune to the Makefile and
> removes the armv5 reference in doc/README.omap3.
>
> Stock
> text data bss dec hex filename
> 50910 429 67580 118919 1d087 spl/u-boot-spl
> 540713 22700 327072 890485 d9675 u-boot
>
> Without Armv5
> text data bss dec hex filename
> 50916 429 67580 118925 1d08d spl/u-boot-spl
> 540719 22700 327064 890483 d9673 u-boot
>
> -mtune=generic-armv7-a
> text data bss dec hex filename
> 50932 429 67580 118941 1d09d spl/u-boot-spl
> 540519 22700 327080 890299 d95bb u-boot
>
> SPL grew a little, but U-Boot seems to shrink (with GCC)
>
> I don't know much about the omap3 assembly code found in
> Lowlevel_init.S, but I was hoping someone might know a better way to
> optimize (or eliminate) it.
Sounds good, thanks for digging into this!
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20180804/a45eae39/attachment.sig>
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2018-08-04 15:50 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-07-25 13:14 [U-Boot] armv5 and OMAP3 Question Adam Ford
2017-07-25 16:09 ` Tom Rini
2018-08-03 10:43 ` Adam Ford
2018-08-03 14:59 ` Tom Rini
2018-08-03 15:02 ` Adam Ford
2018-08-03 15:20 ` Tom Rini
2018-08-04 10:32 ` Adam Ford
2018-08-04 11:44 ` Tom Rini
2018-08-04 14:39 ` Adam Ford
2018-08-04 15:50 ` Tom Rini
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox