Skip to content

Commit

Permalink
Squashed 'ocaml/' changes from 173842ce84..64235a382a
Browse files Browse the repository at this point in the history
64235a382a flambda-backend: Change Float.nan from sNaN to qNaN (#466)
14a8e27063 flambda-backend: Track GC work for all managed bigarray allocations (upstream 11022) (#569)
c3cda96154 flambda-backend: Add two new methods to targetint for dwarf (#560)
e6f1fed2f5 flambda-backend: Handle arithmetic overflow in select_addr (#570)
dab7209a12 flambda-backend: Add Target_system to ocaml/utils (#542)
82d5044871 flambda-backend: Enhance numbers.ml with more primitive types (#544)
216be99334 flambda-backend: Fix flambda_o3 and flambda_oclassic attributes (#536)
4b56e07c1d flambda-backend: Test naked pointer root handling (#550)
40d69cef86 flambda-backend: Stop local function optimisation from moving code into function bodies; opaque_identity fixes for class compilation (#537)
f08ae5851c flambda-backend: Implemented inlining history and use it inside inlining reports (#365)
ac496bf52e flambda-backend: Disable the local keyword in typing (#540)
7d46712f7a flambda-backend: Bugfix for Typedtree generation of arrow types (#539)
61a7b47773 flambda-backend: Insert missing page table check in roots_nat.c (#541)
323bd36d98 flambda-backend: Compiler error when -disable-all-extensions and -extension are used (#534)
d8956b09e4 flambda-backend: Persistent environment and reproducibility (#533)
4a0c89f117 flambda-backend: Revert "Revert bswap PRs (480 and 482)" (#506)
7803705828 flambda-backend: Cause a C warning when CAMLreturn is missing in C stubs. (#376)
6199db5b26 flambda-backend: Improve unboxing during cmm for Flambda (#295)
96b9e1ba6d flambda-backend: Print diagnostics at runtime for Invalid (#530)
42ab88e8a1 flambda-backend: Disable bytecode compilers in ocamltest (#504)
58c72d5476 flambda-backend: Backport ocaml/ocaml#10595 from upstream/trunk (#471)
10105394de flambda-backend: Use C++ name mangling convention (#483)
81881bbf88 flambda-backend: Local allocation test no longer relies on lifting (#525)
f5c47190f6 flambda-backend: Fix an assertion in Closure that breaks probes (#505)
c2cf2b2a14 flambda-backend: Add some missing command line arguments to ocamlnat (#499)

git-subtree-dir: ocaml
git-subtree-split: 64235a382a0424cced40eed328ddf1dfb9645f87
  • Loading branch information
stedolan committed Mar 7, 2022
1 parent 549bb6f commit b54d3a3
Show file tree
Hide file tree
Showing 94 changed files with 1,645 additions and 695 deletions.
51 changes: 46 additions & 5 deletions .depend
Original file line number Diff line number Diff line change
Expand Up @@ -130,13 +130,25 @@ utils/strongly_connected_components.cmx : \
utils/strongly_connected_components.cmi
utils/strongly_connected_components.cmi : \
utils/identifiable.cmi
utils/target_system.cmo : \
utils/misc.cmi \
utils/config.cmi \
utils/target_system.cmi
utils/target_system.cmx : \
utils/misc.cmx \
utils/config.cmx \
utils/target_system.cmi
utils/target_system.cmi :
utils/targetint.cmo : \
utils/numbers.cmi \
utils/misc.cmi \
utils/targetint.cmi
utils/targetint.cmx : \
utils/numbers.cmx \
utils/misc.cmx \
utils/targetint.cmi
utils/targetint.cmi :
utils/targetint.cmi : \
utils/numbers.cmi
utils/terminfo.cmo : \
utils/terminfo.cmi
utils/terminfo.cmx : \
Expand Down Expand Up @@ -331,13 +343,15 @@ parsing/lexer.cmo : \
utils/misc.cmi \
parsing/location.cmi \
parsing/docstrings.cmi \
utils/clflags.cmi \
parsing/lexer.cmi
parsing/lexer.cmx : \
utils/warnings.cmx \
parsing/parser.cmx \
utils/misc.cmx \
parsing/location.cmx \
parsing/docstrings.cmx \
utils/clflags.cmx \
parsing/lexer.cmi
parsing/lexer.cmi : \
parsing/parser.cmi \
Expand Down Expand Up @@ -513,6 +527,7 @@ typing/ctype.cmo : \
typing/types.cmi \
typing/type_immediacy.cmi \
typing/subst.cmi \
typing/primitive.cmi \
typing/predef.cmi \
typing/path.cmi \
utils/misc.cmi \
Expand All @@ -529,6 +544,7 @@ typing/ctype.cmx : \
typing/types.cmx \
typing/type_immediacy.cmx \
typing/subst.cmx \
typing/primitive.cmx \
typing/predef.cmx \
typing/path.cmx \
utils/misc.cmx \
Expand All @@ -544,6 +560,7 @@ typing/ctype.cmx : \
typing/ctype.cmi : \
typing/types.cmi \
typing/type_immediacy.cmi \
typing/primitive.cmi \
typing/path.cmi \
parsing/longident.cmi \
typing/ident.cmi \
Expand Down Expand Up @@ -681,6 +698,7 @@ typing/includecore.cmo : \
typing/typedtree.cmi \
typing/type_immediacy.cmi \
typing/printtyp.cmi \
typing/primitive.cmi \
typing/path.cmi \
typing/ident.cmi \
typing/env.cmi \
Expand All @@ -694,6 +712,7 @@ typing/includecore.cmx : \
typing/typedtree.cmx \
typing/type_immediacy.cmx \
typing/printtyp.cmx \
typing/primitive.cmx \
typing/path.cmx \
typing/ident.cmx \
typing/env.cmx \
Expand Down Expand Up @@ -1042,6 +1061,7 @@ typing/printtyped.cmo : \
parsing/location.cmi \
typing/ident.cmi \
utils/clflags.cmi \
typing/btype.cmi \
parsing/asttypes.cmi \
typing/printtyped.cmi
typing/printtyped.cmx : \
Expand All @@ -1054,6 +1074,7 @@ typing/printtyped.cmx : \
parsing/location.cmx \
typing/ident.cmx \
utils/clflags.cmx \
typing/btype.cmx \
parsing/asttypes.cmi \
typing/printtyped.cmi
typing/printtyped.cmi : \
Expand Down Expand Up @@ -1251,6 +1272,7 @@ typing/typecore.cmo : \
utils/misc.cmi \
parsing/longident.cmi \
parsing/location.cmi \
utils/local_store.cmi \
typing/ident.cmi \
parsing/extensions.cmi \
typing/env.cmi \
Expand Down Expand Up @@ -1282,6 +1304,7 @@ typing/typecore.cmx : \
utils/misc.cmx \
parsing/longident.cmx \
parsing/location.cmx \
utils/local_store.cmx \
typing/ident.cmx \
parsing/extensions.cmx \
typing/env.cmx \
Expand All @@ -1304,6 +1327,7 @@ typing/typecore.cmi : \
typing/env.cmi \
typing/ctype.cmi \
utils/clflags.cmi \
typing/btype.cmi \
parsing/asttypes.cmi
typing/typedecl.cmo : \
utils/warnings.cmi \
Expand Down Expand Up @@ -1553,6 +1577,7 @@ typing/typemod.cmo : \
utils/load_path.cmi \
typing/includemod.cmi \
typing/ident.cmi \
typing/envaux.cmi \
typing/env.cmi \
typing/ctype.cmi \
utils/config.cmi \
Expand Down Expand Up @@ -1585,6 +1610,7 @@ typing/typemod.cmx : \
utils/load_path.cmx \
typing/includemod.cmx \
typing/ident.cmx \
typing/envaux.cmx \
typing/env.cmx \
typing/ctype.cmx \
utils/config.cmx \
Expand Down Expand Up @@ -2360,7 +2386,6 @@ asmcomp/cmm_helpers.cmo : \
asmcomp/strmatch.cmi \
asmcomp/proc.cmi \
typing/primitive.cmi \
utils/numbers.cmi \
utils/misc.cmi \
lambda/lambda.cmi \
lambda/debuginfo.cmi \
Expand All @@ -2383,7 +2408,6 @@ asmcomp/cmm_helpers.cmx : \
asmcomp/strmatch.cmx \
asmcomp/proc.cmx \
typing/primitive.cmx \
utils/numbers.cmx \
utils/misc.cmx \
lambda/lambda.cmx \
lambda/debuginfo.cmx \
Expand Down Expand Up @@ -2492,13 +2516,15 @@ asmcomp/coloring.cmi :
asmcomp/comballoc.cmo : \
asmcomp/reg.cmi \
asmcomp/mach.cmi \
lambda/lambda.cmi \
lambda/debuginfo.cmi \
utils/config.cmi \
asmcomp/arch.cmo \
asmcomp/comballoc.cmi
asmcomp/comballoc.cmx : \
asmcomp/reg.cmx \
asmcomp/mach.cmx \
lambda/lambda.cmx \
lambda/debuginfo.cmx \
utils/config.cmx \
asmcomp/arch.cmx \
Expand Down Expand Up @@ -3153,6 +3179,7 @@ middle_end/compilenv.cmi : \
middle_end/flambda/simple_value_approx.cmi \
middle_end/flambda/base_types/set_of_closures_id.cmi \
middle_end/linkage_name.cmi \
lambda/lambda.cmi \
typing/ident.cmi \
middle_end/flambda/export_info.cmi \
middle_end/compilation_unit.cmi \
Expand Down Expand Up @@ -3231,9 +3258,11 @@ middle_end/printclambda_primitives.cmx : \
middle_end/printclambda_primitives.cmi : \
middle_end/clambda_primitives.cmi
middle_end/semantics_of_primitives.cmo : \
lambda/lambda.cmi \
middle_end/clambda_primitives.cmi \
middle_end/semantics_of_primitives.cmi
middle_end/semantics_of_primitives.cmx : \
lambda/lambda.cmx \
middle_end/clambda_primitives.cmx \
middle_end/semantics_of_primitives.cmi
middle_end/semantics_of_primitives.cmi : \
Expand Down Expand Up @@ -3547,6 +3576,7 @@ lambda/translcore.cmo : \
typing/ident.cmi \
typing/env.cmi \
lambda/debuginfo.cmi \
typing/ctype.cmi \
utils/config.cmi \
utils/clflags.cmi \
typing/btype.cmi \
Expand Down Expand Up @@ -3575,12 +3605,14 @@ lambda/translcore.cmx : \
typing/ident.cmx \
typing/env.cmx \
lambda/debuginfo.cmx \
typing/ctype.cmx \
utils/config.cmx \
utils/clflags.cmx \
typing/btype.cmx \
parsing/asttypes.cmi \
lambda/translcore.cmi
lambda/translcore.cmi : \
typing/types.cmi \
typing/typedtree.cmi \
typing/path.cmi \
parsing/location.cmi \
Expand Down Expand Up @@ -3645,6 +3677,7 @@ lambda/translobj.cmo : \
lambda/lambda.cmi \
typing/ident.cmi \
typing/env.cmi \
lambda/debuginfo.cmi \
utils/config.cmi \
utils/clflags.cmi \
typing/btype.cmi \
Expand All @@ -3656,6 +3689,7 @@ lambda/translobj.cmx : \
lambda/lambda.cmx \
typing/ident.cmx \
typing/env.cmx \
lambda/debuginfo.cmx \
utils/config.cmx \
utils/clflags.cmx \
typing/btype.cmx \
Expand All @@ -3672,7 +3706,6 @@ lambda/translprim.cmo : \
typing/primitive.cmi \
typing/predef.cmi \
typing/path.cmi \
utils/misc.cmi \
lambda/matching.cmi \
parsing/location.cmi \
lambda/lambda.cmi \
Expand All @@ -3690,7 +3723,6 @@ lambda/translprim.cmx : \
typing/primitive.cmx \
typing/predef.cmx \
typing/path.cmx \
utils/misc.cmx \
lambda/matching.cmx \
parsing/location.cmx \
lambda/lambda.cmx \
Expand Down Expand Up @@ -3764,6 +3796,7 @@ file_formats/cmt_format.cmi : \
file_formats/cmi_format.cmi
file_formats/cmx_format.cmi : \
utils/misc.cmi \
lambda/lambda.cmi \
middle_end/flambda/export_info.cmi \
middle_end/clambda.cmi
file_formats/cmxs_format.cmi : \
Expand Down Expand Up @@ -3901,6 +3934,7 @@ middle_end/flambda/augment_specialised_args.cmo : \
middle_end/flambda/pass_wrapper.cmi \
middle_end/flambda/parameter.cmi \
utils/misc.cmi \
lambda/lambda.cmi \
middle_end/internal_variable_names.cmi \
utils/int_replace_polymorphic_compare.cmi \
middle_end/flambda/inlining_cost.cmi \
Expand All @@ -3920,6 +3954,7 @@ middle_end/flambda/augment_specialised_args.cmx : \
middle_end/flambda/pass_wrapper.cmx \
middle_end/flambda/parameter.cmx \
utils/misc.cmx \
lambda/lambda.cmx \
middle_end/internal_variable_names.cmx \
utils/int_replace_polymorphic_compare.cmx \
middle_end/flambda/inlining_cost.cmx \
Expand Down Expand Up @@ -4564,6 +4599,7 @@ middle_end/flambda/flambda_utils.cmi : \
middle_end/flambda/base_types/set_of_closures_id.cmi \
middle_end/flambda/projection.cmi \
middle_end/flambda/parameter.cmi \
lambda/lambda.cmi \
middle_end/internal_variable_names.cmi \
middle_end/flambda/flambda.cmi \
middle_end/flambda/base_types/closure_id.cmi
Expand Down Expand Up @@ -4702,6 +4738,7 @@ middle_end/flambda/inline_and_simplify.cmo : \
middle_end/flambda/base_types/static_exception.cmi \
middle_end/flambda/simplify_primitives.cmi \
middle_end/flambda/simple_value_approx.cmi \
middle_end/semantics_of_primitives.cmi \
middle_end/flambda/remove_unused_arguments.cmi \
middle_end/flambda/remove_free_vars_equal_to_args.cmi \
middle_end/flambda/projection.cmi \
Expand Down Expand Up @@ -4745,6 +4782,7 @@ middle_end/flambda/inline_and_simplify.cmx : \
middle_end/flambda/base_types/static_exception.cmx \
middle_end/flambda/simplify_primitives.cmx \
middle_end/flambda/simple_value_approx.cmx \
middle_end/semantics_of_primitives.cmx \
middle_end/flambda/remove_unused_arguments.cmx \
middle_end/flambda/remove_free_vars_equal_to_args.cmx \
middle_end/flambda/projection.cmx \
Expand Down Expand Up @@ -5119,16 +5157,19 @@ middle_end/flambda/lift_let_to_initialize_symbol.cmi : \
middle_end/backend_intf.cmi
middle_end/flambda/parameter.cmo : \
middle_end/variable.cmi \
lambda/lambda.cmi \
utils/int_replace_polymorphic_compare.cmi \
utils/identifiable.cmi \
middle_end/flambda/parameter.cmi
middle_end/flambda/parameter.cmx : \
middle_end/variable.cmx \
lambda/lambda.cmx \
utils/int_replace_polymorphic_compare.cmx \
utils/identifiable.cmx \
middle_end/flambda/parameter.cmi
middle_end/flambda/parameter.cmi : \
middle_end/variable.cmi \
lambda/lambda.cmi \
utils/identifiable.cmi \
middle_end/compilation_unit.cmi
middle_end/flambda/pass_wrapper.cmo : \
Expand Down
12 changes: 12 additions & 0 deletions Changes
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@

OCaml 4.14, maintenance version
-------------------------------

### Code generation and optimizations:

- #10595: Tail calls with up to 64 arguments are guaranteed to be compiled
as tail calls. To this end, memory locations in the domain state
are used for passing arguments that do not fit in registers.
(Xavier Leroy, review by Vincent Laviron)


OCaml 4.12, maintenance version
-------------------------------

Expand Down
15 changes: 10 additions & 5 deletions asmcomp/amd64/emit.mlp
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ let slot_offset loc cl =
then !stack_offset + n * 8
else !stack_offset + (num_stack_slots.(0) + n) * 8
| Outgoing n -> n
| Domainstate _ -> assert false (* not a stack slot *)

let emit_stack_offset n =
if n < 0
Expand Down Expand Up @@ -200,14 +201,18 @@ let emit_Llabel fallthrough lbl =

(* Output a pseudo-register *)

let x86_data_type_for_stack_slot = function
| Float -> REAL8
| _ -> QWORD

let reg = function
| { loc = Reg.Reg r } -> register_name r
| { loc = Stack s; typ = Float } as r ->
let ofs = slot_offset s (register_class r) in
mem64 REAL8 ofs RSP
| { loc = Stack s } as r ->
| { loc = Stack (Domainstate n); typ = ty } ->
let ofs = n + Domainstate.(idx_of_field Domain_extra_params) * 8 in
mem64 (x86_data_type_for_stack_slot ty) ofs R14
| { loc = Stack s; typ = ty } as r ->
let ofs = slot_offset s (register_class r) in
mem64 QWORD ofs RSP
mem64 (x86_data_type_for_stack_slot ty) ofs RSP
| { loc = Unknown } ->
assert false

Expand Down

0 comments on commit b54d3a3

Please sign in to comment.