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 |