ADR 0077: Block start and extension reservations
Context
ADR 0062 recorded a single repository-wide mnemonic audit. This record preserves the accepted decisions for this family as one decision-scoped owner. The former identifiers remain only in legacy_ids and the generated ADR index; current normative meaning is owned by the affected ASL/NDF clauses.
Decisions
Decision 031: B.TEXT is extension-reserved and is not a PTO instruction
PTO MUST NOT accept B.TEXT assembly, expose B.TEXT as a canonical
disassembly, or assign architectural semantics to it. The complete 32-bit
encoding family with fixed low seven bits 0000011 and payload bits [31:7]
is reserved as an occupied extension space. PTO MUST NOT allocate another
instruction in that family.
Encountering any instruction in this reserved family MUST raise
Fault_IllegalInstruction before changing architectural or pending block
state. In particular, PTO has no out-of-line or separated-block body-address
state, no SetBundleBodyAddress operation, and no accepted simm25 field
contract for this encoding family.
Decision 032: the long-displacement BSTART mnemonic has two forms
The 32-bit encoding with low seven bits 0010001 is
BSTART DIRECT, <label>. It MUST NOT accept CALL as an alias because the
encoding has no field that can distinguish a call from a direct transfer and
does not encode a return target. Every direct call MUST instead use the fused
BSTART.CALL <br_label>, <rt_label>, ->ra instruction.
The 32-bit encoding with low seven bits 0100001 is
BSTART COND, <label>. For both forms, simm25 is sign-extended, shifted left
by one, and added to the address of the BSTART instruction to form the
candidate target. A resulting misaligned address MUST raise
Fault_InstructionPC before block state changes.
Decision 033: BSTART initializes BARG and commit selects the continuation
After any retiring block commits successfully, a new BSTART initializes one
fresh BARG record. BARG.BPC receives the address of this BSTART,
BARG.BlockType receives STD, and BARG.BPCN receives the encoded candidate
target. BSTART DIRECT sets TYPE=DIRECT and TAKEN=1.
BSTART COND sets TYPE=COND and initializes TAKEN=0; an applicable
SETC.* operation MAY update TAKEN before commit while preserving BPCN.
The BSTART instruction MUST NOT choose or enter the candidate continuation
when it is decoded. BSTOP or the next BSTART is the commit boundary that
reads TYPE, TAKEN, and BPCN; a false conditional selects the sequential
next BSTART, while a taken conditional or direct transfer selects BPCN. A
failed retiring-block commit MUST leave the candidate new BARG uninstalled.
BARG contains no TRAP field.
Decision 034: BSTART.CALL is one atomic fused call
The only direct-call spelling is
BSTART.CALL <br_label>, <rt_label>, ->ra. Its 12-bit signed branch field
computes call_target = P + (SignExtend(simm12) << 1). Its independent
five-bit unsigned return field computes
return_target = (P + 2) + (ZeroExtend(uimm5) << 1), where P+2 is the
address of the embedded return-target halfword. Encoded zero is a real zero
displacement for each field.
After the retiring block commits successfully, the instruction MUST
atomically initialize a new STD BARG with BPC=P, BPCN=call_target,
TYPE=DIRECT, and TAKEN=1, and write return_target to architectural ra.
Any decode, alignment, applicability, or retiring-commit failure MUST preserve
the old ra, BARG, PC state, and candidate new-block state. A single-label
BSTART CALL, <label> spelling is not accepted.
Decision 035: BSTART.ICALL is one atomic fused indirect call
The only indirect-call spelling is BSTART.ICALL <rt_label>, ->ra. The
32-bit instruction fuses a low compressed C.BSTART.STD ICALL halfword with a
high C.SETRET <rt_label>, ->ra halfword. The low half selects the indirect
call transfer; the high uimm5 field computes
return_target = (P + 2) + (ZeroExtend(uimm5) << 1).
The indirect call target is the retiring block's BARG.BPCN. The
implementation MUST snapshot and validate that target before retiring BARG is
cleared, successfully commit the retiring block, then atomically initialize
the new STD BARG and write return_target to ra. Any failure MUST preserve
the old ra, BARG, PC state, and candidate new-block state.
Bare BSTART.{STD,FP,SYS} ICALL spellings and their compressed, long, or
half-long standalone variants are deleted and MUST NOT execute or appear in
canonical disassembly. Under the general deleted-name rule, deletion alone
does not reserve a former raw encoding; only an independently declared
extension reservation prevents future allocation.
Decision 036: BSTART.FP keeps five public forms and reserves Fixup payloads
PTO accepts exactly these BSTART.FP forms:
BSTART.FP FALL, encoded withsimm17=0;BSTART.FP DIRECT, <label>;BSTART.FP COND, <label>;BSTART.FP IND;BSTART.FP RET.
For DIRECT and COND, the candidate target is
P + (SignExtend(simm17) << 1). FALL initializes a not-taken fallthrough FP
block. IND and RET select their transfer kind but MUST defer the effective
target to the block's BARG contract and commit boundary; decode MUST NOT
sample a private target or return value as the final continuation.
The nonzero simm17 values in the FALL family are occupied Fixup-extension
encodings. PTO MUST reject them before effects and MUST NOT allocate another
PTO meaning in that reserved subset. BSTART.FP CALL, <label> and bare
BSTART.FP ICALL are deleted; calls use Decision 034 in ADR-0077 and Decision 035 in ADR-0077 respectively,
and deleted raw forms are not reservations unless covered by another explicit
extension reservation.
Decision 037: BSTART.STD keeps five public forms and reserves Fixup payloads
PTO accepts exactly these BSTART.STD forms:
BSTART.STD FALL, encoded withsimm17=0;BSTART.STD DIRECT, <label>;BSTART.STD COND, <label>;BSTART.STD IND;BSTART.STD RET.
DIRECT and COND compute P + (SignExtend(simm17) << 1). FALL initializes a
not-taken fallthrough STD block. IND and RET defer their effective target to
the BARG contract and block commit; decode MUST NOT freeze a private target or
return value as the final continuation.
Nonzero simm17 values in the FALL family are occupied Fixup-extension
encodings and MUST reject before effects while remaining unavailable for PTO
allocation. BSTART.STD CALL, <label> and bare BSTART.STD ICALL are
deleted; Decision 034 in ADR-0077 and Decision 035 in ADR-0077 are the only call forms.
Decision 038: BSTART.SYS is a zero-displacement fallthrough form
PTO accepts only BSTART.SYS FALL, encoded with simm17=0. It initializes a
SYS block whose BARG contains BPC=P, BlockType=SYS, and the applicable
ordering attributes. SYS BARG has no BPCN, TYPE, or TAKEN field, so this
mnemonic does not select a branch target and the block commits to the
sequential next BSTART.
Nonzero simm17 values in this encoding family are occupied
Fixup-extension encodings. PTO MUST reject them before effects and MUST NOT
allocate another PTO meaning in that reserved subset. The immediate is not an
accepted operand of PTO assembly when its value is zero; canonical assembly
and disassembly use exactly BSTART.SYS FALL.
Decision 039: machine-parallel and machine-sequential block starts are extension-reserved
BSTART.MPAR, BSTART.MSEQ, C.BSTART.MPAR, and C.BSTART.MSEQ are not PTO
instructions. PTO MUST reject their assembly spellings, MUST NOT expose them in
canonical disassembly, and MUST NOT assign execution semantics to them.
The complete raw encoding families currently associated with those four names
are occupied extension space. PTO MUST reserve those families against future
allocation and MUST raise Fault_IllegalInstruction before changing
architectural state or pending block state when any member is encountered.
PTO therefore defines no vector-size Mode contract for these families, no
compressed default vector size, no machine-parallel or machine-sequential body
entry mechanism, and no block-local execution-mask behavior selected by these
encodings. Any such execution model belongs outside the PTO instruction set.