私の目標は、C言語を使ってソートアルゴリズムを実装することです。 ARMマシンでgcc -O0(最適化オプションなし)でコンパイルした場合、最小限の命令数に変換するCコードを作成する必要があります。 私の考えは、アセンブリで実装されたquicksortをCコードに直接埋め込むことです。 私は以下のいくつかの文書を参照し、私の目標を実装しようとしました。 しかし、私は組み込み関数 'QuickSort'にパラメータとしてintarrayを入れる方法を知らない。C言語でARMアセンブリを埋め込む
リファレンス 1. https://en.wikibooks.org/wiki/Algorithm_Implementation/Sorting/Quicksort#ARM_Assembly 2. http://forum.falinux.com/zbxe/index.php?mid=lecture_tip&comment_srl=517498&sort_index=readed_count&order_type=asc&l=fr&page=58&document_srl=567970(英語以外のウェブサイトのため申し訳ありません)
私は、アセンブリ内の初心者です。 あなたがgccでコンパイルしていることを述べているので
#include <stdio.h>
#include <stdint.h>
int Quicksort(uint32_t intarray[]);
asm(
".global Quicksort\n\
Quicksort:\n\
qsort:\n\
stmfd sp!,{r4, r6, lr} \n\
mov r6,r2 \n\
qsort_tailcall_entry:\n\
sub r7,r6,r1\n\
cmp r7,#1\n\
ldmlefd sp!,{r4,r6,pc}\n\
ldr r7,[r0,r1,asl#2]\n\
add r2,r1,#1\n\
mov r4,r6\n\
partition_loop:\n\
ldr r3,[r0, r2, asl #2]\n\
cmp r3,r7\n\
addle r2,r2, #1\n\
ble partition_test\n\
sub r4,r4, #1\n\
ldr r5,[r0, r4, asl #2]\n\
str r5,[r0, r2, asl #2]\n\
str r3,[r0, r4, asl #2]\n\
partition_test:\n\
cmp r2,r4\n\
blt partition_loop\n\
partition_finish:\n\
sub r2,r2,#1\n\
ldr r3,[r0,r2,asl #2]\n\
str r3,[r0,r1,asl #2]\n\
str r7,[r0,r2,asl #2]\n\
bl qsort\n\
mov r1,r4\n\
b qsort_tailcall_entry\n\
"
);
int main(void){
uint32_t intarray[10] = {5,2,5,1,7,5,7,2,3,8};
Quicksort(intarray);
return 0;
}
この[document](http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042f/IHI0042F_aapcs.pdf)をお読みください レジスタr0〜r3を使用して関数の引数。 セクション5.5をご覧ください – Gaurav
この[リンク](http://stackoverflow.com/questions/16632752/matrix-multiplication-in-arm-assembly)が役立つ可能性があります。 – Motun
'-O0'以外の最適化レベルを使用できないのはなぜですか? – fuz