aboutsummaryrefslogtreecommitdiff
path: root/riscv/insns/fmaxm_q.h
diff options
context:
space:
mode:
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;