mirror of
https://github.com/corda/corda.git
synced 2025-02-15 23:22:54 +00:00
added detectFeature function, used to detect sse in x86.cpp
This commit is contained in:
parent
5cc605b56d
commit
c042354ea0
104
src/x86.S
104
src/x86.S
@ -18,6 +18,42 @@
|
|||||||
#ifdef __x86_64__
|
#ifdef __x86_64__
|
||||||
|
|
||||||
#ifdef __WINDOWS__
|
#ifdef __WINDOWS__
|
||||||
|
# if defined __APPLE__ || defined __MINGW32__ || defined __CYGWIN32__
|
||||||
|
.globl _detectFeature
|
||||||
|
_detectFeature:
|
||||||
|
# else
|
||||||
|
.globl detectFeature
|
||||||
|
detectFeature:
|
||||||
|
# endif
|
||||||
|
pushq %rbp
|
||||||
|
movq %rsp, %rbp
|
||||||
|
pushq %rdx
|
||||||
|
pushq %rcx
|
||||||
|
pushq %rbx
|
||||||
|
pushq %rsi
|
||||||
|
pushq %rdi
|
||||||
|
movl %ecx, %edi
|
||||||
|
movl %edx, %esi
|
||||||
|
movl $1, %eax
|
||||||
|
cpuid
|
||||||
|
andl %esi, %edx
|
||||||
|
andl %edi, %ecx
|
||||||
|
orl %edx, %ecx
|
||||||
|
test %ecx, %ecx
|
||||||
|
je LOCAL(NOSSE)
|
||||||
|
movl $1, %eax
|
||||||
|
jmp LOCAL(SSEEND)
|
||||||
|
LOCAL(NOSSE):
|
||||||
|
movl $0, %eax
|
||||||
|
LOCAL(SSEEND):
|
||||||
|
popq %rdi
|
||||||
|
popq %rsi
|
||||||
|
popq %rbx
|
||||||
|
popq %rcx
|
||||||
|
popq %rdx
|
||||||
|
movq %rbp,%rsp
|
||||||
|
popq %rbp
|
||||||
|
ret
|
||||||
|
|
||||||
# if defined __APPLE__ || defined __MINGW32__ || defined __CYGWIN32__
|
# if defined __APPLE__ || defined __MINGW32__ || defined __CYGWIN32__
|
||||||
.globl _vmNativeCall
|
.globl _vmNativeCall
|
||||||
@ -141,6 +177,36 @@ _vmJump:
|
|||||||
jmp *%rcx
|
jmp *%rcx
|
||||||
|
|
||||||
#elif defined __LINUX__
|
#elif defined __LINUX__
|
||||||
|
# if defined __APPLE__ || defined __MINGW32__ || defined __CYGWIN32__
|
||||||
|
.globl _detectFeature
|
||||||
|
_detectFeature:
|
||||||
|
# else
|
||||||
|
.globl detectFeature
|
||||||
|
detectFeature:
|
||||||
|
# endif
|
||||||
|
pushq %rbp
|
||||||
|
movq %rsp, %rbp
|
||||||
|
pushq %rdx
|
||||||
|
pushq %rcx
|
||||||
|
pushq %rbx
|
||||||
|
movl $1, %eax
|
||||||
|
cpuid
|
||||||
|
andl %esi, %edx
|
||||||
|
andl %edi, %ecx
|
||||||
|
orl %edx, %ecx
|
||||||
|
test %ecx, %ecx
|
||||||
|
je LOCAL(NOSSE)
|
||||||
|
movl $1, %eax
|
||||||
|
jmp LOCAL(SSEEND)
|
||||||
|
LOCAL(NOSSE):
|
||||||
|
movl $0, %eax
|
||||||
|
LOCAL(SSEEND):
|
||||||
|
popq %rbx
|
||||||
|
popq %rcx
|
||||||
|
popq %rdx
|
||||||
|
movq %rbp,%rsp
|
||||||
|
popq %rbp
|
||||||
|
ret
|
||||||
|
|
||||||
# if defined __APPLE__ || defined __MINGW32__ || defined __CYGWIN32__
|
# if defined __APPLE__ || defined __MINGW32__ || defined __CYGWIN32__
|
||||||
.globl _vmNativeCall
|
.globl _vmNativeCall
|
||||||
@ -252,8 +318,44 @@ vmJump:
|
|||||||
jmp *%rdi
|
jmp *%rdi
|
||||||
|
|
||||||
#endif //def __WINDOWS__
|
#endif //def __WINDOWS__
|
||||||
|
|
||||||
#elif defined __i386__
|
#elif defined __i386__
|
||||||
|
# if defined __APPLE__ || defined __MINGW32__ || defined __CYGWIN32__
|
||||||
|
.globl _detectFeature
|
||||||
|
_detectFeature:
|
||||||
|
# else
|
||||||
|
.globl detectFeature
|
||||||
|
detectFeature:
|
||||||
|
# endif
|
||||||
|
pushl %ebp
|
||||||
|
movl %esp, %ebp
|
||||||
|
pushl %edx
|
||||||
|
pushl %ecx
|
||||||
|
pushl %ebx
|
||||||
|
pushl %esi
|
||||||
|
pushl %edi
|
||||||
|
movl 12(%ebp), %esi
|
||||||
|
movl 8(%ebp), %edi
|
||||||
|
movl $1, %eax
|
||||||
|
cpuid
|
||||||
|
andl %esi, %edx
|
||||||
|
andl %edi, %ecx
|
||||||
|
orl %edx, %ecx
|
||||||
|
test %ecx, %ecx
|
||||||
|
je LOCAL(NOSSE)
|
||||||
|
movl $1, %eax
|
||||||
|
jmp LOCAL(SSEEND)
|
||||||
|
LOCAL(NOSSE):
|
||||||
|
movl $0, %eax
|
||||||
|
LOCAL(SSEEND):
|
||||||
|
popl %edi
|
||||||
|
popl %esi
|
||||||
|
popl %ebx
|
||||||
|
popl %ecx
|
||||||
|
popl %edx
|
||||||
|
movl %ebp,%esp
|
||||||
|
popl %ebp
|
||||||
|
ret
|
||||||
|
|
||||||
# if defined __APPLE__ || defined __MINGW32__ || defined __CYGWIN32__
|
# if defined __APPLE__ || defined __MINGW32__ || defined __CYGWIN32__
|
||||||
.globl _vmNativeCall
|
.globl _vmNativeCall
|
||||||
_vmNativeCall:
|
_vmNativeCall:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user