我想将位图中的字节设置为内存,设置字节,该值不等于给定的透明字节值。
示意我想做:
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)只会检查结果是否为> =或&lt;到VALUE,不可能检查它们是否相等。 (当然你可以将VALUE限制为0或255并将其称为一天......)
另一种可能性是在src上使用预先计算的掩码,然后手动设置APSR.GE(可能吗?)但是1)它使用内存; 2)在3)之前获取数据并不总是可行的它实际上比逐字节访问更快。
答案 0 :(得分:4)
现在确切的语法让我感到惊讶,但是这样的事情怎么样:
答案 1 :(得分:2)
你可能不再需要这个了,但对于可能需要类似算法的新手来说,这就是我的建议:
有
使用USUB8严格比较(GE表示“&gt; = 0”,因此GE不表示“&lt; 0”):
您的循环将包含7个操作(2个负载,1个存储,2个USUB8,2个SEL)以及循环管理。