- Implement division and rdtsc support for romcc

git-svn-id: svn://svn.coreboot.org/coreboot/trunk@947 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Eric Biederman 2003-07-12 01:37:33 +00:00
parent 91b5ed1073
commit b3e9b4a534
1 changed files with 46 additions and 0 deletions

View File

@ -35,6 +35,33 @@ static void hlt(void)
__builtin_hlt(); __builtin_hlt();
} }
typedef __builtin_div_t div_t;
typedef __builtin_ldiv_t ldiv_t;
typedef __builtin_udiv_t udiv_t;
typedef __builtin_uldiv_t uldiv_t;
static div_t div(int numer, int denom)
{
return __builtin_div(numer, denom);
}
static ldiv_t ldiv(long numer, long denom)
{
return __builtin_ldiv(numer, denom);
}
static udiv_t udiv(unsigned numer, unsigned denom)
{
return __builtin_udiv(numer, denom);
}
static uldiv_t uldiv(unsigned long numer, unsigned long denom)
{
return __builtin_uldiv(numer, denom);
}
int log2(int value) int log2(int value)
{ {
/* __builtin_bsr is a exactly equivalent to the x86 machine /* __builtin_bsr is a exactly equivalent to the x86 machine
@ -59,6 +86,25 @@ static void wrmsr(unsigned long index, msr_t msr)
__builtin_wrmsr(index, msr.lo, msr.hi); __builtin_wrmsr(index, msr.lo, msr.hi);
} }
struct tsc_struct {
unsigned lo;
unsigned hi;
};
typedef struct tsc_struct tsc_t;
static tsc_t rdtsc(void)
{
tsc_t res;
asm ("rdtsc"
: "=a" (res.lo), "=d"(res.hi) /* outputs */
: /* inputs */
: /* Clobbers */
);
return res;
}
#define PCI_ADDR(BUS, DEV, FN, WHERE) ( \ #define PCI_ADDR(BUS, DEV, FN, WHERE) ( \
(((BUS) & 0xFF) << 16) | \ (((BUS) & 0xFF) << 16) | \
(((DEV) & 0x1f) << 11) | \ (((DEV) & 0x1f) << 11) | \