Skip to content
This repository was archived by the owner on Feb 29, 2024. It is now read-only.

Latest commit

 

History

History
130 lines (100 loc) · 6.53 KB

changes_since_v0.50.adoc

File metadata and controls

130 lines (100 loc) · 6.53 KB

There are many changes since v0.50.1, which has been used for toolchain, spike, qemu and the CV32E41P implementation.

The status of all of the instructions are in the tables. Note that all subsets have been redefined.

Load/store

Table 1. Load/store
v0.50 name v0.70 Name Encoding changed? Semantics changed? Notes

C.LB

CM.LB

Y

N

uimm < 4 is "custom defined"

C.LBU

CM.LBU

Y

N

uimm < 4 is "custom defined"

C.LH

CM.LH

Y

N

uimm < 4 is "custom defined"

C.LHU

CM.LHU

Y

N

uimm < 4 is "custom defined"

C.SB

CM.SB

Y

N

uimm < 4 is "custom defined"

C.SH

CM.SH

Y

N

uimm < 4 is "custom defined"

N/A

C.LBU

N/A

N/A

CM.LBU with shorter uimm

N/A

C.LH

N/A

N/A

CM.LH with shorter uimm

N/A

C.LHU

N/A

N/A

CM.LHU with shorter uimm

N/A

C.SB

N/A

N/A

CM.SB with shorter uimm

N/A

C.SH

N/A

N/A

CM.SH with shorter uimm

Table jump

Table 2. Table Jump
v0.50 name v0.70 Name Encoding changed? Semantics changed? Notes

C.TBLJAL

CM.JALT

Y

Y - exception model

Meaning of table index changed in the encoding, # removed from assembly syntax

C.TBLJ

CM.J

Y

Y - exception model

Meaning of table index changed in the encoding, # removed from assembly syntax

C.TBLJALM

N/A

N/A

N/A

Deleted

Double move

Table 3. Double move
v0.50 name v0.70 Name Encoding changed? Semantics changed? Notes

C.MVA01S07

CM.MVA01S

Y

N

N/A

CM.MVSA01

N/A

N/A

New instruction

Note that the .E extension versions for the EABI will be specified in the future, and cannot yet be confirmed as the EABI is not frozen.

Simple instructions

Table 4. Simple instructions
v0.50 name v0.70 Name Encoding changed? Semantics changed? Notes

C.ZEXT.B

same

Y

N

C.ZEXT.H

same

Y

N

C.SEXT.B

same

Y

N

C.SEXT.H

same

Y

N

C.SEXT.W

same

Y

N

C.NOT

same

Y

N

C.MUL

same

N

N

unchanged

Push/pop

All 32-bit forms are removed and all the 16-bit forms support 12 register lists (excluding {ra, s0-s10}):

  1. {ra}

  2. {ra, s0}

  3. {ra, s0-s1}

  4. {ra, s0-s2}

  5. {ra, s0-s3}

  6. {ra, s0-s4}

  7. {ra, s0-s5}

  8. {ra, s0-s6}

  9. {ra, s0-s7}

  10. {ra, s0-s8}

  11. {ra, s0-s9}

  12. {ra, s0-s11}

spimm length also updated.

Note that the .E extension versions for the EABI will be specified in the future, and cannot yet be confirmed as the EABI is not frozen.

Table 5. Push/pop instructions
v0.50 name v0.70 Name Encoding changed? Semantics changed? Notes

C.PUSH

CM.PUSH

Y

Y

areg_list no longer supported

C.POP

CM.POP

Y

Y

C.POPRET

CM.POPRET

Y

Y

CM.POPRET doesn’t return a value

C.POPRET

CM.POPRETZ

Y

Y

separate encoding for return zero

Instructions in v0.50 but not in v0.70

These instructions can be left in the compiler as experimental, enabled with the following switches:

Table 6. Compiler switches experimental instructions
Switch Enabled instructions

-mzce-lsgp

LWGP, SWGP, LDGP (RV64), SDGP (RV64)

-mzce-muli

MULI

-mzce-beqi

BEQI

-mzce-bnei

BNEI

-mzce-cdecbnez

C.DECBNEZ

-mzce-decbnez

DECBNEZ

16-bit Instructions

C.DECBNEZ - the encoding space for this has been used by all the CM.* instructions. Therefore this instruction must be disabled in the compiler - unless an encoding is proposed.

C.NEG - this is not very useful and can be deleted.

32-bit Instructions

MULI - This is in custom-0, so can be kept unchanged. Early benchmarking results suggest it’s not much use, and the encoding is expensive so it’s unlikely to ever be included in an extension.

BEQI, BNEI - these fill in the 2 gaps in the BRANCH encoding group - these encodings have not been allocated to other instructions, so these can stay unchanged

LWGP, SWGP, LDGP, SDGP - these overlap with C.FLD, C.FSD

PUSH/POP/POPRET - delete all of these