diff options
author | Andy Polyakov <appro@openssl.org> | 2011-05-18 18:21:54 +0200 |
---|---|---|
committer | Andy Polyakov <appro@openssl.org> | 2011-05-18 18:21:54 +0200 |
commit | b50842036f9910fb4b63096d0cce828cc368cbd2 (patch) | |
tree | 05e0c6d2a4f43b0c3d52777e39a8d13e1c737d21 /engines | |
parent | x86[_64]cpuid.pl: handle new extensions. (diff) | |
download | openssl-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.c | 18 |
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 |