Skip to content

Commit

Permalink
rebase ocaml-multicore PR328: Get multicore compiler working with fla…
Browse files Browse the repository at this point in the history
…mbda
  • Loading branch information
ctk21 committed May 1, 2020
1 parent e4c8a5e commit e30cf7c
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 21 deletions.
24 changes: 22 additions & 2 deletions asmcomp/cmmgen.ml
Original file line number Diff line number Diff line change
Expand Up @@ -840,6 +840,10 @@ and transl_prim_1 env p arg dbg =
| Pbswap16 ->
tag_int (bswap16 (ignore_high_bit_int (untag_int
(transl env arg) dbg)) dbg) dbg
| Pperform ->
let cont = make_alloc dbg Obj.cont_tag [int_const dbg 0] in
Cop(Capply typ_val, [Cconst_symbol ("caml_perform", dbg); transl env arg; cont],
dbg)
| Ppoll ->
Cop(Cpoll, [transl env arg], dbg)
| Patomic_load {immediate_or_pointer} ->
Expand All @@ -854,7 +858,7 @@ and transl_prim_1 env p arg dbg =
Cop (Cloadmut {is_atomic=true},
[ptr; Cconst_int (0, dbg)], dbg))
| (Pfield_computed | Psequand | Psequor
| Prunstack | Pperform | Presume | Preperform
| Prunstack | Presume | Preperform
| Patomic_exchange | Patomic_cas | Patomic_fetch_add
| Paddint | Psubint | Pmulint | Pandint
| Porint | Pxorint | Plslint | Plsrint | Pasrint
Expand Down Expand Up @@ -1090,7 +1094,23 @@ and transl_prim_3 env p arg1 arg2 arg3 dbg =
Cop (Cextcall ("caml_atomic_cas", typ_int, false, None),
[transl env arg1; transl env arg2; transl env arg3], dbg)

| Prunstack | Pperform | Presume | Preperform | Ppoll
(* Effects *)
| Presume ->
Cop (Capply typ_val, [Cconst_symbol ("caml_resume", dbg); transl env arg1;
transl env arg2; transl env arg3],
dbg)

| Prunstack ->
Cop (Capply typ_val, [Cconst_symbol ("caml_runstack", dbg); transl env arg1;
transl env arg2; transl env arg3],
dbg)

| Preperform ->
Cop (Capply typ_val, [Cconst_symbol ("caml_reperform", dbg); transl env arg1;
transl env arg2; transl env arg3],
dbg)

| Pperform | Ppoll
| Patomic_exchange | Patomic_fetch_add | Patomic_load _
| Pfield_computed | Psequand | Psequor | Pnot | Pnegint | Paddint
| Psubint | Pmulint | Pandint | Porint | Pxorint | Plslint | Plsrint | Pasrint
Expand Down
19 changes: 0 additions & 19 deletions middle_end/closure/closure.ml
Original file line number Diff line number Diff line change
Expand Up @@ -1074,25 +1074,6 @@ let rec close ({ backend; fenv; cenv } as env) lam =
let dbg = Debuginfo.from_location loc in
(Uprim(P.Praise k, [ulam], dbg),
Value_unknown)
| Lprim(Pperform, [arg], loc) ->
let (arg, _approx) = close env arg in
let dbg = Debuginfo.from_location loc in
let alloc_cont = Uprim(P.Pmakeblock(Obj.cont_tag, Mutable, None),
[Uconst (Uconst_int 0)],
dbg) in
(Udirect_apply ("caml_perform", [arg; alloc_cont], dbg), Value_unknown)
| Lprim(Presume, args, loc) ->
let args = close_list env args in
let dbg = Debuginfo.from_location loc in
(Udirect_apply ("caml_resume", args, dbg), Value_unknown)
| Lprim(Prunstack, args, loc) ->
let args = close_list env args in
let dbg = Debuginfo.from_location loc in
(Udirect_apply ("caml_runstack", args, dbg), Value_unknown)
| Lprim(Preperform, args, loc) ->
let args = close_list env args in
let dbg = Debuginfo.from_location loc in
(Udirect_apply ("caml_reperform", args, dbg), Value_unknown)
| Lprim (Pmakearray _, [], _loc) -> make_const_ref (Uconst_block (0, []))
| Lprim(p, args, loc) ->
let p = Convert_primitives.convert p in
Expand Down

0 comments on commit e30cf7c

Please sign in to comment.