Operands and parameters
RegDst0- low product or accumulator Reg5 destination
RegDst1- high product or accumulator Reg5 destination
SrcD- addend Reg5 source
SrcL- left multiplicand or additive Reg5 source
SrcR- right multiplicand Reg5 source
HL.MADD computes a signed 128-bit product plus a sign-extended XLEN addend and publishes low then high halves.
PTO-SCALAR-HL-MADDhl.madd SrcL, SrcR, SrcD, ->Dst0, Dst1| Field | Bits | Signedness | Architectural role | Encoded zero |
|---|---|---|---|---|
RegDst0 | 5 | encoding-defined | low product or accumulator Reg5 destination | Encoded zero discards the low result. |
RegDst1 | 5 | encoding-defined | high product or accumulator 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'b110 |
| 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'b110"
},
{
"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.madd SrcL, SrcR, SrcD, ->Dst0, Dst1
RegDst0RegDst1SrcDSrcLSrcRThis Operation comes directly from the instruction owner; the page does not rewrite its behavior.
readonly func InstructionContractOperation_HL_MADD() => ScalarOperationbegin return ScalarOperation_HL_MADD;end;readonly func InstructionContractHandler_HL_MADD() => ScalarSemanticHandlerbegin return ScalarHandler_ExecuteScalarMultiplyAddPair;end;pure func InstructionContractAccumulator_HL_MADD( addend: Word, left: Word, right: Word) => DoubleWordbegin let product = MultiplyWideSigned(left, right); return product + SignExtend{PTO_XLEN * 2}(addend);end;
pure func InstructionContractLow_HL_MADD(addend: Word, left: Word, right: Word) => Wordbegin return InstructionContractAccumulator_HL_MADD(addend, left, right)[63:0];end;
pure func InstructionContractHigh_HL_MADD(addend: Word, left: Word, right: Word) => Wordbegin return InstructionContractAccumulator_HL_MADD(addend, left, right)[127:64];end;// PTO-INSTRUCTION: {"assembly":["hl.madd SrcL, SrcR, SrcD, ->Dst0, Dst1"],"block":[],"catalog_indices":[220],"catalog_records":[{"asm":"hl.madd SrcL, SrcR, SrcD, ->Dst0, Dst1","constraints":[],"encoding":[{"index":0,"mask":"0x0600707f07ff","match":"0x00006047000e","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_madd_48_b062d741fd99","length_bits":48,"mnemonic":"HL.MADD","semantic_family":"ALU","semantic_group":"ALU","semantic_handler":"ExecuteScalarMultiplyAddPair","semantic_summary":"HL.MADD computes a signed 128-bit product plus a sign-extended XLEN addend and publishes low then high halves.","status":"accepted"}],"classification":["alu"],"contract":{"block_composition":["none"],"canonical_assembly":["hl.madd 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.madd 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":"low product or accumulator Reg5 destination"},{"field":"RegDst1","role":"high product or accumulator 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 the low result to RegDst0, publish the high result to RegDst1, then advance TPC by six bytes."],"standalone_opcode":true,"state_effects":["Compute the signed 128-bit product of SrcL and SrcR, sign-extend SrcD to 128 bits, and add modulo 2^128.","Snapshot every source and compute the complete 128-bit result before destinations. Publish bits 63:0 to RegDst0, then bits 127:64 to RegDst1. Duplicate destinations are legal; the second high result is final/newest.","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-MADD","mnemonic":"HL.MADD","summary":"HL.MADD computes a signed 128-bit product plus a sign-extended XLEN addend and publishes low then high halves.","surface":"scalar"}// PTO-REVIEW: {"review_method":"formal-definition-read","outcome":"FORMAL-COMPLETE","reviewed_fields":["assembly","encoding","defaults","operation","state","memory","ordering","faults","reserved"]}// DOC-BEGIN: decodereadonly func InstructionContractOperation_HL_MADD() => ScalarOperationbegin return ScalarOperation_HL_MADD;end;// DOC-END: decode// DOC-BEGIN: operationreadonly func InstructionContractHandler_HL_MADD() => ScalarSemanticHandlerbegin return ScalarHandler_ExecuteScalarMultiplyAddPair;end;pure func InstructionContractAccumulator_HL_MADD( addend: Word, left: Word, right: Word) => DoubleWordbegin let product = MultiplyWideSigned(left, right); return product + SignExtend{PTO_XLEN * 2}(addend);end;
pure func InstructionContractLow_HL_MADD(addend: Word, left: Word, right: Word) => Wordbegin return InstructionContractAccumulator_HL_MADD(addend, left, right)[63:0];end;
pure func InstructionContractHigh_HL_MADD(addend: Word, left: Word, right: Word) => Wordbegin return InstructionContractAccumulator_HL_MADD(addend, left, right)[127:64];end;// DOC-END: operation
HL.MADD 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 XLEN 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 XLEN halves, and only afterward performs the destination effects.
RegDst0 field selects the Reg5 target for the low product or accumulator half.RegDst1 field selects the Reg5 target for the high product or accumulator half.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.MADD 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.
No NDF clause is attached to this unit.
9 matching entries
PTO-AVS-SCALAR-HL-MADD-ACCUMULATE-001tests/asl/scalar/alu/HL.MADD/scalar-exec-hl-madd-accumulate-001.aslaf2bb1730414bd4ef8bdf29f6a4e735aa27274bede6f3fcc661c4c09ab2421d4PTO-AVS-SCALAR-HL-MADD-DECODE-001tests/asl/scalar/alu/HL.MADD/scalar-decode-hl-madd-canonical-001.asld2dca0cb9b0c676b7a9048888a76d97eb828d5df7ecf40f198d5bf0844fd728bPTO-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.mdf18d13f735cfaf9f2803c754c5818f4af33d1cc42c489f0d9ce060b07bb3a196{
"classification": [
"alu"
],
"documentation": "docs/scalar/alu/HL.MADD.md",
"id": "PTO-SCALAR-HL-MADD",
"instruction_contract": {
"artifact": "spec/evidence/instruction-contract-closure.json",
"mnemonic": "HL.MADD",
"ndf_clause": "PTO-INST-SCALAR-HL-MADD"
},
"mnemonic": "HL.MADD",
"readiness_subjects": [
"ADR-0026",
"ADR-0059"
],
"semantic_tests": [
"PTO-AVS-SCALAR-HL-MADD-ACCUMULATE-001"
],
"source": "asl/scalar/alu/HL.MADD.asl",
"surface": "scalar",
"tests": [
"PTO-AVS-SCALAR-HL-MADD-ACCUMULATE-001",
"PTO-AVS-SCALAR-HL-MADD-DECODE-001"
]
}0.58.5 · Release candidate7dc8b7e5b121d2b2499a2273bebff29e2cd86812030752d5992bbf9f3d0fa0f0fcf6015588e5e9ae3f82c392804d2b53036bc1ab4f7639446153d9b4764ff05bf3dcbae0b3df06cd4d7e0128671461542ee64479asl/scalar/alu/HL.MADD.aslasl/scalar/alu/HL.MADD.asl