diff --git a/julia/mmtk_julia.c b/julia/mmtk_julia.c index d948bd0d..64967e9f 100644 --- a/julia/mmtk_julia.c +++ b/julia/mmtk_julia.c @@ -96,6 +96,34 @@ JL_DLLEXPORT jl_value_t *jl_mmtk_gc_alloc_big(jl_ptls_t ptls, size_t sz) return result; } +// allocating in a non-moving space +JL_DLLEXPORT jl_value_t *jl_mmtk_gc_alloc_non_moving(jl_ptls_t ptls, + int osize, void *ty) +{ + // safepoint + jl_gc_safepoint_(ptls); + + jl_value_t *v; + if ((uintptr_t)ty != jl_buff_tag) { + // v needs to be 16 byte aligned, therefore v_tagged needs to be offset accordingly to consider the size of header + jl_taggedvalue_t *v_tagged = (jl_taggedvalue_t *)mmtk_alloc(&ptls->mmtk_mutator, LLT_ALIGN(osize, 16), 16, sizeof(jl_taggedvalue_t), 6); + v = jl_valueof(v_tagged); + mmtk_non_moving_post_alloc_fast(&ptls->mmtk_mutator, v, osize); + } else { + // allocating an extra word to store the size of buffer objects + jl_taggedvalue_t *v_tagged = (jl_taggedvalue_t *)mmtk_alloc(&ptls->mmtk_mutator, LLT_ALIGN(osize+sizeof(jl_taggedvalue_t), 16), 16, 0, 6); + jl_value_t* v_tagged_aligned = ((jl_value_t*)((char*)(v_tagged) + sizeof(jl_taggedvalue_t))); + v = jl_valueof(v_tagged_aligned); + mmtk_store_obj_size_c(v, osize + sizeof(jl_taggedvalue_t)); + mmtk_non_moving_post_alloc_fast(&ptls->mmtk_mutator, v, osize + sizeof(jl_taggedvalue_t)); + } + + ptls->gc_num.allocd += osize; + ptls->gc_num.poolalloc++; + + return v; +} + static void mmtk_sweep_malloced_arrays(void) JL_NOTSAFEPOINT { void* iter = new_mutator_iterator(); diff --git a/mmtk/Cargo.lock b/mmtk/Cargo.lock index 32eda2a7..f428777f 100644 --- a/mmtk/Cargo.lock +++ b/mmtk/Cargo.lock @@ -474,7 +474,7 @@ dependencies = [ [[package]] name = "mmtk" version = "0.19.0" -source = "git+https://github.com/qinsoon/mmtk-core.git?rev=99d2d9ad25b3a36cea52b0f4ffdc24b16e0ee720#99d2d9ad25b3a36cea52b0f4ffdc24b16e0ee720" +source = "git+https://github.com/mmtk/mmtk-core.git?rev=a504184311d490dd1c7ee36bab87b61a671038a1#a504184311d490dd1c7ee36bab87b61a671038a1" dependencies = [ "atomic 0.5.3", "atomic-traits", @@ -523,7 +523,7 @@ dependencies = [ [[package]] name = "mmtk-macros" version = "0.19.0" -source = "git+https://github.com/qinsoon/mmtk-core.git?rev=99d2d9ad25b3a36cea52b0f4ffdc24b16e0ee720#99d2d9ad25b3a36cea52b0f4ffdc24b16e0ee720" +source = "git+https://github.com/mmtk/mmtk-core.git?rev=a504184311d490dd1c7ee36bab87b61a671038a1#a504184311d490dd1c7ee36bab87b61a671038a1" dependencies = [ "proc-macro-error", "proc-macro2", diff --git a/mmtk/Cargo.toml b/mmtk/Cargo.toml index db615c97..f58f4d22 100644 --- a/mmtk/Cargo.toml +++ b/mmtk/Cargo.toml @@ -9,8 +9,8 @@ edition = "2018" # Metadata for the Julia repository [package.metadata.julia] # Our CI matches the following line and extract mmtk/julia. If this line is updated, please check ci yaml files and make sure it works. -julia_repo = "https://github.com/mmtk/julia.git" -julia_version = "83796a7d38878faa9afdb94ce84b6da00035b336" +julia_repo = "https://github.com/udesou/julia.git" +julia_version = "0e0adf1cb1f5193c6f6a8b0fd0dc0561c8e04f44" [lib] crate-type = ["cdylib"]