diff --git a/extern/ESFMu/esfm.c b/extern/ESFMu/esfm.c index d8274b180..8a53440b7 100644 --- a/extern/ESFMu/esfm.c +++ b/extern/ESFMu/esfm.c @@ -1779,58 +1779,58 @@ ESFM_process_feedback(esfm_chip *chip) // ASM optimizaions! #if defined(__GNUC__) && defined(__x86_64__) asm ( - "movzbq %[wave], %%r8 \n\t" - "shll $11, %%r8d \n\t" - "leaq %[sinrom], %%rax \n\t" - "addq %%rax, %%r8 \n\t" - "leaq %[exprom], %%r9 \n\t" - "movzwl %[eg_out], %%r10d \n\t" - "shll $3, %%r10d \n\t" - "xorl %%r11d, %%r11d \n\t" - "movl %%r11d, %[out] \n\t" - "movl $29, %%edx \n" - "1: \n\t" + "movzbq %[wave], %%r8 \n\t" + "shll $11, %%r8d \n\t" + "leaq %[sinrom], %%rax \n\t" + "addq %%rax, %%r8 \n\t" + "leaq %[exprom], %%r9 \n\t" + "movzwl %[eg_out], %%r10d \n\t" + "shll $3, %%r10d \n\t" + "xorl %%r11d, %%r11d \n\t" + "movl %%r11d, %[out] \n\t" + "movl $29, %%edx \n" + "1: \n\t" // phase_feedback = (wave_out + wave_last) >> 2; - "movl %[out], %[p_fb] \n\t" - "addl %%r11d, %[p_fb] \n\t" - "sarl $2, %[p_fb] \n\t" + "movl %[out], %[p_fb] \n\t" + "addl %%r11d, %[p_fb] \n\t" + "sarl $2, %[p_fb] \n\t" // wave_last = wave_out - "movl %[out], %%r11d \n\t" + "movl %[out], %%r11d \n\t" // phase = phase_feedback >> mod_in_shift; - "movl %[p_fb], %%eax \n\t" - "movb %[mod_in], %%cl \n\t" - "sarl %%cl, %%eax \n\t" + "movl %[p_fb], %%eax \n\t" + "movb %[mod_in], %%cl \n\t" + "sarl %%cl, %%eax \n\t" // phase += phase_acc >> 9; - "movl %[p_acc], %%ebx \n\t" - "sarl $9, %%ebx \n\t" - "addl %%ebx, %%eax \n\t" + "movl %[p_acc], %%ebx \n\t" + "sarl $9, %%ebx \n\t" + "addl %%ebx, %%eax \n\t" // lookup = logsinrom[(waveform << 10) | (phase & 0x3ff)]; - "andq $0x3ff, %%rax \n\t" - "movzwl (%%r8, %%rax, 2), %%ebx \n\t" - "movl %%ebx, %%eax \n\t" + "andq $0x3ff, %%rax \n\t" + "movzwl (%%r8, %%rax, 2), %%ebx \n\t" + "movl %%ebx, %%eax \n\t" // level = (lookup & 0x1fff) + (envelope << 3); - "movl $0x1fff, %%ecx \n\t" - "andl %%ecx, %%eax \n\t" - "addl %%r10d, %%eax \n\t" + "movl $0x1fff, %%ecx \n\t" + "andl %%ecx, %%eax \n\t" + "addl %%r10d, %%eax \n\t" // if (level > 0x1fff) level = 0x1fff; - "cmpl %%ecx, %%eax \n\t" - "cmoval %%ecx, %%eax \n\t" + "cmpl %%ecx, %%eax \n\t" + "cmoval %%ecx, %%eax \n\t" // wave_out = exprom[level & 0xff] >> (level >> 8); - "movb %%ah, %%cl \n\t" - "movzbl %%al, %%eax \n\t" - "movzwl (%%r9, %%rax, 2), %[out] \n\t" - "shrl %%cl, %[out] \n\t" + "movb %%ah, %%cl \n\t" + "movzbl %%al, %%eax \n\t" + "movzwl (%%r9, %%rax, 2), %[out] \n\t" + "shrl %%cl, %[out] \n\t" // if (lookup & 0x8000) wave_out = -wave_out; // in other words, lookup is negative - "movl %[out], %%ecx \n\t" - "negl %%ecx \n\t" - "testw %%bx, %%bx \n\t" - "cmovsl %%ecx, %[out] \n\t" + "movl %[out], %%ecx \n\t" + "negl %%ecx \n\t" + "testw %%bx, %%bx \n\t" + "cmovsl %%ecx, %[out] \n\t" // phase_acc += phase_offset - "addl %[p_off], %[p_acc] \n\t" + "addl %[p_off], %[p_acc] \n\t" // loop - "decl %%edx \n\t" - "jne 1b \n\t" + "decl %%edx \n\t" + "jne 1b \n\t" : [p_fb] "=&r" (phase_feedback), [p_acc] "+r" (phase_acc), [out] "=&r" (wave_out) @@ -1844,57 +1844,57 @@ ESFM_process_feedback(esfm_chip *chip) ); #elif defined(__GNUC__) && defined(__i386__) asm ( - "movzbl %b[wave], %%eax \n\t" - "shll $11, %%eax \n\t" - "leal %[sinrom], %%edi \n\t" - "addl %%eax, %%edi \n\t" - "shlw $3, %[eg_out] \n\t" - "xorl %[out], %[out] \n\t" - "movl %[out], %[last] \n\t" - "movl $29, %[i] \n" - "1: \n\t" + "movzbl %b[wave], %%eax \n\t" + "shll $11, %%eax \n\t" + "leal %[sinrom], %%edi \n\t" + "addl %%eax, %%edi \n\t" + "shlw $3, %[eg_out] \n\t" + "xorl %[out], %[out] \n\t" + "movl %[out], %[last] \n\t" + "movl $29, %[i] \n" + "1: \n\t" // phase_feedback = (wave_out + wave_last) >> 2; - "movl %[out], %%eax \n\t" - "addl %[last], %%eax \n\t" - "sarl $2, %%eax \n\t" - "movl %%eax, %[p_fb] \n\t" + "movl %[out], %%eax \n\t" + "addl %[last], %%eax \n\t" + "sarl $2, %%eax \n\t" + "movl %%eax, %[p_fb] \n\t" // wave_last = wave_out - "movl %[out], %[last] \n\t" + "movl %[out], %[last] \n\t" // phase = phase_feedback >> mod_in_shift; - "movb %[mod_in], %%cl \n\t" - "sarl %%cl, %%eax \n\t" + "movb %[mod_in], %%cl \n\t" + "sarl %%cl, %%eax \n\t" // phase += phase_acc >> 9; - "movl %[p_acc], %%ebx \n\t" - "shrl $9, %%ebx \n\t" - "addl %%ebx, %%eax \n\t" + "movl %[p_acc], %%ebx \n\t" + "shrl $9, %%ebx \n\t" + "addl %%ebx, %%eax \n\t" // lookup = logsinrom[(waveform << 10) | (phase & 0x3ff)]; - "andl $0x3ff, %%eax \n\t" - "movzwl (%%edi, %%eax, 2), %%ebx \n\t" - "movl %%ebx, %%eax \n\t" + "andl $0x3ff, %%eax \n\t" + "movzwl (%%edi, %%eax, 2), %%ebx \n\t" + "movl %%ebx, %%eax \n\t" // level = (lookup & 0x1fff) + (envelope << 3); - "movl $0x1fff, %%ecx \n\t" - "andl %%ecx, %%eax \n\t" - "addw %[eg_out], %%ax \n\t" + "movl $0x1fff, %%ecx \n\t" + "andl %%ecx, %%eax \n\t" + "addw %[eg_out], %%ax \n\t" // if (level > 0x1fff) level = 0x1fff; - "cmpl %%ecx, %%eax \n\t" - "cmoval %%ecx, %%eax \n\t" + "cmpl %%ecx, %%eax \n\t" + "cmoval %%ecx, %%eax \n\t" // wave_out = exprom[level & 0xff] >> (level >> 8); - "movb %%ah, %%cl \n\t" - "movzbl %%al, %%eax \n\t" - "leal %[exprom], %[out] \n\t" - "movzwl (%[out], %%eax, 2), %[out] \n\t" - "shrl %%cl, %[out] \n\t" + "movb %%ah, %%cl \n\t" + "movzbl %%al, %%eax \n\t" + "leal %[exprom], %[out] \n\t" + "movzwl (%[out], %%eax, 2), %[out] \n\t" + "shrl %%cl, %[out] \n\t" // if (lookup & 0x8000) wave_out = -wave_out; // in other words, lookup is negative - "movl %[out], %%ecx \n\t" - "negl %%ecx \n\t" - "testw %%bx, %%bx \n\t" - "cmovsl %%ecx, %[out] \n\t" + "movl %[out], %%ecx \n\t" + "negl %%ecx \n\t" + "testw %%bx, %%bx \n\t" + "cmovsl %%ecx, %[out] \n\t" // phase_acc += phase_offset - "addl %[p_off], %[p_acc] \n\t" + "addl %[p_off], %[p_acc] \n\t" // loop - "decl %[i] \n\t" - "jne 1b \n\t" + "decl %[i] \n\t" + "jne 1b \n\t" : [p_fb] "=&m" (phase_feedback), [p_acc] "+r" (phase_acc), [out] "=&r" (wave_out),