Home | History | Annotate | Download | only in crypto
      1 #if defined(__x86_64__)
      2 .text
      3 
      4 .globl	_OPENSSL_ia32_cpuid
      5 .private_extern _OPENSSL_ia32_cpuid
      6 
      7 .p2align	4
      8 _OPENSSL_ia32_cpuid:
      9 
     10 
     11 	movq	%rdi,%rdi
     12 	movq	%rbx,%r8
     13 
     14 	xorl	%eax,%eax
     15 	movl	%eax,8(%rdi)
     16 	cpuid
     17 	movl	%eax,%r11d
     18 
     19 	xorl	%eax,%eax
     20 	cmpl	$1970169159,%ebx
     21 	setne	%al
     22 	movl	%eax,%r9d
     23 	cmpl	$1231384169,%edx
     24 	setne	%al
     25 	orl	%eax,%r9d
     26 	cmpl	$1818588270,%ecx
     27 	setne	%al
     28 	orl	%eax,%r9d
     29 	jz	L$intel
     30 
     31 	cmpl	$1752462657,%ebx
     32 	setne	%al
     33 	movl	%eax,%r10d
     34 	cmpl	$1769238117,%edx
     35 	setne	%al
     36 	orl	%eax,%r10d
     37 	cmpl	$1145913699,%ecx
     38 	setne	%al
     39 	orl	%eax,%r10d
     40 	jnz	L$intel
     41 
     42 
     43 
     44 
     45 	movl	$2147483648,%eax
     46 	cpuid
     47 
     48 
     49 	cmpl	$2147483649,%eax
     50 	jb	L$intel
     51 	movl	%eax,%r10d
     52 	movl	$2147483649,%eax
     53 	cpuid
     54 
     55 
     56 	orl	%ecx,%r9d
     57 	andl	$2049,%r9d
     58 
     59 	cmpl	$2147483656,%r10d
     60 	jb	L$intel
     61 
     62 	movl	$2147483656,%eax
     63 	cpuid
     64 
     65 	movzbq	%cl,%r10
     66 	incq	%r10
     67 
     68 	movl	$1,%eax
     69 	cpuid
     70 
     71 	btl	$28,%edx
     72 	jnc	L$generic
     73 	shrl	$16,%ebx
     74 	cmpb	%r10b,%bl
     75 	ja	L$generic
     76 	andl	$4026531839,%edx
     77 	jmp	L$generic
     78 
     79 L$intel:
     80 	cmpl	$4,%r11d
     81 	movl	$-1,%r10d
     82 	jb	L$nocacheinfo
     83 
     84 	movl	$4,%eax
     85 	movl	$0,%ecx
     86 	cpuid
     87 	movl	%eax,%r10d
     88 	shrl	$14,%r10d
     89 	andl	$4095,%r10d
     90 
     91 	cmpl	$7,%r11d
     92 	jb	L$nocacheinfo
     93 
     94 	movl	$7,%eax
     95 	xorl	%ecx,%ecx
     96 	cpuid
     97 	movl	%ebx,8(%rdi)
     98 
     99 L$nocacheinfo:
    100 	movl	$1,%eax
    101 	cpuid
    102 
    103 	andl	$3220176895,%edx
    104 	cmpl	$0,%r9d
    105 	jne	L$notintel
    106 	orl	$1073741824,%edx
    107 	andb	$15,%ah
    108 	cmpb	$15,%ah
    109 	jne	L$notintel
    110 	orl	$1048576,%edx
    111 L$notintel:
    112 	btl	$28,%edx
    113 	jnc	L$generic
    114 	andl	$4026531839,%edx
    115 	cmpl	$0,%r10d
    116 	je	L$generic
    117 
    118 	orl	$268435456,%edx
    119 	shrl	$16,%ebx
    120 	cmpb	$1,%bl
    121 	ja	L$generic
    122 	andl	$4026531839,%edx
    123 L$generic:
    124 	andl	$2048,%r9d
    125 	andl	$4294965247,%ecx
    126 	orl	%ecx,%r9d
    127 
    128 	movl	%edx,%r10d
    129 	btl	$27,%r9d
    130 	jnc	L$clear_avx
    131 	xorl	%ecx,%ecx
    132 .byte	0x0f,0x01,0xd0
    133 	andl	$6,%eax
    134 	cmpl	$6,%eax
    135 	je	L$done
    136 L$clear_avx:
    137 	movl	$4026525695,%eax
    138 	andl	%eax,%r9d
    139 	andl	$4294967263,8(%rdi)
    140 L$done:
    141 	movl	%r9d,4(%rdi)
    142 	movl	%r10d,0(%rdi)
    143 	movq	%r8,%rbx
    144 	.byte	0xf3,0xc3
    145 
    146 
    147 #endif
    148