Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/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
Iphone 直列臂装配中的增量问题_Iphone_Assembly - Fatal编程技术网

Iphone 直列臂装配中的增量问题

Iphone 直列臂装配中的增量问题,iphone,assembly,Iphone,Assembly,我有以下的内嵌ARM组件,它在调试版本中工作,但在iPhoneSDK3.1的发布版本中崩溃。问题是add指令,我将C变量输出和x的地址增加4个字节,这应该增加一个浮点大小。我想,当我在某个阶段递增时,我正在覆盖某些内容,有人能说哪种方法是处理这个问题的最佳方法吗 谢谢 asm要替换的C代码,sum、output和x都是浮点 for(int i = 0; i< count; i++) sum+= output[i]* (*x++) asm volatile( ".align

我有以下的内嵌ARM组件,它在调试版本中工作,但在iPhoneSDK3.1的发布版本中崩溃。问题是add指令,我将C变量输出和x的地址增加4个字节,这应该增加一个浮点大小。我想,当我在某个阶段递增时,我正在覆盖某些内容,有人能说哪种方法是处理这个问题的最佳方法吗

谢谢

asm要替换的C代码,sum、output和x都是浮点

for(int i = 0; i< count; i++)
 sum+= output[i]* (*x++)

 asm volatile(

    ".align 4 \n\t"
    "mov r4,%3    \n\t"  
    "flds s0,[%0]           \n\t"
    "0:                   \n\t"
    "flds s1,[%2]           \n\t"
    //"add %3,%3,#4         \n\t"
    "flds s2,[%1]           \n\t"
    //"add %2,%2,#4         \n\t"
    "subs r4,r4, #1         \n\t"
    "fmacs s0, s1, s2        \n\t"
    "bne 0b                 \n\t"
    "fsts s0,[%0]               \n\t"
    :
    : "r" (&sum), "r" (output), "r" (x),"r" (count)
    : "r0","r4","cc", "memory", 
        "s0","s1","s2"                         
    );

您的意思是要将%1添加到4和%3中吗?如果在函数完成后再次使用该寄存器,则添加到%3可能会导致损坏

asm volatile( ".align 4 \n\t" "mov r4,%3 \n\t" "flds s0,[%0] \n\t" "0: \n\t" "flds s1,[%2] \n\t" "add %2,%2,#4 \n\t" "flds s2,[%1] \n\t" "add %1,%1,#4 \n\t" "subs r4,r4, #1 \n\t" "fmacs s0, s1, s2 \n\t" "bne 0b \n\t" "fsts s0,[%0] \n\t" : : "r" (&sum), "r" (output), "r" (x),"r" (count) : "r0","r4","cc", "memory", "s0","s1","s2" );
您好,非常感谢,您能看到任何加速循环的方法或我应该使用的任何技术吗?幸运的是,您不能在FLD上添加a,4。即使您预先计算了%2或%1的最终值,以便可以删除SUB r4、r4、1,您也必须将其替换为cmp rx,%2,并且仍然需要条件分支。对于浮动,是否有与ldm等效的工具?一次读取多个浮点寄存器可能会使内存系统更快。取决于总线,如果有这样的指令。不幸的是,您不能在FLD上添加a,4,我说我不能添加%2,%2,4,这会导致崩溃吗?请告诉我为什么我不能添加%2、%2,4不,当加载普通非浮点寄存器时,您可以执行ldr r0、[r1],4,这将在ldr r0、[r1]上保存指令;添加r1,r1,4,但当我尝试flds s2,[%1],4时,它抱怨,即使%1是一条普通指令,flds也不提供post增量。