<<<
[#insns-cm_popret,reftext="Pop registers, deallocate stack frame, return."]
=== cm.popret

Synopsis::
Destroy stack frame: load ra and 0 to 12 saved registers from the stack frame, deallocate the stack frame, return to ra.

Mnemonic::
cm.popret _{reg_list}, stack_adj_

Encoding (RV32, RV64)::
[wavedrom, , svg]
....
{reg:[
    { bits:  2, name: 0x2,             attr: ['C2'] },
    { bits:  2, name: 'spimm\[5:4\]',  attr: [] },
    { bits:  4, name: 'rlist',         attr: [] },
    { bits:  5, name: 0x1e,            attr: [] },
    { bits:  3, name: 0x5,             attr: ['FUNCT3'] },
],config:{bits:16}}
....

[NOTE]

  _rlist_ values 0 to 3 are reserved for a future EABI variant called _cm.popret.e_

Assembly Syntax::

[source,sail]
--
cm.popret {reg_list},  stack_adj
cm.popret {xreg_list}, stack_adj
--

include::variable_def.adoc[]
include::pushpop_vars.adoc[]

<<<

Description::
This instruction pops (loads) the registers in _reg_list_ from stack memory,
 adjusts the stack pointer by _stack_adj_ and then returns to _ra_.

include::pushpop_extra_info.adoc[]
include::cm_pop_popret_loads_pseudo_code.adoc[]
include::cm_popret_pseudo_code.adoc[]

include::Zcmp_footer.adoc[]

