From a8711e74bbffda6a38fb5fea55bc96da6b8df41d Mon Sep 17 00:00:00 2001 From: cheapie Date: Sat, 7 Nov 2026 17:37:17 -0600 Subject: Add Zksh Wouldn't want China to feel left out --- rvcontroller.lua | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'rvcontroller.lua') 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 -- cgit v1.2.3