Bug #8349
closed[mingw] adding -mfpmath=sse -msse2 causes segv on Windows 7
Description
I tried -mfpmath=sse -msse2 with mingw on Windows 7 and got 2 segv while make test-all.
Here is the detail.
https://gist.github.com/anonymous/5487498
I don't know why these options causes segv, but adding volatile seems to fix this.
Is this ok to commit?
diff --git a/re.c b/re.c
index fe7e390..5c96276 100644
--- a/re.c
+++ b/re.c
@@ -154,7 +154,8 @@ rb_memsearch_qs(const unsigned char *xs, long m, const unsigned char *ys, long n
{
const unsigned char *x = xs, *xe = xs + m;
const unsigned char *y = ys;
- VALUE i, qstable[256];
-
volatile VALUE i;
-
VALUE qstable[256];
/* Preprocessing /
for (i = 0; i < 256; ++i)
diff --git a/regcomp.c b/regcomp.c
index 1373ff2..8c0e2b5 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -5306,7 +5306,7 @@ set_optimize_exact_info(regex_t reg, OptExactInfo* e)
static void
set_optimize_map_info(regex_t* reg, OptMapInfo* m)
{
- int i;
-
volatile int i;
for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)
reg->map[i] = m->map[i];
Updated by naruse (Yui NARUSE) over 11 years ago
うーん、SSE を使って自動ベクトル化するときに何かバグを踏んでいるんですかねぇ。
objdump か何かでそれぞれの関数を逆アセンブルして貼って頂けませんか。
Updated by phasis68 (Heesob Park) over 11 years ago
I think -mstackrealign flag is the proper solution of this issue.
Refer to
http://www.peterstock.co.uk/games/mingw_sse/
http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html#index-mpc80-1472
Updated by h.shirosaki (Hiroshi Shirosaki) over 11 years ago
- Status changed from Assigned to Closed
phasis68 (Heesob Park) wrote:
I think -mstackrealign flag is the proper solution of this issue.
Refer to
http://www.peterstock.co.uk/games/mingw_sse/
http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html#index-mpc80-1472
Thank you. I'll use -mstackrealign with sse.
I've confirmed that with disassemble.
https://gist.github.com/shirosaki/5488699
Updated by nagachika (Tomoyuki Chikanaga) about 10 years ago
- Backport changed from 1.9.3: UNKNOWN, 2.0.0: UNKNOWN to 1.9.3: UNKNOWN, 2.0.0: DONE
r44539 was already backported into ruby_2_1 at r44993.