diff options
author | Vladimir Marko <vmarko@google.com> | 2015-02-16 13:05:59 +0000 |
---|---|---|
committer | Vladimir Marko <vmarko@google.com> | 2015-02-19 17:08:25 +0000 |
commit | 6ce3eba0f2e6e505ed408cdc40d213c8a512238d (patch) | |
tree | 5f7ced5c710ada776fa2e2624a05a0d414ed8b39 /compiler/dex/mir_graph.h | |
parent | 1b472546657d31d38883373d8340d1441281a6a5 (diff) | |
download | art-6ce3eba0f2e6e505ed408cdc40d213c8a512238d.tar.gz art-6ce3eba0f2e6e505ed408cdc40d213c8a512238d.tar.bz2 art-6ce3eba0f2e6e505ed408cdc40d213c8a512238d.zip |
Add suspend checks to special methods.
Generate suspend checks at the beginning of special methods.
If we need to call to runtime, go to the slow path where we
create a simplified but valid frame, spill all arguments,
call art_quick_test_suspend, restore necessary arguments and
return back to the fast path. This keeps the fast path
overhead to a minimum.
Bug: 19245639
Change-Id: I3de5aee783943941322a49c4cf2c4c94411dbaa2
Diffstat (limited to 'compiler/dex/mir_graph.h')
-rw-r--r-- | compiler/dex/mir_graph.h | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/compiler/dex/mir_graph.h b/compiler/dex/mir_graph.h index 020136c3d8..d74e7b6a97 100644 --- a/compiler/dex/mir_graph.h +++ b/compiler/dex/mir_graph.h @@ -498,19 +498,19 @@ class ChildBlockIterator { * more efficient invoke code generation. */ struct CallInfo { - int num_arg_words; // Note: word count, not arg count. - RegLocation* args; // One for each word of arguments. - RegLocation result; // Eventual target of MOVE_RESULT. + size_t num_arg_words; // Note: word count, not arg count. + RegLocation* args; // One for each word of arguments. + RegLocation result; // Eventual target of MOVE_RESULT. int opt_flags; InvokeType type; uint32_t dex_idx; - uint32_t index; // Method idx for invokes, type idx for FilledNewArray. + uint32_t index; // Method idx for invokes, type idx for FilledNewArray. uintptr_t direct_code; uintptr_t direct_method; - RegLocation target; // Target of following move_result. + RegLocation target; // Target of following move_result. bool skip_this; bool is_range; - DexOffset offset; // Offset in code units. + DexOffset offset; // Offset in code units. MIR* mir; }; |