0

64 ビット アドレスを MIPS64 汎用レジスタ (GPR) にロードしたいと考えています。私はそれを行うことができます

lui $at, LabelAddr[63:48]
ori $at, $at, LabelAddr[47:32]
sll $at, 16
ori $at, $at, LabelAddr[31:16]
sll $at, 16
ori $at, $at, LabelAddr[15:0]

しかし、それを行う他の方法はありますか?

ここから情報を得まし

しかし、「定数プール」とは何か、その作成方法とアクセス方法を知りたいですか?

4

1 に答える 1

2

「簡単な」方法は、疑似命令を使用してアセンブラに処理させることdlaです。コードのようなものに展開されます。

lui $dst, LabelAddr[63:48]
lui $at, LabelAddr[31:16]
daddiu $dst, $dst, LabelAddr[47:32]
daddiu $at, $at, LabelAddr[15:0]
dsll32 $dst, $dst, 0
daddu $dst, $dst, $at

定数プールは、効率的にアドレス指定できる定数を格納するメモリ領域です。一部のアセンブラとアーキテクチャはこれを特別にサポートしていますが、手動で行う必要があるものもあります。リンクした質問への回答で概説したように、(上記の方法を使用して) 定数プールへのポインターを設定し、後続の操作により効率的なアクセスを使用できます。

# load pool base address
    dla $s0, pool
foo:
# just some placeholder
    addu $t0, $t0, $t1
bar:
# load from pool
    ld $a0, pool_foo($s0)
    ld $a1, pool_bar($s0)

.section pool
# macro helper to define a pool entry
.macro ENTRY label
pool_entry_\label\(): .quad \label
.equ pool_\label\(), pool_entry_\label - pool
.endm
ENTRY foo
ENTRY bar
于 2013-06-24T12:52:53.743 に答える