- 注册时间
- 2008-11-6
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 1488
- 在线时间
- 小时
|
发表于 2025-10-17 09:04:22
|
显示全部楼层
函数参数跟题主的顺序有点不一样.
extern "C" uint64_t asm_avx2_x256_mulx_4_4(const uint64_t a[], const uint64_t b[], uint64_t result[]);
- asm_avx2_x256_mulx_4_4 proc frame
- .endprolog
- ;原来 result temp1,temp2 rcx r9,r8
- ;现在 temp1,temp2,result rcx,r9.r8 即 把rcx,r8对调
- ;mov r10, [r8 + 0 * 8]
- push rbx
- push r12
- push r13
- push r14
- push r15
- push rdi
- push rsi
- push rbp
- push rsp
- mov r11, [rdx + 0 * 8]
- mov r12, [rdx + 1 * 8]
- mov r13, [rdx + 2 * 8]
- mov r14, [rdx + 3 * 8]
- ;rcx:r11--r14 dest:r8
- ;rdx(mulx 固定为被乘数)
- ; 剩余可用 rax rbx, rsi,rdi,r9,r10,r15,rbp
- ;mov r9, rdx
- mov rdx,[rcx + 0 * 8]
- mulx rax,rbx,r11
- mulx rsi,rdi,r12
- mulx r9,r10,r13
- mulx r15,rbp,r14
- add rax,rdi
- adc rsi,r10
- adc r9,rbp
- adc r15,0
- mov [r8 + 0 * 8],rbx
- movd xmm1,rax
- movd xmm2,rsi
- movd xmm3,r9
- movd xmm4,r15
- ;第一轮结束
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- mov rdx,[rcx + 1 * 8]
- mulx rax,rbx,r11
- mulx rsi,rdi,r12
- mulx r9,r10,r13
- mulx r15,rbp,r14
- add rax,rdi
- adc rsi,r10
- adc r9,rbp
- adc r15,0
- movd rdx,xmm1
- movd rdi,xmm2
- movd r10,xmm3
- movd rbp,xmm4
- add rbx,rdx
- adc rax,rdi
- adc rsi,r10
- adc r9,rbp
- adc r15,0
- mov [r8 + 1 * 8],rbx
- movd xmm1,rax
- movd xmm2,rsi
- movd xmm3,r9
- movd xmm4,r15
- ;第二轮结束
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- mov rdx,[rcx + 2 * 8]
- mulx rax,rbx,r11
- mulx rsi,rdi,r12
- mulx r9,r10,r13
- mulx r15,rbp,r14
- add rax,rdi
- adc rsi,r10
- adc r9,rbp
- adc r15,0
- movd rdx,xmm1
- movd rdi,xmm2
- movd r10,xmm3
- movd rbp,xmm4
- add rbx,rdx
- adc rax,rdi
- adc rsi,r10
- adc r9,rbp
- adc r15,0
- mov [r8 + 2 * 8],rbx
- movd xmm1,rax
- movd xmm2,rsi
- movd xmm3,r9
- movd xmm4,r15
- ;第三轮结束
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- mov rdx,[rcx + 3 * 8]
- mulx rax,rbx,r11
- mulx rsi,rdi,r12
- mulx r9,r10,r13
- mulx r15,rbp,r14
- add rax,rdi
- adc rsi,r10
- adc r9,rbp
- adc r15,0
- movd rdx,xmm1
- movd rdi,xmm2
- movd r10,xmm3
- movd rbp,xmm4
- add rbx,rdx
- adc rax,rdi
- adc rsi,r10
- adc r9,rbp
- adc r15,0
- mov [r8 + 3 * 8],rbx
- mov [r8 + 4 * 8],rax
- mov [r8 + 5 * 8],rsi
- mov [r8 + 6 * 8],r9
- mov [r8 + 7 * 8],r15
- pop rsp
- pop rbp
- pop rsi
- pop rdi
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbx
- ret
- asm_avx2_x256_mulx_4_4 endp
复制代码 |
|