libmp: 386/amd64 mpvec*(): replace conditional branches with ADC/SBB instructions
parent
55d3e11f0f
commit
2559e19e19
|
@ -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 */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue