Operands and parameters
DstBegin- first register in the inclusive R2..R23 ring range
DstEnd- last register in the inclusive R2..R23 ring range
uimm- frame byte count, encoded in multiples of eight
Destroys a restartable stack frame and restores one inclusive callee-save register-ring range.
PTO-BLOCK-FEXITFEXIT [RegDst0 ~ RegDstn], sp!, uimm| Field | Bits | Signedness | Architectural role | Encoded zero |
|---|---|---|---|---|
DstBegin | 5 | encoding-defined | first register in the inclusive R2..R23 ring range | Encoded zero is outside the callee-save ring and is reserved. |
DstEnd | 5 | encoding-defined | last register in the inclusive R2..R23 ring range | Encoded zero is outside the callee-save ring and is reserved. |
uimm | 15 | unsigned | frame byte count, encoded in multiples of eight | Encoded zero is a real zero-byte frame size and is illegal for every nonempty range. |
Loading WaveDrom diagram… The encoding table and WaveJSON remain available below.
| Decoded item | Bit range | Value |
|---|---|---|
| uimm | 31:25 | variable |
| DstEnd | 24:20 | variable |
| DstBegin | 19:15 | variable |
| Constant | 14:12 | 3'b001 |
| uimm | 11:7 | variable |
| Constant | 6:0 | 7'b1000001 |
{
"reg": [
{
"bits": 7,
"name": "7'b1000001"
},
{
"bits": 5,
"name": "uimm"
},
{
"bits": 3,
"name": "3'b001"
},
{
"bits": 5,
"name": "DstBegin"
},
{
"bits": 5,
"name": "DstEnd"
},
{
"bits": 7,
"name": "uimm"
}
],
"config": {
"bits": 32,
"fontsize": 13,
"hspace": 900,
"lanes": 1,
"offset": 0
}
}FEXIT [RegDst0 ~ RegDstn], sp!, uimm
DstBeginDstEnduimmDecode and Operation come directly from the instruction owner and remain separated by execution phase.
readonly func InstructionContractMatches_FEXIT(operation: CommandOperation) => booleanbegin return (operation == CommandOperation_fexit_32_37b663f2a34d);end;readonly func InstructionContractHandler_FEXIT() => CommandSemanticHandlerbegin return CommandHandler_ExecuteFrameExit;end;
func ExecuteFEXIT(begin_reg: Reg5Selector, end_reg: Reg5Selector, frame_size: Word)begin ExitFrame(begin_reg, end_reg, frame_size);end;
pure func InstructionContractUsesInclusiveRegisterRange_FEXIT() => booleanbegin return TRUE;end;
pure func InstructionContractRejectsInvalidFrameRange_FEXIT() => booleanbegin return TRUE;end;// PTO-INSTRUCTION: {"assembly":["FEXIT [RegDst0 ~ RegDstn], sp!, uimm"],"block":[],"catalog_indices":[63],"catalog_records":[{"asm":"FEXIT [RegDst0 ~ RegDstn], sp!, uimm","constraints":[{"field":"DstBegin","operator":"one-of","values":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]},{"field":"DstEnd","operator":"one-of","values":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]}],"encoding":[{"index":0,"mask":"0x0000707f","match":"0x00001041","width_bits":32}],"encoding_kind":"L32","fields":[{"name":"DstBegin","pieces":[{"instruction_lsb":15,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5},{"name":"DstEnd","pieces":[{"instruction_lsb":20,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5},{"name":"uimm","pieces":[{"instruction_lsb":25,"value_lsb":3,"width":7},{"instruction_lsb":7,"value_lsb":10,"width":5}],"signedness":"unsigned","width":15}],"form_id":"fexit_32_37b663f2a34d","length_bits":32,"mnemonic":"FEXIT","semantic_family":"CMD","semantic_group":"Bundle Split","semantic_handler":"ExecuteFrameExit","semantic_summary":"Destroys a restartable stack frame and restores one inclusive callee-save register-ring range.","status":"accepted"}],"classification":["lifecycle"],"contract":{"block_composition":["none"],"canonical_assembly":["FEXIT [RegDst0 ~ RegDstn], sp!, uimm"],"defaults":["The inclusive register range is the ring R2..R23. Singleton, full-ring, and wraparound ranges are assigned.","uimm is always present and represents a byte count in multiples of eight; encoded zero is real zero and is illegal because every assigned range contains at least one register."],"encoding_class":"standalone-encoded","examples":["FEXIT [RegDst0 ~ RegDstn], sp!, uimm"],"exceptions":["Reserved endpoints or an insufficient frame size raise Fault_IllegalInstruction before sp, register, memory, target, progress, or TPC effects.","Each eight-byte stack access is a restart boundary. A recoverable access fault preserves earlier committed events and retries exactly the first uncommitted event from trap-preserved template state."],"field_contracts":{},"field_zero_meanings":{"DstBegin":"Encoded zero is outside the callee-save ring and is reserved.","DstEnd":"Encoded zero is outside the callee-save ring and is reserved.","uimm":"Encoded zero is a real zero-byte frame size and is illegal for every nonempty range."},"legality":["DstBegin and DstEnd select the inclusive R2..R23 callee-save ring; every endpoint outside 2..23 is reserved before effects.","If the range contains N registers, uimm must be at least 8*N bytes. The encoding supplies only multiples of eight."],"memory_effects":["Load one aligned eight-byte value per selected destination from caller_sp-8, caller_sp-16, and subsequent descending slots."],"operands":[{"field":"DstBegin","role":"first register in the inclusive R2..R23 ring range"},{"field":"DstEnd","role":"last register in the inclusive R2..R23 ring range"},{"field":"uimm","role":"frame byte count, encoded in multiples of eight"}],"ordering":["Add uimm to sp first, then load descending caller-frame slots in inclusive register-ring order.","Each load, destination write, and progress advance commit as one restart event; recovery does not add sp twice or repeat earlier loads."],"standalone_opcode":true,"state_effects":["The accepted start records instruction PC, endpoints, count, frame size, reconstructed caller sp, and zero progress.","After the final load, decrement nonzero frame depth, publish the last-frame tuple, clear active progress, and retire once."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-PROFILE-ENCODING"],"id":"PTO-BLOCK-FEXIT","mnemonic":"FEXIT","summary":"Destroys a restartable stack frame and restores one inclusive callee-save register-ring range.","surface":"block"}// NDF-BEGIN: PTO-FEXIT-RESTARTABLE-FRAME-001// ndf: kind=contract level=L1 layer=block status=accepted// FEXIT MUST restore the inclusive R2..R23 ring and MUST retry exactly the// first uncommitted load without applying the stack adjustment twice.// NDF-END: PTO-FEXIT-RESTARTABLE-FRAME-001// DOC-BEGIN: decodereadonly func InstructionContractMatches_FEXIT(operation: CommandOperation) => booleanbegin return (operation == CommandOperation_fexit_32_37b663f2a34d);end;// DOC-END: decode// DOC-BEGIN: operationreadonly func InstructionContractHandler_FEXIT() => CommandSemanticHandlerbegin return CommandHandler_ExecuteFrameExit;end;
func ExecuteFEXIT(begin_reg: Reg5Selector, end_reg: Reg5Selector, frame_size: Word)begin ExitFrame(begin_reg, end_reg, frame_size);end;
pure func InstructionContractUsesInclusiveRegisterRange_FEXIT() => booleanbegin return TRUE;end;
pure func InstructionContractRejectsInvalidFrameRange_FEXIT() => booleanbegin return TRUE;end;// DOC-END: operation// PTO-REVIEW: {"review_method":"formal-definition-read","outcome":"FORMAL-COMPLETE","reviewed_fields":["assembly","encoding","defaults","operation","state","memory","ordering","faults","reserved"]}
FEXIT is a standalone frame-lifecycle command that validates its register range and stack state before publishing frame or control-flow effects.
FEXIT executes as a standalone 32-bit command and does not require placement inside a BSTART/BSTOP body.
The accepted carrier uses the L32 encoding class and resolves every displayed field before the command reads bindings or changes state.
The command snapshots every required source before its first visible effect, then follows the owner-defined commit or restart boundary.
DstBegin — first register in the inclusive R2..R23 ring range; DstEnd — last register in the inclusive R2..R23 ring range; uimm — frame byte count, encoded in multiples of eight.Source validation and snapshot precede every register, queue, frame, memory, event, or control-flow effect.
The command commits at the restart boundaries named by its memory contract; earlier committed steps remain visible only where the owner explicitly permits restart progress.
Fixed bits, reserved values, selector domains, and required Block placement are checked before architectural effects.
The current owner reports invalid schema, state, address, or continuation conditions through Fault_IllegalInstruction; no prose on this page creates an additional fault rule.
Rejection occurs before effects unless the current owner explicitly defines a restart boundary with retained progress; completion order remains the ASL order.
This example demonstrates placement and carrier flow only; exact behavior remains in the current ASL and instruction contract.
FEXIT [RegDst0 ~ RegDstn], sp!, uimmThe shown accepted spelling resolves its fields from the current carrier, snapshots required sources, and then follows the owner-defined state and ordering transition.
Bodies come from owning ASL. Dragging or buttons change only this page-session view order.
FEXIT MUST restore the inclusive R2..R23 ring and MUST retry exactly the first uncommitted load without applying the stack adjustment twice.
PTO-FEXIT-RESTARTABLE-FRAME-001asl/block/lifecycle/FEXIT.asl9ba58c30259fad66df3f19af2bcc07c5f4e00ff10abcce272439ebe2dbf32c8529ee9a3b543ca23be11e3870d96dff01dccabf7d7b928a1978a762187dcc8cad12 matching entries
PTO-AVS-BLOCK-FEXIT-DECODE-001tests/asl/block/lifecycle/FEXIT/block-decode-fexit-canonical-001.asl0ce813be3dd75ed45d86484662258ef18356fe69219723225c90826f177788c4PTO-AVS-BLOCK-FEXIT-FRAME-001tests/asl/block/lifecycle/FEXIT/block-exec-fexit-frame-001.aslab944b35048b4b517ccd1aae31dcc2b0c6ab7530bc99f875b8da87331f63c97aPTO-AVS-BLOCK-FEXIT-RESTART-001tests/asl/block/lifecycle/FEXIT/block-fault-fexit-restart-001.asl1b20c848da92b96e45c1a2bac7d2d966e1234dbde40670d892d9df503a12a101PTO-EVIDENCE-RELEASE-TRACEABILITYPTO-EVIDENCE-RELEASE-TRACEABILITYspec/evidence/release-traceability-readiness.jsonc7327021d39dc67ac5564bc55073b3870a397d79ac8d9648284d56e33bc14a3ePTO-EVIDENCE-INSTRUCTION-CONTRACT-CLOSUREPTO-EVIDENCE-INSTRUCTION-CONTRACT-CLOSUREspec/evidence/instruction-contract-closure.json3ef2bb62421c79dff8fa77a1c7983923b523244b8090812883ef81286ca8106aPTO-EVIDENCE-ARCHITECTURE-READINESSPTO-EVIDENCE-ARCHITECTURE-READINESSspec/evidence/architecture-readiness.json4b0b85199101251bea744e0f3591cc31906909dc80d5ab651c417a936036a004PTO-EVIDENCE-RELEASE-GATE-READINESSPTO-EVIDENCE-RELEASE-GATE-READINESSspec/evidence/release-gate-readiness.jsona0f4d2b6920c08981ea55fd8ef820708a40d4feb5402c5150e8e9ab532d84ce0PTO-EVIDENCE-RELEASE-MANIFESTPTO-EVIDENCE-RELEASE-MANIFESTspec/release-manifest.json1a64c109ed7a90351c41e2a418b3c0ebaf8ad975838986d2101385186b85c0d8Loading ADR-0032…
ADR-0032docs/status/decisions/0032-bundle-command-totality-and-profile-boundaries.mde1f91826817343c0977a565a91e495a15397b83fa2af227124f225821ffa54aeLoading ADR-0052…
ADR-0052docs/status/decisions/0052-direct-tile-and-bundle-catalog-closure.md5fdb38bf480e37affe5075f93b35a57d32803018c986bfe05160f188a19ccaf6Loading ADR-0059…
ADR-0059docs/status/decisions/0059-mnemonic-field-encoding-closure.mdf18d13f735cfaf9f2803c754c5818f4af33d1cc42c489f0d9ce060b07bb3a196Loading ADR-0084…
ADR-0084docs/status/decisions/0084-scalar-system-and-queue-operations.mde068992fa81e2c4ac46e492391a2f784141d68e041bf0b9e0586c37217d1e08c{
"classification": [
"lifecycle"
],
"documentation": "docs/block/lifecycle/FEXIT.md",
"id": "PTO-BLOCK-FEXIT",
"instruction_contract": {
"artifact": "spec/evidence/instruction-contract-closure.json",
"mnemonic": "FEXIT",
"ndf_clause": "PTO-INST-BLOCK-FEXIT"
},
"mnemonic": "FEXIT",
"readiness_subjects": [
"ADR-0032",
"ADR-0052",
"ADR-0059",
"ADR-0084"
],
"semantic_tests": [
"PTO-AVS-BLOCK-FEXIT-FRAME-001",
"PTO-AVS-BLOCK-FEXIT-RESTART-001"
],
"source": "asl/block/lifecycle/FEXIT.asl",
"surface": "block",
"tests": [
"PTO-AVS-BLOCK-FEXIT-DECODE-001",
"PTO-AVS-BLOCK-FEXIT-FRAME-001",
"PTO-AVS-BLOCK-FEXIT-RESTART-001"
]
}0.58.5 · Release candidate7dc8b7e5b121d2b2499a2273bebff29e2cd868129ba58c30259fad66df3f19af2bcc07c5f4e00ff10abcce272439ebe2dbf32c857d89fb3689089ef5b73bf880f43aae514ad9bd2fe0fe7567feca049f27ec7f5easl/block/lifecycle/FEXIT.aslasl/block/lifecycle/FEXIT.aslasl/block/lifecycle/FEXIT.asl