# HG changeset patch # User nickols_k # Date 997030197 0 # Node ID c31fb57d17a68910a2ad50fd04d4857c1ac0993f # Parent 20e680e7a4901b1f452be2aad4313cc4c04cd736 Suppressing external gas stuff to improve portability to Win32 diff -r 20e680e7a490 -r c31fb57d17a6 Makefile --- a/Makefile Sat Aug 04 00:46:50 2001 +0000 +++ b/Makefile Sun Aug 05 16:49:57 2001 +0000 @@ -25,7 +25,7 @@ # i386 mmx specific stuff ifeq ($(TARGET_MMX),yes) -ASM_OBJS += i386/fdct_mmx.o i386/sad_mmx.o i386/cpuid.o +ASM_OBJS += i386/fdct_mmx.o i386/sad_mmx.o OBJS += i386/fdctdata.o i386/cputest.o \ i386/dsputil_mmx.o i386/mpegvideo_mmx.o endif @@ -47,9 +47,6 @@ %.o: %.c $(CC) $(CFLAGS) -c -o $@ $< -i386/cpuid.o: i386/cpuid.s - $(CC) -c -o $@ $< - %.o: %.s nasm -f elf -o $@ $< diff -r 20e680e7a490 -r c31fb57d17a6 i386/cpuid.s --- a/i386/cpuid.s Sat Aug 04 00:46:50 2001 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ - .file "cpuid.s" - .version "01.01" -gcc2_compiled.: -.text - .align 4 - .globl cpuid - .type cpuid,@function -cpuid: - pushl %ebp - movl %esp,%ebp - pushl %edi - pushl %esi - pushl %ebx - movl 8(%ebp),%eax - movl 12(%ebp),%edi - movl 24(%ebp),%esi - cpuid - movl %eax,(%edi) - movl 16(%ebp),%eax - movl %ebx,(%eax) - movl 20(%ebp),%eax - movl %ecx,(%eax) - movl %edx,(%esi) - popl %ebx - popl %esi - popl %edi - leave - ret -.Lfe1: - .size cpuid,.Lfe1-cpuid - .align 4 diff -r 20e680e7a490 -r c31fb57d17a6 i386/cputest.c --- a/i386/cputest.c Sat Aug 04 00:46:50 2001 +0000 +++ b/i386/cputest.c Sun Aug 05 16:49:57 2001 +0000 @@ -4,8 +4,15 @@ #include #include "../dsputil.h" -/* need this external function to solve -fPIC ebx issues ! */ -extern void cpuid(int index, int *eax, int *ebx, int *ecx, int *edx); +/* ebx saving is necessary for PIC. gcc seems unable to see it alone */ +#define cpuid(index,eax,ebx,ecx,edx)\ + asm ("movl %%ebx, %%esi\n\t"\ + "cpuid\n\t"\ + "xchgl %%ebx, %%esi"\ + : "=a" (eax), "=S" (ebx),\ + "=c" (ecx), "=d" (edx)\ + : "0" (index)\ + : "cc")\ /* Function to test if multimedia instructions are supported... */ int mm_support(void) @@ -37,7 +44,7 @@ if (eax == ecx) return 0; /* CPUID not supported */ - cpuid(0, &eax, &ebx, &ecx, &edx); + cpuid(0, eax, ebx, ecx, edx); if (ebx == 0x756e6547 && edx == 0x49656e69 && @@ -45,7 +52,7 @@ /* intel */ inteltest: - cpuid(1, &eax, &ebx, &ecx, &edx); + cpuid(1, eax, ebx, ecx, edx); if ((edx & 0x00800000) == 0) return 0; rval = MM_MMX; @@ -58,10 +65,10 @@ edx == 0x69746e65 && ecx == 0x444d4163) { /* AMD */ - cpuid(0x80000000, &eax, &ebx, &ecx, &edx); + cpuid(0x80000000, eax, ebx, ecx, edx); if ((unsigned)eax < 0x80000001) goto inteltest; - cpuid(0x80000001, &eax, &ebx, &ecx, &edx); + cpuid(0x80000001, eax, ebx, ecx, edx); if ((edx & 0x00800000) == 0) return 0; rval = MM_MMX; @@ -84,7 +91,7 @@ */ if (eax != 2) goto inteltest; - cpuid(0x80000001, &eax, &ebx, &ecx, &edx); + cpuid(0x80000001, eax, ebx, ecx, edx); if ((eax & 0x00800000) == 0) return 0; rval = MM_MMX;