patch-2.3.99-pre3 linux/drivers/isdn/isdn_audio.c
Next file: linux/drivers/isdn/isdn_common.c
Previous file: linux/drivers/isdn/hysdn/hysdn_proclog.c
Back to the patch index
Back to the overall index
- Lines: 47
- Date:
Wed Mar 22 22:23:55 2000
- Orig file:
v2.3.99-pre2/linux/drivers/isdn/isdn_audio.c
- Orig date:
Thu Aug 26 13:05:37 1999
diff -u --recursive --new-file v2.3.99-pre2/linux/drivers/isdn/isdn_audio.c linux/drivers/isdn/isdn_audio.c
@@ -292,38 +292,25 @@
{'*', '0', '#', 'D'}
};
-
-/*
- * egcs 2.95 complain about invalid asm statement:
- * "fixed or forbidden register 2 (cx) was spilled for class CREG."
- */
-#if ((CPU == 386) || (CPU == 486) || (CPU == 586)) && defined(__GNUC__)
-#if __GNUC__ == 2 && __GNUC_MINOR__ < 95
-#define ISDN_AUDIO_OPTIMIZE_ON_X386_WITH_ASM_IF_GCC_ALLOW_IT
-#endif
-#endif
-
-#ifdef ISDN_AUDIO_OPTIMIZE_ON_X386_WITH_ASM_IF_GCC_ALLOW_IT
static inline void
isdn_audio_tlookup(const void *table, void *buff, unsigned long n)
{
- __asm__("cld\n"
+#ifdef __i386__
+ unsigned long d0, d1, d2, d3;
+ __asm__ __volatile__(
+ "cld\n"
"1:\tlodsb\n\t"
"xlatb\n\t"
"stosb\n\t"
"loop 1b\n\t"
- : : "b"((long) table), "c"(n), "D"((long) buff), "S"((long) buff)
- : "bx", "cx", "di", "si", "ax");
-}
-
+ : "=&b"(d0), "=&c"(d1), "=&D"(d2), "=&S"(d3)
+ : "0"((long) table), "1"(n), "2"((long) buff), "3"((long) buff)
+ : "memory", "ax");
#else
-static inline void
-isdn_audio_tlookup(const char *table, char *buff, unsigned long n)
-{
while (n--)
*buff++ = table[*(unsigned char *)buff];
-}
#endif
+}
void
isdn_audio_ulaw2alaw(unsigned char *buff, unsigned long len)
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)