diff --git a/Zc-specification/Zc.adoc b/Zc-specification/Zc.adoc index c524c9f..1187e75 100644 --- a/Zc-specification/Zc.adoc +++ b/Zc-specification/Zc.adoc @@ -1,6 +1,6 @@ :sectnums: [#Zc] -== Zc* v1.0.0-RC4 +== Zc* v1.0.0-RC4.1 === Change history since v0.70.1 (tagged release) @@ -8,6 +8,7 @@ [width="100%",options=header] |==================================================================================== |Version | change +|v1.0.0-RC4.1| Resolve typographical issues with the document only, no actual changes |v1.0.0-RC4| Release candidate | | Remove Zcmb as benefit is low. Remove cm.jalt, read LSB of jump table entry to determine whether to link |v0.70.5 | Resolve https://github.com/riscv/riscv-code-size-reduction/issues/163 - jvt.base is WARL and fewer bits than the max can be implemented @@ -31,50 +32,50 @@ Zc* is a group of extensions which define subsets of the existing C extension (Z Zcm* all reuse the encodings for _c.fld_, _c.fsd_, _c.fldsp_, _c.fsdsp_. .Zc* extension overview -[width="100%",options=header] +[width="100%",options=header,cols="3,1,1,1,1,1,1,1"] |==================================================================================== |Instruction |Zca |Zcf |Zcd |Zcb |Zcmp |Zcmpe |Zcmt 8+|*The Zca extension is added as way to refer to instructions in the C extension that do not include the floating-point loads and stores* -|C excl. c.f* |✓| | | | | | +|C excl. c.f* |yes | | | | | | 8+|*The Zcf extension is added as a way to refer to compressed single-precision floating-point load/stores* -|c.flw | |✓| | | | | -|c.flwsp | |✓| | | | | -|c.fsw | |✓| | | | | -|c.fswsp | |✓| | | | | +|c.flw | |yes | | | | | +|c.flwsp | |yes | | | | | +|c.fsw | |yes | | | | | +|c.fswsp | |yes | | | | | 8+|*The Zcd extension is added as a way to refer to compressed double-precision floating-point load/stores* -|c.fld | | |✓| | | | -|c.fldsp | | |✓| | | | -|c.fsd | | |✓| | | | -|c.fsdsp | | |✓| | | | +|c.fld | | |yes | | | | +|c.fldsp | | |yes | | | | +|c.fsd | | |yes | | | | +|c.fsdsp | | |yes | | | | 8+|*Simple operations for use on all architectures* -|c.lbu | | | |✓| | | -|c.lh | | | |✓| | | -|c.lhu | | | |✓| | | -|c.sb | | | |✓| | | -|c.sh | | | |✓| | | -|c.zext.b | | | |✓| | | -|c.sext.b | | | |✓| | | -|c.zext.h | | | |✓| | | -|c.sext.h | | | |✓| | | -|c.zext.w | | | |✓| | | -|c.mul | | | |✓| | | -|c.not | | | |✓| | | +|c.lbu | | | |yes | | | +|c.lh | | | |yes | | | +|c.lhu | | | |yes | | | +|c.sb | | | |yes | | | +|c.sh | | | |yes | | | +|c.zext.b | | | |yes | | | +|c.sext.b | | | |yes | | | +|c.zext.h | | | |yes | | | +|c.sext.h | | | |yes | | | +|c.zext.w | | | |yes | | | +|c.mul | | | |yes | | | +|c.not | | | |yes | | | 8+|*PUSH/POP and double move which overlap with _c.fsdsp_* -|cm.push | | | | |✓|✓| -|cm.pop | | | | |✓|✓| -|cm.popret | | | | |✓|✓| -|cm.popretz | | | | |✓|✓| -|cm.mva01s | | | | |✓| | -|cm.mvsa01 | | | | |✓| | +|cm.push | | | | |yes |yes | +|cm.pop | | | | |yes |yes | +|cm.popret | | | | |yes |yes | +|cm.popretz | | | | |yes |yes | +|cm.mva01s | | | | |yes | | +|cm.mvsa01 | | | | |yes | | 8+|*Reserved for EABI versions of PUSH/POP and double move which overlap with _c.fsdsp_* -|cm.push.e | | | | | |✓| -|cm.pop.e | | | | | |✓| -|cm.popret.e | | | | | |✓| -|cm.popretz.e | | | | | |✓| -|cm.mva01s.e | | | | | |✓| -|cm.mvsa01.e | | | | | |✓| +|cm.push.e | | | | | |yes | +|cm.pop.e | | | | | |yes | +|cm.popret.e | | | | | |yes | +|cm.popretz.e | | | | | |yes | +|cm.mva01s.e | | | | | |yes | +|cm.mvsa01.e | | | | | |yes | 8+|*Table jump* -|cm.jalt | | | | | |✓ +|cm.jalt | | | | | | |yes |==================================================================================== [#Zca] @@ -102,9 +103,6 @@ Zcd is the existing set of compressed double precision floating point loads and Zcd requires the <> extension. - -<<< - [#Zcb] === Zcb @@ -127,63 +125,63 @@ The _c.mul_ encoding uses the CR register format along with other instructions s |Mnemonic |Instruction -|✓ -|✓ +|yes +|yes |c.lbu _rd'_, uimm(_rs1'_) |<<#insns-c_lbu>> -|✓ -|✓ +|yes +|yes |c.lhu _rd'_, uimm(_rs1'_) |<<#insns-c_lhu>> -|✓ -|✓ +|yes +|yes |c.lh _rd'_, uimm(_rs1'_) |<<#insns-c_lh>> -|✓ -|✓ +|yes +|yes |c.sb _rs2'_, uimm(_rs1'_) |<<#insns-c_sb>> -|✓ -|✓ +|yes +|yes |c.sh _rs2'_, uimm(_rs1'_) |<<#insns-c_sh>> -|✓ -|✓ +|yes +|yes |c.zext.b _rsd'_ |<<#insns-c_zext_b>> -|✓ -|✓ +|yes +|yes |c.sext.b _rsd'_ |<<#insns-c_sext_b>> -|✓ -|✓ +|yes +|yes |c.zext.h _rsd'_ |<<#insns-c_zext_h>> -|✓ -|✓ +|yes +|yes |c.sext.h _rsd'_ |<<#insns-c_sext_h>> | -|✓ +|yes |c.zext.w _rsd'_ |<<#insns-c_zext_w>> -|✓ -|✓ +|yes +|yes |c.not _rsd'_ |<<#insns-c_not>> -|✓ -|✓ +|yes +|yes |c.mul _rsd'_, _rs2'_ |<<#insns-c_mul>> @@ -216,33 +214,33 @@ The PUSH/POP assembly syntax uses several variables, the meaning of which are: |Mnemonic |Instruction -|✓ -|✓ +|yes +|yes |cm.push _{reg_list}, -stack_adj_ |<<#insns-cm_push>> -|✓ -|✓ +|yes +|yes |cm.pop _{reg_list}, stack_adj_ |<<#insns-cm_pop>> -|✓ -|✓ +|yes +|yes |cm.popret _{reg_list}, stack_adj_ |<<#insns-cm_popret>> -|✓ -|✓ +|yes +|yes |cm.popretz _{reg_list}, stack_adj_ |<<#insns-cm_popretz>> -|✓ -|✓ +|yes +|yes |cm.mva01s _sreg1, sreg2_ |<<#insns-cm_mva01s>> -|✓ -|✓ +|yes +|yes |cm.mvsa01 _sreg1, sreg2_ |<<#insns-cm_mvsa01>> @@ -282,8 +280,8 @@ Zcmt requires the <> extension. |Mnemonic |Instruction -|✓ -|✓ +|yes +|yes |cm.jalt _index_ |<<#insns-cm_jalt>> diff --git a/Zc-specification/Zcb_footer.adoc b/Zc-specification/Zcb_footer.adoc index 4483786..f601b52 100644 --- a/Zc-specification/Zcb_footer.adoc +++ b/Zc-specification/Zcb_footer.adoc @@ -7,6 +7,6 @@ Included in:: |Lifecycle state |Zcb (<>) -|v1.0.0-RC3 +|v1.0.0-RC4.1 |Stable |=== diff --git a/Zc-specification/Zcf_footer.adoc b/Zc-specification/Zcf_footer.adoc index df56942..40726ed 100644 --- a/Zc-specification/Zcf_footer.adoc +++ b/Zc-specification/Zcf_footer.adoc @@ -7,6 +7,6 @@ Included in:: |Lifecycle state |Zcf (<>) -|v1.0.0-RC4 +|v1.0.0-RC4.1 |Frozen |=== diff --git a/Zc-specification/Zcmp_footer.adoc b/Zc-specification/Zcmp_footer.adoc index 63bbc7e..426b112 100644 --- a/Zc-specification/Zcmp_footer.adoc +++ b/Zc-specification/Zcmp_footer.adoc @@ -7,6 +7,6 @@ Included in:: |Lifecycle state |Zcmp (<>) -|v1.0.0-RC3 +|v1.0.0-RC4.1 |Stable |=== diff --git a/Zc-specification/Zcmpe_footer.adoc b/Zc-specification/Zcmpe_footer.adoc index 472c7f1..849de0d 100644 --- a/Zc-specification/Zcmpe_footer.adoc +++ b/Zc-specification/Zcmpe_footer.adoc @@ -7,6 +7,6 @@ Included in:: |Lifecycle state |Zcmpe (<>) -|v1.0.0-RC4 +|v1.0.0-RC4.1 |Stable |=== diff --git a/Zc-specification/Zcmt_footer.adoc b/Zc-specification/Zcmt_footer.adoc index 78c1ca3..3a05544 100644 --- a/Zc-specification/Zcmt_footer.adoc +++ b/Zc-specification/Zcmt_footer.adoc @@ -7,6 +7,6 @@ Included in:: |Lifecycle state |Zcmt (<>) -|v1.0.0-RC4 +|v1.0.0-RC4.1 |Frozen |=== diff --git a/Zc-specification/tablejump.adoc b/Zc-specification/tablejump.adoc index 1aa140f..9116d82 100644 --- a/Zc-specification/tablejump.adoc +++ b/Zc-specification/tablejump.adoc @@ -9,7 +9,7 @@ Table jump uses a 256-entry UXLEN wide table in instruction memory to contain fu and a flag in bit zero of each entry indicating whether jumping to the function address should link or not. The table must be a minimum of 64-byte aligned. -_cm./jalt_ encodings index the table, giving access to functions within the full UXLEN wide address space. +_cm.jalt_ encodings index the table, giving access to functions within the full UXLEN wide address space. This is used as a form of dictionary compression used to reduce the code size of _jal_ / _auipc+jalr_ / _jr_ / _auipc+jr_ instructions. @@ -17,8 +17,8 @@ Table jump allows the linker to replace the following instruction sequences with * 32-bit _j_ calls * 32-bit _jal_ ra calls -* 64-bit _auipc/jalr_ calls to fixed locations -* 64-bit _auipc/jalr ra_ calls to fixed locations +* 64-bit _auipc+jr_ calls to fixed locations +* 64-bit _auipc+jalr ra_ calls to fixed locations ** The _auipc+jr/jalr_ sequence is used because the offset from the PC is out of the ±1MB range. === JVT