Skip to content

Commit c6f7267

Browse files
committed
flambda-backend: Add -mbranches-within-32B to major_gc.c compilation (where supported)
1 parent a99fdee commit c6f7267

File tree

6 files changed

+133
-1
lines changed

6 files changed

+133
-1
lines changed

Makefile.config.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ PROBES=@probes@
243243
AWK=@AWK@
244244
STDLIB_MANPAGES=@stdlib_manpages@
245245
NAKED_POINTERS=@naked_pointers@
246+
INTEL_JCC_BUG_CFLAGS=@intel_jcc_bug_cflags@
246247

247248
### Native command to build ocamlrun.exe
248249

aclocal.m4

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ m4_include([build-aux/lt~obsolete.m4])
3030
# Macros from the autoconf macro archive
3131
m4_include([build-aux/ax_func_which_gethostbyname_r.m4])
3232
m4_include([build-aux/ax_pthread.m4])
33+
m4_include([build-aux/ax_check_compile_flag.m4])
3334

3435
# The following macro figures out which C compiler is used.
3536
# It does so by checking for compiler-specific predefined macros.

build-aux/ax_check_compile_flag.m4

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# ===========================================================================
2+
# https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
3+
# ===========================================================================
4+
#
5+
# SYNOPSIS
6+
#
7+
# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
8+
#
9+
# DESCRIPTION
10+
#
11+
# Check whether the given FLAG works with the current language's compiler
12+
# or gives an error. (Warnings, however, are ignored)
13+
#
14+
# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
15+
# success/failure.
16+
#
17+
# If EXTRA-FLAGS is defined, it is added to the current language's default
18+
# flags (e.g. CFLAGS) when the check is done. The check is thus made with
19+
# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
20+
# force the compiler to issue an error when a bad flag is given.
21+
#
22+
# INPUT gives an alternative input source to AC_COMPILE_IFELSE.
23+
#
24+
# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
25+
# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
26+
#
27+
# LICENSE
28+
#
29+
# Copyright (c) 2008 Guido U. Draheim <[email protected]>
30+
# Copyright (c) 2011 Maarten Bosmans <[email protected]>
31+
#
32+
# Copying and distribution of this file, with or without modification, are
33+
# permitted in any medium without royalty provided the copyright notice
34+
# and this notice are preserved. This file is offered as-is, without any
35+
# warranty.
36+
37+
#serial 6
38+
39+
AC_DEFUN([AX_CHECK_COMPILE_FLAG],
40+
[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
41+
AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
42+
AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
43+
ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
44+
_AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
45+
AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
46+
[AS_VAR_SET(CACHEVAR,[yes])],
47+
[AS_VAR_SET(CACHEVAR,[no])])
48+
_AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
49+
AS_VAR_IF(CACHEVAR,yes,
50+
[m4_default([$2], :)],
51+
[m4_default([$3], :)])
52+
AS_VAR_POPDEF([CACHEVAR])dnl
53+
])dnl AX_CHECK_COMPILE_FLAGS

configure

Lines changed: 62 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

configure.ac

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ AC_SUBST([stdlib_manpages])
169169
AC_SUBST([compute_deps])
170170
AC_SUBST([naked_pointers])
171171
AC_SUBST([naked_pointers_checker])
172+
AC_SUBST([intel_jcc_bug_cflags])
172173

173174
## Generated files
174175

@@ -1076,6 +1077,16 @@ AS_CASE([$arch],
10761077
[common_cflags="-no-pie $common_cflags"],
10771078
[])])
10781079

1080+
# The major GC performs better with this flag on Intel processors
1081+
# This is a workaround for an Intel CPU bug:
1082+
# https://www.intel.co.uk/content/www/uk/en/support/articles/000055650/processors.html
1083+
1084+
intel_jcc_bug_cflags=''
1085+
AS_CASE([$arch],
1086+
[amd64],
1087+
[AX_CHECK_COMPILE_FLAG([-Wa,-mbranches-within-32B-boundaries],
1088+
[intel_jcc_bug_cflags=-Wa,-mbranches-within-32B-boundaries])])
1089+
10791090
# Assembler
10801091

10811092
AS_IF([test -n "$host_alias"], [toolpref="${host_alias}-"], [toolpref=""])

runtime/Makefile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,11 @@ libasmrun_shared.$(SO): $(libasmrunpic_OBJECTS)
333333
%.npic.$(O): OC_CPPFLAGS += $(OC_NATIVE_CPPFLAGS)
334334
%.npic.$(D): OC_CPPFLAGS += $(OC_NATIVE_CPPFLAGS)
335335

336+
# The major GC performs better with this flag on Intel processors
337+
# This is a workaround for an Intel CPU bug:
338+
# https://www.intel.co.uk/content/www/uk/en/support/articles/000055650/processors.html
339+
major_gc.%: OC_CFLAGS += $(INTEL_JCC_BUG_CFLAGS)
340+
336341
# Compilation of C files
337342

338343
# The COMPILE_C_FILE macro below receives as argument the pattern

0 commit comments

Comments
 (0)