Operands and parameters
SrcL- Reg5 atomic address source
SrcR- Reg5 atomic operand source
RegDst- Reg5 old-value destination
aq- acquire ordering bit
rl- release ordering bit
far- flat-address routing hint
LW.SMAX atomically stores the width-sized signed maximum and publishes the prior memory value.
PTO-SCALAR-LW-SMAXlw.smax [SrcL], SrcR, ->Rdlw.smax.aq [SrcL], SrcR, ->Rdlw.smax.rl [SrcL], SrcR, ->Rdlw.smax.f [SrcL], SrcR, ->Rdlw.smax.aqrl [SrcL], SrcR, ->Rdlw.smax.aqf [SrcL], SrcR, ->Rdlw.smax.rlf [SrcL], SrcR, ->Rdlw.smax.aqrlf [SrcL], SrcR, ->Rd| Field | Bits | Signedness | Architectural role | Encoded zero |
|---|---|---|---|---|
RegDst | 5 | encoding-defined | Reg5 old-value destination | Encoded zero discards the published old value. |
SrcL | 5 | encoding-defined | Reg5 atomic address source | Encoded zero reads the architectural zero register as the atomic address. |
SrcR | 5 | encoding-defined | Reg5 atomic operand source | Encoded zero supplies numeric zero as the atomic operand. |
aq | 1 | encoding-defined | acquire ordering bit | Encoded zero disables acquire ordering. |
far | 1 | encoding-defined | flat-address routing hint | Encoded zero selects the default flat-address route. |
rl | 1 | encoding-defined | release ordering bit | Encoded zero disables release ordering. |
Loading WaveDrom diagram… The encoding table and WaveJSON remain available below.
| Decoded item | Bit range | Value |
|---|---|---|
| Constant | 31:28 | 4'b0100 |
| far | 27 | variable |
| aq | 26 | variable |
| rl | 25 | variable |
| SrcR | 24:20 | variable |
| SrcL | 19:15 | variable |
| Constant | 14:12 | 3'b010 |
| RegDst | 11:7 | variable |
| Constant | 6:0 | 7'b0001011 |
{
"reg": [
{
"bits": 7,
"name": "7'b0001011"
},
{
"bits": 5,
"name": "RegDst"
},
{
"bits": 3,
"name": "3'b010"
},
{
"bits": 5,
"name": "SrcL"
},
{
"bits": 5,
"name": "SrcR"
},
{
"bits": 1,
"name": "rl"
},
{
"bits": 1,
"name": "aq"
},
{
"bits": 1,
"name": "far"
},
{
"bits": 4,
"name": "4'b0100"
}
],
"config": {
"bits": 32,
"fontsize": 13,
"hspace": 900,
"lanes": 1,
"offset": 0
}
}lw.smax<.{aq, rl, f, aqrl, aqf, rlf, aqrlf}> [SrcL], SrcR, {->t, ->u, ->Rd}
SrcLSrcRRegDstaqrlfarThis Operation comes directly from the instruction owner; the page does not rewrite its behavior.
readonly func InstructionContractOperation_LW_SMAX() => ScalarOperationbegin return ScalarOperation_LW_SMAX;end;readonly func InstructionContractHandler_LW_SMAX() => ScalarSemanticHandlerbegin return ScalarHandler_AtomicReadModifyWrite;end;
pure func InstructionContractAtomicOperation_LW_SMAX() => AtomicOperationbegin return Atomic_SMAX;end;
pure func InstructionContractAtomicSizeBytes_LW_SMAX() => integer {1,2,4,8}begin return 4;end;
pure func InstructionContractPublishesOldValue_LW_SMAX() => booleanbegin return TRUE;end;
pure func InstructionContractSignExtendsOldValue_LW_SMAX() => booleanbegin return TRUE;end;// PTO-INSTRUCTION: {"assembly":["lw.smax [SrcL], SrcR, ->Rd","lw.smax.aq [SrcL], SrcR, ->Rd","lw.smax.rl [SrcL], SrcR, ->Rd","lw.smax.f [SrcL], SrcR, ->Rd","lw.smax.aqrl [SrcL], SrcR, ->Rd","lw.smax.aqf [SrcL], SrcR, ->Rd","lw.smax.rlf [SrcL], SrcR, ->Rd","lw.smax.aqrlf [SrcL], SrcR, ->Rd"],"block":[],"catalog_indices":[345],"catalog_records":[{"asm":"lw.smax<.{aq, rl, f, aqrl, aqf, rlf, aqrlf}> [SrcL], SrcR, {->t, ->u, ->Rd}","constraints":[],"encoding":[{"index":0,"mask":"0xf000707f","match":"0x4000200b","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":"aq","pieces":[{"instruction_lsb":26,"value_lsb":0,"width":1}],"signedness":"encoding-defined","width":1},{"name":"far","pieces":[{"instruction_lsb":27,"value_lsb":0,"width":1}],"signedness":"encoding-defined","width":1},{"name":"rl","pieces":[{"instruction_lsb":25,"value_lsb":0,"width":1}],"signedness":"encoding-defined","width":1}],"form_id":"lw_smax_32_838b8c673c91","length_bits":32,"mnemonic":"LW.SMAX","semantic_family":"AMO","semantic_group":"AMO","semantic_handler":"AtomicReadModifyWrite","semantic_summary":"LW.SMAX atomically stores the width-sized signed maximum and publishes the prior memory value.","status":"accepted"}],"classification":["amo"],"contract":{"block_composition":["none"],"canonical_assembly":["lw.smax [SrcL], SrcR, ->Rd","lw.smax.aq [SrcL], SrcR, ->Rd","lw.smax.rl [SrcL], SrcR, ->Rd","lw.smax.f [SrcL], SrcR, ->Rd","lw.smax.aqrl [SrcL], SrcR, ->Rd","lw.smax.aqf [SrcL], SrcR, ->Rd","lw.smax.rlf [SrcL], SrcR, ->Rd","lw.smax.aqrlf [SrcL], SrcR, ->Rd"],"defaults":["SrcL, SrcR, and RegDst are required Reg5 fields. Encoded source zero reads the architectural zero register; encoded destination zero discards the published old value.","aq=0 and rl=0 select relaxed ordering. aq=1 selects acquire, rl=1 selects release, and aq=1 with rl=1 selects acquire-release.","far=0 selects the default flat-address route. far=1 is a profile routing hint; the reference profile preserves the same architectural address and atomic result."],"encoding_class":"standalone-encoded","examples":["lw.smax [a0], a1, ->a2","lw.smax.aqrl [t#1], u#1, ->t","lw.smax.f [sp], a0, ->u"],"exceptions":["The effective address must be aligned to 4 bytes. Alignment, translation, and permission checks occur before effects in that precedence order and report the original address.","Read and write access probes both complete before the memory load or store, and both probes must resolve to the same translated address.","On a fault, the instruction publishes no destination, performs no load, store, event, reservation update, or TPC advance. Trap entry saves the original TPC and recovery restores that TPC for full reissue.","An undecodable or operand-illegal form raises Fault_IllegalInstruction before effects."],"field_contracts":{},"field_zero_meanings":{"RegDst":"Encoded zero discards the published old value.","SrcL":"Encoded zero reads the architectural zero register as the atomic address.","SrcR":"Encoded zero supplies numeric zero as the atomic operand.","aq":"Encoded zero disables acquire ordering.","far":"Encoded zero selects the default flat-address route.","rl":"Encoded zero disables release ordering."},"legality":["All 32 Reg5 source encodings are assigned: 0..23 select absolute GPRs, 24..27 select T#1..T#4, and 28..31 select U#1..U#4.","All 32 Reg5 destination encodings are assigned. Destination code 0 and destination codes 24..29 discard. Destination code 30 pushes U, destination code 31 pushes T, and codes 1..23 write the named absolute GPR.","The effective address must be aligned to 4 bytes. aq, rl, and far have no reserved combinations."],"memory_effects":["Atomically read one aligned 4-byte little-endian value, compute the width-sized signed maximum, and write one 4-byte result to the same location.","On success, record one atomic memory event. A completed overlapping write invalidates the overlapping local reservation; a nonoverlapping reservation remains valid.","The published old value is sign-extended from 32 bits to XLEN."],"operands":[{"field":"SrcL","role":"Reg5 atomic address source"},{"field":"SrcR","role":"Reg5 atomic operand source"},{"field":"RegDst","role":"Reg5 old-value destination"},{"field":"aq","role":"acquire ordering bit"},{"field":"rl","role":"release ordering bit"},{"field":"far","role":"flat-address routing hint"}],"ordering":["aq=0,rl=0 records relaxed ordering; aq=1,rl=0 acquire; aq=0,rl=1 release; aq=1,rl=1 acquire-release.","far changes only the route hint in the reference profile and does not change ordering, address arithmetic, or the read-modify-write result."],"standalone_opcode":true,"state_effects":["Snapshot SrcL and SrcR before every memory or destination effect, so GPR and T/U source aliases observe the pre-instruction values.","LW.SMAX computes the signed maximum at 32-bit width and publishes the prior memory value only after a successful atomic commit.","The published old value is sign-extended from 32 bits to XLEN.","Successful execution advances TPC by four bytes. On a fault, the instruction does not retire; trap entry saves the original TPC, redirects the live TPC to the trap vector, and recovery restores that TPC for full reissue."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-PROFILE-ENCODING"],"id":"PTO-SCALAR-LW-SMAX","mnemonic":"LW.SMAX","summary":"LW.SMAX atomically stores the width-sized signed maximum and publishes the prior memory value.","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_LW_SMAX() => ScalarOperationbegin return ScalarOperation_LW_SMAX;end;// DOC-END: decode// DOC-BEGIN: operationreadonly func InstructionContractHandler_LW_SMAX() => ScalarSemanticHandlerbegin return ScalarHandler_AtomicReadModifyWrite;end;
pure func InstructionContractAtomicOperation_LW_SMAX() => AtomicOperationbegin return Atomic_SMAX;end;
pure func InstructionContractAtomicSizeBytes_LW_SMAX() => integer {1,2,4,8}begin return 4;end;
pure func InstructionContractPublishesOldValue_LW_SMAX() => booleanbegin return TRUE;end;
pure func InstructionContractSignExtendsOldValue_LW_SMAX() => booleanbegin return TRUE;end;// DOC-END: operation
LW.SMAX atomically applies signed maximum to one word, stores the result, and publishes the prior memory value.
The ASL DOC contract selects ScalarHandler_AtomicReadModifyWrite with an access width of 4 bytes.
Read and write access are preflighted before the same-location atomic read-modify-write is allowed to commit.
SrcL carries the Reg5 atomic address source; SrcR carries the Reg5 atomic operand source; RegDst carries the Reg5 old-value destination; aq carries the acquire ordering bit; rl carries the release ordering bit; far carries the flat-address routing hint.
aq and rl select relaxed, acquire, release, or acquire-release ordering; far is a profile routing hint and does not change the architectural result in the reference profile.
The old memory value is published only after the read-modify-write commits; source aliases are captured before any destination effect.
A completed write invalidates an overlapping local 64-byte-line reservation, preserves a nonoverlapping reservation, and advances TPC by 4 bytes.
The effective address must be aligned to 4 bytes. Alignment, translation, and permission checks precede architectural effects.
A failing preflight publishes no destination, memory event, reservation update, or retirement effect; the saved original TPC supports full reissue.
This example only shows one accepted spelling; the generated contract below remains authoritative.
For a first reading, use lw.smax [SrcL], SrcR, ->Rd and then vary only the ordering or route modifiers described above.
Bodies come from owning ASL. Dragging or buttons change only this page-session view order.
No NDF clause is attached to this unit.
12 matching entries
PTO-AVS-SCALAR-LW-SMAX-DECODE-001tests/asl/scalar/amo/LW.SMAX/scalar-decode-lw-smax-canonical-001.asl8918d70f491e2faa71e5cfe790fba3fe14825f2c967a5b3aeb5d3e356c5b22a2PTO-AVS-SCALAR-LW-SMAX-FORMS-001tests/asl/scalar/amo/LW.SMAX/scalar-bound-lw-smax-forms-001.aslefdc43ee7fb35973d46039f760ffded0f4eddcbc369f7d9412ffe860beb87dd3PTO-AVS-SCALAR-LW-SMAX-PRECISE-001tests/asl/scalar/amo/LW.SMAX/scalar-fault-lw-smax-precise-001.aslf523374d70b3574629dad674de9cd583c4caab134c8b3db72af84a37f6fe263bPTO-AVS-SCALAR-LW-SMAX-RESULT-001tests/asl/scalar/amo/LW.SMAX/scalar-exec-lw-smax-result-001.asl9d550450c36f6213a20c9a01d1bba767afc6c5eedfa36e15ce5aa34dac4a55c4PTO-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-0020…
ADR-0020docs/status/decisions/0020-production-memory-events-and-atomic-corners.md215b18f05d0b53120949373fce6a5ce22f7ab534fb22df24743a9b2b4beb2decLoading ADR-0030…
ADR-0030docs/status/decisions/0030-scalar-amo-totality-and-reservation.md110bd32b3004a8383913ac6053cc7d0a1d0b8e03e3ef7c47d83292c94a6a17ebLoading ADR-0059…
ADR-0059docs/status/decisions/0059-mnemonic-field-encoding-closure.mdf18d13f735cfaf9f2803c754c5818f4af33d1cc42c489f0d9ce060b07bb3a196{
"classification": [
"amo"
],
"documentation": "docs/scalar/amo/LW.SMAX.md",
"id": "PTO-SCALAR-LW-SMAX",
"instruction_contract": {
"artifact": "spec/evidence/instruction-contract-closure.json",
"mnemonic": "LW.SMAX",
"ndf_clause": "PTO-INST-SCALAR-LW-SMAX"
},
"mnemonic": "LW.SMAX",
"readiness_subjects": [
"ADR-0020",
"ADR-0030",
"ADR-0059"
],
"semantic_tests": [
"PTO-AVS-SCALAR-LW-SMAX-FORMS-001",
"PTO-AVS-SCALAR-LW-SMAX-PRECISE-001",
"PTO-AVS-SCALAR-LW-SMAX-RESULT-001"
],
"source": "asl/scalar/amo/LW.SMAX.asl",
"surface": "scalar",
"tests": [
"PTO-AVS-SCALAR-LW-SMAX-DECODE-001",
"PTO-AVS-SCALAR-LW-SMAX-FORMS-001",
"PTO-AVS-SCALAR-LW-SMAX-PRECISE-001",
"PTO-AVS-SCALAR-LW-SMAX-RESULT-001"
]
}0.58.5 · Release candidate7dc8b7e5b121d2b2499a2273bebff29e2cd86812f027cb427531530427230dceb38a022da15fb0956de0b1ccaa96d8994d19f9e50d2eb0f005d7401b5510e058613247e6d91d8c0c66298623a02d866e78e03a13asl/scalar/amo/LW.SMAX.aslasl/scalar/amo/LW.SMAX.asl