diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-11-20 06:25:01 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-11-20 06:25:01 +0100 |
commit | 2559e19e1944f3ff880274d0a7d172976d082c33 (patch) | |
tree | e1c27cdbf4557116138b19aa719d2027124c4675 /sys/src/libmp | |
parent | 55d3e11f0f68bfe26fb56029b53e3c1c50c40c2c (diff) |
libmp: 386/amd64 mpvec*(): replace conditional branches with ADC/SBB instructions
Diffstat (limited to 'sys/src/libmp')
-rw-r--r-- | sys/src/libmp/386/mpvecadd.s | 7 | ||||
-rw-r--r-- | sys/src/libmp/386/mpvecdigmuladd.s | 8 | ||||
-rw-r--r-- | sys/src/libmp/386/mpvecdigmulsub.s | 20 | ||||
-rw-r--r-- | sys/src/libmp/amd64/mpvecadd.s | 9 | ||||
-rw-r--r-- | sys/src/libmp/amd64/mpvecdigmuladd.s | 9 | ||||
-rw-r--r-- | sys/src/libmp/amd64/mpvecdigmulsub.s | 18 |
6 files changed, 21 insertions, 50 deletions
diff --git a/sys/src/libmp/386/mpvecadd.s b/sys/src/libmp/386/mpvecadd.s index 50a45b140..598bf4d54 100644 --- a/sys/src/libmp/386/mpvecadd.s +++ b/sys/src/libmp/386/mpvecadd.s @@ -35,11 +35,8 @@ _add1: /* sum[alen] = carry */ _addend: - JC _addcarry - MOVL $0,(DI)(BP*4) - RET -_addcarry: - MOVL $1,(DI)(BP*4) + ADCL $0, CX + MOVL CX, (DI)(BP*4) RET /* sum[blen:alen-1],carry = a[blen:alen-1] + 0 */ diff --git a/sys/src/libmp/386/mpvecdigmuladd.s b/sys/src/libmp/386/mpvecdigmuladd.s index 5a262ce8b..1a232ac91 100644 --- a/sys/src/libmp/386/mpvecdigmuladd.s +++ b/sys/src/libmp/386/mpvecdigmuladd.s @@ -36,13 +36,9 @@ _muladdloop: MOVL (SI)(BP*4),AX /* lo = b[i] */ MULL BX /* hi, lo = b[i] * m */ ADDL CX,AX /* lo += oldhi */ - JCC _muladdnocarry1 - INCL DX /* hi += carry */ -_muladdnocarry1: + ADCL $0, DX /* hi += carry */ ADDL AX,(DI)(BP*4) /* p[i] += lo */ - JCC _muladdnocarry2 - INCL DX /* hi += carry */ -_muladdnocarry2: + ADCL $0, DX /* hi += carry */ MOVL DX,CX /* oldhi = hi */ INCL BP /* i++ */ JNZ _muladdloop diff --git a/sys/src/libmp/386/mpvecdigmulsub.s b/sys/src/libmp/386/mpvecdigmulsub.s index 04cbfad30..42c88a72e 100644 --- a/sys/src/libmp/386/mpvecdigmulsub.s +++ b/sys/src/libmp/386/mpvecdigmulsub.s @@ -33,21 +33,15 @@ _mulsubloop: MOVL (SI)(BP*4),AX /* lo = b[i] */ MULL BX /* hi, lo = b[i] * m */ ADDL 0(SP),AX /* lo += oldhi */ - JCC _mulsubnocarry1 - INCL DX /* hi += carry */ -_mulsubnocarry1: + ADCL $0, DX /* hi += carry */ SUBL AX,(DI)(BP*4) - JCC _mulsubnocarry2 - INCL DX /* hi += carry */ -_mulsubnocarry2: + ADCL $0, DX /* hi += carry */ MOVL DX,0(SP) INCL BP LOOP _mulsubloop - MOVL 0(SP),AX - SUBL AX,(DI)(BP*4) - JCC _mulsubnocarry3 - MOVL $-1,AX - RET -_mulsubnocarry3: - MOVL $1,AX + MOVL CX, AX + MOVL 0(SP),BX + SUBL BX,(DI)(BP*4) + SBBL CX, AX + ORL $1, AX RET diff --git a/sys/src/libmp/amd64/mpvecadd.s b/sys/src/libmp/amd64/mpvecadd.s index 326f39dad..74a656c90 100644 --- a/sys/src/libmp/amd64/mpvecadd.s +++ b/sys/src/libmp/amd64/mpvecadd.s @@ -9,7 +9,6 @@ TEXT mpvecadd(SB),$0 MOVL alen+8(FP),DX MOVL blen+24(FP),CX -/* MOVL a+0(FP),SI */ MOVQ RARG, SI MOVQ b+16(FP),BX SUBL CX,DX @@ -35,12 +34,10 @@ _add1: LOOP _addloop2 /* sum[alen] = carry */ + _addend: - JC _addcarry - MOVL $0,(DI)(BP*4) - RET -_addcarry: - MOVL $1,(DI)(BP*4) + ADCL $0, CX + MOVL CX,(DI)(BP*4) RET /* sum[blen:alen-1],carry = a[blen:alen-1] + 0 */ diff --git a/sys/src/libmp/amd64/mpvecdigmuladd.s b/sys/src/libmp/amd64/mpvecdigmuladd.s index 6599a42c8..1ddd6487e 100644 --- a/sys/src/libmp/amd64/mpvecdigmuladd.s +++ b/sys/src/libmp/amd64/mpvecdigmuladd.s @@ -22,7 +22,6 @@ */ TEXT mpvecdigmuladd(SB),$0 -/* MOVQ b+0(FP),SI */ MOVQ RARG,SI MOVL n+8(FP),CX MOVL m+16(FP),BX @@ -37,13 +36,9 @@ _muladdloop: MOVL (SI)(BP*4),AX /* lo = b[i] */ MULL BX /* hi, lo = b[i] * m */ ADDL CX,AX /* lo += oldhi */ - JCC _muladdnocarry1 - INCL DX /* hi += carry */ -_muladdnocarry1: + ADCL $0, DX /* hi += carry */ ADDL AX,(DI)(BP*4) /* p[i] += lo */ - JCC _muladdnocarry2 - INCL DX /* hi += carry */ -_muladdnocarry2: + ADCL $0, DX /* hi += carry */ MOVL DX,CX /* oldhi = hi */ INCQ BP /* i++ */ JNZ _muladdloop diff --git a/sys/src/libmp/amd64/mpvecdigmulsub.s b/sys/src/libmp/amd64/mpvecdigmulsub.s index 0b5a35761..635bc493e 100644 --- a/sys/src/libmp/amd64/mpvecdigmulsub.s +++ b/sys/src/libmp/amd64/mpvecdigmulsub.s @@ -22,8 +22,6 @@ * */ TEXT mpvecdigmulsub(SB),$0 - -/* MOVL b+0(FP),SI */ MOVQ RARG,SI MOVL n+8(FP),CX MOVL m+16(FP),BX @@ -34,20 +32,14 @@ _mulsubloop: MOVL (SI)(BP*4),AX /* lo = b[i] */ MULL BX /* hi, lo = b[i] * m */ ADDL R8,AX /* lo += oldhi */ - JCC _mulsubnocarry1 - INCL DX /* hi += carry */ -_mulsubnocarry1: + ADCL $0, DX /* hi += carry */ SUBL AX,(DI)(BP*4) - JCC _mulsubnocarry2 - INCL DX /* hi += carry */ -_mulsubnocarry2: + ADCL $0, DX /* hi += carry */ MOVL DX,R8 INCL BP LOOP _mulsubloop + MOVL CX, AX SUBL R8,(DI)(BP*4) - JCC _mulsubnocarry3 - MOVQ $-1,AX - RET -_mulsubnocarry3: - MOVQ $1,AX + SBBQ CX, AX + ORQ $1, AX RET |