return $code;
}
+sub orn_rv64i {
+ my ($rd, $rs1, $rs2) = @_;
+ my $code=<<___;
+ not $rd, $rs2
+ or $rd, $rd, $rs1
+___
+ return $code;
+}
+
# Scalar crypto instructions
sub aes64ds {
return ".word ".($template | ($rs2 << 20) | ($rs1 << 15) | ($rd << 7));
}
+sub orn {
+ # Encoding for orn rd, rs1, rs2
+ # 0100000 _ rs2 _ rs1 _110_ rd _0110011
+ my $template = 0b0100000_00000_00000_110_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 rev8 {
# Encoding for rev8 rd, rs instruction on RV64
# XXXXXXXXXXXXX_ rs _XXX_ rd _XXXXXXX