Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --- mp_word.d Sat Feb 11 16:48:58 2017
- +++ mp_word.d Thu Feb 8 20:20:23 2018
- @@ -215,111 +215,6 @@
- */
- word word8_add3(ref word[8] z, const ref word[8] x, const ref word[8] y, word carry)
- {
- - version(D_InlineAsm_X86_64) {
- -
- - word* _z = z.ptr;
- - clearMem(_z, z.length);
- - word* _x = cast(word*)x.ptr;
- - word* _y = cast(word*)y.ptr;
- - word* _carry = &carry;
- - asm pure nothrow @nogc {
- -
- - mov RBX,_x;
- - mov RSI,_y;
- - mov RDI,_z;
- - mov RCX,_carry;
- - xor RAX,RAX;
- - sub RAX,[RCX]; //force CF=1 iff *carry==1
- - mov RAX,[RBX];
- - adc RAX,[RSI];
- - mov [RDI],RAX;
- -
- - mov RAX,[RBX+8];
- - adc RAX,[RSI+8];
- - mov [RDI+8],RAX;
- -
- - mov RAX,[RBX+16];
- - adc RAX,[RSI+16];
- - mov [RDI+16],RAX;
- -
- - mov RAX,[RBX+24];
- - adc RAX,[RSI+24];
- - mov [RDI+24],RAX;
- -
- - mov RAX,[RBX+32];
- - adc RAX,[RSI+32];
- - mov [RDI+32],RAX;
- -
- - mov RAX,[RBX+40];
- - adc RAX,[RSI+40];
- - mov [RDI+40],RAX;
- -
- - mov RAX,[RBX+48];
- - adc RAX,[RSI+48];
- - mov [RDI+48],RAX;
- -
- - mov RAX,[RBX+56];
- - adc RAX,[RSI+56];
- - mov [RDI+56],RAX;
- -
- - sbb RAX,RAX;
- - neg RAX;
- - mov carry, RAX;
- - }
- - return carry;
- - } else version (D_InlineAsm_X86) {
- - word* _z = z.ptr;
- - clearMem(_z, z.length);
- - word* _x = cast(word*)x.ptr;
- - word* _y = cast(word*)y.ptr;
- - word* _carry = &carry;
- - asm pure nothrow @nogc {
- -
- - mov EBX,_x;
- - mov ESI,_y;
- - mov EDI,_z;
- - mov ECX,_carry;
- - xor EAX,EAX;
- - sub EAX,[ECX]; //force CF=1 iff *carry==1
- - mov EAX,[EBX];
- - adc EAX,[ESI];
- - mov [EDI],EAX;
- -
- - mov EAX,[EBX+4];
- - adc EAX,[ESI+4];
- - mov [EDI+4],EAX;
- -
- - mov EAX,[EBX+8];
- - adc EAX,[ESI+8];
- - mov [EDI+8],EAX;
- -
- - mov EAX,[EBX+12];
- - adc EAX,[ESI+12];
- - mov [EDI+12],EAX;
- -
- - mov EAX,[EBX+16];
- - adc EAX,[ESI+16];
- - mov [EDI+16],EAX;
- -
- - mov EAX,[EBX+20];
- - adc EAX,[ESI+20];
- - mov [EDI+20],EAX;
- -
- - mov EAX,[EBX+24];
- - adc EAX,[ESI+24];
- - mov [EDI+24],EAX;
- -
- - mov EAX,[EBX+28];
- - adc EAX,[ESI+28];
- - mov [EDI+28],EAX;
- -
- - sbb EAX,EAX;
- - neg EAX;
- - mov carry, EAX;
- - }
- - return carry;
- - }
- - else {
- z[0] = word_add(x[0], y[0], &carry);
- z[1] = word_add(x[1], y[1], &carry);
- z[2] = word_add(x[2], y[2], &carry);
- @@ -329,7 +224,6 @@
- z[6] = word_add(x[6], y[6], &carry);
- z[7] = word_add(x[7], y[7], &carry);
- return carry;
- - }
- }
- /*
- @@ -349,96 +243,6 @@
- */
- word word8_sub2(ref word[8] x, const ref word[8] y, word carry)
- {
- - version(D_InlineAsm_X86_64) {
- - word* _x = x.ptr;
- - word[8] ret;
- - word* _z = ret.ptr;
- - word* _y = cast(word*)y.ptr;
- - word* _carry = &carry;
- - asm pure nothrow @nogc {
- - mov RBX,_x;
- - mov RSI,_y;
- - mov RDI, _z;
- - mov RCX,_carry;
- - xor RAX,RAX;
- - sub RAX,[RCX]; //force CF=1 iff *carry==1
- - mov RAX,[RBX];
- - sbb RAX,[RSI];
- - mov [RDI],RAX;
- - mov RAX,[RBX+8];
- - sbb RAX,[RSI+8];
- - mov [RDI+8],RAX;
- - mov RAX,[RBX+16];
- - sbb RAX,[RSI+16];
- - mov [RDI+16],RAX;
- - mov RAX,[RBX+24];
- - sbb RAX,[RSI+24];
- - mov [RDI+24],RAX;
- - mov RAX,[RBX+32];
- - sbb RAX,[RSI+32];
- - mov [RDI+32],RAX;
- - mov RAX,[RBX+40];
- - sbb RAX,[RSI+40];
- - mov [RDI+40],RAX;
- - mov RAX,[RBX+48];
- - sbb RAX,[RSI+48];
- - mov [RDI+48],RAX;
- - mov RAX,[RBX+56];
- - sbb RAX,[RSI+56];
- - mov [RDI+56],RAX;
- - sbb RAX,RAX;
- - neg RAX;
- - mov carry, RAX;
- - }
- - x[0 .. 8] = ret[0 .. 8];
- - return carry;
- -
- - }
- - else version (D_InlineAsm_X86) {
- - word* _x = x.ptr;
- - word* _y = cast(word*)y.ptr;
- - word[8] ret;
- - word* _z = ret.ptr;
- - word* _carry = &carry;
- - asm pure nothrow @nogc {
- - mov EBX,_x;
- - mov EDI,_z;
- - mov ESI,_y;
- - mov ECX,_carry;
- - xor EAX,EAX;
- - sub EAX,[ECX]; //force CF=1 iff *carry==1
- - mov EAX,[EBX];
- - sbb EAX,[ESI];
- - mov [EDI],EAX;
- - mov EAX,[EBX+4];
- - sbb EAX,[ESI+4];
- - mov [EDI+4],EAX;
- - mov EAX,[EBX+8];
- - sbb EAX,[ESI+8];
- - mov [EDI+8],EAX;
- - mov EAX,[EBX+12];
- - sbb EAX,[ESI+12];
- - mov [EDI+12],EAX;
- - mov EAX,[EBX+16];
- - sbb EAX,[ESI+16];
- - mov [EDI+16],EAX;
- - mov EAX,[EBX+20];
- - sbb EAX,[ESI+20];
- - mov [EDI+20],EAX;
- - mov EAX,[EBX+24];
- - sbb EAX,[ESI+24];
- - mov [EDI+24],EAX;
- - mov EAX,[EBX+28];
- - sbb EAX,[ESI+28];
- - mov [EDI+28],EAX;
- - sbb EAX,EAX;
- - neg EAX;
- - mov carry, EAX;
- - }
- - x[0 .. 8] = ret[0 .. 8];
- - return carry;
- -
- - } else {
- x[0] = word_sub(x[0], y[0], &carry);
- x[1] = word_sub(x[1], y[1], &carry);
- x[2] = word_sub(x[2], y[2], &carry);
- @@ -448,7 +252,6 @@
- x[6] = word_sub(x[6], y[6], &carry);
- x[7] = word_sub(x[7], y[7], &carry);
- return carry;
- - }
- }
- /*
- @@ -472,93 +275,6 @@
- */
- word word8_sub3(ref word[8] z, const ref word[8] x, const ref word[8] y, word carry)
- {
- - version(D_InlineAsm_X86_64) {
- - word* _z = z.ptr;
- - clearMem(_z, z.length);
- -
- - word* _x = cast(word*)x.ptr;
- - word* _y = cast(word*)y.ptr;
- - word* _carry = &carry;
- - asm pure nothrow @nogc {
- - mov RBX,_x;
- - mov RSI,_y;
- - mov RCX,_carry;
- - xor RAX,RAX;
- - sub RAX,[RCX]; //force CF=1 iff *carry==1
- - mov RDI,_z;
- - mov RAX,[RBX];
- - sbb RAX,[RSI];
- - mov [RDI],RAX;
- - mov RAX,[RBX+8];
- - sbb RAX,[RSI+8];
- - mov [RDI+8],RAX;
- - mov RAX,[RBX+16];
- - sbb RAX,[RSI+16];
- - mov [RDI+16],RAX;
- - mov RAX,[RBX+24];
- - sbb RAX,[RSI+24];
- - mov [RDI+24],RAX;
- - mov RAX,[RBX+32];
- - sbb RAX,[RSI+32];
- - mov [RDI+32],RAX;
- - mov RAX,[RBX+40];
- - sbb RAX,[RSI+40];
- - mov [RDI+40],RAX;
- - mov RAX,[RBX+48];
- - sbb RAX,[RSI+48];
- - mov [RDI+48],RAX;
- - mov RAX,[RBX+56];
- - sbb RAX,[RSI+56];
- - mov [RDI+56],RAX;
- - sbb RAX,RAX;
- - neg RAX;
- - mov carry, RAX;
- - }
- - return carry;
- - } else version (D_InlineAsm_X86) {
- -
- - word* _z = z.ptr;
- - word* _x = cast(word*)x.ptr;
- - word* _y = cast(word*)y.ptr;
- - word* _carry = &carry;
- - asm {
- - mov EBX,_x;
- - mov ESI,_y;
- - mov ECX,_carry;
- - xor EAX,EAX;
- - sub EAX,[ECX]; //force CF=1 iff *carry==1
- - mov EDI,_z;
- - mov EAX,[EBX];
- - sbb EAX,[ESI];
- - mov [EDI],EAX;
- - mov EAX,[EBX+4];
- - sbb EAX,[ESI+4];
- - mov [EDI+4],EAX;
- - mov EAX,[EBX+8];
- - sbb EAX,[ESI+8];
- - mov [EDI+8],EAX;
- - mov EAX,[EBX+12];
- - sbb EAX,[ESI+12];
- - mov [EDI+12],EAX;
- - mov EAX,[EBX+16];
- - sbb EAX,[ESI+16];
- - mov [EDI+16],EAX;
- - mov EAX,[EBX+20];
- - sbb EAX,[ESI+20];
- - mov [EDI+20],EAX;
- - mov EAX,[EBX+24];
- - sbb EAX,[ESI+24];
- - mov [EDI+24],EAX;
- - mov EAX,[EBX+28];
- - sbb EAX,[ESI+28];
- - mov [EDI+28],EAX;
- - sbb EAX,EAX;
- - neg EAX;
- - mov carry, EAX;
- - }
- - return carry;
- - }
- - else {
- z[0] = word_sub(x[0], y[0], &carry);
- z[1] = word_sub(x[1], y[1], &carry);
- z[2] = word_sub(x[2], y[2], &carry);
- @@ -568,7 +284,6 @@
- z[6] = word_sub(x[6], y[6], &carry);
- z[7] = word_sub(x[7], y[7], &carry);
- return carry;
- - }
- }
- /*
- @@ -576,85 +291,6 @@
- */
- word word8_linmul2(ref word[8] x, word y, word carry)
- {
- - version(D_InlineAsm_X86_64) {
- - word* _x = x.ptr;
- - word[8] ret;
- - word* _z = ret.ptr;
- - word* _carry = &carry;
- - asm pure nothrow @nogc {
- - mov RSI, _x;
- - mov RDI, _z;
- - mov RDX, _carry;
- - mov RCX, [RDX];
- -
- - mov RAX, [RSI];
- - mov RBX, y;
- - mul RBX;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [RDI], RAX;
- -
- - mov RAX, [RSI+8];
- - mov RBX, y;
- - mul RBX;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [RDI+8], RAX;
- -
- - mov RAX, [RSI+16];
- - mov RBX, y;
- - mul RBX;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [RDI+16], RAX;
- -
- - mov RAX, [RSI+24];
- - mov RBX, y;
- - mul RBX;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [RDI+24], RAX;
- -
- - mov RAX, [RSI+32];
- - mov RBX, y;
- - mul RBX;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [RDI+32], RAX;
- -
- - mov RAX, [RSI+40];
- - mov RBX, y;
- - mul RBX;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [RDI+40], RAX;
- -
- - mov RAX, [RSI+48];
- - mov RBX, y;
- - mul RBX;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [RDI+48], RAX;
- -
- - mov RAX, [RSI+56];
- - mov RBX, y;
- - mul RBX;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov carry, RDX;
- - mov [RDI+56], RAX;
- - }
- - x[0 .. 8] = ret[0 .. 8];
- - return carry;
- - }
- - else {
- x[0] = word_madd2(x[0], y, &carry);
- x[1] = word_madd2(x[1], y, &carry);
- x[2] = word_madd2(x[2], y, &carry);
- @@ -664,7 +300,6 @@
- x[6] = word_madd2(x[6], y, &carry);
- x[7] = word_madd2(x[7], y, &carry);
- return carry;
- - }
- }
- /*
- @@ -672,85 +307,6 @@
- */
- word word8_linmul3(ref word[8] z, const ref word[8] x, word y, word carry)
- {
- -
- - version(D_InlineAsm_X86_64) {
- - word* _x = cast(word*)x.ptr;
- - word* _z = z.ptr;
- - word* _carry = &carry;
- - clearMem(_z, z.length);
- - asm pure nothrow @nogc {
- - mov RSI, _x;
- - mov RDI, _z;
- - mov RDX, _carry;
- - mov RCX, [RDX];
- -
- - mov RAX, [RSI];
- - mov RBX, y;
- - mul RBX;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [RDI], RAX;
- -
- - mov RAX, [RSI+8];
- - mov RBX, y;
- - mul RBX;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [RDI+8], RAX;
- -
- - mov RAX, [RSI+16];
- - mov RBX, y;
- - mul RBX;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [RDI+16], RAX;
- -
- - mov RAX, [RSI+24];
- - mov RBX, y;
- - mul RBX;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [RDI+24], RAX;
- -
- - mov RAX, [RSI+32];
- - mov RBX, y;
- - mul RBX;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [RDI+32], RAX;
- -
- - mov RAX, [RSI+40];
- - mov RBX, y;
- - mul RBX;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [RDI+40], RAX;
- -
- - mov RAX, [RSI+48];
- - mov RBX, y;
- - mul RBX;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [RDI+48], RAX;
- -
- - mov RAX, [RSI+56];
- - mov RBX, y;
- - mul RBX;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov carry, RDX;
- - mov [RDI+56], RAX;
- - }
- - return carry;
- - }
- - else {
- z[0] = word_madd2(x[0], y, &carry);
- z[1] = word_madd2(x[1], y, &carry);
- z[2] = word_madd2(x[2], y, &carry);
- @@ -760,7 +316,6 @@
- z[6] = word_madd2(x[6], y, &carry);
- z[7] = word_madd2(x[7], y, &carry);
- return carry;
- - }
- }
- /*
- @@ -768,109 +323,6 @@
- */
- word word8_madd3(ref word[8] z, const ref word[8] x, word y, word carry)
- {
- - version(D_InlineAsm_X86_64) {
- - word* _x = cast(word*)x.ptr;
- - word* _z = z.ptr;
- - word* _carry = &carry;
- - word[8] ret; word* _z1 = ret.ptr;
- - asm pure nothrow @nogc {
- - mov R8, _x;
- - mov RSI, _z;
- - mov R10, y;
- - mov RDI, _z1;
- - mov RDX, _carry;
- - mov RCX, [RDX];
- -
- - mov RAX, [R8];
- - mov RBX, R10;
- - mul RBX;
- - add RAX, [RSI];
- - adc RDX, 0;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [RDI], RAX;
- - add R8, 8;
- -
- - mov RAX, [R8];
- - mov RBX, R10;
- - mul RBX;
- - add RAX, [RSI+8];
- - adc RDX, 0;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [RDI+8], RAX;
- - add R8, 8;
- -
- - mov RAX, [R8];
- - mov RBX, R10;
- - mul RBX;
- - add RAX, [RSI+16];
- - adc RDX, 0;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [RDI+16], RAX;
- - add R8, 8;
- -
- - mov RAX, [R8];
- - mov RBX, R10;
- - mul RBX;
- - add RAX, [RSI+24];
- - adc RDX, 0;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [RDI+24], RAX;
- - add R8, 8;
- -
- - mov RAX, [R8];
- - mov RBX, R10;
- - mul RBX;
- - add RAX, [RSI+32];
- - adc RDX, 0;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [RDI+32], RAX;
- - add R8, 8;
- -
- - mov RAX, [R8];
- - mov RBX, R10;
- - mul RBX;
- - add RAX, [RSI+40];
- - adc RDX, 0;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [RDI+40], RAX;
- - add R8, 8;
- -
- - mov RAX, [R8];
- - mov RBX, R10;
- - mul RBX;
- - add RAX, [RSI+48];
- - adc RDX, 0;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov RCX, RDX;
- - mov [EDI+48], RAX;
- - add R8, 8;
- -
- - mov RAX, [R8];
- - mov RBX, R10;
- - mul RBX;
- - add RAX, [RSI+56];
- - adc RDX, 0;
- - add RAX, RCX;
- - adc RDX, 0;
- - mov carry, RDX;
- - mov [RDI+56], RAX;
- - }
- - z[0 .. 8] = ret[0..8];
- - return carry;
- - } else {
- z[0] = word_madd3(x[0], y, z[0], &carry);
- z[1] = word_madd3(x[1], y, z[1], &carry);
- z[2] = word_madd3(x[2], y, z[2], &carry);
- @@ -880,7 +332,6 @@
- z[6] = word_madd3(x[6], y, z[6], &carry);
- z[7] = word_madd3(x[7], y, z[7], &carry);
- return carry;
- - }
- }
- /*
Add Comment
Please, Sign In to add comment