9.1.2 レジスタに関する規則

関数呼び出し前後において、レジスタの値が同一であることを保証するかどうかは、レジスタにより異なります。また、オプションにより特定の用途向けに使用するレジスタがあります。レジスタの使用規則を表 9.1に示します。

表 9.1

レジスタ使用規則

レジスタ

関数呼び出し

前後で値を保証

関数入口

関数出口

高速割り込み用レジスタ*1

ベース

レジスタ*2

PID

レジスタ*3

R0

保証する

スタックポインタ

スタックポインタ

-

-

-

R1

保証しない

引数1

戻り値1

-

-

-

R2

保証しない

引数2

戻り値2

-

-

-

R3

保証しない

引数3

戻り値3

-

-

-

R4

保証しない

引数4

戻り値4

-

-

-

R5

保証しない

-

(不定)

-

-

-

R6

保証する

-

(入口の値を保持)

-

-

-

R7

保証する

-

(入口の値を保持)

-

-

-

R8

保証する

-

(入口の値を保持)

-

-

R9

保証する

-

(入口の値を保持)

-

R10

保証する

-

(入口の値を保持)

R11

保証する

-

(入口の値を保持)

R12

保証する

-

(入口の値を保持)

R13

保証する

-

(入口の値を保持)

R14

保証しない

-

(不定)

-

-

-

R15

保証しない

構造体戻り値へのポインタ

(不定)

-

-

-

ISP

USP

スタックポインタの場合はR0と同じ。

そうでない場合は変化しません。*4

-

-

-

PC

-

プログラムカウンタ*5

-

-

-

PSW

保証しない

-

(不定)

-

-

-

FPSW

保証しない

-

(不定)

-

-

-

ACC

保証しない*6

-

(不定) *6

-

-

-

ACC0

ACC1

保証しない*6

-

(不定) *6

-

-

-

INTB

BPC

BPSW

FINTV

-

変化しません*4

-

-

-

-

注 1.

R10〜R13の4本は、fint_registerオプションにより、一部または全部が「高速割り込み機能」に使われることがあります。「高速割り込み機能」に割り当てられたレジスタは、他の用途に使用することはできません。機能の詳細はオプションの説明を参照してください。

注 2.

R8〜R13の6本は、baseオプションにより、一部または全部が「ベースレジスタ機能」に使われることがあります。「ベースレジスタ機能」に割り当てられたレジスタは、他の用途に使用することはできません。機能の詳細はオプションの説明を参照してください。

注 3.

R9〜R13のうちの1本は、pidオプションにより「PID機能」に使われることがあります。「PID機能」に割り当てられたレジスタは、他の用途に使用することはできません。機能の詳細はオプションの説明を参照してください。

注 4.

組み込み関数または#pragma inline_asmで、これらのレジスタを設定したり更新したりする場合を除きます。

注 5.

関数の呼び出しに使用する命令の仕様に従います。関数の呼び出しには、BSR, JSR, BRA および JMPのいずれかの命令を用います。

注 6.

アキュムレータ(ACC, ACC0, ACC1)を更新する命令は、RXのソフトウェアマニュアルを参照してください。