Thread overview
[Issue 15144] Bad operand size in asm { movdqa ... } produces bogus ubyte16 initializer error elsewhere.
Oct 03, 2015
Marco Leise
Oct 03, 2015
Marco Leise
Apr 20, 2016
Walter Bright
Apr 20, 2016
Walter Bright
October 03, 2015
https://issues.dlang.org/show_bug.cgi?id=15144

Marco Leise <Marco.Leise@gmx.de> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |iasm, SIMD

--
October 03, 2015
https://issues.dlang.org/show_bug.cgi?id=15144

--- Comment #1 from Marco Leise <Marco.Leise@gmx.de> ---
Ok, using `movdqa XMM0, csXMM;` it works when the `SSEFromString` is changed to declare the vector as __gshared instead of immutable. So DMD has trouble sorting things out when they are read-only data.

    void foo()
    {
        version (D_InlineAsm_X86_64)
        {
            alias csXMM = SSEFromString!`abc`;
            asm @nogc nothrow
            {
                movdqa      XMM0, csXMM;
            }
        }
        else static assert(0, "Not implemented");
    }

    template SSEFromString(string str)
    {
        import std.algorithm, std.range;

        version (DigitalMars)
            __gshared ubyte16 SIMDFromString = chain(str,
'\0'.repeat(ubyte16.sizeof - str.length)).array;
        else
            immutable ubyte16 SIMDFromString = chain(str,
'\0'.repeat(ubyte16.sizeof - str.length)).array;
    }

--
April 20, 2016
https://issues.dlang.org/show_bug.cgi?id=15144

Walter Bright <bugzilla@digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bugzilla@digitalmars.com

--- Comment #2 from Walter Bright <bugzilla@digitalmars.com> ---
A smaller test case:

import core.simd;

void foo()
{
        enum      ubyte16 csXMM1 = ['a','b','c',0,0,0,0,0];
        __gshared ubyte16 csXMM2 = ['a','b','c',0,0,0,0,0];
        immutable ubyte16 csXMM3 = ['a','b','c',0,0,0,0,0];
        asm @nogc nothrow
        {
                movdqa      XMM0, [csXMM1];
                movdqa      XMM0, [csXMM2];
                movdqa      XMM0, [csXMM3];
        }
}

--
April 20, 2016
https://issues.dlang.org/show_bug.cgi?id=15144

Walter Bright <bugzilla@digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 OS|Linux                       |All

--- Comment #3 from Walter Bright <bugzilla@digitalmars.com> ---
https://github.com/dlang/dmd/pull/5689

--
April 22, 2016
https://issues.dlang.org/show_bug.cgi?id=15144

--- Comment #4 from github-bugzilla@puremagic.com ---
Commits pushed to master at https://github.com/dlang/dmd

https://github.com/dlang/dmd/commit/2a74f6c70f335a6b46494ce684dcdbac9825a21b fix Issue 15144 - Bad operand size in asm { movdqa ... } produces bogus ubyte16 initializer error elsewhere

https://github.com/dlang/dmd/commit/2f402fdc5b22020ccfc1f7d45b36f796825cd280 Merge pull request #5689 from WalterBright/fix15144

fix Issue 15144 - Bad operand size in asm { movdqa ... } produces bog…

--
April 22, 2016
https://issues.dlang.org/show_bug.cgi?id=15144

github-bugzilla@puremagic.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |FIXED

--
October 01, 2016
https://issues.dlang.org/show_bug.cgi?id=15144

--- Comment #5 from github-bugzilla@puremagic.com ---
Commits pushed to stable at https://github.com/dlang/dmd

https://github.com/dlang/dmd/commit/2a74f6c70f335a6b46494ce684dcdbac9825a21b fix Issue 15144 - Bad operand size in asm { movdqa ... } produces bogus ubyte16 initializer error elsewhere

https://github.com/dlang/dmd/commit/2f402fdc5b22020ccfc1f7d45b36f796825cd280 Merge pull request #5689 from WalterBright/fix15144

--