summaryrefslogtreecommitdiffstats
path: root/crypto/perlasm/riscv.pm
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/perlasm/riscv.pm')
-rw-r--r--crypto/perlasm/riscv.pm30
1 files changed, 30 insertions, 0 deletions
diff --git a/crypto/perlasm/riscv.pm b/crypto/perlasm/riscv.pm
index 9fdee77793..7e45bec812 100644
--- a/crypto/perlasm/riscv.pm
+++ b/crypto/perlasm/riscv.pm
@@ -384,6 +384,36 @@ sub rev8 {
return ".word ".($template | ($rs << 15) | ($rd << 7));
}
+sub roriw {
+ # Encoding for roriw rd, rs1, shamt instruction on RV64
+ # XXXXXXX_ shamt _ rs1 _XXX_ rd _XXXXXXX
+ my $template = 0b0110000_00000_00000_101_00000_0011011;
+ my $rd = read_reg shift;
+ my $rs1 = read_reg shift;
+ my $shamt = shift;
+ return ".word ".($template | ($shamt << 20) | ($rs1 << 15) | ($rd << 7));
+}
+
+sub maxu {
+ # Encoding for maxu rd, rs1, rs2 instruction on RV64
+ # XXXXXXX_ rs2 _ rs1 _XXX_ rd _XXXXXXX
+ my $template = 0b0000101_00000_00000_111_00000_0110011;
+ my $rd = read_reg shift;
+ my $rs1 = read_reg shift;
+ my $rs2 = read_reg shift;
+ return ".word ".($template | ($rs2 << 20) | ($rs1 << 15) | ($rd << 7));
+}
+
+sub minu {
+ # Encoding for minu rd, rs1, rs2 instruction on RV64
+ # XXXXXXX_ rs2 _ rs1 _XXX_ rd _XXXXXXX
+ my $template = 0b0000101_00000_00000_101_00000_0110011;
+ my $rd = read_reg shift;
+ my $rs1 = read_reg shift;
+ my $rs2 = read_reg shift;
+ return ".word ".($template | ($rs2 << 20) | ($rs1 << 15) | ($rd << 7));
+}
+
# Vector instructions
sub vadd_vv {