我正在尝试在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"
这是什么问题?