Operands and parameters
RegDst- Reg5 destination or discard
SrcL- left Reg5 source
SrcR- right Reg5 source
SrcRType- right-source transformation selector
shamt- post-transformation logical-left-shift amount
ADD applies the selected right-source transformation before its encoded logical left shift, performs fixed-width addition, and publishes the PTO_XLEN result.
PTO-SCALAR-ADDadd SrcL, SrcR<{.sw,.uw,.neg}><<<shamt>, ->{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 | left Reg5 source | Encoded zero reads the architectural zero GPR. |
SrcR | 5 | encoding-defined | right Reg5 source | Encoded zero reads the architectural zero GPR. |
SrcRType | 2 | encoding-defined | right-source transformation selector | Encoded zero selects .sw and sign-extends SrcR[31:0]. |
shamt | 5 | encoding-defined | post-transformation logical-left-shift amount | Encoded zero performs no shift. |
Loading WaveDrom diagram… The encoding table and WaveJSON remain available below.
| Decoded item | Bit range | Value |
|---|---|---|
| shamt | 31:27 | variable |
| SrcRType | 26:25 | variable |
| SrcR | 24:20 | variable |
| SrcL | 19:15 | variable |
| Constant | 14:12 | 3'b000 |
| RegDst | 11:7 | variable |
| Constant | 6:0 | 7'b0000101 |
{
"reg": [
{
"bits": 7,
"name": "7'b0000101"
},
{
"bits": 5,
"name": "RegDst"
},
{
"bits": 3,
"name": "3'b000"
},
{
"bits": 5,
"name": "SrcL"
},
{
"bits": 5,
"name": "SrcR"
},
{
"bits": 2,
"name": "SrcRType"
},
{
"bits": 5,
"name": "shamt"
}
],
"config": {
"bits": 32,
"fontsize": 13,
"hspace": 900,
"lanes": 1,
"offset": 0
}
}add SrcL, SrcR<{.sw,.uw,.neg}><<<shamt>, ->{t, u, Rd}
RegDstSrcLSrcRSrcRTypeshamtThis Operation comes directly from the instruction owner; the page does not rewrite its behavior.
readonly func InstructionContractOperation_ADD() => ScalarOperationbegin return ScalarOperation_ADD;end;readonly func InstructionContractHandler_ADD() => ScalarSemanticHandlerbegin return ScalarHandler_ScalarBinary;end;
pure func InstructionContractRightModifier_ADD(encoded: bits(2)) => ScalarRightModifierbegin case encoded of when '00' => return ScalarRight_SignedWord; when '01' => return ScalarRight_UnsignedWord; when '10' => return ScalarRight_NegateOrNot; when '11' => return ScalarRight_None; end;end;
pure func InstructionContractPreparedRight_ADD( right: Word, encoded_modifier: bits(2), shift_amount: integer {0..31}) => Wordbegin let modifier = InstructionContractRightModifier_ADD(encoded_modifier); let transformed = ApplyScalarRightModifier(right, modifier, FALSE); let shifted = LSL(transformed, shift_amount); return shifted;end;
pure func InstructionContractResult_ADD( left: Word, right: Word, encoded_modifier: bits(2), shift_amount: integer {0..31}) => Wordbegin let prepared_right = InstructionContractPreparedRight_ADD( right, encoded_modifier, shift_amount); return ScalarBinary(ScalarBinary_ADD, left, prepared_right);end;
pure func InstructionContractIsLogicalFamily_ADD() => booleanbegin return FALSE;end;
pure func InstructionContractIsWordOperation_ADD() => booleanbegin return FALSE;end;// PTO-INSTRUCTION: {"assembly":["add SrcL, SrcR<{.sw,.uw,.neg}><<<shamt>, ->{t, u, Rd}"],"block":[],"catalog_indices":[2],"catalog_records":[{"asm":"add SrcL, SrcR<{.sw,.uw,.neg}><<<shamt>, ->{t, u, Rd}","constraints":[],"encoding":[{"index":0,"mask":"0x0000707f","match":"0x00000005","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},{"name":"SrcRType","pieces":[{"instruction_lsb":25,"value_lsb":0,"width":2}],"signedness":"encoding-defined","width":2},{"name":"shamt","pieces":[{"instruction_lsb":27,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5}],"form_id":"add_32_d04202886d0a","length_bits":32,"mnemonic":"ADD","semantic_family":"ALU","semantic_group":"ALU","semantic_handler":"ScalarBinary","semantic_summary":"ADD applies the selected right-source transformation before its encoded logical left shift, performs fixed-width addition, and publishes the PTO_XLEN result.","status":"accepted"}],"classification":["alu"],"contract":{"block_composition":["none"],"canonical_assembly":["add SrcL, SrcR<{.sw,.uw,.neg}><<<shamt>, ->{t, u, Rd}"],"defaults":["SrcL, SrcR, SrcRType, shamt, and RegDst are required encoded fields; no field can be omitted.","SrcRType=00 selects .sw, SrcRType=01 selects .uw, SrcRType=10 selects .neg, and SrcRType=11 selects no modifier. An omitted assembly suffix encodes SrcRType=11.","Encoded shamt zero performs no shift; every value from 0 through 31 is assigned."],"encoding_class":"standalone-encoded","examples":["add a0, a1, ->a2","add t#1, u#1.neg<<1, ->u","add zero, a0.sw, ->zero"],"exceptions":["ADD raises no arithmetic exception; negation, shifting, and addition wrap modulo 2^PTO_XLEN.","A fixed-bit mismatch or unavailable selected T/U source raises Fault_IllegalInstruction before the destination effect and before TPC advances."],"field_contracts":{},"field_zero_meanings":{"RegDst":"Encoded zero discards the result.","SrcL":"Encoded zero reads the architectural zero GPR.","SrcR":"Encoded zero reads the architectural zero GPR.","SrcRType":"Encoded zero selects .sw and sign-extends SrcR[31:0].","shamt":"Encoded zero performs no shift."},"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 four SrcRType encodings are assigned. The logical family uses .not while the arithmetic family uses .neg; ADD uses .neg.","Every five-bit shamt value from 0 through 31 is legal."],"memory_effects":["none"],"operands":[{"field":"RegDst","role":"Reg5 destination or discard"},{"field":"SrcL","role":"left Reg5 source"},{"field":"SrcR","role":"right Reg5 source"},{"field":"SrcRType","role":"right-source transformation selector"},{"field":"shamt","role":"post-transformation logical-left-shift amount"}],"ordering":["Snapshot both sources before the destination effect so duplicate sources, destination aliases, and queue publication use pre-instruction values.","Publish the result, then advance TPC by four bytes."],"standalone_opcode":true,"state_effects":["Transform SrcR, perform the logical left shift, and add the shifted value to SrcL modulo 2^PTO_XLEN.","Apply the selected SrcRType transformation before the logical left shift. The transformation and shift affect SrcR only; SrcL is unchanged before the final operation.","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, numeric-flag, trap, block, privilege, or control-flow state changes except the successful TPC advance."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-PROFILE-ENCODING"],"id":"PTO-SCALAR-ADD","mnemonic":"ADD","summary":"ADD applies the selected right-source transformation before its encoded logical left shift, performs fixed-width addition, and publishes the PTO_XLEN result.","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-ADD-DECISION-BINDING-001// ndf: kind=contract level=L1 layer=scalar status=accepted// ADD MUST implement the mnemonic-local canonical assembly, encoded// legality, defaults, state and memory effects, ordering, and fault boundaries// declared in this owner. The operation region below is the executable binding// for every accepted decision that names this mnemonic.// NDF-END: PTO-ADD-DECISION-BINDING-001// DOC-BEGIN: decodereadonly func InstructionContractOperation_ADD() => ScalarOperationbegin return ScalarOperation_ADD;end;// DOC-END: decode// DOC-BEGIN: operationreadonly func InstructionContractHandler_ADD() => ScalarSemanticHandlerbegin return ScalarHandler_ScalarBinary;end;
pure func InstructionContractRightModifier_ADD(encoded: bits(2)) => ScalarRightModifierbegin case encoded of when '00' => return ScalarRight_SignedWord; when '01' => return ScalarRight_UnsignedWord; when '10' => return ScalarRight_NegateOrNot; when '11' => return ScalarRight_None; end;end;
pure func InstructionContractPreparedRight_ADD( right: Word, encoded_modifier: bits(2), shift_amount: integer {0..31}) => Wordbegin let modifier = InstructionContractRightModifier_ADD(encoded_modifier); let transformed = ApplyScalarRightModifier(right, modifier, FALSE); let shifted = LSL(transformed, shift_amount); return shifted;end;
pure func InstructionContractResult_ADD( left: Word, right: Word, encoded_modifier: bits(2), shift_amount: integer {0..31}) => Wordbegin let prepared_right = InstructionContractPreparedRight_ADD( right, encoded_modifier, shift_amount); return ScalarBinary(ScalarBinary_ADD, left, prepared_right);end;
pure func InstructionContractIsLogicalFamily_ADD() => booleanbegin return FALSE;end;
pure func InstructionContractIsWordOperation_ADD() => booleanbegin return FALSE;end;// DOC-END: operation
ADD is a standalone 32-bit scalar instruction that prepares its right source, adds it to the unchanged left source modulo 2^PTO_XLEN, and publishes one XLEN result.
The instruction applies the selected SrcRType transformation to SrcR, performs the encoded logical left shift on that transformed value, and only then adds the prepared right value to SrcL.
SrcRType=00 selects signed-word extension, 01 selects unsigned-word extension, 10 selects negation for ADD, and 11 leaves the complete right source unchanged.shamt is a logical left-shift amount from 0 through 31; 0 leaves the transformed value unshifted.Negation, shifting, and addition are fixed-width operations. They wrap modulo 2^PTO_XLEN and do not raise an arithmetic exception.
SrcL and SrcR use the full Reg5 source domain: 0..23 select GPRs, 24..27 select T#1..T#4, and 28..31 select U#1..U#4; temporary sources are read without consumption.RegDst values 1..23 write a GPR, 30 pushes U, 31 pushes T, and 0 plus 24..29 discard the result.Every displayed field is encoded. An omitted assembly modifier denotes SrcRType=11; encoded shamt=0 means no shift rather than an omitted operation.
Both sources are snapshotted before the destination effect, so a destination alias or queue push cannot change either value consumed by the same instruction.
After computing the result, ADD publishes or discards it according to RegDst, then advances TPC by 4 bytes.
ADD does not read or write memory and does not change reservation, descriptor, numeric-status, trap, block, privilege, predicate, or control-flow state beyond the successful TPC advance.
All four SrcRType values and all 32 shift amounts are assigned. A fixed-bit mismatch or an unavailable selected T/U source raises Fault_IllegalInstruction before destination publication and before TPC advances.
This walkthrough illustrates the current owner; it does not replace the normative operation above.
With SrcL=10, SrcR=3, SrcRType=10, and shamt=1, ADD negates the right source, shifts the result left once, and computes 10 + (-6) = 4 modulo 2^PTO_XLEN. If the destination aliases the left GPR, the calculation still uses the original value 10.
Bodies come from owning ASL. Dragging or buttons change only this page-session view order.
ADD MUST implement the mnemonic-local canonical assembly, encoded legality, defaults, state and memory effects, ordering, and fault boundaries declared in this owner. The operation region below is the executable binding for every accepted decision that names this mnemonic.
PTO-ADD-DECISION-BINDING-001asl/scalar/alu/ADD.asl0bf721f111c251ee1a40a9fec927b190803e7ad67908e7957b26d28c567388aa093626128eac8c6ad0bb6a5cfe4c75a2b2cc63ba2cb6b1b9730d7e0b3994214b12 matching entries
PTO-AVS-SCALAR-ADD-ALIASES-001tests/asl/scalar/alu/ADD/scalar-bound-add-aliases-001.asl890100b94f221f517ca831ed6f078cdfb5a9e011fae4145b50cb7252759bba66PTO-AVS-SCALAR-ADD-DECODE-001tests/asl/scalar/alu/ADD/scalar-decode-add-canonical-001.asla33b77a44d8d2718bce72664a128cd913f70b3aa2a45642ba2bd988d1c094772PTO-AVS-SCALAR-ADD-EXECUTION-001tests/asl/scalar/alu/ADD/scalar-exec-add-integer-001.asl92cd919b3d0cec4cb38bb48624ae9cf5273091e0182b94a7c402472febea5151PTO-AVS-SCALAR-ADD-MODIFIER-001tests/asl/scalar/alu/ADD/scalar-exec-add-modifier-001.asl7646f52c9e2b15d4334480f99097dd38a422386b2a2aa1e3de66686d7632af6cPTO-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/ADD.md",
"id": "PTO-SCALAR-ADD",
"instruction_contract": {
"artifact": "spec/evidence/instruction-contract-closure.json",
"mnemonic": "ADD",
"ndf_clause": "PTO-INST-SCALAR-ADD"
},
"mnemonic": "ADD",
"readiness_subjects": [
"ADR-0026",
"ADR-0059",
"ADR-0084"
],
"semantic_tests": [
"PTO-AVS-SCALAR-ADD-ALIASES-001",
"PTO-AVS-SCALAR-ADD-EXECUTION-001",
"PTO-AVS-SCALAR-ADD-MODIFIER-001"
],
"source": "asl/scalar/alu/ADD.asl",
"surface": "scalar",
"tests": [
"PTO-AVS-SCALAR-ADD-ALIASES-001",
"PTO-AVS-SCALAR-ADD-DECODE-001",
"PTO-AVS-SCALAR-ADD-EXECUTION-001",
"PTO-AVS-SCALAR-ADD-MODIFIER-001"
]
}0.58.5 · Release candidate7dc8b7e5b121d2b2499a2273bebff29e2cd868120bf721f111c251ee1a40a9fec927b190803e7ad67908e7957b26d28c567388aa963bc15b254adf05922556332e225209edd0156cf2e12cbc798a3da72a4d1b1casl/scalar/alu/ADD.aslasl/scalar/alu/ADD.aslasl/scalar/alu/ADD.asl