gpt4 book ai didi

assembly - ARM cortex m4 DSP 代码上的快速 1 位透明 blit

转载 作者:行者123 更新时间:2023-12-03 06:27:31 27 4
gpt4 key购买 nike

我想将位图中的字节设置到内存,设置值不等于给定透明度字节值的字节。

大致上我想做:

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) 之前获取数据并不总是可行的它确实比逐字节访问要快。

最佳答案

我暂时无法理解确切的语法,但是像这样的代码怎么样:

  • 将现有图像中的四个字节加载到 Ra (LDR)
  • 将源图像中的四个字节加载到 Rb (LDR)
  • 使用适当的掩码 (~VALUE) 进行 XOR Ra,将 VALUE 更改为 0 (EOR)
  • 使用与上述相同的掩码对 Rb 进行异或 (EOR)
  • 使用 0 的寄存器执行 USUB8 以设置 GE 标志 (USUB8)
  • 使用SEL在现有图像字节和源图像字节之间进行选择,写入Rc(SEL)
  • 再次使用掩码对 Rc 进行异或以恢复原始字节 (EOR)
  • 将 Rc 写回现有镜像 (STR)

关于assembly - ARM cortex m4 DSP 代码上的快速 1 位透明 blit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12314200/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com