📄 mpvecdigmulsub.s
字号:
/* * mpvecdigmulsub(mpdigit *b, int n, mpdigit m, mpdigit *p) * * p -= b*m * * each step look like: * hi,lo = m*b[i] * lo += oldhi + carry * hi += carry * p[i] += lo * oldhi = hi * * the registers are: * hi = DX - constrained by hardware * lo = AX - constrained by hardware * b = SI - can't be BP * p = DI - can't be BP * i = BP * n = CX - constrained by LOOP instr * m = BX * oldhi = EX * */TEXT mpvecdigmulsub(SB),$4 MOVL b+0(FP),SI MOVL n+4(FP),CX MOVL m+8(FP),BX MOVL p+12(FP),DI XORL BP,BP MOVL BP,0(SP)_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: SUBL AX,(DI)(BP*4) JCC _mulsubnocarry2 INCL DX /* hi += carry */_mulsubnocarry2: 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 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -