http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55572



             Bug #: 55572

           Summary: -fobjc-direct-dispatch is not really implemented

    Classification: Unclassified

           Product: gcc

           Version: 4.7.2

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: objc

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: tobias.net...@googlemail.com





Created attachment 28858

  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=28858

Implementations for _objc_msgSend_Fast and _objc_assign_ivar_Fast



The switch causes the compiler to generate calls to builtins named

"_objc_msgSend_Fast" and "_objc_assign_ivar_Fast" but an implementation is

missing. Reading the comments those builtins were never meant to be implemented

but in Apple's PowerPC version of gcc those calls were replaced with simple

branch instructions to the hardcoded addresses 0xFFFEFF00 or 0xFFFEFEC0.



Now to me it seems there are two possibilites:

- do it the way Apple intented it to be done - maximum performance

- provide implementations for the builtins in the static libgcc



I tried the latter by simply adding the object file resulting from the attached

assembler code to the static libgcc using the "ar" command. That turns out to

work, although there's one additional branch instruction needed (and maybe

address loading instructions also).

In case that latter way is the preferred solution, the code that adds the call

to the builtin functions should be cleaned up.



I had this problem using gcc 4.7.2 but I'm quite sure this bug has been there

since -fobjc-direct-dispatch was merged from Apple's gcc branch.

Would be nice to have that corrected in the final version of gcc 4.6!

Reply via email to