⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 integer.cpp

📁 lots Elliptic curve cryptography codes. Use Visual c++ to compile
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			: "%esi", "%edi", "memory", "cc" \		);	#define TopPrologue		MulPrologue	#define TopEpilogue	\			AS1(	pop		ebx) \			".att_syntax prefix;" \			: \			: "d" (s_maskLow16), "c" (C), "a" (A), "D" (B), "S" (L) \			: "memory", "cc" \		);#else	#define AddPrologue \		__asm	push edi \		__asm	push esi \		__asm	mov		eax, [esp+12] \		__asm	mov		edi, [esp+16]	#define AddEpilogue \		__asm	pop esi \		__asm	pop edi \		__asm	ret 8#if _MSC_VER < 1300	#define SaveEBX		__asm push ebx	#define RestoreEBX	__asm pop ebx#else	#define SaveEBX	#define RestoreEBX#endif	#define SquPrologue					\		AS2(	mov		eax, A)			\		AS2(	mov		ecx, C)			\		SaveEBX							\		AS2(	lea		ebx, s_maskLow16)	#define MulPrologue					\		AS2(	mov		eax, A)			\		AS2(	mov		edi, B)			\		AS2(	mov		ecx, C)			\		SaveEBX							\		AS2(	lea		ebx, s_maskLow16)	#define TopPrologue					\		AS2(	mov		eax, A)			\		AS2(	mov		edi, B)			\		AS2(	mov		ecx, C)			\		AS2(	mov		esi, L)			\		SaveEBX							\		AS2(	lea		ebx, s_maskLow16)	#define SquEpilogue		RestoreEBX	#define MulEpilogue		RestoreEBX	#define TopEpilogue		RestoreEBX#endif#ifdef CRYPTOPP_X64_MASM_AVAILABLEextern "C" {int Baseline_Add(size_t N, word *C, const word *A, const word *B);int Baseline_Sub(size_t N, word *C, const word *A, const word *B);}#elif defined(CRYPTOPP_X64_ASM_AVAILABLE) && defined(__GNUC__) && defined(CRYPTOPP_WORD128_AVAILABLE)int Baseline_Add(size_t N, word *C, const word *A, const word *B){	word result;	__asm__ __volatile__	(	".intel_syntax;"	AS1(	neg		%1)	ASJ(	jz,		1, f)	AS2(	mov		%0,[%3+8*%1])	AS2(	add		%0,[%4+8*%1])	AS2(	mov		[%2+8*%1],%0)	ASL(0)	AS2(	mov		%0,[%3+8*%1+8])	AS2(	adc		%0,[%4+8*%1+8])	AS2(	mov		[%2+8*%1+8],%0)	AS2(	lea		%1,[%1+2])	ASJ(	jrcxz,	1, f)	AS2(	mov		%0,[%3+8*%1])	AS2(	adc		%0,[%4+8*%1])	AS2(	mov		[%2+8*%1],%0)	ASJ(	jmp,	0, b)	ASL(1)	AS2(	mov		%0, 0)	AS2(	adc		%0, %0)	".att_syntax;"	: "=&r" (result), "+c" (N)	: "r" (C+N), "r" (A+N), "r" (B+N)	: "memory", "cc"	);	return (int)result;}int Baseline_Sub(size_t N, word *C, const word *A, const word *B){	word result;	__asm__ __volatile__	(	".intel_syntax;"	AS1(	neg		%1)	ASJ(	jz,		1, f)	AS2(	mov		%0,[%3+8*%1])	AS2(	sub		%0,[%4+8*%1])	AS2(	mov		[%2+8*%1],%0)	ASL(0)	AS2(	mov		%0,[%3+8*%1+8])	AS2(	sbb		%0,[%4+8*%1+8])	AS2(	mov		[%2+8*%1+8],%0)	AS2(	lea		%1,[%1+2])	ASJ(	jrcxz,	1, f)	AS2(	mov		%0,[%3+8*%1])	AS2(	sbb		%0,[%4+8*%1])	AS2(	mov		[%2+8*%1],%0)	ASJ(	jmp,	0, b)	ASL(1)	AS2(	mov		%0, 0)	AS2(	adc		%0, %0)	".att_syntax;"	: "=&r" (result), "+c" (N)	: "r" (C+N), "r" (A+N), "r" (B+N)	: "memory", "cc"	);	return (int)result;}#elif defined(CRYPTOPP_X86_ASM_AVAILABLE) && CRYPTOPP_BOOL_X86CRYPTOPP_NAKED int CRYPTOPP_FASTCALL Baseline_Add(size_t N, word *C, const word *A, const word *B){	AddPrologue	// now: eax = A, edi = B, edx = C, ecx = N	AS2(	lea		eax, [eax+4*ecx])	AS2(	lea		edi, [edi+4*ecx])	AS2(	lea		edx, [edx+4*ecx])	AS1(	neg		ecx)				// ecx is negative index	AS2(	test	ecx, 2)				// this clears carry flag	ASJ(	jz,		0, f)	AS2(	sub		ecx, 2)	ASJ(	jmp,	1, f)	ASL(0)	ASJ(	jecxz,	2, f)				// loop until ecx overflows and becomes zero	AS2(	mov		esi,[eax+4*ecx])	AS2(	adc		esi,[edi+4*ecx])	AS2(	mov		[edx+4*ecx],esi)	AS2(	mov		esi,[eax+4*ecx+4])	AS2(	adc		esi,[edi+4*ecx+4])	AS2(	mov		[edx+4*ecx+4],esi)	ASL(1)	AS2(	mov		esi,[eax+4*ecx+8])	AS2(	adc		esi,[edi+4*ecx+8])	AS2(	mov		[edx+4*ecx+8],esi)	AS2(	mov		esi,[eax+4*ecx+12])	AS2(	adc		esi,[edi+4*ecx+12])	AS2(	mov		[edx+4*ecx+12],esi)	AS2(	lea		ecx,[ecx+4])		// advance index, avoid inc which causes slowdown on Intel Core 2	ASJ(	jmp,	0, b)	ASL(2)	AS2(	mov		eax, 0)	AS1(	setc	al)					// store carry into eax (return result register)	AddEpilogue}CRYPTOPP_NAKED int CRYPTOPP_FASTCALL Baseline_Sub(size_t N, word *C, const word *A, const word *B){	AddPrologue	// now: eax = A, edi = B, edx = C, ecx = N	AS2(	lea		eax, [eax+4*ecx])	AS2(	lea		edi, [edi+4*ecx])	AS2(	lea		edx, [edx+4*ecx])	AS1(	neg		ecx)				// ecx is negative index	AS2(	test	ecx, 2)				// this clears carry flag	ASJ(	jz,		0, f)	AS2(	sub		ecx, 2)	ASJ(	jmp,	1, f)	ASL(0)	ASJ(	jecxz,	2, f)				// loop until ecx overflows and becomes zero	AS2(	mov		esi,[eax+4*ecx])	AS2(	sbb		esi,[edi+4*ecx])	AS2(	mov		[edx+4*ecx],esi)	AS2(	mov		esi,[eax+4*ecx+4])	AS2(	sbb		esi,[edi+4*ecx+4])	AS2(	mov		[edx+4*ecx+4],esi)	ASL(1)	AS2(	mov		esi,[eax+4*ecx+8])	AS2(	sbb		esi,[edi+4*ecx+8])	AS2(	mov		[edx+4*ecx+8],esi)	AS2(	mov		esi,[eax+4*ecx+12])	AS2(	sbb		esi,[edi+4*ecx+12])	AS2(	mov		[edx+4*ecx+12],esi)	AS2(	lea		ecx,[ecx+4])		// advance index, avoid inc which causes slowdown on Intel Core 2	ASJ(	jmp,	0, b)	ASL(2)	AS2(	mov		eax, 0)	AS1(	setc	al)					// store carry into eax (return result register)	AddEpilogue}#if CRYPTOPP_INTEGER_SSE2CRYPTOPP_NAKED int CRYPTOPP_FASTCALL SSE2_Add(size_t N, word *C, const word *A, const word *B){	AddPrologue	// now: eax = A, edi = B, edx = C, ecx = N	AS2(	lea		eax, [eax+4*ecx])	AS2(	lea		edi, [edi+4*ecx])	AS2(	lea		edx, [edx+4*ecx])	AS1(	neg		ecx)				// ecx is negative index	AS2(	pxor    mm2, mm2)	ASJ(	jz,		2, f)	AS2(	test	ecx, 2)				// this clears carry flag	ASJ(	jz,		0, f)	AS2(	sub		ecx, 2)	ASJ(	jmp,	1, f)	ASL(0)	AS2(	movd     mm0, DWORD PTR [eax+4*ecx])	AS2(	movd     mm1, DWORD PTR [edi+4*ecx])	AS2(	paddq    mm0, mm1)	AS2(	paddq	 mm2, mm0)	AS2(	movd	 DWORD PTR [edx+4*ecx], mm2)	AS2(	psrlq    mm2, 32)	AS2(	movd     mm0, DWORD PTR [eax+4*ecx+4])	AS2(	movd     mm1, DWORD PTR [edi+4*ecx+4])	AS2(	paddq    mm0, mm1)	AS2(	paddq	 mm2, mm0)	AS2(	movd	 DWORD PTR [edx+4*ecx+4], mm2)	AS2(	psrlq    mm2, 32)	ASL(1)	AS2(	movd     mm0, DWORD PTR [eax+4*ecx+8])	AS2(	movd     mm1, DWORD PTR [edi+4*ecx+8])	AS2(	paddq    mm0, mm1)	AS2(	paddq	 mm2, mm0)	AS2(	movd	 DWORD PTR [edx+4*ecx+8], mm2)	AS2(	psrlq    mm2, 32)	AS2(	movd     mm0, DWORD PTR [eax+4*ecx+12])	AS2(	movd     mm1, DWORD PTR [edi+4*ecx+12])	AS2(	paddq    mm0, mm1)	AS2(	paddq	 mm2, mm0)	AS2(	movd	 DWORD PTR [edx+4*ecx+12], mm2)	AS2(	psrlq    mm2, 32)	AS2(	add		ecx, 4)	ASJ(	jnz,	0, b)	ASL(2)	AS2(	movd	eax, mm2)	AS1(	emms)	AddEpilogue}CRYPTOPP_NAKED int CRYPTOPP_FASTCALL SSE2_Sub(size_t N, word *C, const word *A, const word *B){	AddPrologue	// now: eax = A, edi = B, edx = C, ecx = N	AS2(	lea		eax, [eax+4*ecx])	AS2(	lea		edi, [edi+4*ecx])	AS2(	lea		edx, [edx+4*ecx])	AS1(	neg		ecx)				// ecx is negative index	AS2(	pxor    mm2, mm2)	ASJ(	jz,		2, f)	AS2(	test	ecx, 2)				// this clears carry flag	ASJ(	jz,		0, f)	AS2(	sub		ecx, 2)	ASJ(	jmp,	1, f)	ASL(0)	AS2(	movd     mm0, DWORD PTR [eax+4*ecx])	AS2(	movd     mm1, DWORD PTR [edi+4*ecx])	AS2(	psubq    mm0, mm1)	AS2(	psubq	 mm0, mm2)	AS2(	movd	 DWORD PTR [edx+4*ecx], mm0)	AS2(	psrlq    mm0, 63)	AS2(	movd     mm2, DWORD PTR [eax+4*ecx+4])	AS2(	movd     mm1, DWORD PTR [edi+4*ecx+4])	AS2(	psubq    mm2, mm1)	AS2(	psubq	 mm2, mm0)	AS2(	movd	 DWORD PTR [edx+4*ecx+4], mm2)	AS2(	psrlq    mm2, 63)	ASL(1)	AS2(	movd     mm0, DWORD PTR [eax+4*ecx+8])	AS2(	movd     mm1, DWORD PTR [edi+4*ecx+8])	AS2(	psubq    mm0, mm1)	AS2(	psubq	 mm0, mm2)	AS2(	movd	 DWORD PTR [edx+4*ecx+8], mm0)	AS2(	psrlq    mm0, 63)	AS2(	movd     mm2, DWORD PTR [eax+4*ecx+12])	AS2(	movd     mm1, DWORD PTR [edi+4*ecx+12])	AS2(	psubq    mm2, mm1)	AS2(	psubq	 mm2, mm0)	AS2(	movd	 DWORD PTR [edx+4*ecx+12], mm2)	AS2(	psrlq    mm2, 63)	AS2(	add		ecx, 4)	ASJ(	jnz,	0, b)	ASL(2)	AS2(	movd	eax, mm2)	AS1(	emms)	AddEpilogue}#endif	// #if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE#elseint CRYPTOPP_FASTCALL Baseline_Add(size_t N, word *C, const word *A, const word *B){	assert (N%2 == 0);	Declare2Words(u);	AssignWord(u, 0);	for (size_t i=0; i<N; i+=2)	{		AddWithCarry(u, A[i], B[i]);		C[i] = LowWord(u);		AddWithCarry(u, A[i+1], B[i+1]);		C[i+1] = LowWord(u);	}	return int(GetCarry(u));}int CRYPTOPP_FASTCALL Baseline_Sub(size_t N, word *C, const word *A, const word *B){	assert (N%2 == 0);	Declare2Words(u);	AssignWord(u, 0);	for (size_t i=0; i<N; i+=2)	{		SubtractWithBorrow(u, A[i], B[i]);		C[i] = LowWord(u);		SubtractWithBorrow(u, A[i+1], B[i+1]);		C[i+1] = LowWord(u);	}	return int(GetBorrow(u));}#endifstatic word LinearMultiply(word *C, const word *A, word B, size_t N){	word carry=0;	for(unsigned i=0; i<N; i++)	{		Declare2Words(p);		MultiplyWords(p, A[i], B);		Acc2WordsBy1(p, carry);		C[i] = LowWord(p);		carry = HighWord(p);	}	return carry;}#ifndef CRYPTOPP_DOXYGEN_PROCESSING#define Mul_2 \	Mul_Begin(2) \	Mul_SaveAcc(0, 0, 1) Mul_Acc(1, 0) \	Mul_End(1, 1)#define Mul_4 \	Mul_Begin(4) \	Mul_SaveAcc(0, 0, 1) Mul_Acc(1, 0) \	Mul_SaveAcc(1, 0, 2) Mul_Acc(1, 1) Mul_Acc(2, 0)  \	Mul_SaveAcc(2, 0, 3) Mul_Acc(1, 2) Mul_Acc(2, 1) Mul_Acc(3, 0)  \	Mul_SaveAcc(3, 1, 3) Mul_Acc(2, 2) Mul_Acc(3, 1)  \	Mul_SaveAcc(4, 2, 3) Mul_Acc(3, 2) \	Mul_End(5, 3)#define Mul_8 \	Mul_Begin(8) \	Mul_SaveAcc(0, 0, 1) Mul_Acc(1, 0) \	Mul_SaveAcc(1, 0, 2) Mul_Acc(1, 1) Mul_Acc(2, 0)  \	Mul_SaveAcc(2, 0, 3) Mul_Acc(1, 2) Mul_Acc(2, 1) Mul_Acc(3, 0)  \	Mul_SaveAcc(3, 0, 4) Mul_Acc(1, 3) Mul_Acc(2, 2) Mul_Acc(3, 1) Mul_Acc(4, 0) \	Mul_SaveAcc(4, 0, 5) Mul_Acc(1, 4) Mul_Acc(2, 3) Mul_Acc(3, 2) Mul_Acc(4, 1) Mul_Acc(5, 0) \	Mul_SaveAcc(5, 0, 6) Mul_Acc(1, 5) Mul_Acc(2, 4) Mul_Acc(3, 3) Mul_Acc(4, 2) Mul_Acc(5, 1) Mul_Acc(6, 0) \	Mul_SaveAcc(6, 0, 7) Mul_Acc(1, 6) Mul_Acc(2, 5) Mul_Acc(3, 4) Mul_Acc(4, 3) Mul_Acc(5, 2) Mul_Acc(6, 1) Mul_Acc(7, 0) \	Mul_SaveAcc(7, 1, 7) Mul_Acc(2, 6) Mul_Acc(3, 5) Mul_Acc(4, 4) Mul_Acc(5, 3) Mul_Acc(6, 2) Mul_Acc(7, 1) \	Mul_SaveAcc(8, 2, 7) Mul_Acc(3, 6) Mul_Acc(4, 5) Mul_Acc(5, 4) Mul_Acc(6, 3) Mul_Acc(7, 2) \	Mul_SaveAcc(9, 3, 7) Mul_Acc(4, 6) Mul_Acc(5, 5) Mul_Acc(6, 4) Mul_Acc(7, 3) \	Mul_SaveAcc(10, 4, 7) Mul_Acc(5, 6) Mul_Acc(6, 5) Mul_Acc(7, 4) \	Mul_SaveAcc(11, 5, 7) Mul_Acc(6, 6) Mul_Acc(7, 5) \	Mul_SaveAcc(12, 6, 7) Mul_Acc(7, 6) \	Mul_End(13, 7)#define Mul_16 \	Mul_Begin(16) \	Mul_SaveAcc(0, 0, 1) Mul_Acc(1, 0) \	Mul_SaveAcc(1, 0, 2) Mul_Acc(1, 1) Mul_Acc(2, 0) \	Mul_SaveAcc(2, 0, 3) Mul_Acc(1, 2) Mul_Acc(2, 1) Mul_Acc(3, 0) \	Mul_SaveAcc(3, 0, 4) Mul_Acc(1, 3) Mul_Acc(2, 2) Mul_Acc(3, 1) Mul_Acc(4, 0) \	Mul_SaveAcc(4, 0, 5) Mul_Acc(1, 4) Mul_Acc(2, 3) Mul_Acc(3, 2) Mul_Acc(4, 1) Mul_Acc(5, 0) \	Mul_SaveAcc(5, 0, 6) Mul_Acc(1, 5) Mul_Acc(2, 4) Mul_Acc(3, 3) Mul_Acc(4, 2) Mul_Acc(5, 1) Mul_Acc(6, 0) \	Mul_SaveAcc(6, 0, 7) Mul_Acc(1, 6) Mul_Acc(2, 5) Mul_Acc(3, 4) Mul_Acc(4, 3) Mul_Acc(5, 2) Mul_Acc(6, 1) Mul_Acc(7, 0) \	Mul_SaveAcc(7, 0, 8) Mul_Acc(1, 7) Mul_Acc(2, 6) Mul_Acc(3, 5) Mul_Acc(4, 4) Mul_Acc(5, 3) Mul_Acc(6, 2) Mul_Acc(7, 1) Mul_Acc(8, 0) \	Mul_SaveAcc(8, 0, 9) Mul_Acc(1, 8) Mul_Acc(2, 7) Mul_Acc(3, 6) Mul_Acc(4, 5) Mul_Acc(5, 4) Mul_Acc(6, 3) Mul_Acc(7, 2) Mul_Acc(8, 1) Mul_Acc(9, 0) \	Mul_SaveAcc(9, 0, 10) Mul_Acc(1, 9) Mul_Acc(2, 8) Mul_Acc(3, 7) Mul_Acc(4, 6) Mul_Acc(5, 5) Mul_Acc(6, 4) Mul_Acc(7, 3) Mul_Acc(8, 2) Mul_Acc(9, 1) Mul_Acc(10, 0) \	Mul_SaveAcc(10, 0, 11) Mul_Acc(1, 10) Mul_Acc(2, 9) Mul_Acc(3, 8) Mul_Acc(4, 7) Mul_Acc(5, 6) Mul_Acc(6, 5) Mul_Acc(7, 4) Mul_Acc(8, 3) Mul_Acc(9, 2) Mul_Acc(10, 1) Mul_Acc(11, 0) \	Mul_SaveAcc(11, 0, 12) Mul_Acc(1, 11) Mul_Acc(2, 10) Mul_Acc(3, 9) Mul_Acc(4, 8) Mul_Acc(5, 7) Mul_Acc(6, 6) Mul_Acc(7, 5) Mul_Acc(8, 4) Mul_Acc(9, 3) Mul_Acc(10, 2) Mul_Acc(11, 1) Mul_Acc(12, 0) \	Mul_SaveAcc(12, 0, 13) Mul_Acc(1, 12) Mul_Acc(2, 11) Mul_Acc(3, 10) Mul_Acc(4, 9) Mul_Acc(5, 8) Mul_Acc(6, 7) Mul_Acc(7, 6) Mul_Acc(8, 5) Mul_Acc(9, 4) Mul_Acc(10, 3) Mul_Acc(11, 2) Mul_Acc(12, 1) Mul_Acc(13, 0) \	Mul_SaveAcc(13, 0, 14) Mul_Acc(1, 13) Mul_Acc(2, 12) Mul_Acc(3, 11) Mul_Acc(4, 10) Mul_Acc(5, 9) Mul_Acc(6, 8) Mul_Acc(7, 7) Mul_Acc(8, 6) Mul_Acc(9, 5) Mul_Acc(10, 4) Mul_Acc(11, 3) Mul_Acc(12, 2) Mul_Acc(13, 1) Mul_Acc(14, 0) \	Mul_SaveAcc(14, 0, 15) Mul_Acc(1, 14) Mul_Acc(2, 13) Mul_Acc(3, 12) Mul_Acc(4, 11) Mul_Acc(5, 10) Mul_Acc(6, 9) Mul_Acc(7, 8) Mul_Acc(8, 7) Mul_Acc(9, 6) Mul_Acc(10, 5) Mul_Acc(11, 4) Mul_Acc(12, 3) Mul_Acc(13, 2) Mul_Acc(14, 1) Mul_Acc(15, 0) \	Mul_SaveAcc(15, 1, 15) Mul_Acc(2, 14) Mul_Acc(3, 13) Mul_Acc(4, 12) Mul_Acc(5, 11) Mul_Acc(6, 10) Mul_Acc(7, 9) Mul_Acc(8, 8) Mul_Acc(9, 7) Mul_Acc(10, 6) Mul_Acc(11, 5) Mul_Acc(12, 4) Mul_Acc(13, 3) Mul_Acc(14, 2) Mul_Acc(15, 1) \	Mul_SaveAcc(16, 2, 15) Mul_Acc(3, 14) Mul_Acc(4, 13) Mul_Acc(5, 12) Mul_Acc(6, 11) Mul_Acc(7, 10) Mul_Acc(8, 9) Mul_Acc(9, 8) Mul_Acc(10, 7) Mul_Acc(11, 6) Mul_Acc(12, 5) Mul_Acc(13, 4) Mul_Acc(14, 3) Mul_Acc(15, 2) \	Mul_SaveAcc(17, 3, 15) Mul_Acc(4, 14) Mul_Acc(5, 13) Mul_Acc(6, 12) Mul_Acc(7, 11) Mul_Acc(8, 10) Mul_Acc(9, 9) Mul_Acc(10, 8) Mul_Acc(11, 7) Mul_Acc(12, 6) Mul_Acc(13, 5) Mul_Acc(14, 4) Mul_Acc(15, 3) \	Mul_SaveAcc(18, 4, 15) Mul_Acc(5, 14) Mul_Acc(6, 13) Mul_Acc(7, 12) Mul_Acc(8, 11) Mul_Acc(9, 10) Mul_Acc(10, 9) Mul_Acc(11, 8) Mul_Acc(12, 7) Mul_Acc(13, 6) Mul_Acc(14, 5) Mul_Acc(15, 4) \	Mul_SaveAcc(19, 5, 15) Mul_Acc(6, 14) Mul_Acc(7, 13) Mul_Acc(8, 12) Mul_Acc(9, 11) Mul_Acc(10, 10) Mul_Acc(11, 9) Mul_Acc(12, 8) Mul_Acc(13, 7) Mul_Acc(14, 6) Mul_Acc(15, 5) \	Mul_SaveAcc(20, 6, 15) Mul_Acc(7, 14) Mul_Acc(8, 13) Mul_Acc(9, 12) Mul_Acc(10, 11) Mul_Acc(11, 10) Mul_Acc(12, 9) Mul_Acc(13, 8) Mul_Acc(14, 7) Mul_Acc(15, 6) \	Mul_SaveAcc(21, 7, 15) Mul_Acc(8, 14) Mul_Acc(9, 13) Mul_Acc(10, 12) Mul_Acc(11, 11) Mul_Acc(12, 10) Mul_Acc(13, 9) Mul_Acc(14, 8) Mul_Acc(15, 7) \	Mul_SaveAcc(22, 8, 15) Mul_Acc(9, 14) Mul_Acc(10, 13) Mul_Acc(11, 12) Mul_Acc(12, 11) Mul_Acc(13, 10) Mul_Acc(14, 9) Mul_Acc(15, 8) \	Mul_SaveAcc(23, 9, 15) Mul_Acc(10, 14) Mul_Acc(11, 13) Mul_Acc(12, 12) Mul_Acc(13, 11) Mul_Acc(14, 10) Mul_Acc(15, 9) \	Mul_SaveAcc(24, 10, 15) Mul_Acc(11, 14) Mul_Acc(12, 13) Mul_Acc(13, 12) Mul_Acc(14, 11) Mul_Acc(15, 10) \	Mul_SaveAcc(25, 11, 15) Mul_Acc(12, 14) Mul_Acc(13, 13) Mul_Acc(14, 12) Mul_Acc(15, 11) \	Mul_SaveAcc(26, 12, 15) Mul_Acc(13, 14) Mul_Acc(14, 13) Mul_Acc(15, 12) \	Mul_SaveAcc(27, 13, 15) Mul_Acc(14, 14) Mul_Acc(15, 13) \	Mul_SaveAcc(28, 14, 15) Mul_Acc(15, 14) \	Mul_End(29, 15)#define Squ_2 \	Squ_Begin(2) \	Squ_End(2)#define Squ_4 \	Squ_Begin(4) \	Squ_SaveAcc(1, 0, 2) Squ_Diag(1) \	Squ_SaveAcc(2, 0, 3) Squ_Acc(1, 2) Squ_NonDiag \	Squ_SaveAcc(3, 1, 3) Squ_Diag(2) \	Squ_SaveAcc(4, 2, 3) Squ_NonDiag \	Squ_End(4)#define Squ_8 \	Squ_Begin(8) \	Squ_SaveAcc(1, 0, 2) Squ_Diag(1) \	Squ_SaveAcc(2, 0, 3) Squ_Acc(1, 2) Squ_NonDiag \	Squ_SaveAcc(3, 0, 4) Squ_Acc(1, 3) Squ_Diag(2) \	Squ_SaveAcc(4, 0, 5) Squ_Acc(1, 4) Squ_Acc(2, 3) Squ_NonDiag \	Squ_SaveAcc(5, 0, 6) Squ_Acc(1, 5) Squ_Acc(2, 4) Squ_Diag(3) \	Squ_SaveAcc(6, 0, 7) Squ_Acc(1, 6) Squ_Acc(2, 5) Squ_Acc(3, 4) Squ_NonDiag \	Squ_SaveAcc(7, 1, 7) Squ_Acc(2, 6) Squ_Acc(3, 5) Squ_Diag(4) \	Squ_SaveAcc(8, 2, 7) Squ_Acc(3, 6) Squ_Acc(4, 5)  Squ_NonDiag \	Squ_SaveAcc(9, 3, 7) Squ_Acc(4, 6) Squ_Diag(5) \	Squ_SaveAcc(10, 4, 7) Squ_Acc(5, 6) Squ_NonDiag \	Squ_SaveAcc(11, 5, 7) Squ_Diag(6) \	Squ_SaveAcc(12, 6, 7) Squ_NonDiag \	Squ_End(8)#define Squ_16 \	Squ_Begin(16) \	Squ_SaveAcc(1, 0, 2) Squ_Diag(1) \	Squ_SaveAcc(2, 0, 3) Squ_Acc(1, 2) Squ_NonDiag \	Squ_SaveAcc(3, 0, 4) Squ_Acc(1, 3) Squ_Diag(2) \	Squ_SaveAcc(4, 0, 5) Squ_Acc(1, 4) Squ_Acc(2, 3) Squ_NonDiag \	Squ_SaveAcc(5, 0, 6) Squ_Acc(1, 5) Squ_Acc(2, 4) Squ_Diag(3) \	Squ_SaveAcc(6, 0, 7) Squ_Acc(1, 6) Squ_Acc(2, 5) Squ_Acc(3, 4) Squ_NonDiag \	Squ_SaveAcc(7, 0, 8) Squ_Acc(1, 7) Squ_Acc(2, 6) Squ_Acc(3, 5) Squ_Diag(4) \	Squ_SaveAcc(8, 0, 9) Squ_Acc(1, 8) Squ_Acc(2, 7) Squ_Acc(3, 6) Squ_Acc(4, 5) Squ_NonDiag \	Squ_SaveAcc(9, 0, 10) Squ_Acc(1, 9) Squ_Acc(2, 8) Squ_Acc(3, 7) Squ_Acc(4, 6) Squ_Diag(5) \	Squ_SaveAcc(10, 0, 11) Squ_Acc(1, 10) Squ_Acc(2, 9) Squ_Acc(3, 8) Squ_Acc(4, 7) Squ_Acc(5, 6) Squ_NonDiag \	Squ_SaveAcc(11, 0, 12) Squ_Acc(1, 11) Squ_Acc(2, 10) Squ_Acc(3, 9) Squ_Acc(4, 8) Squ_Acc(5, 7) Squ_Diag(6) \	Squ_SaveAcc(12, 0, 13) Squ_Acc(1, 12) Squ_Acc(2, 11) Squ_Acc(3, 10) Squ_Acc(4, 9) Squ_Acc(5, 8) Squ_Acc(6, 7) Squ_NonDiag \

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -