#pragma once /** @file @brief prototype of asm function @author MITSUNARI Shigeo(@herumi) @license modified new BSD license http://opensource.org/licenses/BSD-3-Clause */ #include #define MCL_FP_DEF_FUNC_SUB(n, suf) \ void mcl_fp_add ## n ## suf(mcl::fp::Unit* z, const mcl::fp::Unit* x, const mcl::fp::Unit* y, const mcl::fp::Unit* p); \ void mcl_fp_addNF ## n ## suf(mcl::fp::Unit* z, const mcl::fp::Unit* x, const mcl::fp::Unit* y, const mcl::fp::Unit* p); \ void mcl_fp_sub ## n ## suf(mcl::fp::Unit* z, const mcl::fp::Unit* x, const mcl::fp::Unit* y, const mcl::fp::Unit* p); \ void mcl_fp_subNF ## n ## suf(mcl::fp::Unit* z, const mcl::fp::Unit* x, const mcl::fp::Unit* y, const mcl::fp::Unit* p); \ void mcl_fp_shr1_ ## n ## suf(mcl::fp::Unit*y, const mcl::fp::Unit* x); \ mcl::fp::Unit mcl_fp_addPre ## n ## suf(mcl::fp::Unit* z, const mcl::fp::Unit* x, const mcl::fp::Unit* y); \ mcl::fp::Unit mcl_fp_subPre ## n ## suf(mcl::fp::Unit* z, const mcl::fp::Unit* x, const mcl::fp::Unit* y); \ void mcl_fp_mulUnitPre ## n ## suf(mcl::fp::Unit* z, const mcl::fp::Unit* x, mcl::fp::Unit y); \ void mcl_fpDbl_mulPre ## n ## suf(mcl::fp::Unit* z, const mcl::fp::Unit* x, const mcl::fp::Unit* y); \ void mcl_fpDbl_sqrPre ## n ## suf(mcl::fp::Unit* y, const mcl::fp::Unit* x); \ void mcl_fp_mont ## n ## suf(mcl::fp::Unit* z, const mcl::fp::Unit* x, const mcl::fp::Unit* y, const mcl::fp::Unit* p); \ void mcl_fp_montNF ## n ## suf(mcl::fp::Unit* z, const mcl::fp::Unit* x, const mcl::fp::Unit* y, const mcl::fp::Unit* p); \ void mcl_fp_montRed ## n ## suf(mcl::fp::Unit* z, const mcl::fp::Unit* xy, const mcl::fp::Unit* p); \ void mcl_fpDbl_add ## n ## suf(mcl::fp::Unit* z, const mcl::fp::Unit* x, const mcl::fp::Unit* y, const mcl::fp::Unit* p); \ void mcl_fpDbl_sub ## n ## suf(mcl::fp::Unit* z, const mcl::fp::Unit* x, const mcl::fp::Unit* y, const mcl::fp::Unit* p); #define MCL_FP_DEF_FUNC(n) \ MCL_FP_DEF_FUNC_SUB(n, L) \ MCL_FP_DEF_FUNC_SUB(n, Lbmi2) #define MCL_FP_DEF_FUNC_SPECIAL(suf) \ void mcl_fpDbl_mod_NIST_P192 ## suf(mcl::fp::Unit* z, const mcl::fp::Unit* xy, const mcl::fp::Unit* /* dummy */); \ void mcl_fp_mulNIST_P192 ## suf(mcl::fp::Unit* z, const mcl::fp::Unit* x, const mcl::fp::Unit* y, const mcl::fp::Unit* /* dummy */); \ void mcl_fp_sqr_NIST_P192 ## suf(mcl::fp::Unit* y, const mcl::fp::Unit* x, const mcl::fp::Unit* /* dummy */); \ void mcl_fpDbl_mod_NIST_P521 ## suf(mcl::fp::Unit* z, const mcl::fp::Unit* xy, const mcl::fp::Unit* /* dummy */); extern "C" { MCL_FP_DEF_FUNC(1) MCL_FP_DEF_FUNC(2) MCL_FP_DEF_FUNC(3) MCL_FP_DEF_FUNC(4) MCL_FP_DEF_FUNC(5) MCL_FP_DEF_FUNC(6) MCL_FP_DEF_FUNC(7) MCL_FP_DEF_FUNC(8) MCL_FP_DEF_FUNC(9) #if CYBOZU_OS_BIT == 32 || MCL_MAX_BIT_SIZE >= 768 MCL_FP_DEF_FUNC(10) MCL_FP_DEF_FUNC(11) MCL_FP_DEF_FUNC(12) #endif #if CYBOZU_OS_BIT == 32 MCL_FP_DEF_FUNC(13) MCL_FP_DEF_FUNC(14) MCL_FP_DEF_FUNC(15) MCL_FP_DEF_FUNC(16) MCL_FP_DEF_FUNC(17) #endif #if CYBOZU_OS_BIT == 64 && MCL_MAX_BIT_SIZE == 1024 MCL_FP_DEF_FUNC(14) MCL_FP_DEF_FUNC(16) #endif MCL_FP_DEF_FUNC_SPECIAL(L) MCL_FP_DEF_FUNC_SPECIAL(Lbmi2) } #undef MCL_FP_DEF_FUNC_SUB #undef MCL_FP_DEF_FUNC