操作数与参数
SrcL- Reg5 atomic address source
SrcR- Reg5 expected byte source
SrcD- Reg5 desired byte source
RegDst- Reg5 old-value destination
aq- acquire ordering bit
rl- release ordering bit
far- flat-address routing hint
HL.CASB atomically compares and conditionally replaces one byte, then publishes the prior value.
PTO-SCALAR-HL-CASBhl.casb [SrcL], SrcR, SrcD, ->Rdhl.casb.aq [SrcL], SrcR, SrcD, ->Rdhl.casb.rl [SrcL], SrcR, SrcD, ->Rdhl.casb.f [SrcL], SrcR, SrcD, ->Rdhl.casb.aqrl [SrcL], SrcR, SrcD, ->Rdhl.casb.aqf [SrcL], SrcR, SrcD, ->Rdhl.casb.rlf [SrcL], SrcR, SrcD, ->Rdhl.casb.aqrlf [SrcL], SrcR, SrcD, ->Rd| 字段 | 位宽 | 有符号性 | 架构角色 | 编码零 |
|---|---|---|---|---|
RegDst | 5 | encoding-defined | Reg5 old-value destination | Encoded zero discards the prior value. |
SrcD | 5 | encoding-defined | Reg5 desired byte source | Encoded zero supplies numeric zero as the desired value. |
SrcL | 5 | encoding-defined | Reg5 atomic address source | Encoded zero reads the architectural zero register as the address. |
SrcR | 5 | encoding-defined | Reg5 expected byte source | Encoded zero supplies numeric zero as the expected value. |
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 | 47:44 | 4'b0000 |
| far | 43 | variable |
| aq | 42 | variable |
| rl | 41 | variable |
| SrcR | 40:36 | variable |
| SrcL | 35:31 | variable |
| Constant | 30:28 | 3'b110 |
| RegDst | 27:23 | variable |
| Constant | 22:11 | 12'b000101100000 |
| SrcD | 10:6 | variable |
| Constant | 5:0 | 6'b001110 |
{
"reg": [
{
"bits": 6,
"name": "6'b001110"
},
{
"bits": 5,
"name": "SrcD"
},
{
"bits": 12,
"name": "12'b000101100000"
},
{
"bits": 5,
"name": "RegDst"
},
{
"bits": 3,
"name": "3'b110"
},
{
"bits": 5,
"name": "SrcL"
},
{
"bits": 5,
"name": "SrcR"
},
{
"bits": 1,
"name": "rl"
},
{
"bits": 1,
"name": "aq"
},
{
"bits": 1,
"name": "far"
},
{
"bits": 4,
"name": "4'b0000"
}
],
"config": {
"bits": 48,
"fontsize": 13,
"hspace": 900,
"lanes": 2,
"offset": 0
}
}hl.casb<.{aq, rl, f, aqrl, aqf, rlf, aqrlf}> [SrcL], SrcR, SrcD, ->{t, u, Rd}
SrcLSrcRSrcDRegDstaqrlfar下面是该指令所有者中的 Operation;页面没有重写这段行为。
readonly func InstructionContractOperation_HL_CASB() => ScalarOperationbegin return ScalarOperation_HL_CASB;end;readonly func InstructionContractHandler_HL_CASB() => ScalarSemanticHandlerbegin return ScalarHandler_CompareAndSwap;end;
pure func InstructionContractCompareSizeBytes_HL_CASB() => integer {1,2,4,8}begin return 1;end;
pure func InstructionContractHasFarField_HL_CASB() => booleanbegin return TRUE;end;
pure func InstructionContractZeroExtendsOldValue_HL_CASB() => booleanbegin return TRUE;end;
pure func InstructionContractSignExtendsOldValue_HL_CASB() => booleanbegin return FALSE;end;// PTO-INSTRUCTION: {"assembly":["hl.casb [SrcL], SrcR, SrcD, ->Rd","hl.casb.aq [SrcL], SrcR, SrcD, ->Rd","hl.casb.rl [SrcL], SrcR, SrcD, ->Rd","hl.casb.f [SrcL], SrcR, SrcD, ->Rd","hl.casb.aqrl [SrcL], SrcR, SrcD, ->Rd","hl.casb.aqf [SrcL], SrcR, SrcD, ->Rd","hl.casb.rlf [SrcL], SrcR, SrcD, ->Rd","hl.casb.aqrlf [SrcL], SrcR, SrcD, ->Rd"],"block":[],"catalog_indices":[123],"catalog_records":[{"asm":"hl.casb<.{aq, rl, f, aqrl, aqf, rlf, aqrlf}> [SrcL], SrcR, SrcD, ->{t, u, Rd}","constraints":[],"encoding":[{"index":0,"mask":"0xf000707ff83f","match":"0x0000600b000e","width_bits":48}],"encoding_kind":"HL48","fields":[{"name":"RegDst","pieces":[{"instruction_lsb":23,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5},{"name":"SrcD","pieces":[{"instruction_lsb":6,"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},{"name":"aq","pieces":[{"instruction_lsb":42,"value_lsb":0,"width":1}],"signedness":"encoding-defined","width":1},{"name":"far","pieces":[{"instruction_lsb":43,"value_lsb":0,"width":1}],"signedness":"encoding-defined","width":1},{"name":"rl","pieces":[{"instruction_lsb":41,"value_lsb":0,"width":1}],"signedness":"encoding-defined","width":1}],"form_id":"hl_casb_48_21fb578617a8","length_bits":48,"mnemonic":"HL.CASB","semantic_family":"AMO","semantic_group":"AMO","semantic_handler":"CompareAndSwap","semantic_summary":"HL.CASB atomically compares and conditionally replaces one byte, then publishes the prior value.","status":"accepted"}],"classification":["amo"],"contract":{"block_composition":["none"],"canonical_assembly":["hl.casb [SrcL], SrcR, SrcD, ->Rd","hl.casb.aq [SrcL], SrcR, SrcD, ->Rd","hl.casb.rl [SrcL], SrcR, SrcD, ->Rd","hl.casb.f [SrcL], SrcR, SrcD, ->Rd","hl.casb.aqrl [SrcL], SrcR, SrcD, ->Rd","hl.casb.aqf [SrcL], SrcR, SrcD, ->Rd","hl.casb.rlf [SrcL], SrcR, SrcD, ->Rd","hl.casb.aqrlf [SrcL], SrcR, SrcD, ->Rd"],"defaults":["SrcL, SrcR, SrcD, and RegDst are required Reg5 fields. Encoded source zero reads the architectural zero register; encoded destination zero discards the 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 address and atomic result."],"encoding_class":"standalone-encoded","examples":["hl.casb [a0], a1, a2, ->a3","hl.casb.aqrlf [t#1], u#1, a0, ->u"],"exceptions":["Every byte address is naturally aligned. Alignment, read translation/permission, write translation/permission, and translated-address equality are checked before effects.","On a fault, no destination, memory write, event, reservation update, or TPC advance occurs. Trap entry saves the original TPC and recovery restores it for full reissue.","An undecodable fixed-bit pattern raises Fault_IllegalInstruction before effects. All explicit field values are assigned."],"field_contracts":{},"field_zero_meanings":{"RegDst":"Encoded zero discards the prior value.","SrcL":"Encoded zero reads the architectural zero register as the address.","SrcR":"Encoded zero supplies numeric zero as the expected value.","SrcD":"Encoded zero supplies numeric zero as the desired value.","aq":"Encoded zero disables acquire ordering.","rl":"Encoded zero disables release ordering.","far":"Encoded zero selects the default flat-address route."},"legality":["All 32 SrcL, SrcR, and SrcD Reg5 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 RegDst encodings are assigned. Code 0 and codes 24..29 discard, code 30 pushes U, code 31 pushes T, and codes 1..23 write the named absolute GPR.","All aq, rl, and far combinations are assigned.","Every byte address is naturally aligned."],"memory_effects":["After aligned read and write preflight identify the same translated location, atomically read one 1-byte byte and compare it with SrcR truncated to 1 bytes.","On equality, store SrcD truncated to 1 bytes and set write_performed in the atomic event. On mismatch, preserve memory and emit an ordered atomic event with write_performed false.","Only a successful overlapping write invalidates the local 64-byte-line reservation; mismatch and nonoverlap preserve it.","The 8-bit old value is zero-extended to XLEN."],"operands":[{"field":"SrcL","role":"Reg5 atomic address source"},{"field":"SrcR","role":"Reg5 expected byte source"},{"field":"SrcD","role":"Reg5 desired byte 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 for both match and mismatch.","far changes only the route hint in the reference profile."],"standalone_opcode":true,"state_effects":["Snapshot SrcL, SrcR, and SrcD before any memory or destination effect.","Publish the prior value after every nonfaulting match or mismatch; publish no value on fault.","The 8-bit old value is zero-extended to XLEN.","Successful execution advances TPC by 6 bytes. A fault saves and later restores the original TPC for full reissue."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-PROFILE-ENCODING"],"id":"PTO-SCALAR-HL-CASB","mnemonic":"HL.CASB","summary":"HL.CASB atomically compares and conditionally replaces one byte, then publishes the prior 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_HL_CASB() => ScalarOperationbegin return ScalarOperation_HL_CASB;end;// DOC-END: decode// DOC-BEGIN: operationreadonly func InstructionContractHandler_HL_CASB() => ScalarSemanticHandlerbegin return ScalarHandler_CompareAndSwap;end;
pure func InstructionContractCompareSizeBytes_HL_CASB() => integer {1,2,4,8}begin return 1;end;
pure func InstructionContractHasFarField_HL_CASB() => booleanbegin return TRUE;end;
pure func InstructionContractZeroExtendsOldValue_HL_CASB() => booleanbegin return TRUE;end;
pure func InstructionContractSignExtendsOldValue_HL_CASB() => booleanbegin return FALSE;end;// DOC-END: operation
HL.CASB 把 SrcL 指向的字节与 SrcR 进行原子比较;相等时写入 SrcD,而两条路径都会发布先前的 8 位值。
ASL DOC 契约选择 ScalarHandler_CompareAndSwap,访问宽度为 1 字节。
匹配与不匹配都会发出一个带排序属性的原子事件;只有匹配路径会把写入标记为已执行。
SrcL 承载 Reg5 原子地址源;SrcR 承载 Reg5 期望字节源;SrcD 承载 Reg5 目标字节源;RegDst 承载 Reg5 旧值目的地;aq 承载获取排序位;rl 承载释放排序位;far 承载平坦地址路由提示。
aq 与 rl 选择宽松、获取、释放或获取-释放排序;far 是配置档路由提示,在参考配置档中不改变架构结果。
预检成功后,即使比较不匹配也会发布旧值;只有相等时内存才会改变。
完成的写入会使重叠的本地 64 字节缓存行保留失效,保留不重叠的保留,并让 TPC 前进 6 字节。
每个字节地址都天然对齐。对齐、地址翻译和权限检查都先于架构效果。
预检失败时不会发布目的值、内存事件、保留更新或退役效果;保存的原始 TPC 支持完整重新执行。
本示例只展示一种已接受写法;下方生成的契约仍是权威来源。
初次阅读可从 hl.casb [SrcL], SrcR, SrcD, ->Rd 开始,再只改变上文说明的排序或路由修饰位。
正文来自 owning ASL。拖拽或按钮只临时改变当前页面显示顺序。
No NDF clause is attached to this unit.
12 matching entries
PTO-AVS-SCALAR-HL-CASB-DECODE-001tests/asl/scalar/amo/HL.CASB/scalar-decode-hl-casb-canonical-001.asl0fe42989ee795be24f5d1b5a1002018b7b3e7a59cdd0e1fd07e519805ec38602PTO-AVS-SCALAR-HL-CASB-MATCH-001tests/asl/scalar/amo/HL.CASB/scalar-exec-hl-casb-match-001.asld7364b3959d4ad4134a74bca90ea61a3bf31c86a66b90d9190bc087cf7d6c2f4PTO-AVS-SCALAR-HL-CASB-MISMATCH-001tests/asl/scalar/amo/HL.CASB/scalar-bound-hl-casb-mismatch-001.aslb43c8c76db3cef5bfb1a53b2c4481ac2c868e7d797340886607e178f4a51dc67PTO-AVS-SCALAR-HL-CASB-PRECISE-001tests/asl/scalar/amo/HL.CASB/scalar-fault-hl-casb-precise-001.asl9d3526354916531dfefb542d1f74f6cc233e7e063d3dac6db83c575488648b8bPTO-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/HL.CASB.md",
"id": "PTO-SCALAR-HL-CASB",
"instruction_contract": {
"artifact": "spec/evidence/instruction-contract-closure.json",
"mnemonic": "HL.CASB",
"ndf_clause": "PTO-INST-SCALAR-HL-CASB"
},
"mnemonic": "HL.CASB",
"readiness_subjects": [
"ADR-0020",
"ADR-0030",
"ADR-0059"
],
"semantic_tests": [
"PTO-AVS-SCALAR-HL-CASB-MATCH-001",
"PTO-AVS-SCALAR-HL-CASB-MISMATCH-001",
"PTO-AVS-SCALAR-HL-CASB-PRECISE-001"
],
"source": "asl/scalar/amo/HL.CASB.asl",
"surface": "scalar",
"tests": [
"PTO-AVS-SCALAR-HL-CASB-DECODE-001",
"PTO-AVS-SCALAR-HL-CASB-MATCH-001",
"PTO-AVS-SCALAR-HL-CASB-MISMATCH-001",
"PTO-AVS-SCALAR-HL-CASB-PRECISE-001"
]
}0.58.5 · 候选发布7dc8b7e5b121d2b2499a2273bebff29e2cd868121c4128a8ee9b3f0aa75a18a6107043a3435e78f4fcb9ef0002056380cc46a3b43fd934b730cf342a5eaa710d15b85f6e3f1d2b4325bbffc5b2c2772c54c7e364asl/scalar/amo/HL.CASB.aslasl/scalar/amo/HL.CASB.asl