找回密码
 欢迎注册
查看: 349|回复: 1

[擂台] std::midpoint<long>實現

[复制链接]
发表于 2023-12-7 22:25:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
按照C++20標準,std::midpoint需要輸出:
Half the sum of a and b. No overflow occurs. If a and b have integer type and the sum is odd, the result is rounded towards a.

對無符號數這相對簡單,rcr能包含進位視爲一個65位的臨時變量
  1. Timeline view:
  2. Index     012345

  3. [0,0]     DeER .   cmpq        %rsi, %rdi
  4. [0,1]     DeER .   movq        %rsi, %rax
  5. [0,2]     D=eER.   adcq        %rdi, %rax
  6. [0,3]     D==eER   rcrq        %rax
复制代码
但有符號數呢?
cycle數第一考慮,覆蓋輸入寄存器第二考慮,臨時寄存器數量第三,長度第四(有別的評價標準再說)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2023-12-8 15:03:45 | 显示全部楼层
mca說這是4cy
  1. [0,0]     DeER ..   xorl        %ecx, %ecx
  2. [0,1]     DeER ..   cmpq        %rdi, %rsi
  3. [0,2]     D=eER..   setl        %al
  4. [0,3]     DeE-R..   sarq        %rsi
  5. [0,4]     .DeER..   adcl        %ecx, %ecx
  6. [0,5]     .DeER..   sarq        %rdi
  7. [0,6]     .D=eER.   sbbb        %cl, %al
  8. [0,7]     .DeE-R.   movq        %rsi, %rax
  9. [0,8]     . D=eER   adcq        %rdi, %rax
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-27 22:27 , Processed in 0.058584 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表