-
Notifications
You must be signed in to change notification settings - Fork 89
Create object files internally to avoid invoking GAS #757
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Conversation
One detail is that this vendors I'll have to discuss with @let-def but some work probably needs doing to somehow unify |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I reviewed the files outside of internal_assembler
and owee
folders.
What is the diff between upstream owee and the vendored version?
Are the speed-ups comparable, if the internal assembler doesn't generate debug_line sections? What portion of does gas spend in handling dwarf? |
We don't know yet for sure, but I think there will still be a significant speed-up. |
ccc356d flambda-backend: Prevent dynamic loading of the same .cmxs twice in private mode, etc. (oxcaml#784) 14eb572 flambda-backend: Make local extension point equivalent to local_ expression (oxcaml#790) 487d11b flambda-backend: Fix tast_iterator and tast_mapper for include functor. (oxcaml#795) a50a818 flambda-backend: Reduce closure allocation in List (oxcaml#792) 96c9c60 flambda-backend: Merge ocaml-jst a775b88 flambda-backend: Fix ocaml/otherlibs/unix 32-bit build (oxcaml#767) f7c2679 flambda-backend: Create object files internally to avoid invoking GAS (oxcaml#757) c7a46bb flambda-backend: Bugfix for Cmmgen.expr_size with locals (oxcaml#756) b337cb6 flambda-backend: Fix build_upstream for PR749 (oxcaml#750) 8e7e81c flambda-backend: Differentiate is_int primitive between generic and variant-only versions (oxcaml#749) git-subtree-dir: ocaml git-subtree-split: ccc356d
25188da flambda-backend: Missed comment from PR802 (oxcaml#887) 9469765 flambda-backend: Improve the semantics of asynchronous exceptions (new simpler version) (oxcaml#802) d9e4dd0 flambda-backend: Fix `make runtest` on NixOS (oxcaml#874) 4bbde7a flambda-backend: Simpler symbols (oxcaml#753) ef37262 flambda-backend: Add opaqueness to Obj.magic under Flambda 2 (oxcaml#862) a9616e9 flambda-backend: Add build system hooks for ocaml-jst (oxcaml#869) 045ef67 flambda-backend: Allow the compiler to build with stock Dune (oxcaml#868) 3cac5be flambda-backend: Simplify Makefile logic for natdynlinkops (oxcaml#866) c5b12bf flambda-backend: Remove unnecessary install lines (oxcaml#860) ff12bbe flambda-backend: Fix unused variable warning in st_stubs.c (oxcaml#861) c84976c flambda-backend: Static check for noalloc: attributes (oxcaml#825) ca56052 flambda-backend: Build system refactoring for ocaml-jst (oxcaml#857) 39eb7f9 flambda-backend: Remove integer comparison involving nonconstant polymorphic variants (oxcaml#854) c102688 flambda-backend: Fix soundness bug by using currying information from typing (oxcaml#850) 6a96b61 flambda-backend: Add a primitive to enable/disable the tick thread (oxcaml#852) f64370b flambda-backend: Make Obj.dup use a new primitive, %obj_dup (oxcaml#843) 9b78eb2 flambda-backend: Add test for oxcaml#820 (include functor soundness bug) (oxcaml#841) 8f24346 flambda-backend: Add `-dtimings-precision` flag (oxcaml#833) 65c2f22 flambda-backend: Add test for oxcaml#829 (oxcaml#831) 7b27a49 flambda-backend: Follow-up PR#829 (comballoc fixes for locals) (oxcaml#830) ad7ec10 flambda-backend: Use a custom condition variable implementation (oxcaml#787) 3ee650c flambda-backend: Fix soundness bug in include functor (oxcaml#820) 2f57378 flambda-backend: Static check noalloc (oxcaml#778) aaad625 flambda-backend: Emit begin/end region only when stack allocation is enabled (oxcaml#812) 17c7173 flambda-backend: Fix .cmt for included signatures (oxcaml#803) e119669 flambda-backend: Increase delays in tests/lib-threads/beat.ml (oxcaml#800) ccc356d flambda-backend: Prevent dynamic loading of the same .cmxs twice in private mode, etc. (oxcaml#784) 14eb572 flambda-backend: Make local extension point equivalent to local_ expression (oxcaml#790) 487d11b flambda-backend: Fix tast_iterator and tast_mapper for include functor. (oxcaml#795) a50a818 flambda-backend: Reduce closure allocation in List (oxcaml#792) 96c9c60 flambda-backend: Merge ocaml-jst a775b88 flambda-backend: Fix ocaml/otherlibs/unix 32-bit build (oxcaml#767) f7c2679 flambda-backend: Create object files internally to avoid invoking GAS (oxcaml#757) c7a46bb flambda-backend: Bugfix for Cmmgen.expr_size with locals (oxcaml#756) b337cb6 flambda-backend: Fix build_upstream for PR749 (oxcaml#750) 8e7e81c flambda-backend: Differentiate is_int primitive between generic and variant-only versions (oxcaml#749) git-subtree-dir: ocaml git-subtree-split: 25188da
This PR uses the existing
x86_binary_emitter
to construct object files directly, allowing us to avoid calling out to GAS.As can be seen in the table below this results in a substantial performance speed up.
In the case of
Typecore.ml
the total build time reduced from 2.737 to 2.624 resulting overall in a ~4% speed up in build time for this file.