4.2.5 組み込み関数

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   x, y;
unsigned char   __rolb(x, y);
__rorb

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

xとyの符号付き16ビット乗算を行い,32ビットの演算結果を返します。

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

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

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

xとyの符号付き32ビット乗算を行い,64ビットの演算結果を返します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

PSWの内容を返します。

unsigned char   __get_psw(void);
__set_psw

PSWにxを設定します。

unsigned char   x;
void            __set_psw(x);
__set1

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

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

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

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

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

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

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

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

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