summaryrefslogtreecommitdiff
path: root/rvcontroller.lua
diff options
context:
space:
mode:
authorcheapie <cheapiephp@gmail.com>2026-11-07 17:37:17 -0600
committercheapie <cheapiephp@gmail.com>2026-11-07 17:37:17 -0600
commita8711e74bbffda6a38fb5fea55bc96da6b8df41d (patch)
treeb412207dca2897419d57fda9979522cfbaa2a027 /rvcontroller.lua
parent9ae11c52355e8a362d34d7cabfbc573ddf8c2f80 (diff)
downloadrvcontroller-a8711e74bbffda6a38fb5fea55bc96da6b8df41d.tar
rvcontroller-a8711e74bbffda6a38fb5fea55bc96da6b8df41d.tar.gz
rvcontroller-a8711e74bbffda6a38fb5fea55bc96da6b8df41d.tar.bz2
rvcontroller-a8711e74bbffda6a38fb5fea55bc96da6b8df41d.tar.xz
rvcontroller-a8711e74bbffda6a38fb5fea55bc96da6b8df41d.zip
Add Zksh
Wouldn't want China to feel left out
Diffstat (limited to 'rvcontroller.lua')
-rw-r--r--rvcontroller.lua32
1 files changed, 31 insertions, 1 deletions
diff --git a/rvcontroller.lua b/rvcontroller.lua
index ee66cd3..459116d 100644
--- a/rvcontroller.lua
+++ b/rvcontroller.lua
@@ -485,7 +485,7 @@ local function readcsr(address)
false, --Zkne
true, --Zknh
false, --Zksed
- false, --Zksh
+ true, --Zksh
true, --Zkt
true, --Ztso
false, --Zvbb
@@ -2212,6 +2212,32 @@ local operations = {
end
setreg(rd,implodebits(outputbits,32))
end,
+ sm3p0 = function(rd,rs1)
+ local outputbits = {}
+ local function xor(index,new)
+ if new then outputbits[index] = not outputbits[index] end
+ end
+ local srcbits = explodebits(getreg(rs1),32)
+ for i=0,31 do
+ outputbits[i] = srcbits[i]
+ xor(i,srcbits[(i-9)%32])
+ xor(i,srcbits[(i-17)%32])
+ end
+ setreg(rd,implodebits(outputbits,32))
+ end,
+ sm3p1 = function(rd,rs1)
+ local outputbits = {}
+ local function xor(index,new)
+ if new then outputbits[index] = not outputbits[index] end
+ end
+ local srcbits = explodebits(getreg(rs1),32)
+ for i=0,31 do
+ outputbits[i] = srcbits[i]
+ xor(i,srcbits[(i-15)%32])
+ xor(i,srcbits[(i-23)%32])
+ end
+ setreg(rd,implodebits(outputbits,32))
+ end,
}
local function runinst(instruction)
@@ -2364,6 +2390,10 @@ local function runinst(instruction)
operations.sha256sig0(rd,rs1)
elseif f3 == 0x1 and imm == 0x103 then
operations.sha256sig1(rd,rs1)
+ elseif f3 == 0x1 and imm == 0x108 then
+ operations.sm3p0(rd,rs1)
+ elseif f3 == 0x1 and imm == 0x109 then
+ operations.sm3p1(rd,rs1)
elseif f3 == 0x5 and math.floor(imm/0x20) == 0x0 then
operations.srli(rd,rs1,imm%0x20)
elseif f3 == 0x5 and math.floor(imm/0x20) == 0x20 then