【发布时间】:2012-09-07 08:10:39
【问题描述】:
我想将字节从位图设置到内存,设置值不等于给定透明度字节值的字节。
我想做的示意图:
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)只会检查结果是 >= 还是
另一种可能性是在 src 上使用预先计算的掩码,然后手动设置 APSR.GE(可能吗?)但是 1)它使用内存,2)在 3)之前获取数据并不总是可行它确实比逐字节访问要快。
【问题讨论】:
-
了解什么是VALUE可能会很好?只是一个位设置值? src 或 dst 是否可以包含该 VALUE 位集?有了这些信息,人们还可以开发出一个带有逻辑表达式的副本,从而摆脱 if 语句。
-
VALUE 是一个字节,例如 0x1c(可能是另一个字节)。 src 肯定会包含 0x1c 值(比如说“透明”); dst 也可以包含它,如果它在粘贴之前有它。 (想想透明的颜色,例如在 GIF 中)。
-
你可能知道我想说什么,如果你查看 wiki 的链接,你会发现可以使用 AND/OR 来执行这种 blitting,当然如果在你的抵达。 en.wikipedia.org/wiki/Bit_blit#Technique
标签: assembly arm signal-processing cortex-m3 blit