projects
/
mono.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge pull request #4381 from BrzVlad/feature-generational-hash
[mono.git]
/
mono
/
metadata
/
sgen-mono.c
diff --git
a/mono/metadata/sgen-mono.c
b/mono/metadata/sgen-mono.c
index ab1c872fe076e0ffd5c684b166f399b12ea4307a..1964c55b064373fa05d69c01e5e3221f3cd6e8c3 100644
(file)
--- a/
mono/metadata/sgen-mono.c
+++ b/
mono/metadata/sgen-mono.c
@@
-1051,7
+1051,7
@@
create_allocator (int atype, ManagedAllocatorVariant variant)
{
int p_var, size_var, real_size_var, thread_var G_GNUC_UNUSED;
gboolean slowpath = variant == MANAGED_ALLOCATOR_SLOW_PATH;
{
int p_var, size_var, real_size_var, thread_var G_GNUC_UNUSED;
gboolean slowpath = variant == MANAGED_ALLOCATOR_SLOW_PATH;
- guint32
slowpath_branch, max_size
_branch;
+ guint32
fastpath_branch, max_size_branch, no_oom
_branch;
MonoMethodBuilder *mb;
MonoMethod *res;
MonoMethodSignature *csig;
MonoMethodBuilder *mb;
MonoMethod *res;
MonoMethodSignature *csig;
@@
-1318,7
+1318,7
@@
create_allocator (int atype, ManagedAllocatorVariant variant)
/* if (G_LIKELY (new_next < tlab_temp_end)) */
mono_mb_emit_ldloc (mb, new_next_var);
EMIT_TLS_ACCESS_TEMP_END (mb, thread_var);
/* if (G_LIKELY (new_next < tlab_temp_end)) */
mono_mb_emit_ldloc (mb, new_next_var);
EMIT_TLS_ACCESS_TEMP_END (mb, thread_var);
-
slow
path_branch = mono_mb_emit_short_branch (mb, MONO_CEE_BLT_UN_S);
+
fast
path_branch = mono_mb_emit_short_branch (mb, MONO_CEE_BLT_UN_S);
/* Slowpath */
if (atype != ATYPE_SMALL)
/* Slowpath */
if (atype != ATYPE_SMALL)
@@
-1353,10
+1353,17
@@
create_allocator (int atype, ManagedAllocatorVariant variant)
} else {
g_assert_not_reached ();
}
} else {
g_assert_not_reached ();
}
+
+ /* if (ret == NULL) throw OOM; */
+ mono_mb_emit_byte (mb, CEE_DUP);
+ no_oom_branch = mono_mb_emit_branch (mb, CEE_BRTRUE);
+ mono_mb_emit_exception (mb, "OutOfMemoryException", NULL);
+
+ mono_mb_patch_branch (mb, no_oom_branch);
mono_mb_emit_byte (mb, CEE_RET);
/* Fastpath */
mono_mb_emit_byte (mb, CEE_RET);
/* Fastpath */
- mono_mb_patch_short_branch (mb,
slow
path_branch);
+ mono_mb_patch_short_branch (mb,
fast
path_branch);
/* FIXME: Memory barrier */
/* FIXME: Memory barrier */