Skip to content

Commit 84a3a6b

Browse files
authored
Merge pull request #29 from antoyo/fix/cpu-feature-detection
Fix CPU feature detection
2 parents 2c415c4 + 327499c commit 84a3a6b

File tree

4 files changed

+13
-28
lines changed

4 files changed

+13
-28
lines changed

gcc/config/i386/i386-jit.cc

+7-16
Original file line numberDiff line numberDiff line change
@@ -57,28 +57,19 @@ void
5757
ix86_jit_register_target_info (void)
5858
{
5959
const char *params[] = {"arch", x86_bits};
60-
const char *arch = host_detect_local_cpu (2, params);
61-
62-
fprintf (stderr, "***************************** Arch: %s\n**********************************", arch);
60+
const char* local_cpu = host_detect_local_cpu (2, params);
61+
std::string arch = local_cpu;
62+
free (const_cast <char *> (local_cpu));
6363

6464
const char* arg = "-march=";
65-
const char* arg_pos = strstr(arch, arg);
66-
fprintf (stderr, "***************************** arg_pos: %s\n**********************************", arg_pos);
67-
const char* arg_value = arg_pos + strlen(arg);
68-
fprintf (stderr, "***************************** arg_value: %s\n**********************************", arg_value);
69-
const char* arg_value_end = strchr(arg_value, ' ');
70-
71-
size_t len = arg_value_end - arg_value;
72-
char *cpu = new char[len];
73-
strncpy(cpu, arg_value, len);
74-
cpu[len] = '\0';
75-
fprintf (stderr, "***************************** cpu: %s\n**********************************", cpu);
65+
size_t arg_pos = arch.find (arg) + strlen (arg);
66+
size_t end_pos = arch.find (" ", arg_pos);
67+
68+
std::string cpu = arch.substr (arg_pos, end_pos - arg_pos);
7669
jit_target_set_arch (cpu);
7770

7871
jit_target_set_128bit_int_support (targetm.scalar_mode_supported_p (TImode));
7972

80-
free (const_cast <char *> (arch));
81-
8273
if (TARGET_MMX)
8374
jit_add_target_info ("target_feature", "mmx");
8475
if (TARGET_SSE)

gcc/jit/jit-target.cc

+2-7
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ jit_add_target_info (const char *key, const char *value)
5959
}
6060

6161
void
62-
jit_target_set_arch (const char* arch)
62+
jit_target_set_arch (std::string const& arch)
6363
{
6464
jit_target_info.m_arch = arch;
6565
}
@@ -70,15 +70,10 @@ jit_target_set_128bit_int_support (bool support)
7070
jit_target_info.m_supports_128bit_int = support;
7171
}
7272

73-
target_info::~target_info()
74-
{
75-
free (const_cast<void *> ((const void *) m_arch));
76-
}
77-
7873
target_info *
7974
jit_get_target_info ()
8075
{
81-
target_info *info = new target_info {std::move(jit_target_info)};
76+
target_info *info = new target_info {jit_target_info};
8277
jit_target_info = target_info{};
8378
return info;
8479
}

gcc/jit/jit-target.h

+3-4
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
#include "jit-target.def"
2727

28+
#include <string>
2829
#include <unordered_map>
2930
#include <unordered_set>
3031

@@ -49,20 +50,18 @@ struct CStringEqual {
4950

5051
struct target_info {
5152
public:
52-
~target_info();
53-
5453
bool has_target_value (const char *key, const char *value);
5554

5655
std::unordered_map<const char *, std::unordered_set<const char *, CStringHash, CStringEqual>, CStringHash, CStringEqual> m_info;
57-
const char *m_arch = nullptr;
56+
std::string m_arch;
5857
bool m_supports_128bit_int = false;
5958
};
6059

6160
/* Each target can provide their own. */
6261
extern struct gcc_targetjitm targetjitm;
6362

6463
extern void jit_target_init ();
65-
extern void jit_target_set_arch (const char* arch);
64+
extern void jit_target_set_arch (std::string const& arch);
6665
extern void jit_target_set_128bit_int_support (bool support);
6766
extern void jit_add_target_info (const char *key, const char *value);
6867
extern target_info * jit_get_target_info ();

gcc/jit/libgccjit.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -3899,7 +3899,7 @@ gcc_jit_target_info_cpu_supports (gcc_jit_target_info *info,
38993899
const char *
39003900
gcc_jit_target_info_arch (gcc_jit_target_info *info)
39013901
{
3902-
return info->m_arch;
3902+
return info->m_arch.c_str ();
39033903
}
39043904

39053905
int

0 commit comments

Comments
 (0)