「簡単な」方法は、疑似命令を使用してアセンブラに処理させること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