Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / boringssl / win-x86_64 / crypto / cpu-x86_64-asm.asm
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         and     ah,15
118         cmp     ah,15
119         jne     NEAR $L$notintel
120         or      edx,0x00100000
121 $L$notintel:
122         bt      edx,28
123         jnc     NEAR $L$generic
124         and     edx,0xefffffff
125         cmp     r10d,0
126         je      NEAR $L$generic
127
128         or      edx,0x10000000
129         shr     ebx,16
130         cmp     bl,1
131         ja      NEAR $L$generic
132         and     edx,0xefffffff
133 $L$generic:
134         and     r9d,0x00000800
135         and     ecx,0xfffff7ff
136         or      r9d,ecx
137
138         mov     r10d,edx
139         bt      r9d,27
140         jnc     NEAR $L$clear_avx
141         xor     ecx,ecx
142 DB      0x0f,0x01,0xd0
143         and     eax,6
144         cmp     eax,6
145         je      NEAR $L$done
146 $L$clear_avx:
147         mov     eax,0xefffe7ff
148         and     r9d,eax
149         and     DWORD[8+rdi],0xffffffdf
150 $L$done:
151         mov     DWORD[4+rdi],r9d
152         mov     DWORD[rdi],r10d
153         mov     rbx,r8
154         mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue
155         mov     rsi,QWORD[16+rsp]
156         DB      0F3h,0C3h               ;repret
157 $L$SEH_end_OPENSSL_ia32_cpuid:
158