Bug 20621 – Since DMD 2.087.0: 32 Bit Linux now uses XMM registers: SIGILL, Illegal instruction on intel Pentium III

Status
RESOLVED
Resolution
WONTFIX
Severity
normal
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Linux
Creation time
2020-02-27T21:59:44Z
Last change time
2021-01-09T22:56:07Z
Keywords
SIMD
Assigned to
No Owner
Creator
kdevel

Comments

Comment #0 by kdevel — 2020-02-27T21:59:44Z
STR (copied from [1]): ```test.d void main () { int [] v = new int [10]; } ``` $ [...]linux/bin32/dmd test $ gdb test [...] (gdb) r [...] Program received signal SIGILL, Illegal instruction. 0x0809ad14 in _D2gc4impl12conservativeQw3Gcx10smallAllocMFNbkKkkxC8TypeInfoZPv () [...] (gdb) disass [...] 0x0809ad14 <_D2gc4impl12conservativeQw3Gcx10smallAllocMFNbkKkkxC8TypeInfoZPv+172>: movsd -0x58(%ebp),%xmm0 ddemangled: nothrow void* gc.impl.conservative.gc.Gcx.smallAlloc(uint, ref uint, uint, const(TypeInfo)) Is this Component = druntime or phobos? Why does memory allocation use an XMM register in the first place? [1] http://forum.dlang.org/thread/[email protected]
Comment #1 by pro.mathias.lang — 2021-01-09T22:56:07Z
Sorry you encountered this. This is "on purpose". It was part of the changelog: https://dlang.org/changelog/2.087.0.html#xmm-linux-changelog I recommend you use `gdc` / `ldc` if you needs to target an older architecture, it will save you much pain.