linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* 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).