Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ una_sf(3) — NEWS-os 4.2.1R

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

dbx(1)

sysnews(2)

sigset(2)

UNALIGNED(3)  —  NEWS-OS Programmer’s Manual

名称

una_lw, unaligned_load_word, una_lh, unaligned_load_half, una_lhu, unaligned_load_uhalf, una_lf, unaligned_load_float, una_ld, unaligned_load_double, una_sw, unaligned_store_word, una_sh, unaligned_store_half, una_sf, unaligned_store_float, una_sd, unaligned_store_double − 整列でないデータ参照

形式

long una_lw(addr)
long unaligned_load_word(addr)
char ∗addr;

long una_lh(addr)
long unaligned_load_half(addr)
char ∗addr;

long una_lhu(addr)
long unaligned_load_uhalf(addr)
char ∗addr;

float una_lf(addr)
float unaligned_load_float(addr)
char ∗addr;

double una_ld(addr)
double unaligned_load_double(addr)
char ∗addr;

void una_sw(addr, value)
void unaligned_store_word(addr, value)
char ∗addr;
long value;

void una_sh(addr, value)
void unaligned_store_half(addr, value)
char ∗addr;
long value;

void una_sf(addr, value)
void unaligned_store_float(addr, value)
char ∗addr;
float value;

void una_sd(addr, value)
void unaligned_store_double(addr, value)
char ∗addr;
double value;

解説

RISC NEWS のハードウェアでは、整列なデータしか参照できません。 すなわち、ロード/ストア操作において、そのアドレスが(ロード/ストアの) 対象とするバイト数の倍数でなければなりません。 整列でないデータを参照するとトラップを引きおこします。 このトラップがおこるとデフォルトでは、カーネルは SIGBUS シグナルを そのプロセスへ送り、デバッギングのためのコアを生成します。

MC68000 系列などの、整列制約のないシステム上で開発されたプログラムは、 整列でないデータを参照することがあります。 そのようなプログラムを RISC NEWS ハードウェアに移植するには、 データが整列するようにそのプログラムを書き直す必要があります。

しかし、すべてのデータを整列できない場合や、整列でないデータを 参照する箇所をすべて変更できない場合は、 sysnews(2) [NEWS_FIXADE] システムコールが便利です。 ただし、このシステムコールを使用した場合、整列でないデータを参照するたびに トラップをおこすため、高速度が要求されるプログラムにはここに上げた ルーチン群を使用します。

このルーチン群は、指定されたアドレスに、示されたデータタイプをロードまたは ストアします。 アドレスは、正規の整列制約に合わせる必要はありません。 たとえば、

n = ∗(long ∗)addr;

が整列でないデータ参照であった場合、次のようにします。

n = una_lw(addr);

ここで、unaligned_load_word(addr) は、una_lw(addr) と全く同じです。

これらのルーチンに対する Fortran エントリが存在するので、 ここで記述した名前で Fortran から直接呼び出すことができます。

診断

これらのルーチンが、プログラムのアドレス空間外のアドレスにロードや ストアを試みた場合、SIGSEGV 信号が生成されます。 しかし、プログラムがこれらのルーチンを使用せずに、しかも アドレスが整列されていない場合は、プログラムは SIGBUS 信号を生成します。 なぜならば、整列に対するチェックは、アドレスがそのプログラムのアドレス 空間にあるかどうかチェックする前に行われるからです。

関連事項

dbx(1), sysnews(2) [NEWS_FIXADE], signal(2), sigset(2)

NEWS-OSRelease 4.2.1R

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026