This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Fwd: about udelay in mips


hi all:
I guess there seems be some differences about
"unsigned long long" and "ull" so I forward the letter to gcc-help.
If my guess is correct, what are the differences between them and why
"unsigned long long" cannot let compiler compile the 64-bits
operations as I want?
thanks a lot,
miloody

I found my kernel will compile udelay(xx) as zero no matter what xx I filled in.
below are the dis-assemblies:
(as you can see the v0 = v1 = zero.)
My version is 2.6.30.9:
void __udelay(unsigned long us)
{
? ? ? ?unsigned int lpj = current_cpu_data.udelay_val;

? ? ? ?__delay(((unsigned long long)(us * 0x000010c7 * HZ * lpj)) >> 32);
80306ed0: ? ? ? 00001821 ? ? ? ?move ? ?v1,zero
80306ed4: ? ? ? 00601021 ? ? ? ?move ? ?v0,v1
#include <asm/compiler.h>
#include <asm/war.h>

inline void __delay(unsigned int loops)
{
? ? ? ?__asm__ __volatile__ (
80306ed8: ? ? ? 1440ffff ? ? ? ?bnez ? ?v0,80306ed8 <__udelay+0x8>
80306edc: ? ? ? 2442ffff ? ? ? ?addiu ? v0,v0,-1
void __udelay(unsigned long us)

I have double checked the __delay source code of 2.6.33.4
and the dis-assemblies:

void __udelay(unsigned long us)
{
? ? ? ?unsigned int lpj = current_cpu_data.udelay_val;

? ? ? ?__delay((us * 0x000010c7ull * HZ * lpj) >> 32);
802f7310: ? ? ? 3c02804f ? ? ? ?lui ? ? v0,0x804f
802f7314: ? ? ? 8c429360 ? ? ? ?lw ? ? ?v0,-27808(v0)
802f7318: ? ? ? 3c050010 ? ? ? ?lui ? ? a1,0x10
802f731c: ? ? ? 34a56256 ? ? ? ?ori ? ? a1,a1,0x6256
802f7320: ? ? ? 00450019 ? ? ? ?multu ? v0,a1
802f7324: ? ? ? 00002821 ? ? ? ?move ? ?a1,zero
802f7328: ? ? ? 00001012 ? ? ? ?mflo ? ?v0
802f732c: ? ? ? 00001810 ? ? ? ?mfhi ? ?v1
802f7330: ? ? ? 00a20018 ? ? ? ?mult ? ?a1,v0
802f7334: ? ? ? 70640000 ? ? ? ?madd ? ?v1,a0
802f7338: ? ? ? 00003012 ? ? ? ?mflo ? ?a2
802f733c: ? ? ? 00440019 ? ? ? ?multu ? v0,a0
802f7340: ? ? ? 00001810 ? ? ? ?mfhi ? ?v1
802f7344: ? ? ? 00c31021 ? ? ? ?addu ? ?v0,a2,v1
#include <asm/compiler.h>
#include <asm/war.h>

inline void __delay(unsigned int loops)
{
? ? ? ?__asm__ __volatile__ (
802f7348: ? ? ? 1440ffff ? ? ? ?bnez ? ?v0,802f7348 <__udelay+0x38>
802f734c: ? ? ? 2442ffff ? ? ? ?addiu ? v0,v0,-1
void __udelay(unsigned long us)
{
? ? ? ?unsigned int lpj = current_cpu_data.udelay_val;

? ? ? ?__delay((us * 0x000010c7ull * HZ * lpj) >> 32);
}
802f7350: ? ? ? 03e00008 ? ? ? ?jr ? ? ?ra


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]