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