Everything
4.2.7 組み込み関数

CC-RLには,下記の“組み込み関数”があります。組み込み関数は全て,関数定義内からのみ呼び出すことができます。

以下に,関数として記述できる命令を示します。

表 4.16

組み込み関数

組み込み関数

機能

形式

__DI

DI命令を出力します。

void __DI(void);
__EI

EI命令を出力します。

void __EI(void);
__halt

HALT命令を出力します。

void __halt(void);
__stop

STOP命令を出力します。

void __stop(void);
__brk

BRK命令を出力します。

void __brk(void);
__nop

NOP命令を出力します。

void __nop(void);
__rolb

xを8ビット幅でy回左ローテートします。

ビット幅を越えるローテート数指定時の動作は未定義です。

ローテート数がビット幅を越える可能性がある場合は,ビット幅でマスクしてください。

unsigned char __rolb(unsigned char x, unsigned char y);
__rorb

xを8ビット幅でy回右ローテートします。

ビット幅を越えるローテート数指定時の動作は未定義です。

ローテート数がビット幅を越える可能性がある場合は,ビット幅でマスクしてください。

unsigned char __rorb(unsigned char x, unsigned char y);
__rolw

xを16ビット幅でy回左ローテートします。

ビット幅を越えるローテート数指定時の動作は未定義です。

ローテート数がビット幅を越える可能性がある場合は,ビット幅でマスクしてください。

unsigned int __rolw(unsigned int x, unsigned char y);
__rorw

xを16ビット幅でy回右ローテートします。

ビット幅を越えるローテート数指定時の動作は未定義です。

ローテート数がビット幅を越える可能性がある場合は,ビット幅でマスクしてください。

unsigned int __rorw(unsigned int x, unsigned char y);
__mulu

(unsigned int)x * (unsigned int)yの符号なし乗算を行い,16ビットの演算結果を返します。

unsigned int __mulu(unsigned char x, unsigned char y);
__mului

(unsigned long)x * (unsigned long)yの符号なし乗算を行い,32ビットの演算結果を返します。

unsigned long __mului(unsigned int x, unsigned int y);
__mulsi

(signed long)x * (signed long)yの符号付き乗算を行い,32ビットの演算結果を返します。

signed long __mulsi(signed int x, signed int y);
__mulul

(unsigned long long)x * (unsigned long long)yの符号なし乗算を行い,64ビットの演算結果を返します。-lang=cかつ-strict_std オプション指定時は組み込み関数として定義されません。

unsigned long long __mulul(unsigned long x, unsigned long y);
__mulsl

(signed long long)x * (signed long long)yの符号付き乗算を行い,64ビットの演算結果を返します。-lang=cかつ-strict_std オプション指定時は組み込み関数として定義されません。

signed long long __mulsl(signed long x, signed long y);
__divui

xとyの符号なし除算を行い,16ビットの演算結果を返します。

除数yが0の場合は0xFFFFを返します。

unsigned int __divui(unsigned int x, unsigned char y);
__divul

xとyの符号なし除算を行い,32ビットの演算結果を返します。

除数yが0の場合は0xFFFFFFFFを返します。

unsigned long __divul(unsigned long x, unsigned int y);
__remui

xとyの符号なし剰余算を行い,8ビットの演算結果を返します。

除数yが0の場合は被除数xの下位8ビットを返します。

unsigned char __remui(unsigned int x, unsigned char y);
__remul

xとyの符号なし剰余算を行い,16ビットの演算結果を返します。

除数yが0の場合は被除数xの下位16ビットを返します。

unsigned int __remul(unsigned long x, unsigned int y);
__macui

(unsigned long) x * (unsigned long) y + z の符号なし積和演算を行い,32ビットの演算結果を返します。

unsigned long __macui(unsigned int x, unsigned int y, unsigned long z);
__macsi

(signed long) x * (signed long) y + z の符号付き積和演算を行い,32ビットの演算結果を返します。

signed long __macsi(signed int x, signed int y, signed long z);
__get_psw

PSWの内容を返します。

unsigned char   __get_psw(void);
__set_psw

PSWにxを設定します。

void __set_psw(unsigned char x);
__set1

set1命令を使用し,xが指すアドレスのビットyを1にセットします。

ビットyは0から7までの定数のみ指定可能とし,それ以外はコンパイルエラーとします。

void __set1(unsigned char __near *x, unsigned char y);
__clr1

clr1命令を使用し,xが指すアドレスのビットyを0にクリアします。

ビットyは0から7までの定数のみ指定可能とし,それ以外はコンパイルエラーとします。

void __clr1(unsigned char __near *x, unsigned char y);
__not1

not1命令(saddr領域ならxor命令)を使用し,xが指すアドレスのビットyを反転します。

ビットyは0から7までの定数のみ指定可能とし,それ以外はコンパイルエラーとします。

void __not1(unsigned char __near *x, unsigned char y);