diff --git a/src/kernel_internals/runtime/machdep.ml b/src/kernel_internals/runtime/machdep.ml
index 5336176113db62b217b9c86e85f91416c37acd08..eb162d73b21764c827c7e5d33bf8b9447b1d0b24 100644
--- a/src/kernel_internals/runtime/machdep.ml
+++ b/src/kernel_internals/runtime/machdep.ml
@@ -46,8 +46,15 @@ let gen_define_macro fmt macro def =
   if def = "" then gen_undef fmt macro
   else gen_define_string fmt macro def
 
-let gen_define_custom_macros fmt key_values =
-  List.iter (fun (k,v) -> gen_undef fmt k; gen_define_macro fmt k v) key_values
+let gen_define_custom_macros fmt censored key_values =
+  List.iter
+    (fun (k,v) ->
+       if not (Datatype.String.Set.mem (Extlib.strip_underscore k) censored)
+       then begin
+         gen_undef fmt k;
+         gen_define_macro fmt k v
+       end)
+    key_values
 
 let gen_define_int fmt macro def = gen_define fmt macro Format.pp_print_int def
 
@@ -276,7 +283,7 @@ let machdep_macro_name s =
   in
   String.map tr s
 
-let gen_all_defines fmt mach =
+let gen_all_defines fmt ?(censored_macros=Datatype.String.Set.empty) mach =
   Format.fprintf fmt "/* Machdep-specific info for Frama-C's libc */@\n";
   Format.fprintf fmt "#ifndef __FC_MACHDEP@\n#define __FC_MACHDEP@\n";
   gen_define_int fmt ("__FC_" ^ (machdep_macro_name mach.machdep_name)) 1;
@@ -347,17 +354,17 @@ let gen_all_defines fmt mach =
   if mach.compiler = "gcc" then
     gen_include fmt "__fc_gcc_builtins.h";
 
-  gen_define_custom_macros fmt mach.custom_defs;
+  gen_define_custom_macros fmt censored_macros mach.custom_defs;
 
   Format.fprintf fmt "#endif // __FC_MACHDEP@\n"
 
-let generate_machdep_header mach =
+let generate_machdep_header ?censored_macros mach =
   let debug = Kernel.(is_debug_key_enabled dkey_pp) in
   let temp = Extlib.temp_dir_cleanup_at_exit ~debug "__fc_machdep" in
   let file = Filepath.Normalized.concat temp "__fc_machdep.h" in
   let chan = open_out (file:>string) in
   let fmt = Format.formatter_of_out_channel chan in
-  gen_all_defines fmt mach;
+  gen_all_defines fmt ?censored_macros mach;
   flush chan;
   close_out chan;
   temp
diff --git a/src/kernel_internals/runtime/machdep.mli b/src/kernel_internals/runtime/machdep.mli
index 8b4118076abaed9de7cb95cf8b3b47e7f67d6ec8..90d8718b6984007a1b61a754a9447c6ae4c235b2 100644
--- a/src/kernel_internals/runtime/machdep.mli
+++ b/src/kernel_internals/runtime/machdep.mli
@@ -25,9 +25,22 @@
 
 (** Prints on the given formatter all [#define] directives
     required by [share/libc/features.h] and other system-dependent headers.
+    @param censored_macros prevents the generation of directives for the
+    builtin macros in [mach.custom_defs] whose names match. empty by default.
+    @before Frama-C+dev censored_macros did not exist
 *)
-val gen_all_defines: Format.formatter -> Cil_types.mach -> unit
+val gen_all_defines:
+  Format.formatter ->
+  ?censored_macros:Datatype.String.Set.t ->
+  Cil_types.mach ->
+  unit
 
 (** generates a [__fc_machdep.h] file in a temp directory and returns the
-    directory name, to be added to the search path for preprocessing stdlib *)
-val generate_machdep_header: Cil_types.mach -> Filepath.Normalized.t
+    directory name, to be added to the search path for preprocessing stdlib.
+    @param see {!gen_all_defines}
+    @before Frama-C+dev censored_macros did not exist.
+*)
+val generate_machdep_header:
+  ?censored_macros:Datatype.String.Set.t ->
+  Cil_types.mach ->
+  Filepath.Normalized.t
diff --git a/src/kernel_services/ast_queries/file.ml b/src/kernel_services/ast_queries/file.ml
index 72343997ad8459030584340b3cf2ede9aa71ebde..7e6d6938479de23eab00f7322f5cf7fbe83293f3 100644
--- a/src/kernel_services/ast_queries/file.ml
+++ b/src/kernel_services/ast_queries/file.ml
@@ -502,9 +502,24 @@ let silence_cpp_machdep_warnings cmdl =
   else
     []
 
+let known_bad_macros = [ "SSE" ]
+
+let censored_macros cpp_args =
+  List.fold_left
+    (fun acc arg ->
+       let open Option.Operators in
+       let none = acc in
+       let some = Fun.flip Datatype.String.Set.add acc in
+       (let+ name = Extlib.string_del_prefix "-U" arg in
+        Extlib.strip_underscore name)
+       |> Option.fold ~none ~some)
+    (Datatype.String.Set.of_list known_bad_macros)
+    (List.(flatten (map (String.split_on_char ' ') cpp_args)))
+
 let build_cpp_cmd = function
   | NoCPP _ | External _ -> None
   | NeedCPP (f, cmdl, extra_for_this_file, is_gnu_like) ->
+    let extra_args = extra_for_this_file @ Kernel.CppExtraArgs.get () in
     if not (Filepath.exists f) then
       Kernel.abort "source file %a does not exist"
         Filepath.Normalized.pretty f;
@@ -530,7 +545,10 @@ let build_cpp_cmd = function
     let fc_include_args =
       if Kernel.FramaCStdLib.get () then
         begin
-          let machdep_dir = Machdep.generate_machdep_header (get_machdep()) in
+          let censored_macros = censored_macros extra_args in
+          let machdep_dir =
+            Machdep.generate_machdep_header ~censored_macros (get_machdep())
+          in
           [(machdep_dir:>string); (Fc_config.framac_libc:>string)]
         end
       else []
@@ -558,8 +576,7 @@ let build_cpp_cmd = function
     in
     let supp_args =
       string_of_supp_args
-        (gnu_implicit_args @ clang_no_warn @
-         extra_for_this_file @ (Kernel.CppExtraArgs.get ()))
+        (gnu_implicit_args @ clang_no_warn @ extra_args)
         fc_include_args fc_define_args
     in
     let cpp_command =