From 6cfdc9dd640e4d52483e59b00b329e161f2af35c Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Fri, 9 Aug 2002 14:41:04 +0000 Subject: Ok, bad idea. didn't work. -Erik --- ldso/ldso/arm/dl-sysdep.h | 29 ++++++++++++++++++++++++++++- ldso/ldso/arm/ld_sysdep.h | 29 ++++++++++++++++++++++++++++- 2 files changed, 56 insertions(+), 2 deletions(-) (limited to 'ldso') diff --git a/ldso/ldso/arm/dl-sysdep.h b/ldso/ldso/arm/dl-sysdep.h index 74abb305e..ef994caad 100644 --- a/ldso/ldso/arm/dl-sysdep.h +++ b/ldso/ldso/arm/dl-sysdep.h @@ -89,7 +89,34 @@ struct elf_resolve; unsigned long _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry); -#define do_rem(result, n, base) result = (n % base) +static inline unsigned long arm_modulus(unsigned long m, unsigned long p) { + unsigned long i,t,inc; + i=p; t=0; + while(!(i&(1<<31))) { + i<<=1; + t++; + } + t--; + for(inc=t;inc>2;inc--) { + i=p<=i) { + m-=i; + i<<=1; + if(i&(1<<31)) + break; + if(i=p) { + m-=p; + } + return m; +} + +#define do_rem(result, n, base) result=arm_modulus(n,base); /* 4096 bytes alignment */ #define PAGE_ALIGN 0xfffff000 diff --git a/ldso/ldso/arm/ld_sysdep.h b/ldso/ldso/arm/ld_sysdep.h index 74abb305e..ef994caad 100644 --- a/ldso/ldso/arm/ld_sysdep.h +++ b/ldso/ldso/arm/ld_sysdep.h @@ -89,7 +89,34 @@ struct elf_resolve; unsigned long _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry); -#define do_rem(result, n, base) result = (n % base) +static inline unsigned long arm_modulus(unsigned long m, unsigned long p) { + unsigned long i,t,inc; + i=p; t=0; + while(!(i&(1<<31))) { + i<<=1; + t++; + } + t--; + for(inc=t;inc>2;inc--) { + i=p<=i) { + m-=i; + i<<=1; + if(i&(1<<31)) + break; + if(i=p) { + m-=p; + } + return m; +} + +#define do_rem(result, n, base) result=arm_modulus(n,base); /* 4096 bytes alignment */ #define PAGE_ALIGN 0xfffff000 -- cgit v1.2.3