diff options
Diffstat (limited to 'crypto/perlasm/riscv.pm')
-rw-r--r-- | crypto/perlasm/riscv.pm | 30 |
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 { |