diff options
| author | cheapie <cheapiephp@gmail.com> | 2026-11-07 17:37:17 -0600 |
|---|---|---|
| committer | cheapie <cheapiephp@gmail.com> | 2026-11-07 17:37:17 -0600 |
| commit | a8711e74bbffda6a38fb5fea55bc96da6b8df41d (patch) | |
| tree | b412207dca2897419d57fda9979522cfbaa2a027 /rvcontroller.lua | |
| parent | 9ae11c52355e8a362d34d7cabfbc573ddf8c2f80 (diff) | |
| download | rvcontroller-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.lua | 32 |
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 |
