2 * Copyright (c) 2010 Konstantin Belousov <kib@FreeBSD.org>
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * $FreeBSD: src/sys/crypto/aesni/aesencdec_i386.S,v 1.1 2010/07/23 11:00:46 kib Exp $
29 #include <machine/asmacros.h>
34 .cfi_adjust_cfa_offset 4
36 movl 8(%ebp),%ecx /* rounds */
38 movdqu (%edx),%xmm0 /* from */
39 movl 24(%ebp),%eax /* iv */
45 movl 12(%ebp),%eax /* key */
49 // aesenc (%eax),%xmm0
50 .byte 0x66,0x0f,0x38,0xdc,0x00
53 // aesenclast (%eax),%xmm0
54 .byte 0x66,0x0f,0x38,0xdd,0x00
56 movdqu %xmm0,(%eax) /* to */
58 .cfi_adjust_cfa_offset -4
66 .cfi_adjust_cfa_offset 4
68 movl 8(%ebp),%ecx /* rounds */
70 movdqu (%edx),%xmm0 /* from */
71 movl 12(%ebp),%eax /* key */
75 // aesdec (%eax),%xmm0
76 .byte 0x66,0x0f,0x38,0xde,0x00
79 // aesdeclast (%eax),%xmm0
80 .byte 0x66,0x0f,0x38,0xdf,0x00
88 movdqu %xmm0,(%eax) /* to */
90 .cfi_adjust_cfa_offset -4
95 ENTRY(aesni_decrypt_cbc)
98 .cfi_adjust_cfa_offset 4
102 movl 12(%ebp),%eax /* key */
103 movl 16(%ebp),%ecx /* length */
105 movl 20(%ebp),%ebx /* buf */
107 movdqu (%esi),%xmm1 /* iv */
108 movl 8(%ebp),%esi /* rounds */
114 // aesdec 0x10(%eax),%xmm0
115 .byte 0x66,0x0f,0x38,0xde,0x40,0x10
116 // aesdec 0x20(%eax),%xmm0
117 .byte 0x66,0x0f,0x38,0xde,0x40,0x20
118 // aesdec 0x30(%eax),%xmm0
119 .byte 0x66,0x0f,0x38,0xde,0x40,0x30
120 // aesdec 0x40(%eax),%xmm0
121 .byte 0x66,0x0f,0x38,0xde,0x40,0x40
122 // aesdec 0x50(%eax),%xmm0
123 .byte 0x66,0x0f,0x38,0xde,0x40,0x50
124 // aesdec 0x60(%eax),%xmm0
125 .byte 0x66,0x0f,0x38,0xde,0x40,0x60
126 // aesdec 0x70(%eax),%xmm0
127 .byte 0x66,0x0f,0x38,0xde,0x40,0x70
128 // aesdec 0x80(%eax),%xmm0
129 .byte 0x66,0x0f,0x38,0xde,0x80,0x80,0x00,0x00,0x00
130 // aesdec 0x90(%eax),%xmm0
131 .byte 0x66,0x0f,0x38,0xde,0x80,0x90,0x00,0x00,0x00
133 // aesdeclast 0xa0(%eax),%xmm0
134 .byte 0x66,0x0f,0x38,0xdf,0x80,0xa0,0x00,0x00,0x00
137 // aesdec 0xa0(%eax),%xmm0
138 .byte 0x66,0x0f,0x38,0xde,0x80,0xa0,0x00,0x00,0x00
139 // aesdec 0xb0(%eax),%xmm0
140 .byte 0x66,0x0f,0x38,0xde,0x80,0xb0,0x00,0x00,0x00
142 // aesdeclast 0xc0(%eax),%xmm0
143 .byte 0x66,0x0f,0x38,0xdf,0x80,0xc0,0x00,0x00,0x00
146 // aesdec 0xc0(%eax),%xmm0
147 .byte 0x66,0x0f,0x38,0xde,0x80,0xc0,0x00,0x00,0x00
148 // aesdec 0xd0(%eax),%xmm0
149 .byte 0x66,0x0f,0x38,0xde,0x80,0xd0,0x00,0x00,0x00
150 // aesdeclast 0xe0(%eax),%xmm0
151 .byte 0x66,0x0f,0x38,0xdf,0x80,0xe0,0x00,0x00,0x00
163 .cfi_adjust_cfa_offset -4
166 END(aesni_decrypt_cbc)