--- uae/src/md-i386-gcc/support.c 2018/04/24 16:39:33 1.1.1.1 +++ uae/src/md-i386-gcc/support.c 2018/04/24 17:19:18 1.1.1.11 @@ -1,6 +1,6 @@ - /* + /* * UAE - The Un*x Amiga Emulator - * + * * Miscellaneous machine dependent support functions and definitions * * Copyright 1996 Bernd Schmidt @@ -10,128 +10,11 @@ #include "sysconfig.h" #include "sysdeps.h" -#include "config.h" #include "options.h" #include "machdep/m68k.h" struct flag_struct regflags; -/* - * Careful: No unique labels. Unfortunately, not each installation of GCC - * comes with GAS. Bletch. - */ - -int fast_memcmp(const void *foo, const void *bar, int len) +void machdep_init (void) { - int differs, baz; - __asm__ __volatile__ ("subl $4, %2\n" - "jc LLA2\n" - "LLA1:\n" - "movl (%0),%%ebx\n" - "cmpl (%1),%%ebx\n" - "jne LLA5\n" - "addl $4, %0\n" - "addl $4, %1\n" - "subl $4, %2\n" - "jnc LLA1\n" - "LLA2:\n" - "addl $4, %2\n" - "jz LLA4\n" - "LLA3:\n" - "movb (%0),%%bl\n" - "cmpb (%1),%%bl\n" - "jne LLA5\n" - "incl %0\n" - "incl %1\n" - "decl %2\n" - "jnz LLA3\n" - "LLA4:\n" - "movl $0, %3\n" - "jmp LLA6\n" - "LLA5:\n" - "movl $1, %3\n" - "LLA6:\n" - : "=&r" (foo), "=&r" (bar), "=&rm" (len), "=rm" (differs), - "=&b" (baz) - : "0" (foo), "1" (bar), "2" (len), "3" (baz) : "cc"); - return differs; -} - -int memcmpy(void *foo, const void *bar, int len) -{ - int differs, baz = 0, uupzuq = 0; - - __asm__ __volatile__ ("subl %1, %2\n" - "movl $0, %0\n" - "subl $16, %3\n" - "jc LLB7\n" - - "LLB8:\n" - "movl (%1),%%ecx\n" - "movl (%2,%1),%%ebx\n" - "xorl %%ebx, %%ecx\n" - "movl %%ebx, (%1)\n" - "orl %%ecx, %0\n" - - "movl 4(%2,%1),%%ebx\n" - "movl 4(%1),%%ecx\n" - "xorl %%ebx, %%ecx\n" - "movl %%ebx, 4(%1)\n" - "orl %%ecx, %0\n" - - "movl 8(%2,%1),%%ebx\n" - "movl 8(%1),%%ecx\n" - "xorl %%ebx, %%ecx\n" - "movl %%ebx, 8(%1)\n" - "orl %%ecx, %0\n" - - "movl 12(%2,%1),%%ebx\n" - "movl 12(%1),%%ecx\n" - "xorl %%ebx, %%ecx\n" - "movl %%ebx, 12(%1)\n" - "orl %%ecx, %0\n" - - "addl $16, %1\n" - "subl $16, %3\n" - "jnc LLB8\n" - - "LLB7:\n" - "addl $16, %3\n" - "subl $4, %3\n" - "jc LLB2\n" - - "LLB1:\n" - "movl (%2,%1),%%ebx\n" - "movl (%1),%%ecx\n" - "xorl %%ebx, %%ecx\n" - "movl %%ebx, (%1)\n" - "orl %%ecx, %0\n" - "addl $4, %1\n" - "subl $4, %3\n" - "jnc LLB1\n" - - "LLB2:\n" - "addl $4, %3\n" - "jz LLB6\n" - "xorl %%ecx, %%ecx\n" - - "LLB3:\n" - "movb (%2,%1),%%bl\n" - "movb (%1),%%cl\n" - "xorb %%bl,%%cl\n" - "movb %%bl,(%1)\n" - "orl %%ecx, %0\n" - "incl %1\n" - "decl %3\n" - "jnz LLB3\n" - - "LLB6:\n" - : "=m" (differs) - : "r" (foo), "r" (bar), "r" (len), "b" (baz), "c" (uupzuq) : "cc", "memory"); - /* Now tell the compiler that foo, bar and len have been modified - * If someone finds a way to express all this cleaner in constraints that - * GCC 2.7.2 understands, please FIXME */ - __asm__ __volatile__ ("" : "=rm" (foo), "=rm" (bar), "=rm" (len) : : "ebx", "ecx", "edx", "eax", "esi", "memory"); - - return differs; }