aboutsummaryrefslogtreecommitdiff
path: root/riscv/insns/fmaxm_q.h
diff options
context:
space:
mode:
authorPhilipp Tomsich <philipp.tomsich@vrull.eu>2023-03-17 20:38:34 +0100
committerPhilipp Tomsich <philipp.tomsich@vrull.eu>2023-04-03 16:55:14 -0700
commit09140c07e13ddd3951c231e1fb7cbe2d3d41f7aa (patch)
tree36b92616ad46d34ab23606a883f6e835a11f0f2d /riscv/insns/fmaxm_q.h
parentf002b931d076af91c35dad05dd54580112b4a9d6 (diff)
downloadriscv-isa-sim-09140c07e13ddd3951c231e1fb7cbe2d3d41f7aa.zip
riscv-isa-sim-09140c07e13ddd3951c231e1fb7cbe2d3d41f7aa.tar.gz
riscv-isa-sim-09140c07e13ddd3951c231e1fb7cbe2d3d41f7aa.tar.bz2
Implement Zfa.
This passes our developer test suite, when comparing output (signature) against the SAIL implementation. If any corner-cases require additional changes after ACT goes upstream, we can apply an add-on patch.
Diffstat (limited to 'riscv/insns/fmaxm_q.h')
-rw-r--r--riscv/insns/fmaxm_q.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/riscv/insns/fmaxm_q.h b/riscv/insns/fmaxm_q.h
new file mode 100644
index 0000000..a48031e
--- /dev/null
+++ b/riscv/insns/fmaxm_q.h
@@ -0,0 +1,17 @@
+require_extension('D');
+require_extension(EXT_ZFA);
+require_fp;
+ui128_f128 ui1;
+ui1.f = f128(FRS1);
+ui128_f128 ui2;
+ui2.f = f128(FRS2);
+bool greater = f128_lt_quiet(f128(FRS2), f128(FRS1)) ||
+ (f128_eq(f128(FRS1), f128(FRS2)) && (signF128UI64(ui2.ui.v64)));
+if (isNaNF128UI(ui1.ui.v64, ui1.ui.v0) || isNaNF128UI(ui2.ui.v64, ui2.ui.v0)) {
+ ui128_f128 ui;
+ ui.ui.v64 = defaultNaNF128UI64;
+ ui.ui.v0 = defaultNaNF128UI0;
+ WRITE_FRD(f128(ui.f));
+ } else
+ WRITE_FRD(greater ? f128(FRS1) : f128(FRS2));
+set_fp_exceptions;