]> git.proxmox.com Git - ceph.git/blame - ceph/src/spdk/intel-ipsec-mb/include/save_xmms.asm
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / spdk / intel-ipsec-mb / include / save_xmms.asm
CommitLineData
11fdf7f2
TL
1;;
2;; Copyright (c) 2012-2018, Intel Corporation
3;;
4;; Redistribution and use in source and binary forms, with or without
5;; modification, are permitted provided that the following conditions are met:
6;;
7;; * Redistributions of source code must retain the above copyright notice,
8;; this list of conditions and the following disclaimer.
9;; * Redistributions in binary form must reproduce the above copyright
10;; notice, this list of conditions and the following disclaimer in the
11;; documentation and/or other materials provided with the distribution.
12;; * Neither the name of Intel Corporation nor the names of its contributors
13;; may be used to endorse or promote products derived from this software
14;; without specific prior written permission.
15;;
16;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17;; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18;; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19;; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
20;; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22;; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23;; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24;; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25;; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26;;
27
f67539c2 28%include "include/os.asm"
11fdf7f2
TL
29
30%ifdef LINUX
31%define ARG1 rdi
32%else
33%define ARG1 rcx
34%endif
35
36section .text
37; void save_xmms(UINT128 array[10])
38MKGLOBAL(save_xmms,function,internal)
39save_xmms:
40 movdqa [ARG1 + 0*16], xmm6
41 movdqa [ARG1 + 1*16], xmm7
42 movdqa [ARG1 + 2*16], xmm8
43 movdqa [ARG1 + 3*16], xmm9
44 movdqa [ARG1 + 4*16], xmm10
45 movdqa [ARG1 + 5*16], xmm11
46 movdqa [ARG1 + 6*16], xmm12
47 movdqa [ARG1 + 7*16], xmm13
48 movdqa [ARG1 + 8*16], xmm14
49 movdqa [ARG1 + 9*16], xmm15
50 ret
51
52
53; void restore_xmms(UINT128 array[10])
54MKGLOBAL(restore_xmms,function,internal)
55restore_xmms:
56 movdqa xmm6, [ARG1 + 0*16]
57 movdqa xmm7, [ARG1 + 1*16]
58 movdqa xmm8, [ARG1 + 2*16]
59 movdqa xmm9, [ARG1 + 3*16]
60 movdqa xmm10, [ARG1 + 4*16]
61 movdqa xmm11, [ARG1 + 5*16]
62 movdqa xmm12, [ARG1 + 6*16]
63 movdqa xmm13, [ARG1 + 7*16]
64 movdqa xmm14, [ARG1 + 8*16]
65 movdqa xmm15, [ARG1 + 9*16]
f67539c2
TL
66%ifdef SAFE_DATA
67 ;; Clear potential sensitive data stored in stack
68 pxor xmm0, xmm0
69 movdqa [ARG1 + 0 * 16], xmm0
70 movdqa [ARG1 + 1 * 16], xmm0
71 movdqa [ARG1 + 2 * 16], xmm0
72 movdqa [ARG1 + 3 * 16], xmm0
73 movdqa [ARG1 + 4 * 16], xmm0
74 movdqa [ARG1 + 5 * 16], xmm0
75 movdqa [ARG1 + 6 * 16], xmm0
76 movdqa [ARG1 + 7 * 16], xmm0
77 movdqa [ARG1 + 8 * 16], xmm0
78 movdqa [ARG1 + 9 * 16], xmm0
79%endif
80
11fdf7f2
TL
81 ret
82
83
84 ; void save_xmms_avx(UINT128 array[10])
85MKGLOBAL(save_xmms_avx,function,internal)
86save_xmms_avx:
87 vmovdqa [ARG1 + 0*16], xmm6
88 vmovdqa [ARG1 + 1*16], xmm7
89 vmovdqa [ARG1 + 2*16], xmm8
90 vmovdqa [ARG1 + 3*16], xmm9
91 vmovdqa [ARG1 + 4*16], xmm10
92 vmovdqa [ARG1 + 5*16], xmm11
93 vmovdqa [ARG1 + 6*16], xmm12
94 vmovdqa [ARG1 + 7*16], xmm13
95 vmovdqa [ARG1 + 8*16], xmm14
96 vmovdqa [ARG1 + 9*16], xmm15
97 ret
98
99
100; void restore_xmms_avx(UINT128 array[10])
101MKGLOBAL(restore_xmms_avx,function,internal)
102restore_xmms_avx:
103 vmovdqa xmm6, [ARG1 + 0*16]
104 vmovdqa xmm7, [ARG1 + 1*16]
105 vmovdqa xmm8, [ARG1 + 2*16]
106 vmovdqa xmm9, [ARG1 + 3*16]
107 vmovdqa xmm10, [ARG1 + 4*16]
108 vmovdqa xmm11, [ARG1 + 5*16]
109 vmovdqa xmm12, [ARG1 + 6*16]
110 vmovdqa xmm13, [ARG1 + 7*16]
111 vmovdqa xmm14, [ARG1 + 8*16]
112 vmovdqa xmm15, [ARG1 + 9*16]
f67539c2
TL
113
114%ifdef SAFE_DATA
115 ;; Clear potential sensitive data stored in stack
116 vpxor xmm0, xmm0
117 vmovdqa [ARG1 + 0 * 16], xmm0
118 vmovdqa [ARG1 + 1 * 16], xmm0
119 vmovdqa [ARG1 + 2 * 16], xmm0
120 vmovdqa [ARG1 + 3 * 16], xmm0
121 vmovdqa [ARG1 + 4 * 16], xmm0
122 vmovdqa [ARG1 + 5 * 16], xmm0
123 vmovdqa [ARG1 + 6 * 16], xmm0
124 vmovdqa [ARG1 + 7 * 16], xmm0
125 vmovdqa [ARG1 + 8 * 16], xmm0
126 vmovdqa [ARG1 + 9 * 16], xmm0
127%endif
11fdf7f2
TL
128 ret
129
130%ifdef LINUX
131section .note.GNU-stack noalloc noexec nowrite progbits
132%endif