| OLD | NEW |
| (Empty) |
| 1 default rel | |
| 2 %define XMMWORD | |
| 3 %define YMMWORD | |
| 4 %define ZMMWORD | |
| 5 section .text code align=64 | |
| 6 | |
| 7 | |
| 8 global OPENSSL_ia32_cpuid | |
| 9 | |
| 10 ALIGN 16 | |
| 11 OPENSSL_ia32_cpuid: | |
| 12 mov QWORD[8+rsp],rdi ;WIN64 prologue | |
| 13 mov QWORD[16+rsp],rsi | |
| 14 mov rax,rsp | |
| 15 $L$SEH_begin_OPENSSL_ia32_cpuid: | |
| 16 mov rdi,rcx | |
| 17 | |
| 18 | |
| 19 | |
| 20 | |
| 21 mov rdi,rcx | |
| 22 mov r8,rbx | |
| 23 | |
| 24 xor eax,eax | |
| 25 mov DWORD[8+rdi],eax | |
| 26 cpuid | |
| 27 mov r11d,eax | |
| 28 | |
| 29 xor eax,eax | |
| 30 cmp ebx,0x756e6547 | |
| 31 setne al | |
| 32 mov r9d,eax | |
| 33 cmp edx,0x49656e69 | |
| 34 setne al | |
| 35 or r9d,eax | |
| 36 cmp ecx,0x6c65746e | |
| 37 setne al | |
| 38 or r9d,eax | |
| 39 jz NEAR $L$intel | |
| 40 | |
| 41 cmp ebx,0x68747541 | |
| 42 setne al | |
| 43 mov r10d,eax | |
| 44 cmp edx,0x69746E65 | |
| 45 setne al | |
| 46 or r10d,eax | |
| 47 cmp ecx,0x444D4163 | |
| 48 setne al | |
| 49 or r10d,eax | |
| 50 jnz NEAR $L$intel | |
| 51 | |
| 52 | |
| 53 | |
| 54 | |
| 55 mov eax,0x80000000 | |
| 56 cpuid | |
| 57 | |
| 58 | |
| 59 cmp eax,0x80000001 | |
| 60 jb NEAR $L$intel | |
| 61 mov r10d,eax | |
| 62 mov eax,0x80000001 | |
| 63 cpuid | |
| 64 | |
| 65 | |
| 66 or r9d,ecx | |
| 67 and r9d,0x00000801 | |
| 68 | |
| 69 cmp r10d,0x80000008 | |
| 70 jb NEAR $L$intel | |
| 71 | |
| 72 mov eax,0x80000008 | |
| 73 cpuid | |
| 74 | |
| 75 movzx r10,cl | |
| 76 inc r10 | |
| 77 | |
| 78 mov eax,1 | |
| 79 cpuid | |
| 80 | |
| 81 bt edx,28 | |
| 82 jnc NEAR $L$generic | |
| 83 shr ebx,16 | |
| 84 cmp bl,r10b | |
| 85 ja NEAR $L$generic | |
| 86 and edx,0xefffffff | |
| 87 jmp NEAR $L$generic | |
| 88 | |
| 89 $L$intel: | |
| 90 cmp r11d,4 | |
| 91 mov r10d,-1 | |
| 92 jb NEAR $L$nocacheinfo | |
| 93 | |
| 94 mov eax,4 | |
| 95 mov ecx,0 | |
| 96 cpuid | |
| 97 mov r10d,eax | |
| 98 shr r10d,14 | |
| 99 and r10d,0xfff | |
| 100 | |
| 101 cmp r11d,7 | |
| 102 jb NEAR $L$nocacheinfo | |
| 103 | |
| 104 mov eax,7 | |
| 105 xor ecx,ecx | |
| 106 cpuid | |
| 107 mov DWORD[8+rdi],ebx | |
| 108 | |
| 109 $L$nocacheinfo: | |
| 110 mov eax,1 | |
| 111 cpuid | |
| 112 | |
| 113 and edx,0xbfefffff | |
| 114 cmp r9d,0 | |
| 115 jne NEAR $L$notintel | |
| 116 or edx,0x40000000 | |
| 117 $L$notintel: | |
| 118 bt edx,28 | |
| 119 jnc NEAR $L$generic | |
| 120 and edx,0xefffffff | |
| 121 cmp r10d,0 | |
| 122 je NEAR $L$generic | |
| 123 | |
| 124 or edx,0x10000000 | |
| 125 shr ebx,16 | |
| 126 cmp bl,1 | |
| 127 ja NEAR $L$generic | |
| 128 and edx,0xefffffff | |
| 129 $L$generic: | |
| 130 and r9d,0x00000800 | |
| 131 and ecx,0xfffff7ff | |
| 132 or r9d,ecx | |
| 133 | |
| 134 mov r10d,edx | |
| 135 bt r9d,27 | |
| 136 jnc NEAR $L$clear_avx | |
| 137 xor ecx,ecx | |
| 138 DB 0x0f,0x01,0xd0 | |
| 139 and eax,6 | |
| 140 cmp eax,6 | |
| 141 je NEAR $L$done | |
| 142 $L$clear_avx: | |
| 143 mov eax,0xefffe7ff | |
| 144 and r9d,eax | |
| 145 and DWORD[8+rdi],0xffffffdf | |
| 146 $L$done: | |
| 147 mov DWORD[4+rdi],r9d | |
| 148 mov DWORD[rdi],r10d | |
| 149 mov rbx,r8 | |
| 150 mov rdi,QWORD[8+rsp] ;WIN64 epilogue | |
| 151 mov rsi,QWORD[16+rsp] | |
| 152 DB 0F3h,0C3h ;repret | |
| 153 $L$SEH_end_OPENSSL_ia32_cpuid: | |
| 154 | |
| OLD | NEW |