Operands and parameters
RegDst0- sign-extended result[31:0] Reg5 destination
RegDst1- sign-extended result[63:32] Reg5 destination
SrcD- addend Reg5 source
SrcL- left multiplicand or additive Reg5 source
SrcR- right multiplicand Reg5 source
HL.MADDW computes a signed 64-bit word multiply-add result and publishes its sign-extended low and high 32-bit halves.
PTO-SCALAR-HL-MADDWhl.maddw SrcL, SrcR, SrcD, ->Dst0, Dst1| Field | Bits | Signedness | Architectural role | Encoded zero |
|---|---|---|---|---|
RegDst0 | 5 | encoding-defined | sign-extended result[31:0] Reg5 destination | Encoded zero discards the low result. |
RegDst1 | 5 | encoding-defined | sign-extended result[63:32] Reg5 destination | Encoded zero discards the high result. |
SrcD | 5 | encoding-defined | addend Reg5 source | Encoded zero reads the architectural zero GPR. |
SrcL | 5 | encoding-defined | left multiplicand or additive Reg5 source | Encoded zero reads the architectural zero GPR. |
SrcR | 5 | encoding-defined | right multiplicand Reg5 source | Encoded zero reads the architectural zero GPR. |
Loading WaveDrom diagram… The encoding table and WaveJSON remain available below.
| Decoded item | Bit range | Value |
|---|---|---|
| SrcD | 47:43 | variable |
| Constant | 42:41 | 2'b00 |
| SrcR | 40:36 | variable |
| SrcL | 35:31 | variable |
| Constant | 30:28 | 3'b111 |
| RegDst0 | 27:23 | variable |
| Constant | 22:16 | 7'b1000111 |
| RegDst1 | 15:11 | variable |
| Constant | 10:0 | 11'b00000001110 |
{
"reg": [
{
"bits": 11,
"name": "11'b00000001110"
},
{
"bits": 5,
"name": "RegDst1"
},
{
"bits": 7,
"name": "7'b1000111"
},
{
"bits": 5,
"name": "RegDst0"
},
{
"bits": 3,
"name": "3'b111"
},
{
"bits": 5,
"name": "SrcL"
},
{
"bits": 5,
"name": "SrcR"
},
{
"bits": 2,
"name": "2'b00"
},
{
"bits": 5,
"name": "SrcD"
}
],
"config": {
"bits": 48,
"fontsize": 13,
"hspace": 900,
"lanes": 2,
"offset": 0
}
}hl.maddw SrcL, SrcR, SrcD, ->Dst0, Dst1
RegDst0RegDst1SrcDSrcLSrcRThis Operation comes directly from the instruction owner; the page does not rewrite its behavior.
readonly func InstructionContractOperation_HL_MADDW() => ScalarOperationbegin return ScalarOperation_HL_MADDW;end;readonly func InstructionContractHandler_HL_MADDW() => ScalarSemanticHandlerbegin return ScalarHandler_ExecuteScalarMultiplyAddPair;end;pure func InstructionContractResult_HL_MADDW( addend: Word, left: Word, right: Word) => Wordbegin let effective_addend = SignExtend{PTO_XLEN}(addend[31:0]); let effective_left = SignExtend{PTO_XLEN}(left[31:0]); let effective_right = SignExtend{PTO_XLEN}(right[31:0]); let product = MultiplyWideSigned(effective_left, effective_right); return product[63:0] + effective_addend;end;
pure func InstructionContractLow_HL_MADDW( addend: Word, left: Word, right: Word) => Wordbegin return SignExtend{PTO_XLEN}( InstructionContractResult_HL_MADDW(addend, left, right)[31:0]);end;
pure func InstructionContractHigh_HL_MADDW( addend: Word, left: Word, right: Word) => Wordbegin return SignExtend{PTO_XLEN}( InstructionContractResult_HL_MADDW(addend, left, right)[63:32]);end;// PTO-INSTRUCTION: {"assembly":["hl.maddw SrcL, SrcR, SrcD, ->Dst0, Dst1"],"block":[],"catalog_indices":[221],"catalog_records":[{"asm":"hl.maddw SrcL, SrcR, SrcD, ->Dst0, Dst1","constraints":[],"encoding":[{"index":0,"mask":"0x0600707f07ff","match":"0x00007047000e","width_bits":48}],"encoding_kind":"HL48","fields":[{"name":"RegDst0","pieces":[{"instruction_lsb":23,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5},{"name":"RegDst1","pieces":[{"instruction_lsb":11,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5},{"name":"SrcD","pieces":[{"instruction_lsb":43,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5},{"name":"SrcL","pieces":[{"instruction_lsb":31,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5},{"name":"SrcR","pieces":[{"instruction_lsb":36,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5}],"form_id":"hl_maddw_48_6fac897f0264","length_bits":48,"mnemonic":"HL.MADDW","semantic_family":"ALU","semantic_group":"ALU","semantic_handler":"ExecuteScalarMultiplyAddPair","semantic_summary":"HL.MADDW computes a signed 64-bit word multiply-add result and publishes its sign-extended low and high 32-bit halves.","status":"accepted"}],"classification":["alu"],"contract":{"block_composition":["none"],"canonical_assembly":["hl.maddw SrcL, SrcR, SrcD, ->Dst0, Dst1"],"defaults":["Every encoded operand and destination field is required; no field can be omitted.","The mnemonic fixes signedness, effective operand width, single-versus-pair result shape, and add-versus-subtract behavior; there is no encoded arithmetic mode."],"encoding_class":"standalone-encoded","examples":["hl.maddw srcl, srcr, srcd, ->dst0, dst1"],"exceptions":["Multiplication and accumulation are fixed-width and raise no arithmetic exception; discarded overflow wraps modulo the defined result width.","An unavailable selected T/U source raises Fault_IllegalInstruction before any destination effect and before TPC advances."],"field_contracts":{},"field_zero_meanings":{"SrcD":"Encoded zero reads the architectural zero GPR.","SrcL":"Encoded zero reads the architectural zero GPR.","SrcR":"Encoded zero reads the architectural zero GPR.","RegDst0":"Encoded zero discards the low result.","RegDst1":"Encoded zero discards the high result."},"legality":["Every source Reg5 code is assigned: 0..23 select absolute GPRs, 24..27 select T#1..T#4, and 28..31 select U#1..U#4 without consumption.","Each destination independently uses the common map: codes 0 and 24..29 discard, codes 1..23 write GPRs, code 30 pushes U, and code 31 pushes T.","Fixed encoding bits must match the canonical form; every encoded source, destination, and immediate value otherwise has assigned behavior."],"memory_effects":["none"],"operands":[{"field":"RegDst0","role":"sign-extended result[31:0] Reg5 destination"},{"field":"RegDst1","role":"sign-extended result[63:32] Reg5 destination"},{"field":"SrcD","role":"addend Reg5 source"},{"field":"SrcL","role":"left multiplicand or additive Reg5 source"},{"field":"SrcR","role":"right multiplicand Reg5 source"}],"ordering":["Snapshot every source before any destination effect so duplicate selectors and destination aliases observe pre-instruction values.","Publish SignExtend(result[31:0]) to RegDst0, publish SignExtend(result[63:32]) to RegDst1, then advance TPC by six bytes."],"standalone_opcode":true,"state_effects":["Interpret SrcD[31:0], SrcL[31:0], and SrcR[31:0] as signed two-complement values; compute signed32(SrcL) * signed32(SrcR) + signed32(SrcD) modulo 2^64.","Snapshot every source and compute the complete 64-bit result before destinations. Publish SignExtend(result[31:0]) to RegDst0, then SignExtend(result[63:32]) to RegDst1.","Duplicate destinations are legal and retain the second high-word result. No memory, reservation, descriptor, numeric-status, block, privilege, branch-target, or other control state changes. Successful execution advances TPC by six bytes."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-PROFILE-ENCODING"],"id":"PTO-SCALAR-HL-MADDW","mnemonic":"HL.MADDW","summary":"HL.MADDW computes a signed 64-bit word multiply-add result and publishes its sign-extended low and high 32-bit halves.","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-HL-MADDW-WORD-HALVES-001// ndf: kind=contract level=L1 layer=scalar status=accepted// HL.MADDW MUST interpret the low 32 bits of all three sources as signed values// and MUST compute their multiply-add result modulo 2^64.// RegDst0 MUST receive SignExtend(result[31:0]) before RegDst1 receives// SignExtend(result[63:32]). Sources MUST be snapshotted before either write.// NDF-END: PTO-HL-MADDW-WORD-HALVES-001// DOC-BEGIN: decodereadonly func InstructionContractOperation_HL_MADDW() => ScalarOperationbegin return ScalarOperation_HL_MADDW;end;// DOC-END: decode// DOC-BEGIN: operationreadonly func InstructionContractHandler_HL_MADDW() => ScalarSemanticHandlerbegin return ScalarHandler_ExecuteScalarMultiplyAddPair;end;pure func InstructionContractResult_HL_MADDW( addend: Word, left: Word, right: Word) => Wordbegin let effective_addend = SignExtend{PTO_XLEN}(addend[31:0]); let effective_left = SignExtend{PTO_XLEN}(left[31:0]); let effective_right = SignExtend{PTO_XLEN}(right[31:0]); let product = MultiplyWideSigned(effective_left, effective_right); return product[63:0] + effective_addend;end;
pure func InstructionContractLow_HL_MADDW( addend: Word, left: Word, right: Word) => Wordbegin return SignExtend{PTO_XLEN}( InstructionContractResult_HL_MADDW(addend, left, right)[31:0]);end;
pure func InstructionContractHigh_HL_MADDW( addend: Word, left: Word, right: Word) => Wordbegin return SignExtend{PTO_XLEN}( InstructionContractResult_HL_MADDW(addend, left, right)[63:32]);end;// DOC-END: operation
HL.MADDW is a 48-bit scalar ALU instruction. It adds the selected addend to the signed product and separates the wide result into low and high word halves; its current instruction contract defines the result publication path and any additional state effect.
Execution snapshots the encoded inputs, then adds the selected addend to the signed product and separates the wide result into low and high word halves, and only afterward performs the destination effects.
RegDst0 field selects the Reg5 target for sign-extended result[31:0].RegDst1 field selects the Reg5 target for sign-extended result[63:32].SrcD field selects the addend through Reg5.SrcL field selects the left multiplicand or additive operand through Reg5.SrcR field selects the right multiplicand 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.
All results are computed before publication. The destinations are then updated in encoded order (RegDst0, RegDst1), which also defines the order of duplicate-register writes or queue pushes.
This ALU operation has no memory effect. After its successful architectural effects, TPC advances by 6 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.
Fixed-width arithmetic follows the operation’s wraparound rule without an arithmetic exception. A fixed-bit mismatch or unavailable selected T/U source raises Fault_IllegalInstruction before publication and before TPC advances.
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 HL.MADDW example, multiplicands 6 and 7 with addend 1 produce accumulated value 43; wide pair forms place 43 in the low result and 0 in the high result.
Bodies come from owning ASL. Dragging or buttons change only this page-session view order.
HL.MADDW MUST interpret the low 32 bits of all three sources as signed values and MUST compute their multiply-add result modulo 2^64. RegDst0 MUST receive SignExtend(result[31:0]) before RegDst1 receives SignExtend(result[63:32]). Sources MUST be snapshotted before either write.
PTO-HL-MADDW-WORD-HALVES-001asl/scalar/alu/HL.MADDW.asl9c6eaa55469c21915ed4d48b68063c860b0ddd5736dd91da136bb3d35753aef2e6aab84bfc1cd38999ab774e39097b282d1370577749c405d74db3931bf78e9e11 matching entries
PTO-AVS-SCALAR-HL-MADDW-ACCUMULATE-001tests/asl/scalar/alu/HL.MADDW/scalar-exec-hl-maddw-accumulate-001.aslbf2eddf771f1da0e6d34717bc67fc0bacaf19995c25d1bd8711993f3387c26c7PTO-AVS-SCALAR-HL-MADDW-DECODE-001tests/asl/scalar/alu/HL.MADDW/scalar-decode-hl-maddw-canonical-001.asl15c46959216fd1d1881336564fad9b42907198de50bdffbd9768727bb6d217d8PTO-AVS-SCALAR-HL-MADDW-HALVES-002tests/asl/scalar/alu/HL.MADDW/scalar-exec-hl-maddw-halves-002.asla36eb880903716599aa598c54477b93dc0a73ad00ca462fb4911c248c079af87PTO-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/HL.MADDW.md",
"id": "PTO-SCALAR-HL-MADDW",
"instruction_contract": {
"artifact": "spec/evidence/instruction-contract-closure.json",
"mnemonic": "HL.MADDW",
"ndf_clause": "PTO-INST-SCALAR-HL-MADDW"
},
"mnemonic": "HL.MADDW",
"readiness_subjects": [
"ADR-0026",
"ADR-0059",
"ADR-0084"
],
"semantic_tests": [
"PTO-AVS-SCALAR-HL-MADDW-ACCUMULATE-001",
"PTO-AVS-SCALAR-HL-MADDW-HALVES-002"
],
"source": "asl/scalar/alu/HL.MADDW.asl",
"surface": "scalar",
"tests": [
"PTO-AVS-SCALAR-HL-MADDW-ACCUMULATE-001",
"PTO-AVS-SCALAR-HL-MADDW-DECODE-001",
"PTO-AVS-SCALAR-HL-MADDW-HALVES-002"
]
}0.58.5 · Release candidate7dc8b7e5b121d2b2499a2273bebff29e2cd868129c6eaa55469c21915ed4d48b68063c860b0ddd5736dd91da136bb3d35753aef234d65fc1fcf2e37f246a82cc7db76976e1dab230d225fcb34468501e8e88834dasl/scalar/alu/HL.MADDW.aslasl/scalar/alu/HL.MADDW.aslasl/scalar/alu/HL.MADDW.asl