; Copyright(c) 2011-2016 Intel Corporation All rights reserved.
;
; Redistribution and use in source and binary forms, with or without
-; modification, are permitted provided that the following conditions
+; modification, are permitted provided that the following conditions
; are met:
; * Redistributions of source code must retain the above copyright
; notice, this list of conditions and the following disclaimer.
default rel
[bits 64]
-%ifidn __OUTPUT_FORMAT__, elf64
-%define WRT_OPT wrt ..plt
-%else
-%define WRT_OPT
-%endif
-
%include "reg_sizes.asm"
-extern aesni_gcm128_init_sse
-extern aesni_gcm128_init_avx_gen4
-extern aesni_gcm128_init_avx_gen2
-
-extern aesni_gcm128_enc_sse
-extern aesni_gcm128_enc_avx_gen4
-extern aesni_gcm128_enc_avx_gen2
-extern aesni_gcm128_enc_update_sse
-extern aesni_gcm128_enc_update_avx_gen4
-extern aesni_gcm128_enc_update_avx_gen2
-extern aesni_gcm128_enc_finalize_sse
-extern aesni_gcm128_enc_finalize_avx_gen4
-extern aesni_gcm128_enc_finalize_avx_gen2
-
-extern aesni_gcm128_dec_sse
-extern aesni_gcm128_dec_avx_gen4
-extern aesni_gcm128_dec_avx_gen2
-extern aesni_gcm128_dec_update_sse
-extern aesni_gcm128_dec_update_avx_gen4
-extern aesni_gcm128_dec_update_avx_gen2
-extern aesni_gcm128_dec_finalize_sse
-extern aesni_gcm128_dec_finalize_avx_gen4
-extern aesni_gcm128_dec_finalize_avx_gen2
-
-extern aesni_gcm128_precomp_sse
-extern aesni_gcm128_precomp_avx_gen4
-extern aesni_gcm128_precomp_avx_gen2
-
-
-
-extern aesni_gcm256_init_sse
-extern aesni_gcm256_init_avx_gen4
-extern aesni_gcm256_init_avx_gen2
-
-extern aesni_gcm256_enc_sse
-extern aesni_gcm256_enc_avx_gen4
-extern aesni_gcm256_enc_avx_gen2
-extern aesni_gcm256_enc_update_sse
-extern aesni_gcm256_enc_update_avx_gen4
-extern aesni_gcm256_enc_update_avx_gen2
-extern aesni_gcm256_enc_finalize_sse
-extern aesni_gcm256_enc_finalize_avx_gen4
-extern aesni_gcm256_enc_finalize_avx_gen2
-
-extern aesni_gcm256_dec_sse
-extern aesni_gcm256_dec_avx_gen4
-extern aesni_gcm256_dec_avx_gen2
-extern aesni_gcm256_dec_update_sse
-extern aesni_gcm256_dec_update_avx_gen4
-extern aesni_gcm256_dec_update_avx_gen2
-extern aesni_gcm256_dec_finalize_sse
-extern aesni_gcm256_dec_finalize_avx_gen4
-extern aesni_gcm256_dec_finalize_avx_gen2
-
-extern aesni_gcm256_precomp_sse
-extern aesni_gcm256_precomp_avx_gen4
-extern aesni_gcm256_precomp_avx_gen2
+extern aes_gcm_init_128_sse
+extern aes_gcm_init_128_avx_gen4
+extern aes_gcm_init_128_avx_gen2
+
+extern aes_gcm_enc_128_sse
+extern aes_gcm_enc_128_avx_gen4
+extern aes_gcm_enc_128_avx_gen2
+extern aes_gcm_enc_128_update_sse
+extern aes_gcm_enc_128_update_avx_gen4
+extern aes_gcm_enc_128_update_avx_gen2
+extern aes_gcm_enc_128_finalize_sse
+extern aes_gcm_enc_128_finalize_avx_gen4
+extern aes_gcm_enc_128_finalize_avx_gen2
+
+extern aes_gcm_dec_128_sse
+extern aes_gcm_dec_128_avx_gen4
+extern aes_gcm_dec_128_avx_gen2
+extern aes_gcm_dec_128_update_sse
+extern aes_gcm_dec_128_update_avx_gen4
+extern aes_gcm_dec_128_update_avx_gen2
+extern aes_gcm_dec_128_finalize_sse
+extern aes_gcm_dec_128_finalize_avx_gen4
+extern aes_gcm_dec_128_finalize_avx_gen2
+
+extern aes_gcm_precomp_128_sse
+extern aes_gcm_precomp_128_avx_gen4
+extern aes_gcm_precomp_128_avx_gen2
+
+extern aes_gcm_init_256_sse
+extern aes_gcm_init_256_avx_gen4
+extern aes_gcm_init_256_avx_gen2
+
+extern aes_gcm_enc_256_sse
+extern aes_gcm_enc_256_avx_gen4
+extern aes_gcm_enc_256_avx_gen2
+extern aes_gcm_enc_256_update_sse
+extern aes_gcm_enc_256_update_avx_gen4
+extern aes_gcm_enc_256_update_avx_gen2
+extern aes_gcm_enc_256_finalize_sse
+extern aes_gcm_enc_256_finalize_avx_gen4
+extern aes_gcm_enc_256_finalize_avx_gen2
+
+extern aes_gcm_dec_256_sse
+extern aes_gcm_dec_256_avx_gen4
+extern aes_gcm_dec_256_avx_gen2
+extern aes_gcm_dec_256_update_sse
+extern aes_gcm_dec_256_update_avx_gen4
+extern aes_gcm_dec_256_update_avx_gen2
+extern aes_gcm_dec_256_finalize_sse
+extern aes_gcm_dec_256_finalize_avx_gen4
+extern aes_gcm_dec_256_finalize_avx_gen2
+
+extern aes_gcm_precomp_256_sse
+extern aes_gcm_precomp_256_avx_gen4
+extern aes_gcm_precomp_256_avx_gen2
+
+%if (AS_FEATURE_LEVEL) >= 10
+extern aes_gcm_precomp_128_vaes_avx512
+extern aes_gcm_init_128_vaes_avx512
+extern aes_gcm_enc_128_update_vaes_avx512
+extern aes_gcm_dec_128_update_vaes_avx512
+extern aes_gcm_enc_128_finalize_vaes_avx512
+extern aes_gcm_dec_128_finalize_vaes_avx512
+extern aes_gcm_enc_128_vaes_avx512
+extern aes_gcm_dec_128_vaes_avx512
+
+extern aes_gcm_precomp_256_vaes_avx512
+extern aes_gcm_init_256_vaes_avx512
+extern aes_gcm_enc_256_update_vaes_avx512
+extern aes_gcm_dec_256_update_vaes_avx512
+extern aes_gcm_enc_256_finalize_vaes_avx512
+extern aes_gcm_dec_256_finalize_vaes_avx512
+extern aes_gcm_enc_256_vaes_avx512
+extern aes_gcm_dec_256_vaes_avx512
+%endif
section .text
;;;;
; instantiate aesni_gcm interfaces init, enc, enc_update, enc_finalize, dec, dec_update, dec_finalize and precomp
;;;;
-mbin_interface aesni_gcm128_init
-mbin_dispatch_init aesni_gcm128_init, aesni_gcm128_init_sse, aesni_gcm128_init_avx_gen2, aesni_gcm128_init_avx_gen4
+mbin_interface aes_gcm_init_128
+mbin_dispatch_init7 aes_gcm_init_128, aes_gcm_init_128_sse, aes_gcm_init_128_sse, aes_gcm_init_128_avx_gen2, aes_gcm_init_128_avx_gen4, aes_gcm_init_128_avx_gen4, aes_gcm_init_128_vaes_avx512
-mbin_interface aesni_gcm128_enc
-mbin_dispatch_init aesni_gcm128_enc, aesni_gcm128_enc_sse, aesni_gcm128_enc_avx_gen2, aesni_gcm128_enc_avx_gen4
+mbin_interface aes_gcm_enc_128
+mbin_dispatch_init7 aes_gcm_enc_128, aes_gcm_enc_128_sse, aes_gcm_enc_128_sse, aes_gcm_enc_128_avx_gen2, aes_gcm_enc_128_avx_gen4, aes_gcm_enc_128_avx_gen4, aes_gcm_enc_128_vaes_avx512
-mbin_interface aesni_gcm128_enc_update
-mbin_dispatch_init aesni_gcm128_enc_update, aesni_gcm128_enc_update_sse, aesni_gcm128_enc_update_avx_gen2, aesni_gcm128_enc_update_avx_gen4
+mbin_interface aes_gcm_enc_128_update
+mbin_dispatch_init7 aes_gcm_enc_128_update, aes_gcm_enc_128_update_sse, aes_gcm_enc_128_update_sse, aes_gcm_enc_128_update_avx_gen2, aes_gcm_enc_128_update_avx_gen4, aes_gcm_enc_128_update_avx_gen4, aes_gcm_enc_128_update_vaes_avx512
-mbin_interface aesni_gcm128_enc_finalize
-mbin_dispatch_init aesni_gcm128_enc_finalize, aesni_gcm128_enc_finalize_sse, aesni_gcm128_enc_finalize_avx_gen2, aesni_gcm128_enc_finalize_avx_gen4
+mbin_interface aes_gcm_enc_128_finalize
+mbin_dispatch_init7 aes_gcm_enc_128_finalize, aes_gcm_enc_128_finalize_sse, aes_gcm_enc_128_finalize_sse, aes_gcm_enc_128_finalize_avx_gen2, aes_gcm_enc_128_finalize_avx_gen4, aes_gcm_enc_128_finalize_avx_gen4, aes_gcm_enc_128_finalize_vaes_avx512
-mbin_interface aesni_gcm128_dec
-mbin_dispatch_init aesni_gcm128_dec, aesni_gcm128_dec_sse, aesni_gcm128_dec_avx_gen2, aesni_gcm128_dec_avx_gen4
+mbin_interface aes_gcm_dec_128
+mbin_dispatch_init7 aes_gcm_dec_128, aes_gcm_dec_128_sse, aes_gcm_dec_128_sse, aes_gcm_dec_128_avx_gen2, aes_gcm_dec_128_avx_gen4, aes_gcm_dec_128_avx_gen4, aes_gcm_dec_128_vaes_avx512
-mbin_interface aesni_gcm128_dec_update
-mbin_dispatch_init aesni_gcm128_dec_update, aesni_gcm128_dec_update_sse, aesni_gcm128_dec_update_avx_gen2, aesni_gcm128_dec_update_avx_gen4
+mbin_interface aes_gcm_dec_128_update
+mbin_dispatch_init7 aes_gcm_dec_128_update, aes_gcm_dec_128_update_sse, aes_gcm_dec_128_update_sse, aes_gcm_dec_128_update_avx_gen2, aes_gcm_dec_128_update_avx_gen4, aes_gcm_dec_128_update_avx_gen4, aes_gcm_dec_128_update_vaes_avx512
-mbin_interface aesni_gcm128_dec_finalize
-mbin_dispatch_init aesni_gcm128_dec_finalize, aesni_gcm128_dec_finalize_sse, aesni_gcm128_dec_finalize_avx_gen2, aesni_gcm128_dec_finalize_avx_gen4
+mbin_interface aes_gcm_dec_128_finalize
+mbin_dispatch_init7 aes_gcm_dec_128_finalize, aes_gcm_dec_128_finalize_sse, aes_gcm_dec_128_finalize_sse, aes_gcm_dec_128_finalize_avx_gen2, aes_gcm_dec_128_finalize_avx_gen4, aes_gcm_dec_128_finalize_avx_gen4, aes_gcm_dec_128_finalize_vaes_avx512
-mbin_interface aesni_gcm128_precomp
-mbin_dispatch_init aesni_gcm128_precomp, aesni_gcm128_precomp_sse, aesni_gcm128_precomp_avx_gen2, aesni_gcm128_precomp_avx_gen4
+mbin_interface aes_gcm_precomp_128
+mbin_dispatch_init7 aes_gcm_precomp_128, aes_gcm_precomp_128_sse, aes_gcm_precomp_128_sse, aes_gcm_precomp_128_avx_gen2, aes_gcm_precomp_128_avx_gen4, aes_gcm_precomp_128_avx_gen4, aes_gcm_precomp_128_vaes_avx512
;;;;
; instantiate aesni_gcm interfaces init, enc, enc_update, enc_finalize, dec, dec_update, dec_finalize and precomp
;;;;
-mbin_interface aesni_gcm256_init
-mbin_dispatch_init aesni_gcm256_init, aesni_gcm256_init_sse, aesni_gcm256_init_avx_gen2, aesni_gcm256_init_avx_gen4
+mbin_interface aes_gcm_init_256
+mbin_dispatch_init7 aes_gcm_init_256, aes_gcm_init_256_sse, aes_gcm_init_256_sse, aes_gcm_init_256_avx_gen2, aes_gcm_init_256_avx_gen4, aes_gcm_init_256_avx_gen4, aes_gcm_init_256_vaes_avx512
-mbin_interface aesni_gcm256_enc
-mbin_dispatch_init aesni_gcm256_enc, aesni_gcm256_enc_sse, aesni_gcm256_enc_avx_gen2, aesni_gcm256_enc_avx_gen4
+mbin_interface aes_gcm_enc_256
+mbin_dispatch_init7 aes_gcm_enc_256, aes_gcm_enc_256_sse, aes_gcm_enc_256_sse, aes_gcm_enc_256_avx_gen2, aes_gcm_enc_256_avx_gen4, aes_gcm_enc_256_avx_gen4, aes_gcm_enc_256_vaes_avx512
-mbin_interface aesni_gcm256_enc_update
-mbin_dispatch_init aesni_gcm256_enc_update, aesni_gcm256_enc_update_sse, aesni_gcm256_enc_update_avx_gen2, aesni_gcm256_enc_update_avx_gen4
+mbin_interface aes_gcm_enc_256_update
+mbin_dispatch_init7 aes_gcm_enc_256_update, aes_gcm_enc_256_update_sse, aes_gcm_enc_256_update_sse, aes_gcm_enc_256_update_avx_gen2, aes_gcm_enc_256_update_avx_gen4, aes_gcm_enc_256_update_avx_gen4, aes_gcm_enc_256_update_vaes_avx512
-mbin_interface aesni_gcm256_enc_finalize
-mbin_dispatch_init aesni_gcm256_enc_finalize, aesni_gcm256_enc_finalize_sse, aesni_gcm256_enc_finalize_avx_gen2, aesni_gcm256_enc_finalize_avx_gen4
+mbin_interface aes_gcm_enc_256_finalize
+mbin_dispatch_init7 aes_gcm_enc_256_finalize, aes_gcm_enc_256_finalize_sse, aes_gcm_enc_256_finalize_sse, aes_gcm_enc_256_finalize_avx_gen2, aes_gcm_enc_256_finalize_avx_gen4, aes_gcm_enc_256_finalize_avx_gen4, aes_gcm_enc_256_finalize_vaes_avx512
-mbin_interface aesni_gcm256_dec
-mbin_dispatch_init aesni_gcm256_dec, aesni_gcm256_dec_sse, aesni_gcm256_dec_avx_gen2, aesni_gcm256_dec_avx_gen4
+mbin_interface aes_gcm_dec_256
+mbin_dispatch_init7 aes_gcm_dec_256, aes_gcm_dec_256_sse, aes_gcm_dec_256_sse, aes_gcm_dec_256_avx_gen2, aes_gcm_dec_256_avx_gen4, aes_gcm_dec_256_avx_gen4, aes_gcm_dec_256_vaes_avx512
-mbin_interface aesni_gcm256_dec_update
-mbin_dispatch_init aesni_gcm256_dec_update, aesni_gcm256_dec_update_sse, aesni_gcm256_dec_update_avx_gen2, aesni_gcm256_dec_update_avx_gen4
+mbin_interface aes_gcm_dec_256_update
+mbin_dispatch_init7 aes_gcm_dec_256_update, aes_gcm_dec_256_update_sse, aes_gcm_dec_256_update_sse, aes_gcm_dec_256_update_avx_gen2, aes_gcm_dec_256_update_avx_gen4, aes_gcm_dec_256_update_avx_gen4, aes_gcm_dec_256_update_vaes_avx512
-mbin_interface aesni_gcm256_dec_finalize
-mbin_dispatch_init aesni_gcm256_dec_finalize, aesni_gcm256_dec_finalize_sse, aesni_gcm256_dec_finalize_avx_gen2, aesni_gcm256_dec_finalize_avx_gen4
+mbin_interface aes_gcm_dec_256_finalize
+mbin_dispatch_init7 aes_gcm_dec_256_finalize, aes_gcm_dec_256_finalize_sse, aes_gcm_dec_256_finalize_sse, aes_gcm_dec_256_finalize_avx_gen2, aes_gcm_dec_256_finalize_avx_gen4, aes_gcm_dec_256_finalize_avx_gen4, aes_gcm_dec_256_finalize_vaes_avx512
-mbin_interface aesni_gcm256_precomp
-mbin_dispatch_init aesni_gcm256_precomp, aesni_gcm256_precomp_sse, aesni_gcm256_precomp_avx_gen2, aesni_gcm256_precomp_avx_gen4
+mbin_interface aes_gcm_precomp_256
+mbin_dispatch_init7 aes_gcm_precomp_256, aes_gcm_precomp_256_sse, aes_gcm_precomp_256_sse, aes_gcm_precomp_256_avx_gen2, aes_gcm_precomp_256_avx_gen4, aes_gcm_precomp_256_avx_gen4, aes_gcm_precomp_256_vaes_avx512
;;; func core, ver, snum
-slversion aesni_gcm128_enc, 00, 00, 0280
-slversion aesni_gcm128_dec, 00, 00, 0281
-slversion aesni_gcm128_init, 00, 00, 0282
-slversion aesni_gcm128_enc_update, 00, 00, 0283
-slversion aesni_gcm128_dec_update, 00, 00, 0284
-slversion aesni_gcm128_enc_finalize, 00, 00, 0285
-slversion aesni_gcm128_dec_finalize, 00, 00, 0286
-slversion aesni_gcm256_enc, 00, 00, 0288
-slversion aesni_gcm256_dec, 00, 00, 0289
-slversion aesni_gcm256_init, 00, 00, 028a
-slversion aesni_gcm256_enc_update, 00, 00, 028b
-slversion aesni_gcm256_dec_update, 00, 00, 028c
-slversion aesni_gcm256_enc_finalize, 00, 00, 028d
-slversion aesni_gcm256_dec_finalize, 00, 00, 028e
+slversion aes_gcm_enc_128, 00, 00, 02c0
+slversion aes_gcm_dec_128, 00, 00, 02c1
+slversion aes_gcm_init_128, 00, 00, 02c2
+slversion aes_gcm_enc_128_update, 00, 00, 02c3
+slversion aes_gcm_dec_128_update, 00, 00, 02c4
+slversion aes_gcm_enc_128_finalize, 00, 00, 02c5
+slversion aes_gcm_dec_128_finalize, 00, 00, 02c6
+slversion aes_gcm_enc_256, 00, 00, 02d0
+slversion aes_gcm_dec_256, 00, 00, 02d1
+slversion aes_gcm_init_256, 00, 00, 02d2
+slversion aes_gcm_enc_256_update, 00, 00, 02d3
+slversion aes_gcm_dec_256_update, 00, 00, 02d4
+slversion aes_gcm_enc_256_finalize, 00, 00, 02d5
+slversion aes_gcm_dec_256_finalize, 00, 00, 02d6