Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Store sharer and eraser in function prefix #768

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

serkm
Copy link
Contributor

@serkm serkm commented Jan 9, 2025

This reduces the size of frame headers for faster PushFrame/Return.
Non-linear handlers get slower though, because now there is an additional indirection for sharers/erasers.

@serkm
Copy link
Contributor Author

serkm commented Jan 9, 2025

I also moved vtables to function prefixes.
This removes one indirection for the first operator of an object.

Here are some benchmark results:
image

@b-studios
Copy link
Collaborator

How does this lead to an additional indirection? I would have assumed it would just be an additional offset computation.

@serkm
Copy link
Contributor Author

serkm commented Jan 27, 2025

Previously it was:
Load stack pointer -> add offset -> load sharer address

Now it is:
Load stack pointer -> add offset -> load return address -> add offset -> load sharer address

@b-studios
Copy link
Collaborator

b-studios commented Jan 27, 2025

Hmm... I expected it to be

Load stack pointer -> add offset -> load return address -> add offset

but maybe my mental model of how LLVM works is just off here, or you implemented a different variant than I had in mind (where the sharers and erasers are always placed at a particular offset of the return address in code).

@serkm
Copy link
Contributor Author

serkm commented Jan 27, 2025

I didn't see an easy way to place functions relative to each other.
I placed function pointers relative to the return address.

@b-studios
Copy link
Collaborator

ok, then the additional indirection makes sense, thanks for the explanation

@b-studios
Copy link
Collaborator

Is there a way to make the linker happy?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants