diff options
-rw-r--r-- | sound/softsynth/mt32.cpp | 12 | ||||
-rw-r--r-- | sound/softsynth/mt32/i386.cpp | 30 |
2 files changed, 30 insertions, 12 deletions
diff --git a/sound/softsynth/mt32.cpp b/sound/softsynth/mt32.cpp index 6c3174849e..4ab7745233 100644 --- a/sound/softsynth/mt32.cpp +++ b/sound/softsynth/mt32.cpp @@ -196,6 +196,18 @@ static int MT32_Report(void *userData, MT32Emu::ReportType type, const void *rep return eatSystemEvents(); } break; + case MT32Emu::ReportType_availableSSE: + debug(1, "MT32emu: SSE is avaliable"); + break; + case MT32Emu::ReportType_usingSSE: + debug(1, "MT32emu: using SSE"); + break; + case MT32Emu::ReportType_available3DNow: + debug(1, "MT32emu: 3DNow! is avaliable"); + break; + case MT32Emu::ReportType_using3DNow: + debug(1, "MT32emu: using 3DNow!"); + break; default: break; } diff --git a/sound/softsynth/mt32/i386.cpp b/sound/softsynth/mt32/i386.cpp index a936782ff8..f092189d76 100644 --- a/sound/softsynth/mt32/i386.cpp +++ b/sound/softsynth/mt32/i386.cpp @@ -55,10 +55,12 @@ static inline bool atti386_DetectSIMD() { /* check cpuid */ __asm__ __volatile__( + "pushl %%ebx \n" \ "movl $1, %%eax \n" \ "cpuid \n" \ "movl %%edx, %0 \n" \ - : "=r"(result) : : "eax", "ebx", "ecx", "edx"); + "popl %%ebx \n" \ + : "=r"(result) : : "eax", "ecx", "edx"); if (result & (1 << 25)) return true; @@ -74,10 +76,12 @@ static inline bool atti386_Detect3DNow() { // get cpuid __asm__ __volatile__( + "pushl %%ebx \n" \ "movl $0x80000001, %%eax \n" \ "cpuid \n" \ "movl %%edx, %0 \n" \ - : "=r"(result) : : "eax", "ebx", "ecx", "edx"); + "popl %%ebx \n" \ + : "=r"(result) : : "eax", "ecx", "edx"); if (result & 0x80000000) return true; @@ -154,8 +158,8 @@ static inline float atti386_iir_filter_3DNow(float output, float *hist1_ptr, flo __asm__ __volatile__ ( "movq %0, %%mm1 \n" \ " \n" \ - "movl %1, %%ebx \n" \ - "movq 0(%%ebx), %%mm2 \n" \ + "movl %1, %%edi \n" \ + "movq 0(%%edi), %%mm2 \n" \ " \n" \ "movl %2, %%eax; \n" \ "movq 0(%%eax), %%mm3 \n" \ @@ -168,8 +172,8 @@ static inline float atti386_iir_filter_3DNow(float output, float *hist1_ptr, flo " \n" \ "movd %%mm1, %3 \n" \ " \n" \ - "addl $8, %%ebx \n" \ - "movq 0(%%ebx), %%mm2 \n" \ + "addl $8, %%edi \n" \ + "movq 0(%%edi), %%mm2 \n" \ "movq 0(%%eax), %%mm3 \n" \ " \n" \ "pfmul %%mm3, %%mm2 \n" \ @@ -183,10 +187,10 @@ static inline float atti386_iir_filter_3DNow(float output, float *hist1_ptr, flo " \n" \ "movd %%mm3, 4(%%eax) \n" \ " \n" \ - "addl $8, %%ebx \n" \ + "addl $8, %%edi \n" \ "addl $8, %%eax \n" \ " \n" \ - "movq 0(%%ebx), %%mm2 \n" \ + "movq 0(%%edi), %%mm2 \n" \ "movq 0(%%eax), %%mm3 \n" \ " \n" \ "pfmul %%mm3, %%mm2 \n" \ @@ -197,8 +201,8 @@ static inline float atti386_iir_filter_3DNow(float output, float *hist1_ptr, flo " \n" \ "movd %%mm1, %3 \n" \ " \n" \ - "addl $8, %%ebx \n" \ - "movq 0(%%ebx), %%mm2 \n" \ + "addl $8, %%edi \n" \ + "movq 0(%%edi), %%mm2 \n" \ "movq 0(%%eax), %%mm3 \n" \ " \n" \ "pfmul %%mm3, %%mm2 \n" \ @@ -214,7 +218,7 @@ static inline float atti386_iir_filter_3DNow(float output, float *hist1_ptr, flo "movd %%mm1, %0 \n" \ "femms \n" \ : "=m"(output) : "g"(coef_ptr), "g"(hist1_ptr), "m"(tmp) - : "eax", "ebx", "memory" + : "eax", "edi", "memory" #ifdef __MMX__ , "mm1", "mm2", "mm3" #endif @@ -383,6 +387,7 @@ static inline void atti386_partialProductOutput(int quadlen, Bit16s leftvol, Bit "por %%mm2, %%mm1 \n" \ "movl %3, %%edi \n" \ "movl %4, %%esi \n" \ + "pushl %%ebx \n" \ "1: \n" \ "movw 0(%%esi), %%bx \n" \ "addl $2, %%esi \n" \ @@ -408,8 +413,9 @@ static inline void atti386_partialProductOutput(int quadlen, Bit16s leftvol, Bit "cmpl $0, %%ecx \n" \ "jg 1b \n" \ "emms \n" \ + "popl %%ebx \n" \ : : "g"(quadlen), "g"(leftvol), "g"(rightvol), "g"(partialBuf), "g"(p1buf) - : "eax", "ebx", "ecx", "edx", "edi", "esi", "memory" + : "eax", "ecx", "edx", "edi", "esi", "memory" #ifdef __MMX__ , "mm1", "mm2", "mm3" #endif |