From ab1d559aee05873f70494514922ad4b767c6a709 Mon Sep 17 00:00:00 2001 From: Santiago Aboy Solanes Date: Fri, 24 Jun 2022 11:16:35 +0100 Subject: Runtime implementation of try catch inlining The main differences in the runtime are: 1) We now use a list of dex_pcs to find the correct catch handler instead of a single dex pc 2) We now need to restore vregs of the whole frame, which may be an inline frame. Bug: 227283224 Test: art/test/testrunner/testrunner.py --host --64 --optimizing -b Change-Id: I95d2f32088e1d420c83962a1693be18f3b63f8b4 --- compiler/optimizing/stack_map_stream.h | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'compiler/optimizing/stack_map_stream.h') diff --git a/compiler/optimizing/stack_map_stream.h b/compiler/optimizing/stack_map_stream.h index 1aaa6aee9e..2ba60279ff 100644 --- a/compiler/optimizing/stack_map_stream.h +++ b/compiler/optimizing/stack_map_stream.h @@ -68,12 +68,15 @@ class StackMapStream : public DeletableArenaObject { bool debuggable); void EndMethod(size_t code_size); - void BeginStackMapEntry(uint32_t dex_pc, - uint32_t native_pc_offset, - uint32_t register_mask = 0, - BitVector* sp_mask = nullptr, - StackMap::Kind kind = StackMap::Kind::Default, - bool needs_vreg_info = true); + void BeginStackMapEntry( + uint32_t dex_pc, + uint32_t native_pc_offset, + uint32_t register_mask = 0, + BitVector* sp_mask = nullptr, + StackMap::Kind kind = StackMap::Kind::Default, + bool needs_vreg_info = true, + const std::vector& dex_pc_list_for_catch_verification = std::vector()); + void EndStackMapEntry(); void AddDexRegisterEntry(DexRegisterLocation::Kind kind, int32_t value) { -- cgit v1.2.3-59-g8ed1b