diff --git a/crypto/external/bsd/openssl/lib/libcrypto/arch/i386/Makefile b/crypto/external/bsd/openssl/lib/libcrypto/arch/i386/Makefile index 113d05e54575..e8b061f4d27c 100644 --- a/crypto/external/bsd/openssl/lib/libcrypto/arch/i386/Makefile +++ b/crypto/external/bsd/openssl/lib/libcrypto/arch/i386/Makefile @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.2 2011/06/05 23:09:50 spz Exp $ +# $NetBSD: Makefile,v 1.3 2011/07/05 16:53:58 spz Exp $ .include "bsd.own.mk" @@ -6,7 +6,8 @@ CRYPTODIST=${NETBSDSRCDIR}/crypto .include "${NETBSDSRCDIR}/crypto/Makefile.openssl" regen: - for i in $$(find ${OPENSSLSRC} -name \*86.pl); do \ + for i in $$(find ${OPENSSLSRC} -name \*86.pl) \ + ${OPENSSLSRC}/crypto/x86cpuid.pl; do \ perl -I${OPENSSLSRC}/crypto/perlasm \ -I${OPENSSLSRC}/crypto/bn/asm $$i elf -fPIC \ > $$(basename $$i .pl).S; \ diff --git a/crypto/external/bsd/openssl/lib/libcrypto/arch/i386/aes.inc b/crypto/external/bsd/openssl/lib/libcrypto/arch/i386/aes.inc index fcaad5240f12..4b5a650fc347 100644 --- a/crypto/external/bsd/openssl/lib/libcrypto/arch/i386/aes.inc +++ b/crypto/external/bsd/openssl/lib/libcrypto/arch/i386/aes.inc @@ -1,4 +1,5 @@ .PATH.S: ${.PARSEDIR} AES_SRCS = aes-586.S aesni-586.S AESNI = yes +AESCPPFLAGS = -DAES_ASM -DOPENSSL_IA32_SSE2 .include "../../aes.inc" diff --git a/crypto/external/bsd/openssl/lib/libcrypto/arch/i386/crypto.inc b/crypto/external/bsd/openssl/lib/libcrypto/arch/i386/crypto.inc new file mode 100644 index 000000000000..b4babaf87568 --- /dev/null +++ b/crypto/external/bsd/openssl/lib/libcrypto/arch/i386/crypto.inc @@ -0,0 +1,4 @@ +.PATH.S: ${.PARSEDIR} +CPUID_SRCS = x86cpuid.S +CPUID = yes +.include "../../crypto.inc" diff --git a/crypto/external/bsd/openssl/lib/libcrypto/arch/i386/x86cpuid.S b/crypto/external/bsd/openssl/lib/libcrypto/arch/i386/x86cpuid.S new file mode 100644 index 000000000000..4459fd276e4a --- /dev/null +++ b/crypto/external/bsd/openssl/lib/libcrypto/arch/i386/x86cpuid.S @@ -0,0 +1,291 @@ +.file "x86cpuid.s" +.text +.globl OPENSSL_ia32_cpuid +.type OPENSSL_ia32_cpuid,@function +.align 16 +OPENSSL_ia32_cpuid: +.L_OPENSSL_ia32_cpuid_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + xorl %edx,%edx + pushfl + popl %eax + movl %eax,%ecx + xorl $2097152,%eax + pushl %eax + popfl + pushfl + popl %eax + xorl %eax,%ecx + btl $21,%ecx + jnc .L000done + xorl %eax,%eax + .byte 0x0f,0xa2 + movl %eax,%edi + xorl %eax,%eax + cmpl $1970169159,%ebx + setne %al + movl %eax,%ebp + cmpl $1231384169,%edx + setne %al + orl %eax,%ebp + cmpl $1818588270,%ecx + setne %al + orl %eax,%ebp + jz .L001intel + cmpl $1752462657,%ebx + setne %al + movl %eax,%esi + cmpl $1769238117,%edx + setne %al + orl %eax,%esi + cmpl $1145913699,%ecx + setne %al + orl %eax,%esi + jnz .L001intel + movl $2147483648,%eax + .byte 0x0f,0xa2 + cmpl $2147483656,%eax + jb .L001intel + movl $2147483656,%eax + .byte 0x0f,0xa2 + movzbl %cl,%esi + incl %esi + movl $1,%eax + .byte 0x0f,0xa2 + btl $28,%edx + jnc .L000done + shrl $16,%ebx + andl $255,%ebx + cmpl %esi,%ebx + ja .L000done + andl $4026531839,%edx + jmp .L000done +.L001intel: + cmpl $4,%edi + movl $-1,%edi + jb .L002nocacheinfo + movl $4,%eax + movl $0,%ecx + .byte 0x0f,0xa2 + movl %eax,%edi + shrl $14,%edi + andl $4095,%edi +.L002nocacheinfo: + movl $1,%eax + .byte 0x0f,0xa2 + cmpl $0,%ebp + jne .L003notP4 + andb $15,%ah + cmpb $15,%ah + jne .L003notP4 + orl $1048576,%edx +.L003notP4: + btl $28,%edx + jnc .L000done + andl $4026531839,%edx + cmpl $0,%edi + je .L000done + orl $268435456,%edx + shrl $16,%ebx + cmpb $1,%bl + ja .L000done + andl $4026531839,%edx +.L000done: + movl %edx,%eax + movl %ecx,%edx + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.size OPENSSL_ia32_cpuid,.-.L_OPENSSL_ia32_cpuid_begin +.globl OPENSSL_rdtsc +.type OPENSSL_rdtsc,@function +.align 16 +OPENSSL_rdtsc: +.L_OPENSSL_rdtsc_begin: + xorl %eax,%eax + xorl %edx,%edx + call .L004PIC_me_up +.L004PIC_me_up: + popl %ecx + leal _GLOBAL_OFFSET_TABLE_+[.-.L004PIC_me_up](%ecx),%ecx + movl OPENSSL_ia32cap_P@GOT(%ecx),%ecx + btl $4,(%ecx) + jnc .L005notsc + .byte 0x0f,0x31 +.L005notsc: + ret +.size OPENSSL_rdtsc,.-.L_OPENSSL_rdtsc_begin +.globl OPENSSL_instrument_halt +.type OPENSSL_instrument_halt,@function +.align 16 +OPENSSL_instrument_halt: +.L_OPENSSL_instrument_halt_begin: + call .L006PIC_me_up +.L006PIC_me_up: + popl %ecx + leal _GLOBAL_OFFSET_TABLE_+[.-.L006PIC_me_up](%ecx),%ecx + movl OPENSSL_ia32cap_P@GOT(%ecx),%ecx + btl $4,(%ecx) + jnc .L007nohalt +.long 2421723150 + andl $3,%eax + jnz .L007nohalt + pushfl + popl %eax + btl $9,%eax + jnc .L007nohalt + .byte 0x0f,0x31 + pushl %edx + pushl %eax + hlt + .byte 0x0f,0x31 + subl (%esp),%eax + sbbl 4(%esp),%edx + addl $8,%esp + ret +.L007nohalt: + xorl %eax,%eax + xorl %edx,%edx + ret +.size OPENSSL_instrument_halt,.-.L_OPENSSL_instrument_halt_begin +.globl OPENSSL_far_spin +.type OPENSSL_far_spin,@function +.align 16 +OPENSSL_far_spin: +.L_OPENSSL_far_spin_begin: + pushfl + popl %eax + btl $9,%eax + jnc .L008nospin + movl 4(%esp),%eax + movl 8(%esp),%ecx +.long 2430111262 + xorl %eax,%eax + movl (%ecx),%edx + jmp .L009spin +.align 16 +.L009spin: + incl %eax + cmpl (%ecx),%edx + je .L009spin +.long 529567888 + ret +.L008nospin: + xorl %eax,%eax + xorl %edx,%edx + ret +.size OPENSSL_far_spin,.-.L_OPENSSL_far_spin_begin +.globl OPENSSL_wipe_cpu +.type OPENSSL_wipe_cpu,@function +.align 16 +OPENSSL_wipe_cpu: +.L_OPENSSL_wipe_cpu_begin: + xorl %eax,%eax + xorl %edx,%edx + call .L010PIC_me_up +.L010PIC_me_up: + popl %ecx + leal _GLOBAL_OFFSET_TABLE_+[.-.L010PIC_me_up](%ecx),%ecx + movl OPENSSL_ia32cap_P@GOT(%ecx),%ecx + movl (%ecx),%ecx + btl $1,(%ecx) + jnc .L011no_x87 +.long 4007259865,4007259865,4007259865,4007259865,2430851995 +.L011no_x87: + leal 4(%esp),%eax + ret +.size OPENSSL_wipe_cpu,.-.L_OPENSSL_wipe_cpu_begin +.globl OPENSSL_atomic_add +.type OPENSSL_atomic_add,@function +.align 16 +OPENSSL_atomic_add: +.L_OPENSSL_atomic_add_begin: + movl 4(%esp),%edx + movl 8(%esp),%ecx + pushl %ebx + nop + movl (%edx),%eax +.L012spin: + leal (%eax,%ecx,1),%ebx + nop +.long 447811568 + jne .L012spin + movl %ebx,%eax + popl %ebx + ret +.size OPENSSL_atomic_add,.-.L_OPENSSL_atomic_add_begin +.globl OPENSSL_indirect_call +.type OPENSSL_indirect_call,@function +.align 16 +OPENSSL_indirect_call: +.L_OPENSSL_indirect_call_begin: + pushl %ebp + movl %esp,%ebp + subl $28,%esp + movl 12(%ebp),%ecx + movl %ecx,(%esp) + movl 16(%ebp),%edx + movl %edx,4(%esp) + movl 20(%ebp),%eax + movl %eax,8(%esp) + movl 24(%ebp),%eax + movl %eax,12(%esp) + movl 28(%ebp),%eax + movl %eax,16(%esp) + movl 32(%ebp),%eax + movl %eax,20(%esp) + movl 36(%ebp),%eax + movl %eax,24(%esp) + call *8(%ebp) + movl %ebp,%esp + popl %ebp + ret +.size OPENSSL_indirect_call,.-.L_OPENSSL_indirect_call_begin +.globl OPENSSL_cleanse +.type OPENSSL_cleanse,@function +.align 16 +OPENSSL_cleanse: +.L_OPENSSL_cleanse_begin: + movl 4(%esp),%edx + movl 8(%esp),%ecx + xorl %eax,%eax + cmpl $7,%ecx + jae .L013lot + cmpl $0,%ecx + je .L014ret +.L015little: + movb %al,(%edx) + subl $1,%ecx + leal 1(%edx),%edx + jnz .L015little +.L014ret: + ret +.align 16 +.L013lot: + testl $3,%edx + jz .L016aligned + movb %al,(%edx) + leal -1(%ecx),%ecx + leal 1(%edx),%edx + jmp .L013lot +.L016aligned: + movl %eax,(%edx) + leal -4(%ecx),%ecx + testl $-4,%ecx + leal 4(%edx),%edx + jnz .L016aligned + cmpl $0,%ecx + jne .L015little + ret +.size OPENSSL_cleanse,.-.L_OPENSSL_cleanse_begin +.comm OPENSSL_ia32cap_P,4,4 +.section .init + call OPENSSL_cpuid_setup + jmp .Linitalign +.align 16 +.Linitalign: