我想从位图中设置字节到内存中,设置的字节值不等于给定的透明度字节值。
我想做的是:
for (char *src=start;src<end;src++,dst++)
{
if (*src!=VALUE) {
*dst=*src;
}
}
字符串
即只设置与值不同的字节,在C或汇编中(或从汇编翻译回来的C)
为了更快,我考虑使用32位加载,src和dst之间的SEL操作,以及32位存储。但是,我需要设置掩码,该掩码位于APSR.GE中。
如果我没有错的话,用VALUE做SIMD比较(使用USUB8)只会检查结果是否>=或<到VALUE,不可能检查它们是否相等。(当然,你可以把VALUE限制为0或255,然后收工……)
另一种可能性是在src上使用预先计算的掩码,然后手动设置APSR.GE(可能吗?)但是1)它使用内存,2)在3)不确定它是否真的比逐字节访问更快之前获得数据并不总是可行的。
2条答案
按热度按时间1hdlvixo1#
我现在还不知 prop 体的语法,但是像这样的东西怎么样:
6gpjuf902#
你可能不再需要这个了,但对于可能需要类似算法的新手,我的建议是:
拥有
使用USUB8严格比较(GE表示“>= 0”,因此GE不表示“< 0”):
您的循环将由7个操作(2个加载、1个存储、2个USUB8、2个SEL)和循环管理组成。