Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 优化手臂绝对跳跃_Performance_Optimization_Assembly_Arm - Fatal编程技术网

Performance 优化手臂绝对跳跃

Performance 优化手臂绝对跳跃,performance,optimization,assembly,arm,Performance,Optimization,Assembly,Arm,我想在ARM assembly中只使用24字节的代码/数据执行以下操作。可能吗 PC=[MEMLOC]+PC 或者,换言之,我想根据从内存读取的PC相对偏移量向前跳 从MEMLOC读取的值必须是一个完整的32位字 我可以用16[轻松做到这一点,因为您的解决方案实际上需要36个字节,因为第一个ldr可能会导致在您的文本中生成一个包含MEMLOC1地址的内存池条目(除非您的链接器足够聪明,可以解决这个问题) 在24字节中,您可以通过将数据移动到更近的位置来实现这一点,以便生成pc相对地址 .te

我想在ARM assembly中只使用24字节的代码/数据执行以下操作。可能吗

PC=[MEMLOC]+PC

或者,换言之,我想根据从内存读取的PC相对偏移量向前跳

从MEMLOC读取的值必须是一个完整的32位字


我可以用16[轻松做到这一点,因为您的解决方案实际上需要36个字节,因为第一个ldr可能会导致在您的文本中生成一个包含MEMLOC1地址的内存池条目(除非您的链接器足够聪明,可以解决这个问题)

在24字节中,您可以通过将数据移动到更近的位置来实现这一点,以便生成pc相对地址

  .text
_go:
  ldr r0, L_offset
  add pc, pc, r0
L_offset:
  .word 0x12345678

偏移量可能需要减去几个字节以补偿增加的pc。

您的解决方案实际上需要36个字节,因为第一个ldr可能会导致在文本中生成包含MEMLOC1地址的内存池条目(除非您的链接器足够聪明,可以修复该问题)

在24字节中,您可以通过将数据移动到更近的位置来实现这一点,以便生成pc相对地址

  .text
_go:
  ldr r0, L_offset
  add pc, pc, r0
L_offset:
  .word 0x12345678

偏移量可能需要减去几个字节来补偿不断增加的pc。

删除一条指令会节省大量成本吗?我想,访问内存以获得此偏移量可能会使任何收益付之东流。向我们展示您现在正在努力改进的内容?我在我的原始帖子中添加了一个更新,其中包含了o使用4字节的指令和数据执行此操作。实际上,我不需要从内存中读取32位字,但据我所知,无法在指令中存储32位值,因此这似乎是必要的。删除指令不会有多大关系。至少有1个时钟暂停等待读取32位值完成。我想你不能短于四个字(三个说明加上偏移量),一个字是4个字节,而你有4个字是16个字节,所以你现在有8个字节可供使用。你希望通过删除一条指令来节省大量开支吗?我想,访问内存以获得此偏移量很可能会抵消任何增益。让我们看看你现在有什么需要改进的地方吗?我为我原来的post co添加了一个更新使用4字节的指令和数据来实现这一点。我实际上不需要从内存中读取32位的字,但从我所看到的情况来看,无法在指令中存储32位的值,因此这似乎是必要的。删除指令并不重要。至少有1个时钟暂停等待读取要完成的32位值。我认为不能短于四个字(三条指令加上偏移量),一个字是4个字节,您有4个字是16个字节,因此您现在有8个字节可供使用。感谢您的建议。但是,您的解决方案不起作用,因为我希望通过内存位置0x12345678处的内容来增加PC。某些(概念上)类似于:添加PC,[PC+r0]这不是真正的说明。我很抱歉,因为我意识到我最初描述我想做的事情有点混乱。谢谢你的建议。但是你的解决方案不起作用,因为我想通过内存位置0x12345678增加PC。一些(概念上)像:添加PC,[PC+r0]这不是一个真正的指示。我很抱歉,因为我意识到我最初描述我想做什么的帖子有点让人困惑。