mirror of
https://github.com/azahar-emu/soundtouch
synced 2025-11-07 07:30:02 +01:00
Fix for x86-64 support: Removed pop/push instructions from the cpu detection algorithm.
This commit is contained in:
parent
28aaff6c99
commit
8f880269e0
@ -87,22 +87,21 @@ uint detectCPUextensions(void)
|
|||||||
// check if 'cpuid' instructions is available by toggling eflags bit 21
|
// check if 'cpuid' instructions is available by toggling eflags bit 21
|
||||||
|
|
||||||
"\n\tpushf" // save eflags to stack
|
"\n\tpushf" // save eflags to stack
|
||||||
"\n\tpop %%eax" // load eax from stack (with eflags)
|
"\n\tmovl (%%esp), %%eax" // load eax from stack (with eflags)
|
||||||
"\n\tmovl %%eax, %%ecx" // save the original eflags values to ecx
|
"\n\tmovl %%eax, %%ecx" // save the original eflags values to ecx
|
||||||
"\n\txor $0x00200000, %%eax" // toggle bit 21
|
"\n\txor $0x00200000, %%eax" // toggle bit 21
|
||||||
"\n\tpush %%eax" // store toggled eflags to stack
|
"\n\tmovl %%eax, (%%esp)" // store toggled eflags to stack
|
||||||
"\n\tpopf" // load eflags from stack
|
"\n\tpopf" // load eflags from stack
|
||||||
"\n\tpushf" // save updated eflags to stack
|
"\n\tpushf" // save updated eflags to stack
|
||||||
"\n\tpop %%eax" // load from stack
|
"\n\tmovl (%%esp), %%eax" // load eax from stack
|
||||||
|
"\n\tpopf" // pop stack to restore esp
|
||||||
"\n\txor %%edx, %%edx" // clear edx for defaulting no mmx
|
"\n\txor %%edx, %%edx" // clear edx for defaulting no mmx
|
||||||
"\n\tcmp %%ecx, %%eax" // compare to original eflags values
|
"\n\tcmp %%ecx, %%eax" // compare to original eflags values
|
||||||
"\n\tjz end" // jumps to 'end' if cpuid not present
|
"\n\tjz end" // jumps to 'end' if cpuid not present
|
||||||
|
|
||||||
// cpuid instruction available, test for presence of mmx instructions
|
// cpuid instruction available, test for presence of mmx instructions
|
||||||
|
|
||||||
"\n\tmovl $1, %%eax"
|
"\n\tmovl $1, %%eax"
|
||||||
"\n\tcpuid"
|
"\n\tcpuid"
|
||||||
// movl $0x00800000, %edx // force enable MMX
|
|
||||||
"\n\ttest $0x00800000, %%edx"
|
"\n\ttest $0x00800000, %%edx"
|
||||||
"\n\tjz end" // branch if MMX not available
|
"\n\tjz end" // branch if MMX not available
|
||||||
|
|
||||||
|
|||||||
@ -78,13 +78,16 @@ uint detectCPUextensions(void)
|
|||||||
xor esi, esi ; clear esi = result register
|
xor esi, esi ; clear esi = result register
|
||||||
|
|
||||||
pushfd ; save eflags to stack
|
pushfd ; save eflags to stack
|
||||||
pop eax ; load eax from stack (with eflags)
|
mov eax,dword ptr [esp] ; load eax from stack (with eflags)
|
||||||
mov ecx, eax ; save the original eflags values to ecx
|
mov ecx, eax ; save the original eflags values to ecx
|
||||||
xor eax, 0x00200000 ; toggle bit 21
|
xor eax, 0x00200000 ; toggle bit 21
|
||||||
push eax ; store toggled eflags to stack
|
mov dword ptr [esp],eax ; store toggled eflags to stack
|
||||||
popfd ; load eflags from stack
|
popfd ; load eflags from stack
|
||||||
|
|
||||||
pushfd ; save updated eflags to stack
|
pushfd ; save updated eflags to stack
|
||||||
pop eax ; load from stack
|
mov eax,dword ptr [esp] ; load eax from stack
|
||||||
|
popfd ; pop stack to restore stack pointer
|
||||||
|
|
||||||
xor edx, edx ; clear edx for defaulting no mmx
|
xor edx, edx ; clear edx for defaulting no mmx
|
||||||
cmp eax, ecx ; compare to original eflags values
|
cmp eax, ecx ; compare to original eflags values
|
||||||
jz end ; jumps to 'end' if cpuid not present
|
jz end ; jumps to 'end' if cpuid not present
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user