Operands and parameters
RegDst- Reg5 destination or discard
SrcL- Reg5 value source
SrcR- Reg5 shift-count source
SRAW performs a arithmetic right shift of the low 32-bit source by the low five bits of the snapshotted SrcR; the 32-bit result is sign-extended to XLEN.
PTO-SCALAR-SRAWsraw SrcL, SrcR, ->{t, u, Rd}| Field | Bits | Signedness | Architectural role | Encoded zero |
|---|---|---|---|---|
RegDst | 5 | encoding-defined | Reg5 destination or discard | Encoded zero discards the result. |
SrcL | 5 | encoding-defined | Reg5 value source | Encoded zero reads the architectural zero GPR. |
SrcR | 5 | encoding-defined | Reg5 shift-count source | Encoded zero reads zero and therefore selects shift amount zero. |
Loading WaveDrom diagram… The encoding table and WaveJSON remain available below.
| Decoded item | Bit range | Value |
|---|---|---|
| Constant | 31:25 | 7'b0000000 |
| SrcR | 24:20 | variable |
| SrcL | 19:15 | variable |
| Constant | 14:12 | 3'b110 |
| RegDst | 11:7 | variable |
| Constant | 6:0 | 7'b0100101 |
{
"reg": [
{
"bits": 7,
"name": "7'b0100101"
},
{
"bits": 5,
"name": "RegDst"
},
{
"bits": 3,
"name": "3'b110"
},
{
"bits": 5,
"name": "SrcL"
},
{
"bits": 5,
"name": "SrcR"
},
{
"bits": 7,
"name": "7'b0000000"
}
],
"config": {
"bits": 32,
"fontsize": 13,
"hspace": 900,
"lanes": 1,
"offset": 0
}
}sraw SrcL, SrcR, ->{t, u, Rd}
RegDstSrcLSrcRThis Operation comes directly from the instruction owner; the page does not rewrite its behavior.
readonly func InstructionContractOperation_SRAW() => ScalarOperationbegin return ScalarOperation_SRAW;end;readonly func InstructionContractHandler_SRAW() => ScalarSemanticHandlerbegin return ScalarHandler_ScalarBinaryW;end;
pure func InstructionContractShiftAmount_SRAW(right: Word) => integer {0..31}begin return UInt(right[4:0]);end;
pure func InstructionContractResult_SRAW(left: Word, right: Word) => Wordbegin let amount = InstructionContractShiftAmount_SRAW(right); let shifted = ASR(left[31:0], amount); return SignExtend{PTO_XLEN}(shifted);end;
pure func InstructionContractIsWordOperation_SRAW() => booleanbegin return TRUE;end;// PTO-INSTRUCTION: {"assembly":["sraw SrcL, SrcR, ->{t, u, Rd}"],"block":[],"catalog_indices":[428],"catalog_records":[{"asm":"sraw SrcL, SrcR, ->{t, u, Rd}","constraints":[],"encoding":[{"index":0,"mask":"0xfe00707f","match":"0x00006025","width_bits":32}],"encoding_kind":"L32","fields":[{"name":"RegDst","pieces":[{"instruction_lsb":7,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5},{"name":"SrcL","pieces":[{"instruction_lsb":15,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5},{"name":"SrcR","pieces":[{"instruction_lsb":20,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5}],"form_id":"sraw_32_5baf37f34241","length_bits":32,"mnemonic":"SRAW","semantic_family":"ALU","semantic_group":"ALU","semantic_handler":"ScalarBinaryW","semantic_summary":"SRAW performs a arithmetic right shift of the low 32-bit source by the low five bits of the snapshotted SrcR; the 32-bit result is sign-extended to XLEN.","status":"accepted"}],"classification":["alu"],"contract":{"block_composition":["none"],"canonical_assembly":["sraw SrcL, SrcR, ->{t, u, Rd}"],"defaults":["SrcL, SrcR, and RegDst are required fields; no field can be omitted.","The low five bits of the snapshotted SrcR select the shift amount 0 through 31; every higher SrcR bit is ignored for the amount."],"encoding_class":"standalone-encoded","examples":["sraw a0, a1, ->a2","sraw t#1, u#1, ->u","sraw zero, zero, ->zero"],"exceptions":["SRAW raises no arithmetic exception; shifted-out bits are discarded.","An unavailable T/U source raises Fault_IllegalInstruction before the destination effect and successful TPC advance."],"field_contracts":{},"field_zero_meanings":{"RegDst":"Encoded zero discards the result.","SrcL":"Encoded zero reads the architectural zero GPR.","SrcR":"Encoded zero reads zero and therefore selects shift amount zero."},"legality":["SrcL and SrcR codes 0..23 select absolute GPRs, 24..27 select T#1..T#4, and 28..31 select U#1..U#4 without consumption.","RegDst codes 0 and 24..29 discard, code 30 pushes U, code 31 pushes T, and codes 1..23 write GPRs.","All SrcR values are legal; only its low five bits contribute to the shift amount."],"memory_effects":["none"],"operands":[{"field":"RegDst","role":"Reg5 destination or discard"},{"field":"SrcL","role":"Reg5 value source"},{"field":"SrcR","role":"Reg5 shift-count source"}],"ordering":["Snapshot both sources before the destination effect so aliases and T/U publication use pre-instruction values.","Publish the result, then advance TPC by four bytes."],"standalone_opcode":true,"state_effects":["Compute the arithmetic right shift using the low five bits of the snapshotted SrcR. The low 32-bit result is sign-extended to XLEN.","Destination codes 0 and 24..29 discard, code 30 pushes U, code 31 pushes T, and codes 1..23 write GPRs; source queues are non-consuming.","No memory, reservation, descriptor, flag, block, privilege, or control-flow state changes except the successful TPC advance."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-PROFILE-ENCODING"],"id":"PTO-SCALAR-SRAW","mnemonic":"SRAW","summary":"SRAW performs a arithmetic right shift of the low 32-bit source by the low five bits of the snapshotted SrcR; the 32-bit result is sign-extended to XLEN.","surface":"scalar"}// PTO-REVIEW: {"review_method":"formal-definition-read","outcome":"FORMAL-COMPLETE","reviewed_fields":["assembly","encoding","defaults","operation","state","memory","ordering","faults","reserved"]}// NDF-BEGIN: PTO-SRAW-ADR-CONTRACT-001// ndf: kind=contract level=L1 layer=scalar status=accepted// Decisions: ADR-0026.// SRAW MUST snapshot its scalar sources, apply its mnemonic-owned// width, immediate, modifier, and wrapping rule, then publish through the// assigned destination or commit effect in alias-safe order.// NDF-END: PTO-SRAW-ADR-CONTRACT-001// DOC-BEGIN: decodereadonly func InstructionContractOperation_SRAW() => ScalarOperationbegin return ScalarOperation_SRAW;end;// DOC-END: decode// DOC-BEGIN: operationreadonly func InstructionContractHandler_SRAW() => ScalarSemanticHandlerbegin return ScalarHandler_ScalarBinaryW;end;
pure func InstructionContractShiftAmount_SRAW(right: Word) => integer {0..31}begin return UInt(right[4:0]);end;
pure func InstructionContractResult_SRAW(left: Word, right: Word) => Wordbegin let amount = InstructionContractShiftAmount_SRAW(right); let shifted = ASR(left[31:0], amount); return SignExtend{PTO_XLEN}(shifted);end;
pure func InstructionContractIsWordOperation_SRAW() => booleanbegin return TRUE;end;// DOC-END: operation
SRAW is a 32-bit scalar ALU instruction. It arithmetically shifts the source right under the low 32-bit word, followed by sign-extension to XLEN shift rules; its current instruction contract defines the result publication path and any additional state effect.
Execution snapshots the encoded inputs, then arithmetically shifts the source right under the low 32-bit word, followed by sign-extension to XLEN shift rules, and only afterward performs the destination effects.
RegDst field selects the Reg5 result target or discards the result.SrcL field selects the scalar value through Reg5.SrcR field selects the register shift count through Reg5.These roles come from the current instruction contract. T/U sources are read and snapshotted without being removed from their queues; exact encoded-zero meanings appear in the generated defaults below.
Every scalar source is snapshotted before the destination effect. The completed value is then routed through RegDst using the current scalar destination map.
This ALU operation has no memory effect. After its successful architectural effects, TPC advances by 4 bytes.
The operation does not introduce a hidden scalar publication target or an implicit memory access. Architectural changes remain limited to the state effects enumerated by the current contract.
Register shifting uses only the low 5 right-source bits, so the effective amount is 0..31; every result is defined at the fixed width.
The generated legality table is authoritative for assigned field values, reserved encodings, and destination discard codes. Decode and source availability are checked before architectural effects.
This example illustrates the current ASL owner and does not replace the normative operation.
For a small SRAW example, source -8 shifted arithmetically right by 2 produces -2.
Bodies come from owning ASL. Dragging or buttons change only this page-session view order.
Decisions: ADR-0026. SRAW MUST snapshot its scalar sources, apply its mnemonic-owned width, immediate, modifier, and wrapping rule, then publish through the assigned destination or commit effect in alias-safe order.
PTO-SRAW-ADR-CONTRACT-001asl/scalar/alu/SRAW.aslc0d3ee813d28c695db7d32566a51dcd0e4888c178b66576f6a8c48e488f277844e23ab259446b2f1937942d5ca5028aa3218955950d47f1f45ea7079fbeaa6d411 matching entries
PTO-AVS-SCALAR-SRAW-DECODE-001tests/asl/scalar/alu/SRAW/scalar-decode-sraw-canonical-001.asl1dd9ee22b4e4423d104070d9c8ab2f90fc5469d5ea39ee4eb8770305c564e240PTO-AVS-SCALAR-SRAW-MASKED-001tests/asl/scalar/alu/SRAW/scalar-bound-sraw-masked-001.asl7ed0c22005d3f6a5a4c04082c73d6b3085dd45c8ecb06035e120cc0bd76815baPTO-AVS-SCALAR-SRAW-MAXIMUM-001tests/asl/scalar/alu/SRAW/scalar-exec-sraw-maximum-001.asl63703a33b45cf949dbd1da31e44c3ad403c7860f71f210ec77db3777e8c3b3bcPTO-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-0026…
ADR-0026docs/status/decisions/0026-scalar-alu-totality-and-alias-order.md41d126f224dddc371832120f1b02eab64e426872fdcbea452bad77c90bdec349Loading 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": [
"alu"
],
"documentation": "docs/scalar/alu/SRAW.md",
"id": "PTO-SCALAR-SRAW",
"instruction_contract": {
"artifact": "spec/evidence/instruction-contract-closure.json",
"mnemonic": "SRAW",
"ndf_clause": "PTO-INST-SCALAR-SRAW"
},
"mnemonic": "SRAW",
"readiness_subjects": [
"ADR-0026",
"ADR-0059",
"ADR-0084"
],
"semantic_tests": [
"PTO-AVS-SCALAR-SRAW-MASKED-001",
"PTO-AVS-SCALAR-SRAW-MAXIMUM-001"
],
"source": "asl/scalar/alu/SRAW.asl",
"surface": "scalar",
"tests": [
"PTO-AVS-SCALAR-SRAW-DECODE-001",
"PTO-AVS-SCALAR-SRAW-MASKED-001",
"PTO-AVS-SCALAR-SRAW-MAXIMUM-001"
]
}0.58.5 · Release candidate7dc8b7e5b121d2b2499a2273bebff29e2cd86812c0d3ee813d28c695db7d32566a51dcd0e4888c178b66576f6a8c48e488f2778454cfe2d18370168f653a95d67c085ea1c1142fb4fef24124fe797e84f805185casl/scalar/alu/SRAW.aslasl/scalar/alu/SRAW.aslasl/scalar/alu/SRAW.asl