aboutsummaryrefslogtreecommitdiff
path: root/riscv/insns/fmaxm_q.h
blob: d85f9d7b842d33f7f4f19d8ea2bad4ed3405d943 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
require_extension('Q');
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;