Operands and parameters
SrcBegin- first register in the inclusive R2..R23 ring range
SrcEnd- last register in the inclusive R2..R23 ring range
uimm- frame byte count, encoded in multiples of eight
Creates a restartable stack frame by snapshotting and storing one inclusive callee-save register-ring range.
PTO-BLOCK-FENTRYFENTRY [RegSrc0 ~ RegSrcn], sp!, uimm| Field | Bits | Signedness | Architectural role | Encoded zero |
|---|---|---|---|---|
SrcBegin | 5 | encoding-defined | first register in the inclusive R2..R23 ring range | Encoded zero is outside the callee-save ring and is reserved. |
SrcEnd | 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 |
| SrcEnd | 24:20 | variable |
| SrcBegin | 19:15 | variable |
| Constant | 14:12 | 3'b000 |
| uimm | 11:7 | variable |
| Constant | 6:0 | 7'b1000001 |
{
"reg": [
{
"bits": 7,
"name": "7'b1000001"
},
{
"bits": 5,
"name": "uimm"
},
{
"bits": 3,
"name": "3'b000"
},
{
"bits": 5,
"name": "SrcBegin"
},
{
"bits": 5,
"name": "SrcEnd"
},
{
"bits": 7,
"name": "uimm"
}
],
"config": {
"bits": 32,
"fontsize": 13,
"hspace": 900,
"lanes": 1,
"offset": 0
}
}FENTRY [RegSrc0 ~ RegSrcn], sp!, uimm
SrcBeginSrcEnduimmDecode and Operation come directly from the instruction owner and remain separated by execution phase.
readonly func InstructionContractMatches_FENTRY(operation: CommandOperation) => booleanbegin return (operation == CommandOperation_fentry_32_a47584ec13b6);end;readonly func InstructionContractHandler_FENTRY() => CommandSemanticHandlerbegin return CommandHandler_ExecuteFrameEntry;end;
func ExecuteFENTRY(begin_reg: Reg5Selector, end_reg: Reg5Selector, frame_size: Word)begin EnterFrame(begin_reg, end_reg, frame_size);end;
pure func InstructionContractUsesInclusiveRegisterRange_FENTRY() => booleanbegin return TRUE;end;
pure func InstructionContractRejectsInvalidFrameRange_FENTRY() => booleanbegin return TRUE;end;// PTO-INSTRUCTION: {"assembly":["FENTRY [RegSrc0 ~ RegSrcn], sp!, uimm"],"block":[],"catalog_indices":[62],"catalog_records":[{"asm":"FENTRY [RegSrc0 ~ RegSrcn], sp!, uimm","constraints":[{"field":"SrcBegin","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":"SrcEnd","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":"0x00000041","width_bits":32}],"encoding_kind":"L32","fields":[{"name":"SrcBegin","pieces":[{"instruction_lsb":15,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5},{"name":"SrcEnd","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":"fentry_32_a47584ec13b6","length_bits":32,"mnemonic":"FENTRY","semantic_family":"CMD","semantic_group":"Bundle Split","semantic_handler":"ExecuteFrameEntry","semantic_summary":"Creates a restartable stack frame by snapshotting and storing one inclusive callee-save register-ring range.","status":"accepted"}],"classification":["lifecycle"],"contract":{"block_composition":["none"],"canonical_assembly":["FENTRY [RegSrc0 ~ RegSrcn], 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.","The source range is snapshotted before sp changes, so a range containing sp stores the caller sp."],"encoding_class":"standalone-encoded","examples":["FENTRY [RegSrc0 ~ RegSrcn], 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":{"SrcBegin":"Encoded zero is outside the callee-save ring and is reserved.","SrcEnd":"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":["SrcBegin and SrcEnd 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":["Store one aligned eight-byte snapshot per selected register into consecutive descending slots below the caller sp.","Every store records one relaxed store event and follows the ordinary PTO precise data-access fault contract."],"operands":[{"field":"SrcBegin","role":"first register in the inclusive R2..R23 ring range"},{"field":"SrcEnd","role":"last register in the inclusive R2..R23 ring range"},{"field":"uimm","role":"frame byte count, encoded in multiples of eight"}],"ordering":["Snapshot the complete source range, subtract uimm from sp, then store snapshots in range order to caller_sp-8, caller_sp-16, and subsequent descending slots.","Each store and progress advance commit atomically; recovery never rereads source registers or repeats an earlier store."],"standalone_opcode":true,"state_effects":["The accepted start records instruction PC, endpoints, count, frame size, caller sp, complete source snapshot, and zero progress.","After the final store, increment frame depth, publish the last-frame tuple, clear active progress, and retire once."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-PROFILE-ENCODING"],"id":"PTO-BLOCK-FENTRY","mnemonic":"FENTRY","summary":"Creates a restartable stack frame by snapshotting and storing one inclusive callee-save register-ring range.","surface":"block"}// NDF-BEGIN: PTO-FENTRY-RESTARTABLE-FRAME-001// ndf: kind=contract level=L1 layer=block status=accepted// FENTRY MUST snapshot the inclusive R2..R23 ring before adjusting sp and// MUST commit each descending stack store as one restartable memory step.// NDF-END: PTO-FENTRY-RESTARTABLE-FRAME-001// DOC-BEGIN: decodereadonly func InstructionContractMatches_FENTRY(operation: CommandOperation) => booleanbegin return (operation == CommandOperation_fentry_32_a47584ec13b6);end;// DOC-END: decode// DOC-BEGIN: operationreadonly func InstructionContractHandler_FENTRY() => CommandSemanticHandlerbegin return CommandHandler_ExecuteFrameEntry;end;
func ExecuteFENTRY(begin_reg: Reg5Selector, end_reg: Reg5Selector, frame_size: Word)begin EnterFrame(begin_reg, end_reg, frame_size);end;
pure func InstructionContractUsesInclusiveRegisterRange_FENTRY() => booleanbegin return TRUE;end;
pure func InstructionContractRejectsInvalidFrameRange_FENTRY() => 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"]}
FENTRY is a standalone frame-lifecycle command that validates its register range and stack state before publishing frame or control-flow effects.
FENTRY 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.
SrcBegin — first register in the inclusive R2..R23 ring range; SrcEnd — 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.
FENTRY [RegSrc0 ~ RegSrcn], 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.
FENTRY MUST snapshot the inclusive R2..R23 ring before adjusting sp and MUST commit each descending stack store as one restartable memory step.
PTO-FENTRY-RESTARTABLE-FRAME-001asl/block/lifecycle/FENTRY.asla2a908cb1b9a28cb2759cb89c276736ba929411415f4295a273c2e0a7e7f824e8bd38dd3b990704439197b4eefc92413e524faee251cc393ac3142e3e2186deb13 matching entries
PTO-AVS-BLOCK-FENTRY-ACCESS-RECOVERY-002tests/asl/block/lifecycle/FENTRY/block-fault-fentry-access-recovery-002.asldc2b4dd29e58ad3c7774cc078149a18fe52e022685ac3188e1b0bde7ecb6702ePTO-AVS-BLOCK-FENTRY-DECODE-001tests/asl/block/lifecycle/FENTRY/block-decode-fentry-canonical-001.asle8cc4d837c2f1cb88a4a679fc431299e0d43a7fcbcae33eddaac5f15b1351a07PTO-AVS-BLOCK-FENTRY-FRAME-001tests/asl/block/lifecycle/FENTRY/block-exec-fentry-frame-001.asl33e58e4758716b144386ff555c3f131c0c2aca304bb7101cd8c4bf0b2457bbf8PTO-AVS-BLOCK-FENTRY-RANGE-001tests/asl/block/lifecycle/FENTRY/block-fault-fentry-range-001.asl71a46e5533f0e1a5c812bc09c408b6d1fb6ed8cabcbe56c6fe173ae53cb699f0PTO-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/FENTRY.md",
"id": "PTO-BLOCK-FENTRY",
"instruction_contract": {
"artifact": "spec/evidence/instruction-contract-closure.json",
"mnemonic": "FENTRY",
"ndf_clause": "PTO-INST-BLOCK-FENTRY"
},
"mnemonic": "FENTRY",
"readiness_subjects": [
"ADR-0032",
"ADR-0052",
"ADR-0059",
"ADR-0084"
],
"semantic_tests": [
"PTO-AVS-BLOCK-FENTRY-ACCESS-RECOVERY-002",
"PTO-AVS-BLOCK-FENTRY-FRAME-001",
"PTO-AVS-BLOCK-FENTRY-RANGE-001"
],
"source": "asl/block/lifecycle/FENTRY.asl",
"surface": "block",
"tests": [
"PTO-AVS-BLOCK-FENTRY-ACCESS-RECOVERY-002",
"PTO-AVS-BLOCK-FENTRY-DECODE-001",
"PTO-AVS-BLOCK-FENTRY-FRAME-001",
"PTO-AVS-BLOCK-FENTRY-RANGE-001"
]
}0.58.5 · Release candidate7dc8b7e5b121d2b2499a2273bebff29e2cd86812a2a908cb1b9a28cb2759cb89c276736ba929411415f4295a273c2e0a7e7f824ed26497c1620217df4ba6e2afabca3f748549bd5172c45824acbc0078358cb1b8asl/block/lifecycle/FENTRY.aslasl/block/lifecycle/FENTRY.aslasl/block/lifecycle/FENTRY.asl