* 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