C内联ARM汇编

我正在尝试在ARM内联中实现heapify方法。这里显示了普通的C代码和内联汇编。

是否存在语法问题?

我可以那样使用数组吗? CMP通常会给出错误。

void heapify(int arr[],int n,int i)
{


    int largest = i;
    int l = 2*i + 1;
    int r = 2*i + 2;
    /*

    // if left child is larger than root
    if (l < n && arr[l] > arr[largest])
        largest = l;

    // if right child is larger than largest so far
    if (r < n && arr[r] > arr[largest])
        largest = r;

    // if largest is not root
    if (largest != i)
    {
                //swap(arr[i],arr[largest]);
                int temp = arr[i];
                arr[i] = arr[largest];
                arr[largest] = temp;


        // recursively heapify the affected sub-tree
        heapify(arr,n,largest);
    }*/

  __asm__ (
      "CMP n,=1"
      "CMP arr[l],#arr[largest]"
      "BLT done"
      "done:"
      "str largest,l"
    );
    __asm__ (
     "CMP r,#n"
     "CMP arr[r],#arr[largest]"
     "BLT done2"
     "done2:"
     "str largest,r"

    );
    __asm__ (
     "CMP largest,#i"
     "BEQ done3"
     "done3:"
     "LDR r4,arr[i]"
     "mov arr[i],arr[largest]"
     "mov arr[largest],r4"
     "LDR r0,arr"
     "LDR r1,n"
     "LDR r2,largest"
     "BL heapify"
   );
}

但我收到此错误

main.c(46): error:  #19: extra text after expected end of number
        "CMP n,=1"
main.c(46): error:  #29: expected an expression
        "CMP n,=1"
main.c(53): error:  #20: identifier "nCMP" is undefined
  "CMP r,#n"
main.c(61): error:  #20: identifier "iBEQ" is undefined
  "CMP largest,#i"

这是什么问题?

nana0124 回答:C内联ARM汇编

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2951048.html

大家都在问