PTO-SCALAR-MODEL-DISPATCH-AGU
PTO-SCALAR-MODEL-DISPATCH-AGUASL pseudocode
The complete ASL owner is shown directly below.
// PTO-UNIT: {"id":"PTO-SCALAR-MODEL-DISPATCH-AGU","surface":"scalar","classification":["model","dispatch","agu"],"depends_on":["PTO-SCALAR-MODEL-DISPATCH-DECODE","PTO-SCALAR-MODEL-AGU-ADDRESSING","PTO-SCALAR-C-LDI","PTO-SCALAR-C-LWI","PTO-SCALAR-C-SDI","PTO-SCALAR-C-SWI","PTO-SCALAR-HL-LB-PCR","PTO-SCALAR-HL-LB-PO","PTO-SCALAR-HL-LB-PR","PTO-SCALAR-HL-LBI-PO","PTO-SCALAR-HL-LBI-PR","PTO-SCALAR-HL-LBI","PTO-SCALAR-HL-LBIP","PTO-SCALAR-HL-LBP","PTO-SCALAR-HL-LBU-PCR","PTO-SCALAR-HL-LBU-PO","PTO-SCALAR-HL-LBU-PR","PTO-SCALAR-HL-LBUI-PO","PTO-SCALAR-HL-LBUI-PR","PTO-SCALAR-HL-LBUI","PTO-SCALAR-HL-LBUIP","PTO-SCALAR-HL-LBUP","PTO-SCALAR-HL-LD-PCR","PTO-SCALAR-HL-LD-PO","PTO-SCALAR-HL-LD-PR","PTO-SCALAR-HL-LDI-PO","PTO-SCALAR-HL-LDI-PR","PTO-SCALAR-HL-LDI-U","PTO-SCALAR-HL-LDI-UPO","PTO-SCALAR-HL-LDI-UPR","PTO-SCALAR-HL-LDI","PTO-SCALAR-HL-LDIP-U","PTO-SCALAR-HL-LDIP","PTO-SCALAR-HL-LDP","PTO-SCALAR-HL-LH-PCR","PTO-SCALAR-HL-LH-PO","PTO-SCALAR-HL-LH-PR","PTO-SCALAR-HL-LHI-PO","PTO-SCALAR-HL-LHI-PR","PTO-SCALAR-HL-LHI-U","PTO-SCALAR-HL-LHI-UPO","PTO-SCALAR-HL-LHI-UPR","PTO-SCALAR-HL-LHI","PTO-SCALAR-HL-LHIP-U","PTO-SCALAR-HL-LHIP","PTO-SCALAR-HL-LHP","PTO-SCALAR-HL-LHU-PCR","PTO-SCALAR-HL-LHU-PO","PTO-SCALAR-HL-LHU-PR","PTO-SCALAR-HL-LHUI-PO","PTO-SCALAR-HL-LHUI-PR","PTO-SCALAR-HL-LHUI-U","PTO-SCALAR-HL-LHUI-UPO","PTO-SCALAR-HL-LHUI-UPR","PTO-SCALAR-HL-LHUI","PTO-SCALAR-HL-LHUIP-U","PTO-SCALAR-HL-LHUIP","PTO-SCALAR-HL-LHUP","PTO-SCALAR-HL-LW-PCR","PTO-SCALAR-HL-LW-PO","PTO-SCALAR-HL-LW-PR","PTO-SCALAR-HL-LWI-PO","PTO-SCALAR-HL-LWI-PR","PTO-SCALAR-HL-LWI-U","PTO-SCALAR-HL-LWI-UPO","PTO-SCALAR-HL-LWI-UPR","PTO-SCALAR-HL-LWI","PTO-SCALAR-HL-LWIP-U","PTO-SCALAR-HL-LWIP","PTO-SCALAR-HL-LWP","PTO-SCALAR-HL-LWU-PCR","PTO-SCALAR-HL-LWU-PO","PTO-SCALAR-HL-LWU-PR","PTO-SCALAR-HL-LWUI-PO","PTO-SCALAR-HL-LWUI-PR","PTO-SCALAR-HL-LWUI-U","PTO-SCALAR-HL-LWUI-UPO","PTO-SCALAR-HL-LWUI-UPR","PTO-SCALAR-HL-LWUI","PTO-SCALAR-HL-LWUIP-U","PTO-SCALAR-HL-LWUIP","PTO-SCALAR-HL-LWUP","PTO-SCALAR-HL-PRF-A","PTO-SCALAR-HL-PRF","PTO-SCALAR-HL-PRFI-U","PTO-SCALAR-HL-PRFI-UA","PTO-SCALAR-HL-SB-PCR","PTO-SCALAR-HL-SB-PO","PTO-SCALAR-HL-SB-PR","PTO-SCALAR-HL-SBI-PO","PTO-SCALAR-HL-SBI-PR","PTO-SCALAR-HL-SBI","PTO-SCALAR-HL-SBIP","PTO-SCALAR-HL-SBP","PTO-SCALAR-HL-SD-PCR","PTO-SCALAR-HL-SD-PO","PTO-SCALAR-HL-SD-PR","PTO-SCALAR-HL-SD-UPO","PTO-SCALAR-HL-SD-UPR","PTO-SCALAR-HL-SDI-PO","PTO-SCALAR-HL-SDI-PR","PTO-SCALAR-HL-SDI-U","PTO-SCALAR-HL-SDI-UPO","PTO-SCALAR-HL-SDI-UPR","PTO-SCALAR-HL-SDI","PTO-SCALAR-HL-SDIP-U","PTO-SCALAR-HL-SDIP","PTO-SCALAR-HL-SDP-U","PTO-SCALAR-HL-SDP","PTO-SCALAR-HL-SH-PCR","PTO-SCALAR-HL-SH-PO","PTO-SCALAR-HL-SH-PR","PTO-SCALAR-HL-SH-UPO","PTO-SCALAR-HL-SH-UPR","PTO-SCALAR-HL-SHI-PO","PTO-SCALAR-HL-SHI-PR","PTO-SCALAR-HL-SHI-U","PTO-SCALAR-HL-SHI-UPO","PTO-SCALAR-HL-SHI-UPR","PTO-SCALAR-HL-SHI","PTO-SCALAR-HL-SHIP-U","PTO-SCALAR-HL-SHIP","PTO-SCALAR-HL-SHP-U","PTO-SCALAR-HL-SHP","PTO-SCALAR-HL-SW-PCR","PTO-SCALAR-HL-SW-PO","PTO-SCALAR-HL-SW-PR","PTO-SCALAR-HL-SW-UPO","PTO-SCALAR-HL-SW-UPR","PTO-SCALAR-HL-SWI-PO","PTO-SCALAR-HL-SWI-PR","PTO-SCALAR-HL-SWI-U","PTO-SCALAR-HL-SWI-UPO","PTO-SCALAR-HL-SWI-UPR","PTO-SCALAR-HL-SWI","PTO-SCALAR-HL-SWIP-U","PTO-SCALAR-HL-SWIP","PTO-SCALAR-HL-SWP-U","PTO-SCALAR-HL-SWP","PTO-SCALAR-LB-PCR","PTO-SCALAR-LB","PTO-SCALAR-LBI","PTO-SCALAR-LBU-PCR","PTO-SCALAR-LBU","PTO-SCALAR-LBUI","PTO-SCALAR-LD-PCR","PTO-SCALAR-LD","PTO-SCALAR-LDI-U","PTO-SCALAR-LDI","PTO-SCALAR-LH-PCR","PTO-SCALAR-LH","PTO-SCALAR-LHI-U","PTO-SCALAR-LHI","PTO-SCALAR-LHU-PCR","PTO-SCALAR-LHU","PTO-SCALAR-LHUI-U","PTO-SCALAR-LHUI","PTO-SCALAR-LW-PCR","PTO-SCALAR-LW","PTO-SCALAR-LWI-U","PTO-SCALAR-LWI","PTO-SCALAR-LWU-PCR","PTO-SCALAR-LWU","PTO-SCALAR-LWUI-U","PTO-SCALAR-LWUI","PTO-SCALAR-PRF","PTO-SCALAR-PRFI-U","PTO-SCALAR-SB-PCR","PTO-SCALAR-SB","PTO-SCALAR-SBI","PTO-SCALAR-SD-PCR","PTO-SCALAR-SD-U","PTO-SCALAR-SD","PTO-SCALAR-SDI-U","PTO-SCALAR-SDI","PTO-SCALAR-SH-PCR","PTO-SCALAR-SH-U","PTO-SCALAR-SH","PTO-SCALAR-SHI-U","PTO-SCALAR-SHI","PTO-SCALAR-SW-PCR","PTO-SCALAR-SW-U","PTO-SCALAR-SW","PTO-SCALAR-SWI-U","PTO-SCALAR-SWI"]}pure func ScalarDecodedAGUImmediate( instruction: bits(48), form: integer {0..PTO_SCALAR_FORM_COUNT-1}) => Wordbegin if ScalarOperandPresent(form, ScalarField_simm5) then return ScalarDecodedWord(instruction, form, ScalarField_simm5); elsif ScalarOperandPresent(form, ScalarField_simm12) then return ScalarDecodedWord(instruction, form, ScalarField_simm12); elsif ScalarOperandPresent(form, ScalarField_simm17) then return ScalarDecodedWord(instruction, form, ScalarField_simm17); elsif ScalarOperandPresent(form, ScalarField_simm22) then return ScalarDecodedWord(instruction, form, ScalarField_simm22); else return ScalarDecodedWord(instruction, form, ScalarField_simm); end;end;
readonly func ScalarDecodedAGUBase( instruction: bits(48), form: integer {0..PTO_SCALAR_FORM_COUNT-1}, action: ScalarAGUAction, address_kind: ScalarAGUAddressKind) => Wordbegin if address_kind == ScalarAGU_PCRelative then var aligned_tpc = ReadTPC(); aligned_tpc[1:0] = Zeros{2}; return aligned_tpc; elsif address_kind == ScalarAGU_Compressed then return ReadDecodedScalarRegister(instruction, form, ScalarField_SrcL); elsif (action == ScalarAGU_Store || action == ScalarAGU_StorePair) && address_kind == ScalarAGU_Immediate then return ReadDecodedScalarRegister(instruction, form, ScalarField_SrcR); else return ReadDecodedScalarRegister(instruction, form, ScalarField_SrcL); end;end;
readonly func ScalarDecodedAGUOffset( instruction: bits(48), form: integer {0..PTO_SCALAR_FORM_COUNT-1}, address_kind: ScalarAGUAddressKind) => Wordbegin let scale = ScalarAGUOffsetScaleOfForm(form); if address_kind == ScalarAGU_Register then let unshifted = ApplyScalarRightModifier( ReadDecodedScalarRegister(instruction, form, ScalarField_SrcR), ScalarDecodedAddressRightModifier(instruction, form), FALSE); let shift_amount = if ScalarOperandPresent(form, ScalarField_shamt) then ScalarDecodedUInt6(instruction, form, ScalarField_shamt) else scale; return LSL(unshifted, shift_amount); else return LSL(ScalarDecodedAGUImmediate(instruction, form), scale); end;end;
pure func NormalizeScalarLoadResult(value: Word, size_bytes: integer {1,2,4,8}, signed_load: boolean) => Wordbegin if signed_load then case size_bytes of when 1 => return SignExtend{PTO_XLEN}(value[7:0]); when 2 => return SignExtend{PTO_XLEN}(value[15:0]); when 4 => return SignExtend{PTO_XLEN}(value[31:0]); when 8 => return value; end; end; case size_bytes of when 1 => return ZeroExtend{PTO_XLEN}(value[7:0]); when 2 => return ZeroExtend{PTO_XLEN}(value[15:0]); when 4 => return ZeroExtend{PTO_XLEN}(value[31:0]); when 8 => return value; end;end;
func ExecuteDecodedAGULoad( instruction: bits(48), form: integer {0..PTO_SCALAR_FORM_COUNT-1}, address: Word, updated_base: Word, update_mode: AddressUpdateMode, size_bytes: integer {1,2,4,8})begin let value = LoadUnsigned(address, size_bytes); if _LastFault == Fault_None then let normalized = NormalizeScalarLoadResult( value, size_bytes, ScalarAGUSignedLoadOfForm(form)); if ScalarAGUAddressKindOfForm(form) == ScalarAGU_Compressed then WriteCompressedTResult(normalized); elsif update_mode == AddressUpdate_None then WriteScalarDestination( ScalarDecodedSelector(instruction, form, ScalarField_RegDst), normalized); else WriteScalarDestination( ScalarDecodedSelector(instruction, form, ScalarField_RegDst0), normalized); WriteScalarDestination( ScalarDecodedSelector(instruction, form, ScalarField_RegDst1), updated_base); end; end;end;
func ExecuteDecodedAGULoadPair( instruction: bits(48), form: integer {0..PTO_SCALAR_FORM_COUNT-1}, address: Word, size_bytes: integer {1,2,4,8})begin let second_address = address + NaturalToWord(size_bytes as integer {0..262144}); let first_probe = ProbeDataAccess(address, size_bytes, size_bytes, FALSE); if RaiseDataAccessFault(first_probe, address) then return; end; let second_probe = ProbeDataAccess( second_address, size_bytes, size_bytes, FALSE); if RaiseDataAccessFault(second_probe, second_address) then return; end; let first = LoadTranslatedUnsigned(first_probe.translated_address, size_bytes); let second = LoadTranslatedUnsigned(second_probe.translated_address, size_bytes); RecordLoadEvent(first_probe.translated_address, size_bytes, first, MemoryOrder_Relaxed); RecordLoadEvent(second_probe.translated_address, size_bytes, second, MemoryOrder_Relaxed); WriteScalarDestination( ScalarDecodedSelector(instruction, form, ScalarField_RegDst0), NormalizeScalarLoadResult(first, size_bytes, ScalarAGUSignedLoadOfForm(form))); WriteScalarDestination( ScalarDecodedSelector(instruction, form, ScalarField_RegDst1), NormalizeScalarLoadResult(second, size_bytes, ScalarAGUSignedLoadOfForm(form)));end;
readonly func ReadDecodedAGUStoreSource( instruction: bits(48), form: integer {0..PTO_SCALAR_FORM_COUNT-1}) => Wordbegin if ScalarOperandPresent(form, ScalarField_SrcD) then return ReadDecodedScalarRegister(instruction, form, ScalarField_SrcD); elsif ScalarAGUAddressKindOfForm(form) == ScalarAGU_Compressed then return ReadScalarRegisterOperand(24); else return ReadDecodedScalarRegister(instruction, form, ScalarField_SrcL); end;end;
func ExecuteDecodedAGUStore( instruction: bits(48), form: integer {0..PTO_SCALAR_FORM_COUNT-1}, address: Word, updated_base: Word, update_mode: AddressUpdateMode, size_bytes: integer {1,2,4,8})begin let source = ReadDecodedAGUStoreSource(instruction, form); Store(address, size_bytes, source); if _LastFault == Fault_None && update_mode != AddressUpdate_None then WriteScalarDestination( ScalarDecodedSelector(instruction, form, ScalarField_RegDst), updated_base); end;end;
func ExecuteDecodedAGUStorePair( instruction: bits(48), form: integer {0..PTO_SCALAR_FORM_COUNT-1}, address: Word, size_bytes: integer {1,2,4,8})begin let second_address = address + NaturalToWord(size_bytes as integer {0..262144}); let first_probe = ProbeDataAccess(address, size_bytes, size_bytes, TRUE); if RaiseDataAccessFault(first_probe, address) then return; end; let second_probe = ProbeDataAccess( second_address, size_bytes, size_bytes, TRUE); if RaiseDataAccessFault(second_probe, second_address) then return; end; let first = ReadDecodedScalarRegister(instruction, form, ScalarField_SrcD); let second = ReadDecodedScalarRegister(instruction, form, ScalarField_SrcD1); StoreTranslated(address, first_probe.translated_address, size_bytes, first); RecordStoreEvent(first_probe.translated_address, size_bytes, first, MemoryOrder_Relaxed); StoreTranslated(second_address, second_probe.translated_address, size_bytes, second); RecordStoreEvent(second_probe.translated_address, size_bytes, second, MemoryOrder_Relaxed);end;
func ExecuteDecodedAGUForm(instruction: bits(48), form: integer {0..PTO_SCALAR_FORM_COUNT-1})begin let action = ScalarAGUActionOfForm(form); let address_kind = ScalarAGUAddressKindOfForm(form); let update_mode = ScalarAGUUpdateModeOfForm(form); let size_bytes = ScalarAGUSizeOfForm(form); let base = ScalarDecodedAGUBase(instruction, form, action, address_kind); let offset = ScalarDecodedAGUOffset(instruction, form, address_kind); let updated_base = base + offset; let address = if update_mode == AddressUpdate_PostIndex then base else updated_base; case action of when ScalarAGU_Load => ExecuteDecodedAGULoad(instruction, form, address, updated_base, update_mode, size_bytes); when ScalarAGU_LoadPair => ExecuteDecodedAGULoadPair( instruction, form, address, size_bytes); when ScalarAGU_Store => ExecuteDecodedAGUStore(instruction, form, address, updated_base, update_mode, size_bytes); when ScalarAGU_StorePair => ExecuteDecodedAGUStorePair( instruction, form, address, size_bytes); when ScalarAGU_Prefetch => let model = DecodeScalarOperandRaw( instruction, form, ScalarField_model)[4:0]; ScalarPrefetch(base, offset, size_bytes, model); if ScalarAGUPrefetchReturnsAddress(form) then WriteScalarDestination( ScalarDecodedSelector(instruction, form, ScalarField_RegDst), ScalarPrefetchAddress(base, offset)); end; end;end;
Architecture behavior
This internal model unit is documented through its normative ASL/NDF owners and validation evidence; it has no reader-guide migration target.
NDF clauses
Bodies come from owning ASL. Dragging or buttons change only this page-session view order.
No NDF clause is attached to this unit.
Evidence index
6 matching entries
Executable evidence1
PTO-SCALAR-MODEL-DISPATCH-AGU compiles as an independent normative unit
- surfaceSCALAR
- ownerPTO-SCALAR-MODEL-DISPATCH-AGU
- categorySTATIC-INVARIANT
- case001
Show exact test source
Sources and references
- Complete stable ID
PTO-AVS-SCALAR-MODEL-DISPATCH-AGU-STATIC-001- Path
tests/asl/scalar/model/dispatch/agu/scalar-static-agu-contract-001.asl- Kind / role
- static-invariant
- Pass condition
- the complete model and this unit's static invariant compile
- SHA-256
d81d2fb1715b1e54c57ebee69c4ae8366fb0a817a795e0d3a5fa4ad490005b7e
Commit-scoped evidence5
spec/evidence/release-traceability-readiness.json · closed
PTO-EVIDENCE-RELEASE-TRACEABILITYSources and references
- Complete stable ID
PTO-EVIDENCE-RELEASE-TRACEABILITY- Path
spec/evidence/release-traceability-readiness.json- Kind / role
- ASL/NDF/documentation/AVS traceability
- SHA-256
c7327021d39dc67ac5564bc55073b3870a397d79ac8d9648284d56e33bc14a3e
spec/evidence/instruction-contract-closure.json · closed
PTO-EVIDENCE-INSTRUCTION-CONTRACT-CLOSURESources and references
- Complete stable ID
PTO-EVIDENCE-INSTRUCTION-CONTRACT-CLOSURE- Path
spec/evidence/instruction-contract-closure.json- Kind / role
- mnemonic and encoding contract closure
- SHA-256
3ef2bb62421c79dff8fa77a1c7983923b523244b8090812883ef81286ca8106a
spec/evidence/architecture-readiness.json · open
PTO-EVIDENCE-ARCHITECTURE-READINESSSources and references
- Complete stable ID
PTO-EVIDENCE-ARCHITECTURE-READINESS- Path
spec/evidence/architecture-readiness.json- Kind / role
- architecture maturity and blockers
- SHA-256
4b0b85199101251bea744e0f3591cc31906909dc80d5ab651c417a936036a004
spec/evidence/release-gate-readiness.json · ready-for-exact-head-verification
PTO-EVIDENCE-RELEASE-GATE-READINESSSources and references
- Complete stable ID
PTO-EVIDENCE-RELEASE-GATE-READINESS- Path
spec/evidence/release-gate-readiness.json- Kind / role
- exact-head gate readiness
- SHA-256
a0f4d2b6920c08981ea55fd8ef820708a40d4feb5402c5150e8e9ab532d84ce0
spec/release-manifest.json · draft
PTO-EVIDENCE-RELEASE-MANIFESTSources and references
- Complete stable ID
PTO-EVIDENCE-RELEASE-MANIFEST- Path
spec/release-manifest.json- Kind / role
- release content and encoding fingerprints
- SHA-256
1a64c109ed7a90351c41e2a418b3c0ebaf8ad975838986d2101385186b85c0d8
Unit metadata
Open 4 generated metadata fields
Open generated traceability record
{
"classification": [
"model",
"dispatch",
"agu"
],
"documentation": "docs/scalar/model/dispatch/agu.md",
"id": "PTO-SCALAR-MODEL-DISPATCH-AGU",
"mnemonic": null,
"readiness_subjects": [],
"semantic_tests": [],
"source": "asl/scalar/model/dispatch/agu.asl",
"surface": "scalar",
"tests": [
"PTO-AVS-SCALAR-MODEL-DISPATCH-AGU-STATIC-001"
]
}Sources and release identity
Show commit, paths, hashes, version, and canonical owners
- Release
0.58.5· Release candidate- Commit
7dc8b7e5b121d2b2499a2273bebff29e2cd86812- Original ASL
- asl/scalar/model/dispatch/agu.asl
- ASL SHA-256
1e22037018ca860fef794052cda29bf99103c543ae2b6391fce292a5cba9f682- Generated documentation
- docs/scalar/model/dispatch/agu.md · embedded in this page
- Documentation SHA-256
ca098346e92b02ccb6e0feb5e51bdc9983f38cb6ebf23771326247e7b7f17a5d
Exact owners
- ASL PTO-SCALAR-MODEL-DISPATCH-AGU
asl/scalar/model/dispatch/agu.asl