Stack unwind directives, except for the.endp directive, do not break bundles. When a tag operand is present in a stack unwind directive, the tag refers to a location of an instruction slot. If the tag is omitted, the location default is the location counter of the next instruction. More than one directive can refer to the same location of an instruction slot.
Generally, functions have unwind table entries. A stack unwind directive must be present between the .proc and .endp directives to write function entries and unwind information to the unwind table.
To create a function entry for unwind information when there is no stack unwind information, use the .unwentry directive.
The table that follows, Stack Unwind Directives, lists the stack unwind directives and their operands. The right-most column of the table summarizes the records and fields that are affected by these directives. For more information about the affected records and fields, refer to the Software Conventions and Runtime Architecture Guide.
Stack Unwind Directives |
||||
Directive Name |
First Operand |
Second Operand |
Third Operand |
Affected Records and Fields |
.proc |
symbol |
|
|
entry-start |
.endp |
|
|
|
entry-end |
.handlerdata |
|
|
|
handler data allocation |
.unwentry |
|
|
|
entry generation |
.prologue |
|
|
|
prologue header previous header |
.prologue |
imm-mask |
grsave |
|
prologue header previous header |
.body
|
|
|
|
body header previous header |
.personality |
symbol |
[phases] |
|
personality |
.fframe |
size |
[tag] |
|
mem_stack_f |
.vframe |
gr-location |
[tag] |
|
mem_stack_v psp_gr |
.vframesp |
spoff |
[tag] |
|
mem_stack_v psp_sprel |
.vframepsp |
pspoff |
[tag] |
|
mem_stak_v pso_psprel |
.restore |
sp |
[ecount] |
[tag] |
epilogue |
.copy_state |
state_no |
|
|
copy_state |
.label_state |
state_no |
|
|
label_state |
.save |
rp |
gr-location |
[tag] |
rp_when rp_gr |
.altrp |
br-location |
|
|
rp_br |
.savesp rp |
rp |
imm-location |
[tag] |
rp_when rp_sprel |
.savepsp rp |
rp |
imm-location |
[tag]
|
rp_when rp_psprel |
.save |
ar.fpsr |
gr_location |
[tag] |
fpsr_when fpsr_gr |
.savesp |
ar.fpsr |
imm_location |
[tag] |
fpsr_when fpsr_sprel |
.savepsp |
ar.fpsr |
imm_location |
[tag]
|
fpsr_when fpsr_psprel |
.save |
ar.bsp |
gr_location |
[tag] |
bsp_when bsp_gr |
.savesp |
ar.bsp |
imm_location |
[tag] |
bsp_when bsp_sprel |
.savepsp |
ar.bsp |
imm_location |
[tag] |
bsp_when bsp_psprel |
.save
|
ar.bsp store |
gr_location |
[tag] |
bspstore_when bspstore_gr |
.savesp |
ar.bsp store |
imm_location |
[tag] |
bspstore_when bspstore_sprel |
.savepsp
|
ar.bsp store |
imm_location |
[tag] |
bspstore_when bspstore_psprel |
.save |
ar.rnat |
gr_location |
[tag] |
rnat_when rnat_gr |
.savesp |
ar.rnat |
imm_location |
[tag] |
rnat_when rnat_sprel |
.savepsp |
ar.rnat |
imm_location |
[tag] |
rnat_when rnat_psprel |
.save |
ar.pfs |
gr-location |
[tag] |
pfs_when pfs_gr |
.savesp |
ar.pfs |
imm-location |
[tag] |
pfs_when pfs_sprel |
.savepsp |
ar.pfs |
imm-location |
[tag] |
pfs_when pfs_psprel |
.save |
ar.unat |
gr-location |
[tag] |
natcr_when natcr_gr |
.savesp |
ar.unat |
imm-location |
[tag] |
natcr_when natcr_sprel |
.savepsp |
ar.unat |
imm-location |
[tag] |
natcr_when natcr_psprel |
.save |
ar.lc |
gr-location |
[tag] |
lc_when lc_gr |
.savesp |
ar.lc |
imm-location |
[tag] |
lc_when lc_sprel |
.savepsp |
ar.lc |
imm-location |
[tag] |
lc_when lc_psprel |
.save |
pr |
gr-location |
[tag] |
preds_when preds_gr |
.savesp |
pr |
imm-location |
[tag] |
preds_when preds_sprel |
.savepsp |
pr |
imm-location |
[tag] |
preds_when preds_psprel |
.save |
@priunat |
gr_location |
[tag] |
priunat_when priunat_gr |
.savesp |
@priunat |
imm_location |
[tag] |
priunat_when priunat_sprel |
.savepsp |
@priunat |
imm_location |
[tag] |
priunat_when priunat_psprel |
.save.g |
imm-grmask |
|
|
gr_mem spill_imask |
.save.g |
imm_grmask |
gr_location |
[tag] |
gr_gr imask |
.save.f |
imm-frmask |
|
|
fr_mem spill_imask |
.save.b |
imm-brmask |
|
|
br_mem spill_imask |
.save.gf |
imm-grmask |
imm-frmask |
|
frgr_mem spill_imask |
.save.b |
imm-brmask |
gr-location |
|
br_gr spill_imask |
.spill |
imm-location |
|
|
spill_base |
.spillreg |
reg |
treg |
[tag] |
spill_reg |
.restorereg |
|
reg |
[tag] |
spill_reg |
.spillsp |
reg |
imm_location |
[tag] |
spill_sprel |
.spillpsp |
reg |
imm_location |
[tag] |
spill_psprel |
.spillreg.p1 |
qp |
reg |
treg |
spill_reg_p |
.restorereg.p |
qp |
reg |
[tag] |
spill_reg_p |
.spillsp.p |
qp |
reg |
imm_location |
spill_sprel_p |
.spillpsp.p |
qp |
reg |
imm_location |
spill_psprel_p |
.unwabi |
os-type |
imm_context |
|
abi |
1 .spillreg.p, .spillsp.p, and .spillpsp.p have an optional fourth operand: [tag].