Windows CE 6.0取代memcpy Cortex A8

Windows CE 6.0取代memcpy Cortex A8,windows,arm,windows-ce,memcpy,neon,Windows,Arm,Windows Ce,Memcpy,Neon,我正在使用飞思卡尔I.Mx51,希望用基于霓虹灯的memcpy函数替换WindowsCE6.0memcpy函数 我在ARM主页()上找到了一些它应该如何工作的代码 我的第一个问题是:在platformbuilder项目中哪里可以找到memcpy代码,如何更改代码?我在coredll中找到了一个教程()来替换淋浴器,但是页面太旧了,没有屏幕截图了 我试着用memcpy做同样的事情,但是没有所有的截图我就被卡住了 第二个问题是:我是否需要做更多的工作来复制一些数据,或者这些汇编代码是否足够: NEO

我正在使用飞思卡尔I.Mx51,希望用基于霓虹灯的memcpy函数替换WindowsCE6.0memcpy函数

我在ARM主页()上找到了一些它应该如何工作的代码

我的第一个问题是:在platformbuilder项目中哪里可以找到memcpy代码,如何更改代码?我在coredll中找到了一个教程()来替换淋浴器,但是页面太旧了,没有屏幕截图了

我试着用memcpy做同样的事情,但是没有所有的截图我就被卡住了

第二个问题是:我是否需要做更多的工作来复制一些数据,或者这些汇编代码是否足够:

NEONCopyPLD
      PLD [r1, #0xC0]
      VLDM r1!,{d0-d7}
      VSTM r0!,{d0-d7}
      SUBS r2,r2,#0x40
      BGE NEONCopyPLD
也许有人以前也这么做过,或者知道如何更改memcpy代码

致意
Jens

您的代码很可能会由于对齐错误而崩溃

您应该使用vld1.8和vst1.8来避免这种情况

此外,应检查开始处的尺寸和对齐条件,并将其分支到单独优化的截面

最后但并非最不重要的一点是,将目标与64字节对齐,并在每次迭代中复制64字节,以获得最大的数据吞吐量


您需要的不是中的知识,而是通过ARM的控制流和缓存行为。

您可以通过重建自己版本的coredll来替换它,但这很棘手,需要对构建系统有很好的了解。您还应该考虑到CE 6在默认情况下不保存上下文交换机上的霓虹灯寄存器,这将需要在BSP中附加一些支持。
也许解释一下为什么要在Windows CE上iper optimize memcpy可能会导致有人提出更好的解决方案。

在后一点上,尝试使用该代码将
memcpy
17个字节放入堆栈上的缓冲区,看看会发生什么……;)我的NEON memcpy有344行长:)是的,我在本教程中遇到了一个问题:“我们想要执行的命令很简单——我们想要设置本地环境,切换到新的“淋浴器”库源所在的目录,并执行一个干净的构建。这些步骤是使用我们放入批处理文件中的命令完成的:”因为没有包含信息的屏幕截图。我们正在播放很多东西,希望它能加速我们的系统。要在你的系统上播放,你需要优化你的显示驱动程序,而不是memcpy。显示器驱动程序根本不允许使用memcpy。如果是您自己的代码使用memcpy来实现blitting,那么在那里更改它会更容易。更改此函数的行为可能会影响系统的其他部分,如对齐问题等。正如我在上一篇文章中告诉您的,CE6不会在上下文开关上保存NEON寄存器。