Skip to content

Commit 8bfe6f3

Browse files
authored
flambda-backend: Add float32 frontend definitions (#1913)
1 parent 985850a commit 8bfe6f3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+391
-198
lines changed

asmcomp/cmm_helpers.ml

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -929,6 +929,8 @@ module Extended_machtype = struct
929929
| Pbottom ->
930930
Misc.fatal_error "No unique Extended_machtype for layout [Pbottom]"
931931
| Punboxed_float Pfloat64 -> typ_float
932+
| Punboxed_float Pfloat32 ->
933+
Misc.fatal_error "float32 is not supported in the upstream compiler build."
932934
| Punboxed_int _ ->
933935
(* Only 64-bit architectures, so this is always [typ_int] *)
934936
typ_any_int
@@ -2510,7 +2512,7 @@ let arraylength kind arg dbg =
25102512
Cop(Cor, [addr_array_length_shifted hdr dbg; Cconst_int (1, dbg)], dbg)
25112513
| Pfloatarray ->
25122514
Cop(Cor, [float_array_length_shifted hdr dbg; Cconst_int (1, dbg)], dbg)
2513-
| Punboxedfloatarray Pfloat64 | Punboxedintarray _ ->
2515+
| Punboxedfloatarray _ | Punboxedintarray _ ->
25142516
Misc.fatal_errorf "Unboxed arrays not supported"
25152517

25162518
let bbswap bi arg dbg =
@@ -2702,7 +2704,7 @@ let arrayref_unsafe rkind arg1 arg2 dbg =
27022704
int_array_ref arg1 arg2 dbg
27032705
| Pfloatarray_ref mode ->
27042706
float_array_ref mode arg1 arg2 dbg
2705-
| Punboxedfloatarray_ref Pfloat64 | Punboxedintarray_ref _ ->
2707+
| Punboxedfloatarray_ref _ | Punboxedintarray_ref _ ->
27062708
Misc.fatal_errorf "Unboxed arrays not supported"
27072709

27082710
let arrayref_safe rkind arg1 arg2 dbg =
@@ -2757,7 +2759,7 @@ let arrayref_safe rkind arg1 arg2 dbg =
27572759
(get_header_masked arr dbg) dbg;
27582760
idx],
27592761
unboxed_float_array_ref arr idx dbg))))
2760-
| Punboxedfloatarray_ref Pfloat64 | Punboxedintarray_ref _ ->
2762+
| Punboxedfloatarray_ref _ | Punboxedintarray_ref _ ->
27612763
Misc.fatal_errorf "Unboxed arrays not supported"
27622764

27632765
type ternary_primitive =
@@ -2809,7 +2811,7 @@ let arrayset_unsafe skind arg1 arg2 arg3 dbg =
28092811
int_array_set arg1 arg2 arg3 dbg
28102812
| Pfloatarray_set ->
28112813
float_array_set arg1 arg2 arg3 dbg
2812-
| Punboxedfloatarray_set Pfloat64 | Punboxedintarray_set _ ->
2814+
| Punboxedfloatarray_set _ | Punboxedintarray_set _ ->
28132815
Misc.fatal_errorf "Unboxed arrays not supported"
28142816
)
28152817

@@ -2874,7 +2876,7 @@ let arrayset_safe skind arg1 arg2 arg3 dbg =
28742876
(get_header_masked arr dbg) dbg;
28752877
idx],
28762878
float_array_set arr idx newval dbg))))
2877-
| Punboxedfloatarray_set Pfloat64 | Punboxedintarray_set _ ->
2879+
| Punboxedfloatarray_set _ | Punboxedintarray_set _ ->
28782880
Misc.fatal_errorf "Unboxed arrays not supported"
28792881
)
28802882

@@ -3207,6 +3209,9 @@ let emit_preallocated_blocks preallocated_blocks cont =
32073209
let kind_of_layout (layout : Lambda.layout) =
32083210
match layout with
32093211
| Pvalue (Pboxedfloatval Pfloat64) -> Boxed_float
3212+
| Pvalue (Pboxedfloatval Pfloat32)
3213+
| Punboxed_float Pfloat32 ->
3214+
Misc.fatal_error "float32 is not supported in the upstream compiler build."
32103215
| Pvalue (Pboxedintval bi) -> Boxed_integer bi
32113216
| Pvalue (Pgenval | Pintval | Pvariant _ | Parrayval _)
32123217
| Ptop | Pbottom | Punboxed_float Pfloat64

asmcomp/cmmgen.ml

Lines changed: 53 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,9 @@ let get_field env mut layout ptr n dbg =
137137
| Pvalue Pintval | Punboxed_int _ -> Word_int
138138
| Pvalue _ -> Word_val
139139
| Punboxed_float Pfloat64 -> Double
140+
| Punboxed_float Pfloat32 ->
141+
Misc.fatal_error
142+
"float32 is not supported in the upstream compiler build."
140143
| Punboxed_vector _ ->
141144
Misc.fatal_error
142145
"SIMD vectors are not supported in the upstream compiler build."
@@ -657,10 +660,10 @@ let rec transl env e =
657660
| Patomic_cas | Patomic_fetch_add
658661
| Psequor | Pnot | Pnegint | Paddint | Psubint
659662
| Pmulint | Pandint | Porint | Pxorint | Plslint
660-
| Plsrint | Pasrint | Pintoffloat Pfloat64 | Pfloatofint (Pfloat64, _)
661-
| Pnegfloat (Pfloat64, _) | Pabsfloat (Pfloat64, _)
662-
| Paddfloat (Pfloat64, _) | Psubfloat (Pfloat64, _)
663-
| Pmulfloat (Pfloat64, _) | Pdivfloat (Pfloat64, _)
663+
| Plsrint | Pasrint | Pintoffloat _ | Pfloatofint (_, _)
664+
| Pnegfloat (_, _) | Pabsfloat (_, _)
665+
| Paddfloat (_, _) | Psubfloat (_, _)
666+
| Pmulfloat (_, _) | Pdivfloat (_, _)
664667
| Pstringlength | Pstringrefu
665668
| Pstringrefs | Pbyteslength | Pbytesrefu | Pbytessetu
666669
| Pbytesrefs | Pbytessets | Pisint | Pisout
@@ -669,15 +672,15 @@ let rec transl env e =
669672
| Pfloatfield _ | Psetfloatfield (_, _) | Pduprecord (_, _)
670673
| Pufloatfield _ | Psetufloatfield (_, _)
671674
| Praise _ | Pdivint _ | Pmodint _ | Pintcomp _ | Poffsetint _
672-
| Pcompare_ints | Pcompare_floats Pfloat64 | Pcompare_bints _
673-
| Poffsetref _ | Pfloatcomp (Pfloat64, _) | Punboxed_float_comp (Pfloat64, _)
675+
| Pcompare_ints | Pcompare_floats _ | Pcompare_bints _
676+
| Poffsetref _ | Pfloatcomp (_, _) | Punboxed_float_comp (_, _)
674677
| Parraylength _ | Parrayrefu _ | Parraysetu _ | Parrayrefs _ | Parraysets _
675678
| Pbintofint _ | Pintofbint _ | Pcvtbint _ | Pnegbint _
676679
| Paddbint _ | Psubbint _ | Pmulbint _ | Pdivbint _ | Pmodbint _
677680
| Pandbint _ | Porbint _ | Pxorbint _ | Plslbint _ | Plsrbint _
678681
| Pasrbint _ | Pbintcomp (_, _) | Punboxed_int_comp (_, _) | Pstring_load _
679682
| Pbytes_load _ | Pbytes_set _ | Pbigstring_load _ | Pbigstring_set _
680-
| Punbox_float Pfloat64 | Pbox_float (Pfloat64, _) | Punbox_int _ | Pbox_int _
683+
| Punbox_float _ | Pbox_float (_, _) | Punbox_int _ | Pbox_int _
681684
| Pbbswap _ | Pget_header _), _)
682685
->
683686
fatal_error "Cmmgen.transl:prim"
@@ -876,7 +879,7 @@ and transl_make_array dbg env kind mode args =
876879
| Pfloatarray ->
877880
make_float_alloc ~mode dbg Obj.double_array_tag
878881
(List.map (transl_unbox_float dbg env) args)
879-
| Punboxedfloatarray Pfloat64 | Punboxedintarray _ ->
882+
| Punboxedfloatarray _ | Punboxedintarray _ ->
880883
Misc.fatal_errorf "Unboxed arrays not supported"
881884

882885
and transl_ccall env prim args dbg =
@@ -885,6 +888,9 @@ and transl_ccall env prim args dbg =
885888
| Same_as_ocaml_repr sort -> (exttype_of_sort sort, transl env arg)
886889
| Unboxed_float Pfloat64 ->
887890
(XFloat, transl_unbox_float dbg env arg)
891+
| Unboxed_float Pfloat32 ->
892+
Misc.fatal_error
893+
"float32 is not supported in the upstream compiler build."
888894
| Unboxed_integer bi ->
889895
let xty =
890896
match bi with
@@ -916,6 +922,9 @@ and transl_ccall env prim args dbg =
916922
| _, Same_as_ocaml_repr sort -> (machtype_of_sort sort, fun x -> x)
917923
(* TODO: Allow Alloc_local on suitably typed C stubs *)
918924
| _, Unboxed_float Pfloat64 -> (typ_float, box_float dbg alloc_heap)
925+
| _, Unboxed_float Pfloat32 ->
926+
Misc.fatal_error
927+
"float32 is not supported in the upstream compiler build."
919928
| _, Unboxed_integer bi -> (typ_int, box_int dbg bi alloc_heap)
920929
| _, Untagged_int -> (typ_int, (fun i -> tag_int i dbg))
921930
| _, Unboxed_vector _ ->
@@ -969,6 +978,13 @@ and transl_prim_1 env p arg dbg =
969978
box_float dbg m (Cop(Cnegf, [transl_unbox_float dbg env arg], dbg))
970979
| Pabsfloat (Pfloat64, m) ->
971980
box_float dbg m (Cop(Cabsf, [transl_unbox_float dbg env arg], dbg))
981+
| Punbox_float Pfloat32
982+
| Pbox_float (Pfloat32, _)
983+
| Pfloatofint (Pfloat32, _)
984+
| Pintoffloat Pfloat32
985+
| Pnegfloat (Pfloat32, _)
986+
| Pabsfloat (Pfloat32, _) ->
987+
Misc.fatal_error "float32 is not supported in the upstream compiler build."
972988
(* String operations *)
973989
| Pstringlength | Pbyteslength ->
974990
tag_int(string_length (transl env arg) dbg) dbg
@@ -1025,16 +1041,16 @@ and transl_prim_1 env p arg dbg =
10251041
| Patomic_exchange | Patomic_cas | Patomic_fetch_add
10261042
| Paddint | Psubint | Pmulint | Pandint
10271043
| Porint | Pxorint | Plslint | Plsrint | Pasrint
1028-
| Paddfloat (Pfloat64, _) | Psubfloat (Pfloat64, _)
1029-
| Pmulfloat (Pfloat64, _) | Pdivfloat (Pfloat64, _)
1044+
| Paddfloat (_, _) | Psubfloat (_, _)
1045+
| Pmulfloat (_, _) | Pdivfloat (_, _)
10301046
| Pstringrefu | Pstringrefs | Pbytesrefu | Pbytessetu
10311047
| Pbytesrefs | Pbytessets | Pisout | Pread_symbol _
10321048
| Pmakeblock (_, _, _, _) | Psetfield (_, _, _) | Psetfield_computed (_, _)
10331049
| Pmakeufloatblock (_, _)
10341050
| Psetfloatfield (_, _) | Pduprecord (_, _) | Pccall _ | Pdivint _
10351051
| Psetufloatfield (_, _)
1036-
| Pmodint _ | Pintcomp _ | Pfloatcomp (Pfloat64, _) | Punboxed_float_comp (Pfloat64, _)
1037-
| Pmakearray (_, _, _) | Pcompare_ints | Pcompare_floats Pfloat64 | Pcompare_bints _
1052+
| Pmodint _ | Pintcomp _ | Pfloatcomp (_, _) | Punboxed_float_comp (_, _)
1053+
| Pmakearray (_, _, _) | Pcompare_ints | Pcompare_floats _ | Pcompare_bints _
10381054
| Pduparray (_, _) | Parrayrefu _ | Parraysetu _
10391055
| Parrayrefs _ | Parraysets _ | Paddbint _ | Psubbint _ | Pmulbint _
10401056
| Pdivbint _ | Pmodbint _ | Pandbint _ | Porbint _ | Pxorbint _
@@ -1115,6 +1131,9 @@ and transl_prim_2 env p arg1 arg2 dbg =
11151131
let a1 = transl_unbox_float dbg env arg1 in
11161132
let a2 = transl_unbox_float dbg env arg2 in
11171133
mk_compare_floats dbg a1 a2
1134+
| Pcompare_floats Pfloat32 ->
1135+
Misc.fatal_error
1136+
"float32 is not supported in the upstream compiler build."
11181137
| Pisout ->
11191138
transl_isout (transl env arg1) (transl env arg2) dbg
11201139
(* Float operations *)
@@ -1148,7 +1167,13 @@ and transl_prim_2 env p arg1 arg2 dbg =
11481167
[transl env arg1;
11491168
transl env arg2],
11501169
dbg)) dbg
1151-
1170+
| Paddfloat (Pfloat32, _)
1171+
| Psubfloat (Pfloat32, _)
1172+
| Pmulfloat (Pfloat32, _)
1173+
| Pdivfloat (Pfloat32, _)
1174+
| Pfloatcomp (Pfloat32, _)
1175+
| Punboxed_float_comp (Pfloat32, _) ->
1176+
Misc.fatal_error "float32 is not supported in the upstream compiler build"
11521177
(* String operations *)
11531178
| Pstringrefu | Pbytesrefu ->
11541179
stringref_unsafe (transl env arg1) (transl env arg2) dbg
@@ -1229,8 +1254,8 @@ and transl_prim_2 env p arg1 arg2 dbg =
12291254
[transl env arg1; transl env arg2], dbg)
12301255
| Prunstack | Pperform | Presume | Preperform | Pdls_get
12311256
| Patomic_cas | Patomic_load _
1232-
| Pnot | Pnegint | Pintoffloat Pfloat64 | Pfloatofint (Pfloat64, _)
1233-
| Pnegfloat (Pfloat64, _) | Pabsfloat (Pfloat64, _)
1257+
| Pnot | Pnegint | Pintoffloat _ | Pfloatofint (_, _)
1258+
| Pnegfloat (_, _) | Pabsfloat (_, _)
12341259
| Pstringlength | Pbyteslength | Pbytessetu | Pbytessets
12351260
| Pisint | Pbswap16 | Pint_as_pointer _ | Popaque | Pread_symbol _
12361261
| Pmakeblock (_, _, _, _) | Pfield _ | Psetfield_computed (_, _)
@@ -1241,7 +1266,7 @@ and transl_prim_2 env p arg1 arg2 dbg =
12411266
| Pnegbint _ | Pbigarrayref (_, _, _, _) | Pbigarrayset (_, _, _, _)
12421267
| Pbigarraydim _ | Pbytes_set _ | Pbigstring_set _ | Pbbswap _
12431268
| Pprobe_is_enabled _
1244-
| Punbox_float Pfloat64 | Pbox_float (Pfloat64, _)
1269+
| Punbox_float _ | Pbox_float (_, _)
12451270
| Punbox_int _ | Pbox_int _ | Pget_header _
12461271
->
12471272
fatal_errorf "Cmmgen.transl_prim_2: %a"
@@ -1325,18 +1350,18 @@ and transl_prim_3 env p arg1 arg2 arg3 dbg =
13251350
| Patomic_exchange | Patomic_fetch_add | Patomic_load _
13261351
| Pfield_computed | Psequand | Psequor | Pnot | Pnegint | Paddint
13271352
| Psubint | Pmulint | Pandint | Porint | Pxorint | Plslint | Plsrint | Pasrint
1328-
| Pintoffloat Pfloat64 | Pfloatofint (Pfloat64, _) | Pnegfloat (Pfloat64, _)
1329-
| Pabsfloat (Pfloat64, _) | Paddfloat (Pfloat64, _) | Psubfloat (Pfloat64, _)
1330-
| Pmulfloat (Pfloat64, _) | Pdivfloat (Pfloat64, _) | Pstringlength
1353+
| Pintoffloat _ | Pfloatofint (_, _) | Pnegfloat (_, _)
1354+
| Pabsfloat (_, _) | Paddfloat (_, _) | Psubfloat (_, _)
1355+
| Pmulfloat (_, _) | Pdivfloat (_, _) | Pstringlength
13311356
| Pstringrefu | Pstringrefs | Pbyteslength | Pbytesrefu | Pbytesrefs | Pisint
13321357
| Pisout | Pbswap16 | Pint_as_pointer _ | Popaque | Pread_symbol _
13331358
| Pmakeblock (_, _, _, _)
13341359
| Pfield _ | Psetfield (_, _, _) | Pfloatfield _ | Psetfloatfield (_, _)
13351360
| Pmakeufloatblock (_, _) | Pufloatfield _ | Psetufloatfield (_, _)
13361361
| Pduprecord (_, _) | Pccall _ | Praise _ | Pdivint _ | Pmodint _ | Pintcomp _
1337-
| Pcompare_ints | Pcompare_floats Pfloat64 | Pcompare_bints _
1362+
| Pcompare_ints | Pcompare_floats _ | Pcompare_bints _
13381363
| Poffsetint _ | Poffsetref _
1339-
| Pfloatcomp (Pfloat64, _) | Punboxed_float_comp (Pfloat64, _)
1364+
| Pfloatcomp (_, _) | Punboxed_float_comp (_, _)
13401365
| Pmakearray (_, _, _)
13411366
| Pduparray (_, _) | Parraylength _ | Parrayrefu _ | Parrayrefs _
13421367
| Pbintofint _ | Pintofbint _ | Pcvtbint _ | Pnegbint _ | Paddbint _
@@ -1346,7 +1371,7 @@ and transl_prim_3 env p arg1 arg2 arg3 dbg =
13461371
| Pbigarrayref (_, _, _, _) | Pbigarrayset (_, _, _, _) | Pbigarraydim _
13471372
| Pstring_load _ | Pbytes_load _ | Pbigstring_load _ | Pbbswap _
13481373
| Pprobe_is_enabled _
1349-
| Punbox_float Pfloat64 | Pbox_float (Pfloat64, _)
1374+
| Punbox_float _ | Pbox_float (_, _)
13501375
| Punbox_int _ | Pbox_int _ | Pget_header _
13511376
->
13521377
fatal_errorf "Cmmgen.transl_prim_3: %a"
@@ -1385,6 +1410,9 @@ and transl_let_value env str (kind : Lambda.value_kind) id exp transl_body =
13851410
match str, kind with
13861411
| Mutable, Pboxedfloatval Pfloat64 ->
13871412
Boxed (Boxed_float (alloc_heap, dbg), false)
1413+
| _, Pboxedfloatval Pfloat32 ->
1414+
Misc.fatal_error
1415+
"float32 is not supported in the upstream compiler build."
13881416
| Mutable, Pboxedintval bi ->
13891417
Boxed (Boxed_integer (bi, alloc_heap, dbg), false)
13901418
| _, Pboxedvectorval _ ->
@@ -1439,6 +1467,9 @@ and transl_let env str (layout : Lambda.layout) id exp transl_body =
14391467
| Punboxed_vector _ ->
14401468
Misc.fatal_error
14411469
"SIMD vectors are not supported in the upstream compiler build."
1470+
| Punboxed_float Pfloat32 ->
1471+
Misc.fatal_error
1472+
"float32 is not supported in the upstream compiler build."
14421473
| Punboxed_float Pfloat64 | Punboxed_int _ -> begin
14431474
let cexp = transl env exp in
14441475
let cbody = transl_body env in

boot/ocamlc

4.88 KB
Binary file not shown.

boot/ocamllex

0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)