public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re : Re: printk and long long
@ 2004-02-11 14:08 sting sting
  2004-02-11 14:57 ` Example Code Was : " wdebruij
  0 siblings, 1 reply; 2+ messages in thread
From: sting sting @ 2004-02-11 14:08 UTC (permalink / raw)
  To: linux-kernel

Hello,
Thnks

>printk("%ld%ld",loff_t >> (sizeof(long) * 8), loff_t << sizeof(long) * 8 >>
>sizeof(long) * 8);

Well I had tried it but I got
the follwing compilation errors while trying to add that code:
invalid operands to binary >>
invalid operands to binary <<

I assume maybe it is a problems with the flags I use:
I use gcc 3.2.2 and the flags are:
O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common
-DMODULE -D__KERNEL__ -DNOKERNEL

regards,
sting

_________________________________________________________________
The new MSN 8: smart spam protection and 2 months FREE*  
http://join.msn.com/?page=features/junkmail


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Example Code Was : Re: Re : Re: printk and long long
  2004-02-11 14:08 Re : Re: printk and long long sting sting
@ 2004-02-11 14:57 ` wdebruij
  0 siblings, 0 replies; 2+ messages in thread
From: wdebruij @ 2004-02-11 14:57 UTC (permalink / raw)
  To: sting sting; +Cc: linux-kernel

> 
> Well I had tried it but I got
> the follwing compilation errors while trying to add that code:
> invalid operands to binary >>
> invalid operands to binary <<

I just ran the following on my computer :

"
#define LLHIGH(n) (unsigned long) (n >> (8 * sizeof(long)))
#define LLLOW(n) (unsigned long) ((n << (8 * sizeof(long)))  >> (8 * sizeof(long)))
/** internal function: called from the template module's init function */
int myfunc(void){

	unsigned long long int ullint = ((unsigned long long int) 1 << 32) - 1; //
LONG_MAX returns 7fffffff, this at least is a max_long
	unsigned long int ulint = ((unsigned long long int) 1 << 32) - 1;
	printk("a long long consists of %d bits on an x86 (athlon-xp), whereas a long
consists of %d bits\n", sizeof(ullint) * 8, sizeof(long) * 8);
	printk("my test long long reads %.8lx%.8lx; my test long %.8lx\n",
LLHIGH(ullint), LLLOW(ullint), ulint );
	ullint += 1; // will we get overflow or is a long long really > long?
	ulint += 1;
	printk("my test long long now reads %.8lx%.8lx; my test long %.8lx\n",
LLHIGH(ullint), LLLOW(ullint), ulint );

"

"
a long long consists of 64 bits on an x86 (athlon-xp), whereas a long consists
of 32 bits
my test long reads 00000000ffffffff; my test long ffffffff
my test long reads 0000000100000000; my test long 00000000
"

It took a bit longer to get right than I imagined (doesn't it always ;), but at
least here you've got a working example. Enjoy.

cheers,

  Willem
> 
> I assume maybe it is a problems with the flags I use:
> I use gcc 3.2.2 and the flags are:
> O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common
> -DMODULE -D__KERNEL__ -DNOKERNEL

to the best of my knowledge it has nothing to do with this.


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2004-02-11 14:57 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-02-11 14:08 Re : Re: printk and long long sting sting
2004-02-11 14:57 ` Example Code Was : " wdebruij

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox