You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Aleksey Shipilev (JIRA)" <ji...@apache.org> on 2007/08/31 17:22:32 UTC

[jira] Updated: (HARMONY-4714) [drlvm][jni] JNI transition check exceptions twice

     [ https://issues.apache.org/jira/browse/HARMONY-4714?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Aleksey Shipilev updated HARMONY-4714:
--------------------------------------

    Attachment: HARMONY-4714.patch

Clean patch, still not optimal

> [drlvm][jni] JNI transition check exceptions twice
> --------------------------------------------------
>
>                 Key: HARMONY-4714
>                 URL: https://issues.apache.org/jira/browse/HARMONY-4714
>             Project: Harmony
>          Issue Type: Improvement
>            Reporter: Aleksey Shipilev
>         Attachments: HARMONY-4714-dirty.patch, HARMONY-4714.patch
>
>
> During JNI transition the exception flags are checked twice.
> 1. One check is generated in JNI lil stub (vm/vmcore/src/jit/compile.cpp:675)
>     //***** Part 11: Rethrow exception
>     cs = lil_parse_onto_end(cs,
>                             "l0=ts;"
>                             "ld l2,[l0+%0i:ref];"
>                             "jc l2!=0,_exn_raised;"
>                             "ld l2,[l0+%1i:ref];"
>                             "jc l2=0,_no_exn;"
>                             ":_exn_raised;"
>                             "m2n_save_all;"
>                             "out platform::void;"
>                             "call.noret %2i;"
>                             ":_no_exn;",
>                             eoo, eco, exn_rethrow);
>     assert(cs);
>  2. Second check is done during pop_m2n frame generation: (ex.: vm/port/src/lil/ia32/pim/m2n_ia32.cpp:259)
>  static void m2n_free_local_handles() {
>     assert(!hythread_is_suspend_enabled());
>     // AGAIN!
>     if (exn_raised()) {
>         exn_rethrow();
>     }
>     M2nFrame * m2n = m2n_get_last_frame();
>     free_local_object_handles3(m2n->local_object_handles);
>  }
> So, we might throw away the exception handling from JNI lil stub, as far push_m2n is made always during JNI transition. Much more effective is to throw away blocks from m2n_free_local_handles and m2n_pop_local_handles, but that could affect compatibility across the m2n calls.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.