* Broken asm/div64.h macro
@ 2002-01-26 16:37 Troy Benjegerdes
2002-01-26 17:27 ` Geert Uytterhoeven
` (2 more replies)
0 siblings, 3 replies; 13+ messages in thread
From: Troy Benjegerdes @ 2002-01-26 16:37 UTC (permalink / raw)
To: linuxppc-dev
Our div64.h macro is quite broken, and causes printk to not be able to do
a long long format.
Is there a 'fast' generic C algorithm we can replace it with, instead of
mucking with ASM?
--
Troy Benjegerdes | master of mispeeling | 'da hozer' | hozer@drgw.net
-----"If this message isn't misspelled, I didn't write it" -- Me -----
"Why do musicians compose symphonies and poets write poems? They do it
because life wouldn't have any meaning for them if they didn't. That's
why I draw cartoons. It's my life." -- Charles Schulz
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Broken asm/div64.h macro
2002-01-26 16:37 Broken asm/div64.h macro Troy Benjegerdes
@ 2002-01-26 17:27 ` Geert Uytterhoeven
2002-01-26 22:30 ` Gabriel Paubert
2002-01-26 22:51 ` Momchil Velikov
2 siblings, 0 replies; 13+ messages in thread
From: Geert Uytterhoeven @ 2002-01-26 17:27 UTC (permalink / raw)
To: Troy Benjegerdes; +Cc: Linux/PPC Development
On Sat, 26 Jan 2002, Troy Benjegerdes wrote:
> Our div64.h macro is quite broken, and causes printk to not be able to do
> a long long format.
>
> Is there a 'fast' generic C algorithm we can replace it with, instead of
> mucking with ASM?
Usually you can copy the asm version from the gcc sources (libgcc).
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Broken asm/div64.h macro
2002-01-26 16:37 Broken asm/div64.h macro Troy Benjegerdes
2002-01-26 17:27 ` Geert Uytterhoeven
@ 2002-01-26 22:30 ` Gabriel Paubert
2002-01-26 22:51 ` Momchil Velikov
2 siblings, 0 replies; 13+ messages in thread
From: Gabriel Paubert @ 2002-01-26 22:30 UTC (permalink / raw)
To: Troy Benjegerdes; +Cc: linuxppc-dev
On Sat, 26 Jan 2002, Troy Benjegerdes wrote:
>
> Our div64.h macro is quite broken, and causes printk to not be able to do
> a long long format.
>
> Is there a 'fast' generic C algorithm we can replace it with, instead of
> mucking with ASM?
If depends on what you want from do_div. If you guarantee that in
do_div(n,base) base will be constant it's fairly easy (provided GCC does
proper constant propagation). I also have the expanded code for 10
explicitly somewhere in prepboot, I just wrote it for fun for my own
printb(==printk for bootloader). I also wrote a generic 64 by 32 divide
for the x86 ROM BIOS emulator (stupid looping, slow but ok for this, I
short-circuit it for 32/32 divides which are the most common).
On a somewhat relared topic, there is also an inverse estimator to use
mulhwu somewhere in the time code (mulhwu_scale_factor IIRC what I
wrote:-)), but it's deliberately compact and slow.
Which flavour would you prefer ? (The one in do_div is only for 64 bit
targets, someone clearly goofed on that one).
Regards,
Gabriel.
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Broken asm/div64.h macro
2002-01-26 16:37 Broken asm/div64.h macro Troy Benjegerdes
2002-01-26 17:27 ` Geert Uytterhoeven
2002-01-26 22:30 ` Gabriel Paubert
@ 2002-01-26 22:51 ` Momchil Velikov
2002-01-27 17:49 ` Troy Benjegerdes
2 siblings, 1 reply; 13+ messages in thread
From: Momchil Velikov @ 2002-01-26 22:51 UTC (permalink / raw)
To: Troy Benjegerdes; +Cc: linuxppc-dev
>>>>> "Troy" == Troy Benjegerdes <hozer@drgw.net> writes:
Troy> Our div64.h macro is quite broken, and causes printk to not be able to do
Troy> a long long format.
Troy> Is there a 'fast' generic C algorithm we can replace it with, instead of
Troy> mucking with ASM?
Hmm, I sent a patchlet to lkml with Subject: [PATCH] 64-bit divide tweaks.
Doesn't it work for you ?
Regards,
-velco
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Broken asm/div64.h macro
2002-01-26 22:51 ` Momchil Velikov
@ 2002-01-27 17:49 ` Troy Benjegerdes
2002-01-28 1:38 ` Kaoru Fukui
0 siblings, 1 reply; 13+ messages in thread
From: Troy Benjegerdes @ 2002-01-27 17:49 UTC (permalink / raw)
To: Momchil Velikov; +Cc: linuxppc-dev
On Sun, Jan 27, 2002 at 12:51:42AM +0200, Momchil Velikov wrote:
> >>>>> "Troy" == Troy Benjegerdes <hozer@drgw.net> writes:
>
> Troy> Our div64.h macro is quite broken, and causes printk to not be able to do
> Troy> a long long format.
>
> Troy> Is there a 'fast' generic C algorithm we can replace it with, instead of
> Troy> mucking with ASM?
>
> Hmm, I sent a patchlet to lkml with Subject: [PATCH] 64-bit divide tweaks.
>
> Doesn't it work for you ?
Didn't seee it..
Did you actually try compiling PPC this way??
vsprintf.o(.text+0x494): undefined reference to `__umoddi3'
vsprintf.o(.text+0x494): relocation truncated to fit: R_PPC_REL24
__umoddi3
vsprintf.o(.text+0x4ac): undefined reference to `__udivdi3'
vsprintf.o(.text+0x4ac): relocation truncated to fit: R_PPC_REL24
__udivdi3
--
Troy Benjegerdes | master of mispeeling | 'da hozer' | hozer@drgw.net
-----"If this message isn't misspelled, I didn't write it" -- Me -----
"Why do musicians compose symphonies and poets write poems? They do it
because life wouldn't have any meaning for them if they didn't. That's
why I draw cartoons. It's my life." -- Charles Schulz
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Broken asm/div64.h macro
2002-01-27 17:49 ` Troy Benjegerdes
@ 2002-01-28 1:38 ` Kaoru Fukui
2002-01-28 8:16 ` Momchil Velikov
0 siblings, 1 reply; 13+ messages in thread
From: Kaoru Fukui @ 2002-01-28 1:38 UTC (permalink / raw)
To: hozer; +Cc: linuxppc-dev
On 27 Jan, Troy Benjegerdes wrote:
> Did you actually try compiling PPC this way??
>
> vsprintf.o(.text+0x494): undefined reference to `__umoddi3'
> vsprintf.o(.text+0x494): relocation truncated to fit: R_PPC_REL24
> __umoddi3
> vsprintf.o(.text+0x4ac): undefined reference to `__udivdi3'
> vsprintf.o(.text+0x4ac): relocation truncated to fit: R_PPC_REL24
> __udivdi3
libgcc.a has those libraries.
Kaoru
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Broken asm/div64.h macro
2002-01-28 1:38 ` Kaoru Fukui
@ 2002-01-28 8:16 ` Momchil Velikov
2002-01-28 15:28 ` Tom Rini
0 siblings, 1 reply; 13+ messages in thread
From: Momchil Velikov @ 2002-01-28 8:16 UTC (permalink / raw)
To: Kaoru Fukui; +Cc: hozer, linuxppc-dev
>>>>> "Kaoru" == Kaoru Fukui <k_fukui@highway.ne.jp> writes:
Kaoru> On 27 Jan, Troy Benjegerdes wrote:
>> Did you actually try compiling PPC this way??
>>
>> vsprintf.o(.text+0x494): undefined reference to `__umoddi3'
>> vsprintf.o(.text+0x494): relocation truncated to fit: R_PPC_REL24
>> __umoddi3
>> vsprintf.o(.text+0x4ac): undefined reference to `__udivdi3'
>> vsprintf.o(.text+0x4ac): relocation truncated to fit: R_PPC_REL24
>> __udivdi3
Kaoru> libgcc.a has those libraries.
Yeah, but we don't link with libgcc.a. (which I forgot).
I'll do something along the lines of
#ifndef __HAVE_ARCH_DO_DIV
...
#endif
... soon.
Regards,
-velco
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Broken asm/div64.h macro
2002-01-28 8:16 ` Momchil Velikov
@ 2002-01-28 15:28 ` Tom Rini
2002-01-28 19:45 ` Geert Uytterhoeven
0 siblings, 1 reply; 13+ messages in thread
From: Tom Rini @ 2002-01-28 15:28 UTC (permalink / raw)
To: Momchil Velikov; +Cc: Kaoru Fukui, hozer, linuxppc-dev
On Mon, Jan 28, 2002 at 10:16:28AM +0200, Momchil Velikov wrote:
>
> >>>>> "Kaoru" == Kaoru Fukui <k_fukui@highway.ne.jp> writes:
>
> Kaoru> On 27 Jan, Troy Benjegerdes wrote:
> >> Did you actually try compiling PPC this way??
> >>
> >> vsprintf.o(.text+0x494): undefined reference to `__umoddi3'
> >> vsprintf.o(.text+0x494): relocation truncated to fit: R_PPC_REL24
> >> __umoddi3
> >> vsprintf.o(.text+0x4ac): undefined reference to `__udivdi3'
> >> vsprintf.o(.text+0x4ac): relocation truncated to fit: R_PPC_REL24
> >> __udivdi3
>
> Kaoru> libgcc.a has those libraries.
>
> Yeah, but we don't link with libgcc.a. (which I forgot).
Er, but isn't it (sort-of) considered a bug if the kernel links with
libgcc.a ? I think the consensious on l-k would be yes.
--
Tom Rini (TR1265)
http://gate.crashing.org/~trini/
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Broken asm/div64.h macro
2002-01-28 15:28 ` Tom Rini
@ 2002-01-28 19:45 ` Geert Uytterhoeven
2002-01-29 0:37 ` Tom Rini
0 siblings, 1 reply; 13+ messages in thread
From: Geert Uytterhoeven @ 2002-01-28 19:45 UTC (permalink / raw)
To: Tom Rini; +Cc: Momchil Velikov, Kaoru Fukui, hozer, Linux/PPC Development
On Mon, 28 Jan 2002, Tom Rini wrote:
> On Mon, Jan 28, 2002 at 10:16:28AM +0200, Momchil Velikov wrote:
> > >>>>> "Kaoru" == Kaoru Fukui <k_fukui@highway.ne.jp> writes:
> >
> > Kaoru> On 27 Jan, Troy Benjegerdes wrote:
> > >> Did you actually try compiling PPC this way??
> > >>
> > >> vsprintf.o(.text+0x494): undefined reference to `__umoddi3'
> > >> vsprintf.o(.text+0x494): relocation truncated to fit: R_PPC_REL24
> > >> __umoddi3
> > >> vsprintf.o(.text+0x4ac): undefined reference to `__udivdi3'
> > >> vsprintf.o(.text+0x4ac): relocation truncated to fit: R_PPC_REL24
> > >> __udivdi3
> >
> > Kaoru> libgcc.a has those libraries.
> >
> > Yeah, but we don't link with libgcc.a. (which I forgot).
>
> Er, but isn't it (sort-of) considered a bug if the kernel links with
> libgcc.a ? I think the consensious on l-k would be yes.
So you copy the code from the libgcc sources, cfr. arch/m68k/lib/.
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Broken asm/div64.h macro
2002-01-28 19:45 ` Geert Uytterhoeven
@ 2002-01-29 0:37 ` Tom Rini
2002-01-29 5:05 ` Kaoru Fukui
0 siblings, 1 reply; 13+ messages in thread
From: Tom Rini @ 2002-01-29 0:37 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: Momchil Velikov, Kaoru Fukui, hozer, Linux/PPC Development
On Mon, Jan 28, 2002 at 08:45:31PM +0100, Geert Uytterhoeven wrote:
> On Mon, 28 Jan 2002, Tom Rini wrote:
> > On Mon, Jan 28, 2002 at 10:16:28AM +0200, Momchil Velikov wrote:
> > > >>>>> "Kaoru" == Kaoru Fukui <k_fukui@highway.ne.jp> writes:
> > >
> > > Kaoru> On 27 Jan, Troy Benjegerdes wrote:
> > > >> Did you actually try compiling PPC this way??
> > > >>
> > > >> vsprintf.o(.text+0x494): undefined reference to `__umoddi3'
> > > >> vsprintf.o(.text+0x494): relocation truncated to fit: R_PPC_REL24
> > > >> __umoddi3
> > > >> vsprintf.o(.text+0x4ac): undefined reference to `__udivdi3'
> > > >> vsprintf.o(.text+0x4ac): relocation truncated to fit: R_PPC_REL24
> > > >> __udivdi3
> > >
> > > Kaoru> libgcc.a has those libraries.
> > >
> > > Yeah, but we don't link with libgcc.a. (which I forgot).
> >
> > Er, but isn't it (sort-of) considered a bug if the kernel links with
> > libgcc.a ? I think the consensious on l-k would be yes.
>
> So you copy the code from the libgcc sources, cfr. arch/m68k/lib/.
Or optimize that, yes. But linking directly is a no-no. :)
--
Tom Rini (TR1265)
http://gate.crashing.org/~trini/
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Broken asm/div64.h macro
2002-01-29 0:37 ` Tom Rini
@ 2002-01-29 5:05 ` Kaoru Fukui
2002-01-29 6:26 ` Troy Benjegerdes
2002-01-29 15:01 ` Tom Rini
0 siblings, 2 replies; 13+ messages in thread
From: Kaoru Fukui @ 2002-01-29 5:05 UTC (permalink / raw)
To: trini; +Cc: linuxppc-dev, Momchil Velikov, hozer, geert
On 28 Jan, Tom Rini wrote:
> On Mon, Jan 28, 2002 at 08:45:31PM +0100, Geert Uytterhoeven wrote:
>> On Mon, 28 Jan 2002, Tom Rini wrote:
>> > On Mon, Jan 28, 2002 at 10:16:28AM +0200, Momchil Velikov wrote:
>> > > >>>>> "Kaoru" == Kaoru Fukui <k_fukui@highway.ne.jp> writes:
>> > >
>> > > Kaoru> On 27 Jan, Troy Benjegerdes wrote:
>> > > >> Did you actually try compiling PPC this way??
>> > > >>
>> > > >> vsprintf.o(.text+0x494): undefined reference to `__umoddi3'
>> > > >> vsprintf.o(.text+0x494): relocation truncated to fit: R_PPC_REL24
>> > > >> __umoddi3
>> > > >> vsprintf.o(.text+0x4ac): undefined reference to `__udivdi3'
>> > > >> vsprintf.o(.text+0x4ac): relocation truncated to fit: R_PPC_REL24
>> > > >> __udivdi3
>> > >
>> > > Kaoru> libgcc.a has those libraries.
>> > >
>> > > Yeah, but we don't link with libgcc.a. (which I forgot).
>> >
>> > Er, but isn't it (sort-of) considered a bug if the kernel links with
>> > libgcc.a ? I think the consensious on l-k would be yes.
>>
>> So you copy the code from the libgcc sources, cfr. arch/m68k/lib/.
>
> Or optimize that, yes. But linking directly is a no-no. :)
Yes,it's should has the source in the kernel.
However,the other archies(arm,cris,sh) use libgcc.a with static
link.
Those makefiles have
LIBGCC := $(shell $(CC) $(CFLAGS) --print-libgcc-file-name)
If it's static link, it is same result isn't it?
Kaoru
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Broken asm/div64.h macro
2002-01-29 5:05 ` Kaoru Fukui
@ 2002-01-29 6:26 ` Troy Benjegerdes
2002-01-29 15:01 ` Tom Rini
1 sibling, 0 replies; 13+ messages in thread
From: Troy Benjegerdes @ 2002-01-29 6:26 UTC (permalink / raw)
To: Kaoru Fukui; +Cc: trini, linuxppc-dev, Momchil Velikov, geert
> >> So you copy the code from the libgcc sources, cfr. arch/m68k/lib/.
> >
> > Or optimize that, yes. But linking directly is a no-no. :)
>
> Yes,it's should has the source in the kernel.
>
> However,the other archies(arm,cris,sh) use libgcc.a with static
> link.
> Those makefiles have
> LIBGCC := $(shell $(CC) $(CFLAGS) --print-libgcc-file-name)
>
> If it's static link, it is same result isn't it?
libgcc is a no-no.. it's big, and also encourages users to do silly
things like long long divides and multiples in kernel fast-paths.
I posted a patch to linux-kernel (subject was 64 bit divides, or
something), regarding a cleanup for the whole asm/div64.h macro mess.
--
Troy Benjegerdes | master of mispeeling | 'da hozer' | hozer@drgw.net
-----"If this message isn't misspelled, I didn't write it" -- Me -----
"Why do musicians compose symphonies and poets write poems? They do it
because life wouldn't have any meaning for them if they didn't. That's
why I draw cartoons. It's my life." -- Charles Schulz
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Broken asm/div64.h macro
2002-01-29 5:05 ` Kaoru Fukui
2002-01-29 6:26 ` Troy Benjegerdes
@ 2002-01-29 15:01 ` Tom Rini
1 sibling, 0 replies; 13+ messages in thread
From: Tom Rini @ 2002-01-29 15:01 UTC (permalink / raw)
To: Kaoru Fukui; +Cc: linuxppc-dev, Momchil Velikov, hozer, geert
On Tue, Jan 29, 2002 at 02:05:28PM +0900, Kaoru Fukui wrote:
> On 28 Jan, Tom Rini wrote:
> > On Mon, Jan 28, 2002 at 08:45:31PM +0100, Geert Uytterhoeven wrote:
> >> On Mon, 28 Jan 2002, Tom Rini wrote:
> >> > On Mon, Jan 28, 2002 at 10:16:28AM +0200, Momchil Velikov wrote:
> >> > > >>>>> "Kaoru" == Kaoru Fukui <k_fukui@highway.ne.jp> writes:
> >> > >
> >> > > Kaoru> On 27 Jan, Troy Benjegerdes wrote:
> >> > > >> Did you actually try compiling PPC this way??
> >> > > >>
> >> > > >> vsprintf.o(.text+0x494): undefined reference to `__umoddi3'
> >> > > >> vsprintf.o(.text+0x494): relocation truncated to fit: R_PPC_REL24
> >> > > >> __umoddi3
> >> > > >> vsprintf.o(.text+0x4ac): undefined reference to `__udivdi3'
> >> > > >> vsprintf.o(.text+0x4ac): relocation truncated to fit: R_PPC_REL24
> >> > > >> __udivdi3
> >> > >
> >> > > Kaoru> libgcc.a has those libraries.
> >> > >
> >> > > Yeah, but we don't link with libgcc.a. (which I forgot).
> >> >
> >> > Er, but isn't it (sort-of) considered a bug if the kernel links with
> >> > libgcc.a ? I think the consensious on l-k would be yes.
> >>
> >> So you copy the code from the libgcc sources, cfr. arch/m68k/lib/.
> >
> > Or optimize that, yes. But linking directly is a no-no. :)
>
> Yes,it's should has the source in the kernel.
>
> However,the other archies(arm,cris,sh) use libgcc.a with static
> link.
> Those makefiles have
> LIBGCC := $(shell $(CC) $(CFLAGS) --print-libgcc-file-name)
ARM doesn't do this anymore, since it required having the correct target
libgcc around. SH is planning on moving away from this in 2.5.x from
what I understand.
> If it's static link, it is same result isn't it?
Sort of. It depends on a certain libgcc, which is bad.
--
Tom Rini (TR1265)
http://gate.crashing.org/~trini/
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2002-01-29 15:01 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-01-26 16:37 Broken asm/div64.h macro Troy Benjegerdes
2002-01-26 17:27 ` Geert Uytterhoeven
2002-01-26 22:30 ` Gabriel Paubert
2002-01-26 22:51 ` Momchil Velikov
2002-01-27 17:49 ` Troy Benjegerdes
2002-01-28 1:38 ` Kaoru Fukui
2002-01-28 8:16 ` Momchil Velikov
2002-01-28 15:28 ` Tom Rini
2002-01-28 19:45 ` Geert Uytterhoeven
2002-01-29 0:37 ` Tom Rini
2002-01-29 5:05 ` Kaoru Fukui
2002-01-29 6:26 ` Troy Benjegerdes
2002-01-29 15:01 ` Tom Rini
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).