#include "config.h"
#include "asm-common.h"
- .globl F(abort)
- .globl F(rijndael_rcon)
+ .extern F(abort)
+ .extern F(rijndael_rcon)
///--------------------------------------------------------------------------
/// Main code.
# define BLKOFF edx // block size in bytes
// Stack the caller's registers.
- push ebp
- push ebx
- push esi
- push edi
+ pushreg ebp
+ pushreg ebx
+ pushreg esi
+ pushreg edi
// Set up our own variables.
mov CTX, [esp + 20] // context base pointer
// We'll need the index registers, which belong to the caller in this
// ABI.
- push rsi
- .seh_pushreg rsi
- push rdi
- .seh_pushreg rdi
- .seh_endprologue
+ pushreg rsi
+ pushreg rdi
// Move arguments to more useful places.
mov rsi, r8 // key material
mov CTX, rcx // context base pointer
#endif
+ endprologue
+
// The initial round key material is taken directly from the input
// key, so copy it over.
#if CPUFAM_AMD64 && ABI_SYSV
9: // All done.
#if CPUFAM_X86
- pop edi
- pop esi
- pop ebx
- pop ebp
+ popreg edi
+ popreg esi
+ popreg ebx
+ popreg ebp
#endif
#if CPUFAM_AMD64 && ABI_WIN
- pop rdi
- pop rsi
+ popreg rdi
+ popreg rsi
#endif
ret
INTFUNC(endswap_block)
// End-swap NKW words starting at SI. The end-swapping table is
// already loaded into XMM5; and it's OK to work in 16-byte chunks.
-#if CPUFAM_AMD64 && ABI_WIN
- .seh_endprologue
-#endif
+ endprologue
mov ecx, NKW
0: movdqu xmm1, [SI]
# define SRC rdx
# define DST r8
# define NR eax
- .seh_endprologue
#endif
+ endprologue
+
// Find the magic endianness-swapping table.
ldgot ecx
movdqa xmm5, [INTADDR(endswap_tab, ecx)]
// might at least provide a hint as to what went wrong; (b) we don't
// have conditional CALLs (and they'd be big anyway); and (c) we can
// write a HLT here as a backstop against `abort' being mad.
-#if CPUFAM_AMD64 && ABI_WIN
- .seh_endprologue
-#endif
+ endprologue
callext F(abort)
0: hlt