summaryrefslogtreecommitdiffstats
path: root/engines
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2011-05-18 18:21:54 +0200
committerAndy Polyakov <appro@openssl.org>2011-05-18 18:21:54 +0200
commitb50842036f9910fb4b63096d0cce828cc368cbd2 (patch)
tree05e0c6d2a4f43b0c3d52777e39a8d13e1c737d21 /engines
parentx86[_64]cpuid.pl: handle new extensions. (diff)
downloadopenssl-b50842036f9910fb4b63096d0cce828cc368cbd2.tar.xz
openssl-b50842036f9910fb4b63096d0cce828cc368cbd2.zip
e_padlock.c: make it compile on MacOS X.
Diffstat (limited to 'engines')
-rw-r--r--engines/e_padlock.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/engines/e_padlock.c b/engines/e_padlock.c
index ce7e086553..7c64cf38c5 100644
--- a/engines/e_padlock.c
+++ b/engines/e_padlock.c
@@ -458,25 +458,27 @@ padlock_available(void)
eax = 0x00000000;
vendor_string[12] = 0;
asm volatile (
+ "pushq %%rbx\n"
"cpuid\n"
"movl %%ebx,(%1)\n"
"movl %%edx,4(%1)\n"
"movl %%ecx,8(%1)\n"
- : "+a"(eax) : "r"(vendor_string) : "rbx", "rcx", "rdx");
+ "popq %%rbx"
+ : "+a"(eax) : "r"(vendor_string) : "rcx", "rdx");
if (strcmp(vendor_string, "CentaurHauls") != 0)
return 0;
/* Check for Centaur Extended Feature Flags presence */
eax = 0xC0000000;
- asm volatile ("cpuid"
- : "+a"(eax) : : "rbx", "rcx", "rdx");
+ asm volatile ("pushq %%rbx; cpuid; popq %%rbx"
+ : "+a"(eax) : : "rcx", "rdx");
if (eax < 0xC0000001)
return 0;
/* Read the Centaur Extended Feature Flags */
eax = 0xC0000001;
- asm volatile ("cpuid"
- : "+a"(eax), "=d"(edx) : : "rbx", "rcx");
+ asm volatile ("pushq %%rbx; cpuid; popq %%rbx"
+ : "+a"(eax), "=d"(edx) : : "rcx");
/* Fill up some flags */
padlock_use_ace = ((edx & (0x3<<6)) == (0x3<<6));
@@ -532,12 +534,14 @@ static inline void *name(size_t cnt, \
struct padlock_cipher_data *cdata, \
void *out, const void *inp) \
{ void *iv; \
- asm volatile ( "leaq 16(%0),%%rdx\n" \
+ asm volatile ( "pushq %%rbx\n" \
+ " leaq 16(%0),%%rdx\n" \
" leaq 32(%0),%%rbx\n" \
rep_xcrypt "\n" \
+ " popq %%rbx" \
: "=a"(iv), "=c"(cnt), "=D"(out), "=S"(inp) \
: "0"(cdata), "1"(cnt), "2"(out), "3"(inp) \
- : "rbx", "rdx", "cc", "memory"); \
+ : "rdx", "cc", "memory"); \
return iv; \
}
#endif