5.16 レジスタを介して関数から構造体を返す

コンパイラでは、関数は、スタックではなくレジスタを介して複数の値を含む構造体を返すことができます。

C および C++ では、構造体を使用すると、1 つの関数から複数の値を返すことができます。通常、構造体はスタックを使用して返され、それに伴うコストも発生します。
メモリトラフィックを削減し、コードサイズを縮小するために、ARM コンパイラでは、関数はレジスタを介して複数の値を返すことができます。__value_in_regs で関数を修飾することによって、その関数から最大 4 ワードを struct で返すことができます。以下に例を示します。
typedef struct s_coord { int x; int y; } coord;
coord reflect(int x1, int y1) __value_in_regs;
複数の値を 1 つの関数から返す必要がある場合は、いつでも __value_in_regs を使用できます。以下はその例です。
  • C 関数および C++ 関数から複数の値を返す場合。
  • 組み込みアセンブリ言語関数から複数の値を返す場合。
  • スーパーバイザコールを行う場合。
  • __user_initial_stackheap を再実装する場合。
関連する概念
5.15 関数のパラメータ受け渡しに伴うオーバーヘッドを最小化するための方法
関連する参考文書
10.19 __value_in_regs
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.