Please do not reply to this email- if you want to comment on the bug, go to the URL shown below and enter your comments there.
Changed by [EMAIL PROTECTED] http://bugzilla.ximian.com/show_bug.cgi?id=81663 --- shadow/81663 2007-05-23 18:08:53.000000000 -0400 +++ shadow/81663.tmp.27029 2007-05-24 07:24:59.000000000 -0400 @@ -119,6 +119,36 @@ ------- Additional Comments From [EMAIL PROTECTED] 2007-05-23 18:08 ------- Created an attachment (id=19305) microbenchmark + +------- Additional Comments From [EMAIL PROTECTED] 2007-05-24 07:24 ------- +Sadly it's not possible to implement the idea in arch-indep code as it +is highly specific to the call convention ABI, otherwise you just pay +the additional overhead of an indirect call vs a direct call, as you +found out, so the patch is no indication of the expected performance. + +As an example of how this would look like, the +delegate_invoke_with_target would be implemented in mini-amd64.c with: + + amd64_mov_reg_membase (code, AMD64_RAX, AMD64_RDI, G_STRUCT_OFFSET +(MonoDelegate, method_ptr), 8); + amd64_mov_reg_membase (code, AMD64_RDI, AMD64_RDI, G_STRUCT_OFFSET +(MonoDelegate, target), 8); + amd64_jump_reg (code, AMD64_RAX); + +(changing rdi to account for struct return types). This code is much +faster than the one produced by your patch, especially with many +arguments. + +This may require changes for the mono_delegate_trampoline() handling +to remove assumptions about the current way of invoking delegates. +We should likely have a new delegate magic trampoline which is +installed in the invoke_impl you added (this would remove the huge +overhead your change adds to the delegate ctor). This magic trampoline +would have easy access to the delegate object so it it completely +generic (one instance of the trampoline in the system vs one +trampoline per method/delegate type) and it can replace invoke_impl +according to the target and prev fields in the delegate. + _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
