diff options
author | Ben Marshall <ben-marshall@users.noreply.github.com> | 2021-01-22 22:11:00 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-22 14:11:00 -0800 |
commit | d6238d9945d029be956ae7c3e10b532b542e6f36 (patch) | |
tree | 43221f50f74032add50498ac1d9c5da509f17c43 /riscv/encoding.h | |
parent | ccdbfacc9f3eb84e2f2f6c6e3a8e9ee6160c8a15 (diff) | |
download | spike-d6238d9945d029be956ae7c3e10b532b542e6f36.zip spike-d6238d9945d029be956ae7c3e10b532b542e6f36.tar.gz spike-d6238d9945d029be956ae7c3e10b532b542e6f36.tar.bz2 |
scalar-crypto: Initial spike support for v0.8.1 (#635)
Brief:
- This commit adds spike support for the scalar cryptography extension.
See the riscv-crypto repository (https://github.com/riscv/riscv-crypto)
for more information on this extension.
- It is based on the experimental patch which has so far been kept in the
riscv-crypto repository. Now that scalar crypto is nearly at the "freeze"
stage and entering opcode consistency review, it makes sense to start
upstreaming our experimental version.
- In terms of compiler support - we are using an experimental patch in
the riscv-crypto repository at the moment, others are working on an
upstream appropriate version.
Details:
- Add support for dedicated scalar crypto instructions.
- Add very basic support for the entropy source (entropy_source.h).
Much of the behaviour of this is implementation specific. This model
aims to provide the bare minimum of functionality which can be used to
quickly develop software. It uses /dev/urandom as its entropy source for
now.
- Scalar crypto is unique in that it _borrows_ instructions from the
Bitmanipulation extension. This is currently _not_ encoded in the patch,
as I didn't want to damage anything in Bitmanip which is currently under
review. However, I've added a macro in riscv/decode.h called
"require_either_extension(A,B)", which allows instructions to be valid
opcodes iff they are in one or both extensions.
On branch scalar-crypto
Changes to be committed:
modified: README.md
modified: riscv/decode.h
modified: riscv/encoding.h
new file: riscv/entropy_source.h
new file: riscv/insns/aes64im.h
new file: riscv/insns/aes64ks1i.h
new file: riscv/insns/aes64ks2.h
new file: riscv/insns/aes_common.h
new file: riscv/insns/aesds.h
new file: riscv/insns/aesdsm.h
new file: riscv/insns/aeses.h
new file: riscv/insns/aesesm.h
new file: riscv/insns/sha256sig0.h
new file: riscv/insns/sha256sig1.h
new file: riscv/insns/sha256sum0.h
new file: riscv/insns/sha256sum1.h
new file: riscv/insns/sha512sig0.h
new file: riscv/insns/sha512sig0h.h
new file: riscv/insns/sha512sig0l.h
new file: riscv/insns/sha512sig1.h
new file: riscv/insns/sha512sig1h.h
new file: riscv/insns/sha512sig1l.h
new file: riscv/insns/sha512sum0.h
new file: riscv/insns/sha512sum0r.h
new file: riscv/insns/sha512sum1.h
new file: riscv/insns/sha512sum1r.h
new file: riscv/insns/sm3p0.h
new file: riscv/insns/sm3p1.h
new file: riscv/insns/sm4_common.h
new file: riscv/insns/sm4ed.h
new file: riscv/insns/sm4ks.h
modified: riscv/processor.cc
modified: riscv/processor.h
modified: riscv/riscv.mk.in
Diffstat (limited to 'riscv/encoding.h')
-rw-r--r-- | riscv/encoding.h | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/riscv/encoding.h b/riscv/encoding.h index af2b786..5e502b8 100644 --- a/riscv/encoding.h +++ b/riscv/encoding.h @@ -928,6 +928,62 @@ #define MASK_BFPW 0xfe00707f #define MATCH_XPERM_W 0x28000033 #define MASK_XPERM_W 0xfe00707f +// Crypto ISE Begin +#define MASK_POLLENTROPY 0xfffff07f +#define MATCH_POLLENTROPY 0xf1500073 +#define MASK_GETNOISE 0xfffff07f +#define MATCH_GETNOISE 0x7a900073 +#define MASK_SM4ED 0x3e007fff +#define MATCH_SM4ED 0x30000033 +#define MASK_SM4KS 0x3e007fff +#define MATCH_SM4KS 0x34000033 +#define MASK_SM3P0 0xfff0707f +#define MATCH_SM3P0 0x10801013 +#define MASK_SM3P1 0xfff0707f +#define MATCH_SM3P1 0x10901013 +#define MASK_SHA256SUM0 0xfff0707f +#define MATCH_SHA256SUM0 0x10001013 +#define MASK_SHA256SUM1 0xfff0707f +#define MATCH_SHA256SUM1 0x10101013 +#define MASK_SHA256SIG0 0xfff0707f +#define MATCH_SHA256SIG0 0x10201013 +#define MASK_SHA256SIG1 0xfff0707f +#define MATCH_SHA256SIG1 0x10301013 +#define MASK_SHA512SUM0R 0xfe00707f +#define MATCH_SHA512SUM0R 0x50000033 +#define MASK_SHA512SUM1R 0xfe00707f +#define MATCH_SHA512SUM1R 0x52000033 +#define MASK_SHA512SIG0L 0xfe00707f +#define MATCH_SHA512SIG0L 0x54000033 +#define MASK_SHA512SIG0H 0xfe00707f +#define MATCH_SHA512SIG0H 0x5c000033 +#define MASK_SHA512SIG1L 0xfe00707f +#define MATCH_SHA512SIG1L 0x56000033 +#define MASK_SHA512SIG1H 0xfe00707f +#define MATCH_SHA512SIG1H 0x5e000033 +#define MASK_AES64KS1I 0xff00707f +#define MATCH_AES64KS1I 0x31001013 +#define MASK_AES64IM 0xfff0707f +#define MATCH_AES64IM 0x30001013 +#define MASK_AES64KS2 0xfe00707f +#define MATCH_AES64KS2 0x7e000033 +#define MASK_AESESM 0x3e00707f +#define MATCH_AESESM 0x36000033 +#define MASK_AESES 0x3e00707f +#define MATCH_AESES 0x32000033 +#define MASK_AESDSM 0x3e00707f +#define MATCH_AESDSM 0x3e000033 +#define MASK_AESDS 0x3e00707f +#define MATCH_AESDS 0x3a000033 +#define MASK_SHA512SUM0 0xfff0707f +#define MATCH_SHA512SUM0 0x10401013 +#define MASK_SHA512SUM1 0xfff0707f +#define MATCH_SHA512SUM1 0x10501013 +#define MASK_SHA512SIG0 0xfff0707f +#define MATCH_SHA512SIG0 0x10601013 +#define MASK_SHA512SIG1 0xfff0707f +#define MATCH_SHA512SIG1 0x10701013 +// Crypto ISE End #define MATCH_ECALL 0x73 #define MASK_ECALL 0xffffffff #define MATCH_EBREAK 0x100073 @@ -2276,6 +2332,8 @@ #define CSR_MARCHID 0xf12 #define CSR_MIMPID 0xf13 #define CSR_MHARTID 0xf14 +#define CSR_MENTROPY 0xf15 +#define CSR_MNOISE 0x7a9 #define CSR_HTIMEDELTAH 0x615 #define CSR_CYCLEH 0xc80 #define CSR_TIMEH 0xc81 @@ -2683,6 +2741,33 @@ DECLARE_INSN(packw, MATCH_PACKW, MASK_PACKW) DECLARE_INSN(packuw, MATCH_PACKUW, MASK_PACKUW) DECLARE_INSN(bfpw, MATCH_BFPW, MASK_BFPW) DECLARE_INSN(xperm_w, MATCH_XPERM_W, MASK_XPERM_W) +DECLARE_INSN(sm4ed, MATCH_SM4ED, MASK_SM4ED) +DECLARE_INSN(sm4ks, MATCH_SM4KS, MASK_SM4KS) +DECLARE_INSN(aes64ks1i, MATCH_AES64KS1I, MASK_AES64KS1I) +DECLARE_INSN(aes64ks2, MATCH_AES64KS2, MASK_AES64KS2) +DECLARE_INSN(aes64im, MATCH_AES64IM, MASK_AES64IM) +DECLARE_INSN(aesesm, MATCH_AESESM, MASK_AESESM) +DECLARE_INSN(aeses, MATCH_AESES, MASK_AESES) +DECLARE_INSN(aesdsm, MATCH_AESDSM, MASK_AESDSM) +DECLARE_INSN(aesds, MATCH_AESDS, MASK_AESDS) +DECLARE_INSN(sha256sig0, MATCH_SHA256SIG0, MASK_SHA256SIG0) +DECLARE_INSN(sha256sig1, MATCH_SHA256SIG1, MASK_SHA256SIG1) +DECLARE_INSN(sha256sum0, MATCH_SHA256SUM0, MASK_SHA256SUM0) +DECLARE_INSN(sha256sum1, MATCH_SHA256SUM1, MASK_SHA256SUM1) +DECLARE_INSN(sm3p0, MATCH_SM3P0, MASK_SM3P0) +DECLARE_INSN(sm3p1, MATCH_SM3P1, MASK_SM3P1) +DECLARE_INSN(sha512sig0l, MATCH_SHA512SIG0L, MASK_SHA512SIG0L) +DECLARE_INSN(sha512sig0h, MATCH_SHA512SIG0H, MASK_SHA512SIG0H) +DECLARE_INSN(sha512sig1l, MATCH_SHA512SIG1L, MASK_SHA512SIG1L) +DECLARE_INSN(sha512sig1h, MATCH_SHA512SIG1H, MASK_SHA512SIG1H) +DECLARE_INSN(sha512sum0r, MATCH_SHA512SUM0R, MASK_SHA512SUM0R) +DECLARE_INSN(sha512sum1r, MATCH_SHA512SUM1R, MASK_SHA512SUM1R) +DECLARE_INSN(sha512sig0, MATCH_SHA512SIG0, MASK_SHA512SIG0) +DECLARE_INSN(sha512sig1, MATCH_SHA512SIG1, MASK_SHA512SIG1) +DECLARE_INSN(sha512sum0, MATCH_SHA512SUM0, MASK_SHA512SUM0) +DECLARE_INSN(sha512sum1, MATCH_SHA512SUM1, MASK_SHA512SUM1) +DECLARE_INSN(pollentropy, MATCH_POLLENTROPY, MASK_POLLENTROPY) +DECLARE_INSN(getnoise, MATCH_GETNOISE, MASK_GETNOISE) DECLARE_INSN(ecall, MATCH_ECALL, MASK_ECALL) DECLARE_INSN(ebreak, MATCH_EBREAK, MASK_EBREAK) DECLARE_INSN(uret, MATCH_URET, MASK_URET) @@ -3464,6 +3549,8 @@ DECLARE_CSR(mvendorid, CSR_MVENDORID) DECLARE_CSR(marchid, CSR_MARCHID) DECLARE_CSR(mimpid, CSR_MIMPID) DECLARE_CSR(mhartid, CSR_MHARTID) +DECLARE_CSR(mentropy, CSR_MENTROPY) +DECLARE_CSR(mnoise, CSR_MNOISE) DECLARE_CSR(htimedeltah, CSR_HTIMEDELTAH) DECLARE_CSR(cycleh, CSR_CYCLEH) DECLARE_CSR(timeh, CSR_TIMEH) |