Bug #8349

[mingw] adding -mfpmath=sse -msse2 causes segv on Windows 7

Added by Hiroshi Shirosaki 12 months ago. Updated 12 months ago.

Assignee:Yui NARUSE
Target version:2.1.0
ruby -v:ruby 2.1.0dev (2013-04-30 trunk 40528) [i386-mingw32] Backport:1.9.3: UNKNOWN, 2.0.0: UNKNOWN


I tried -mfpmath=sse -msse2 with mingw on Windows 7 and got 2 segv while make test-all.

Here is the detail.

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 @@ rbmemsearchqs(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 @@ setoptimizeexactinfo(regext* reg, OptExactInfo* e)
static void
setoptimizemapinfo(regext* reg, OptMapInfo* m)
- int i;
+ volatile int i;

for (i = 0; i < ONIGCHARTABLE_SIZE; i++)
reg->map[i] = m->map[i];

Associated revisions

Revision 44539
Added by Nobuyoshi Nakada 3 months ago

configure.in: -mstackrealign

  • configure.in: -mstackrealign is necessary for -msse2 working. [Bug #8349]


#1 Updated by Yui NARUSE 12 months ago

うーん、SSE を使って自動ベクトル化するときに何かバグを踏んでいるんですかねぇ。
objdump か何かでそれぞれの関数を逆アセンブルして貼って頂けませんか。

#3 Updated by Hiroshi Shirosaki 12 months ago

  • Status changed from Assigned to Closed

phasis68 (Heesob Park) wrote:

I think -mstackrealign flag is the proper solution of this issue.

Refer to

Thank you. I'll use -mstackrealign with sse.

I've confirmed that with disassemble.

Also available in: Atom PDF