操作数与参数
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
ADDW applies the selected right-source transformation before its encoded logical left shift, performs fixed-width word addition, and publishes the low 32-bit result sign-extended to XLEN.
PTO-SCALAR-ADDWaddw SrcL, SrcR<{.sw,.uw,.neg}><<<shamt>, ->{t, u, Rd}| 字段 | 位宽 | 有符号性 | 架构角色 | 编码零 |
|---|---|---|---|---|
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'b0100101 |
{
"reg": [
{
"bits": 7,
"name": "7'b0100101"
},
{
"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
}
}addw SrcL, SrcR<{.sw,.uw,.neg}><<<shamt>, ->{t, u, Rd}
RegDstSrcLSrcRSrcRTypeshamt下面是该指令所有者中的 Operation;页面没有重写这段行为。
readonly func InstructionContractOperation_ADDW() => ScalarOperationbegin return ScalarOperation_ADDW;end;readonly func InstructionContractHandler_ADDW() => ScalarSemanticHandlerbegin return ScalarHandler_ScalarBinaryW;end;
pure func InstructionContractRightModifier_ADDW(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_ADDW( right: Word, encoded_modifier: bits(2), shift_amount: integer {0..31}) => Wordbegin let modifier = InstructionContractRightModifier_ADDW(encoded_modifier); let transformed = ApplyScalarRightModifier(right, modifier, FALSE); let shifted = LSL(transformed, shift_amount); return shifted;end;
pure func InstructionContractResult_ADDW( left: Word, right: Word, encoded_modifier: bits(2), shift_amount: integer {0..31}) => Wordbegin let prepared_right = InstructionContractPreparedRight_ADDW( right, encoded_modifier, shift_amount); return ScalarBinaryW(ScalarBinary_ADD, left, prepared_right);end;
pure func InstructionContractIsLogicalFamily_ADDW() => booleanbegin return FALSE;end;
pure func InstructionContractIsWordOperation_ADDW() => booleanbegin return TRUE;end;// PTO-INSTRUCTION: {"assembly":["addw SrcL, SrcR<{.sw,.uw,.neg}><<<shamt>, ->{t, u, Rd}"],"block":[],"catalog_indices":[6],"catalog_records":[{"asm":"addw SrcL, SrcR<{.sw,.uw,.neg}><<<shamt>, ->{t, u, Rd}","constraints":[],"encoding":[{"index":0,"mask":"0x0000707f","match":"0x00000025","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":"addw_32_a27109fe30fc","length_bits":32,"mnemonic":"ADDW","semantic_family":"ALU","semantic_group":"ALU","semantic_handler":"ScalarBinaryW","semantic_summary":"ADDW applies the selected right-source transformation before its encoded logical left shift, performs fixed-width word addition, and publishes the low 32-bit result sign-extended to XLEN.","status":"accepted"}],"classification":["alu"],"contract":{"block_composition":["none"],"canonical_assembly":["addw 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":["addw a0, a1, ->a2","addw t#1, u#1.neg<<1, ->u","addw zero, a0.sw, ->zero"],"exceptions":["ADDW raises no arithmetic exception; the word operation keeps its low 32-bit result and sign-extends it to 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; ADDW 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, add SrcL at 32-bit width modulo 2^32, and sign-extend the low 32-bit result to 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-ADDW","mnemonic":"ADDW","summary":"ADDW applies the selected right-source transformation before its encoded logical left shift, performs fixed-width word addition, and publishes the low 32-bit result 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"]}// DOC-BEGIN: decodereadonly func InstructionContractOperation_ADDW() => ScalarOperationbegin return ScalarOperation_ADDW;end;// DOC-END: decode// DOC-BEGIN: operationreadonly func InstructionContractHandler_ADDW() => ScalarSemanticHandlerbegin return ScalarHandler_ScalarBinaryW;end;
pure func InstructionContractRightModifier_ADDW(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_ADDW( right: Word, encoded_modifier: bits(2), shift_amount: integer {0..31}) => Wordbegin let modifier = InstructionContractRightModifier_ADDW(encoded_modifier); let transformed = ApplyScalarRightModifier(right, modifier, FALSE); let shifted = LSL(transformed, shift_amount); return shifted;end;
pure func InstructionContractResult_ADDW( left: Word, right: Word, encoded_modifier: bits(2), shift_amount: integer {0..31}) => Wordbegin let prepared_right = InstructionContractPreparedRight_ADDW( right, encoded_modifier, shift_amount); return ScalarBinaryW(ScalarBinary_ADD, left, prepared_right);end;
pure func InstructionContractIsLogicalFamily_ADDW() => booleanbegin return FALSE;end;
pure func InstructionContractIsWordOperation_ADDW() => booleanbegin return TRUE;end;// DOC-END: operation
ADDW 是一条 32 位标量 ALU 指令。它按照低 32 位字,再符号扩展到 XLEN结果规则执行加法;当前指令契约定义结果发布路径以及任何额外状态效果。
执行时先对编码输入做快照,然后按照低 32 位字,再符号扩展到 XLEN结果规则执行加法,最后才产生目标效果。
SrcRType 先转换右源;shamt 再对转换后的值执行逻辑左移,随后才进行算术或逻辑操作。RegDst 是 5 位字段,选择 Reg5 结果目标,或丢弃结果。SrcL 是 5 位字段,通过 Reg5 选择左操作数。SrcR 是 5 位字段,通过 Reg5 选择右操作数。SrcRType 是 2 位字段,选择应用到右源的转换。shamt 是 5 位字段,编码右源转换后执行的逻辑左移量。这些角色来自当前指令契约;T/U 源只被读取和快照,不会因源选择而出队。编码零的精确含义列在下方生成的默认值章节中。
所有标量源都在目标效果前完成快照。完成后的值随后通过 RegDst 按当前标量目标映射发布。
该 ALU 操作不产生内存效果。成功完成架构效果后,TPC 前进 4 字节。
该操作不会产生隐藏的标量发布目标或隐式内存访问。架构变化仅限于当前契约列出的状态效果。
固定宽度算术按当前操作规则回绕,不产生算术异常;固定编码位不匹配或所选 T/U 源不可用时,会在结果发布和 TPC 前进之前触发 Fault_IllegalInstruction。
下方生成的合法性表是已分配字段值、保留编码和目标丢弃编码的权威说明。解码与源可用性检查先于架构效果完成。
本示例只用于演示当前 ASL 所有者,不替代规范操作。
以一个小型 ADDW 示例说明:SrcL=7、SrcR=3、SrcRType=11 且 shamt=0 产生 10。
正文来自 owning ASL。拖拽或按钮只临时改变当前页面显示顺序。
No NDF clause is attached to this unit.
10 matching entries
PTO-AVS-SCALAR-ADDW-ALIASES-001tests/asl/scalar/alu/ADDW/scalar-bound-addw-aliases-001.aslc2973a1b2d879c1d1cb8d892b909dacf16c648a142d5a30b44932e04b935a555PTO-AVS-SCALAR-ADDW-DECODE-001tests/asl/scalar/alu/ADDW/scalar-decode-addw-canonical-001.asladb65decb8bf060883b3e5d965cbae040aebf3629faa61cac1b283453b183864PTO-AVS-SCALAR-ADDW-MODIFIER-001tests/asl/scalar/alu/ADDW/scalar-exec-addw-modifier-001.aslf05f6658641b77dbc2e1c17c24bc227deba9a6274a0e91d679d8f45695bf7815PTO-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/ADDW.md",
"id": "PTO-SCALAR-ADDW",
"instruction_contract": {
"artifact": "spec/evidence/instruction-contract-closure.json",
"mnemonic": "ADDW",
"ndf_clause": "PTO-INST-SCALAR-ADDW"
},
"mnemonic": "ADDW",
"readiness_subjects": [
"ADR-0026",
"ADR-0059"
],
"semantic_tests": [
"PTO-AVS-SCALAR-ADDW-ALIASES-001",
"PTO-AVS-SCALAR-ADDW-MODIFIER-001"
],
"source": "asl/scalar/alu/ADDW.asl",
"surface": "scalar",
"tests": [
"PTO-AVS-SCALAR-ADDW-ALIASES-001",
"PTO-AVS-SCALAR-ADDW-DECODE-001",
"PTO-AVS-SCALAR-ADDW-MODIFIER-001"
]
}0.58.5 · 候选发布7dc8b7e5b121d2b2499a2273bebff29e2cd86812aca253001ed04e16ce1e3c4d1ef9e5fde0769b9710e3ae78a8859e212fb4e1433e03e923040fd5900030890b7da8b1ac5f23b7ea88c0eaf44415acc0fadcf17aasl/scalar/alu/ADDW.aslasl/scalar/alu/ADDW.asl