/// MA 02111-1307, USA.
///--------------------------------------------------------------------------
-/// External definitions.
+/// Preliminaries.
#include "config.h"
#include "asm-common.h"
+ .arch .aes
+
.extern F(abort)
.extern F(rijndael_rcon)
+ .text
+
///--------------------------------------------------------------------------
/// Main code.
- .arch .aes
- .text
-
/// The AESNI instructions implement a little-endian version of AES, but
/// Catacomb's internal interface presents as big-endian so as to work better
/// with things like GCM. We therefore maintain the round keys in
FUNC(rijndael_setup_x86ish_aesni)
-#define SI WHOLE(si)
-#define DI WHOLE(di)
-
#if CPUFAM_X86
// Arguments are on the stack. We'll need to stack the caller's
// register veriables, but we'll manage.
-# define CTX ebp // context pointer
-# define BLKSZ [esp + 24] // block size
+# define CTX BP // context pointer
+# define BLKSZ [SP + 24] // block size
# define KSZ ebx // key size
# define NKW edx // total number of key words
# define BLKOFF edx // block size in bytes
// Stack the caller's registers.
- pushreg ebp
+ pushreg BP
pushreg ebx
pushreg esi
pushreg edi
// Set up our own variables.
- mov CTX, [esp + 20] // context base pointer
- mov SI, [esp + 28] // key material
- mov KSZ, [esp + 32] // key size, in words
+ mov CTX, [SP + 20] // context base pointer
+ mov SI, [SP + 28] // key material
+ mov KSZ, [SP + 32] // key size, in words
#endif
#if CPUFAM_AMD64 && ABI_SYSV
popreg edi
popreg esi
popreg ebx
- popreg ebp
+ popreg BP
#endif
#if CPUFAM_AMD64 && ABI_WIN
popreg rdi
# define DST edx
# define NR ecx
- mov K, [esp + 4]
- mov SRC, [esp + 8]
+ mov K, [SP + 4]
+ mov SRC, [SP + 8]
#endif
#if CPUFAM_AMD64 && ABI_SYSV
add K, 16
pxor xmm0, xmm1
#if CPUFAM_X86
- mov DST, [esp + 12]
+ mov DST, [SP + 12]
#endif
// Dispatch to the correct code.