Skip to content

Commit acaabc6

Browse files
bschommerxavierleroy
authored andcommitted
Added implementation for fmin/fmax for aarch64.
The two built-in function map to the fmax and fmin instruction. Bug 30035
1 parent c3c7d3a commit acaabc6

File tree

3 files changed

+12
-0
lines changed

3 files changed

+12
-0
lines changed

aarch64/Asm.v

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,8 @@ Inductive instruction: Type :=
283283
| Pfmsub (sz: fsize) (rd r1 r2 r3: freg) (**r [rd = r3 - r1 * r2] *)
284284
| Pfnmadd (sz: fsize) (rd r1 r2 r3: freg) (**r [rd = - r3 - r1 * r2] *)
285285
| Pfnmsub (sz: fsize) (rd r1 r2 r3: freg) (**r [rd = - r3 + r1 * r2] *)
286+
| Pfmax (sz: fsize) (rd r1 r2: freg) (**r maximum *)
287+
| Pfmin (sz: fsize) (rd r1 r2: freg) (**r minimum *)
286288
(** Floating-point comparison *)
287289
| Pfcmp (sz: fsize) (r1 r2: freg) (**r compare [r1] and [r2] *)
288290
| Pfcmp0 (sz: fsize) (r1: freg) (**r compare [r1] and [+0.0] *)
@@ -1114,6 +1116,8 @@ Definition exec_instr (f: function) (i: instruction) (rs: regset) (m: mem) : out
11141116
| Pfmsub _ _ _ _ _
11151117
| Pfnmadd _ _ _ _ _
11161118
| Pfnmsub _ _ _ _ _
1119+
| Pfmax _ _ _ _
1120+
| Pfmin _ _ _ _
11171121
| Pnop
11181122
| Pcfi_adjust _
11191123
| Pcfi_rel_offset _ =>

aarch64/Asmexpand.ml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,10 @@ let expand_builtin_inline name args res =
363363
emit (Pfnmadd(D, res, a1, a2, a3))
364364
| "__builtin_fnmsub", [BA(FR a1); BA(FR a2); BA(FR a3)], BR(FR res) ->
365365
emit (Pfnmsub(D, res, a1, a2, a3))
366+
| "__builtin_fmax", [BA (FR a1); BA (FR a2)], BR (FR res) ->
367+
emit (Pfmax (D, res, a1, a2))
368+
| "__builtin_fmin", [BA (FR a1); BA (FR a2)], BR (FR res) ->
369+
emit (Pfmin (D, res, a1, a2))
366370
(* Vararg *)
367371
| "__builtin_va_start", [BA(IR a)], _ ->
368372
expand_builtin_va_start a

aarch64/TargetPrinter.ml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,10 @@ module Target : TARGET =
467467
fprintf oc " fnmadd %a, %a, %a, %a\n" freg (sz, rd) freg (sz, r1) freg (sz, r2) freg (sz, r3)
468468
| Pfnmsub(sz, rd, r1, r2, r3) ->
469469
fprintf oc " fnmsub %a, %a, %a, %a\n" freg (sz, rd) freg (sz, r1) freg (sz, r2) freg (sz, r3)
470+
| Pfmax (sz, rd, r1, r2) ->
471+
fprintf oc " fmax %a, %a, %a\n" freg (sz, rd) freg (sz, r1) freg (sz, r2)
472+
| Pfmin (sz, rd, r1, r2) ->
473+
fprintf oc " fmin %a, %a, %a\n" freg (sz, rd) freg (sz, r1) freg (sz, r2)
470474
(* Floating-point comparison *)
471475
| Pfcmp(sz, r1, r2) ->
472476
fprintf oc " fcmp %a, %a\n" freg (sz, r1) freg (sz, r2)

0 commit comments

Comments
 (0)