代码拉取完成,页面将自动刷新
C源码:
static ALWAYS_INLINE uint32_t abs2( uint32_t a )
{
uint32_t s = ((a>>15)&0x10001)*0xffff; <====== "*0xffff 存在优化空间"
return (a+s)^s;
}
GCC汇编:
lsr w5, w4, #15
and w7, w5, #0x10001
lsl w5, w7, #16 <====== "当做 reg*0x10000 - reg"
sub w5, w5, w7
maple里原本此类优化在后端实现,但是由于后端没有数据流,无法判断reg*0x10000
是否会溢出,所以关闭,建议在中端数据流的配合下进行优化。
源码:spec500 pp_ctl.c 函数:Perl_pp_enter
maple:
22545 regassign i64 %13 (sub i64 (regread i64 %11, regread i64 %12))
22546 regassign i64 %14 (div i64 (regread i64 %13, constval i64 8))
maple汇编:
16678 asr x1, x2, #63
16679 add x1, x2, x1, LSR #61
16680 asr x1, x1, #3 // x1 = x2 / 8
gcc汇编:
asr x0, x0, 3
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
登录 后才可以发表评论