<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/90554>90554</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [PPC] Movemasks should be emulated without resorting to bit-by-bit logic
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Validark
      </td>
    </tr>
</table>

<pre>
    [Godbolt link](https://zig.godbolt.org/z/MxTW9d6Kr)
```zig
export fn maskForUnderscores(src: [*]const u8) u16 {
    return @bitCast(src[0..@sizeOf(Chunk)].* == @as(@Vector(@sizeOf(Chunk), u8), @splat('_')));
}
```

Gives:

```asm
maskForUnderscores:
 stwu 1, -48(1)
        lxv 34, 0(3)
        xxspltib 35, 95
 vcmpequb 2, 2, 3
        stxv 34, 16(1)
        lbz 3, 31(1)
 lbz 4, 30(1)
        clrlwi  3, 3, 31
        rlwimi 3, 4, 1, 30, 30
        lbz 4, 29(1)
        rlwimi 3, 4, 2, 29, 29
        lbz 4, 28(1)
        rlwimi 3, 4, 3, 28, 28
        lbz 4, 27(1)
 rlwimi 3, 4, 4, 27, 27
        lbz 4, 26(1)
        rlwimi 3, 4, 5, 26, 26
        lbz 4, 25(1)
        rlwimi 3, 4, 6, 25, 25
        lbz 4, 24(1)
        rlwimi 3, 4, 7, 24, 24
        lbz 4, 23(1)
 rlwimi 3, 4, 8, 23, 23
        lbz 4, 22(1)
        rlwimi 3, 4, 9, 22, 22
        lbz 4, 21(1)
        rlwimi 3, 4, 10, 21, 21
        lbz 4, 20(1)
        rlwimi 3, 4, 11, 20, 20
        lbz 4, 19(1)
 rlwimi 3, 4, 12, 19, 19
        lbz 4, 18(1)
        rlwimi 3, 4, 13, 18, 18
        lbz 4, 17(1)
        rlwimi 3, 4, 14, 17, 17
 lbz 4, 16(1)
        rlwimi 3, 4, 15, 16, 16
        addi 1, 1, 48
 blr
```

Here is one way of compiling a movemask on PowerPC: https://godbolt.org/z/shhcqE7G9

```asm
bar(float __vector(4)):
.LCF0:
0:      addis 2,12,.TOC.-.LCF0@ha
        addi 2,2,.TOC.-.LCF0@l
        addis 9,2,.LC0@toc@ha
        addi 9,9,.LC0@toc@l
        lvx 0,0,9
        vbpermq 2,2,0
 mfvsrd 3,34
        extsw 3,3
        blr
        .long 0
 .byte 0,9,0,0,0,0,0,0
.LC0:
        .byte   120
        .byte 112
        .byte   104
        .byte   96
        .byte   88
 .byte   80
        .byte   72
        .byte   64
        .byte 56
        .byte   48
        .byte   40
        .byte   32
 .byte   24
        .byte   16
        .byte   8
        .byte 0
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVk1z4jgQ_TXi0oVLlmVsHzgwsGSrdqYmh9nZY8ofArSRLSLJQPLrtyRbZMH2DCnyMN2vX7dbVsu51nzfMLZE8RcUb2Z5aw5SLX_mgle5ep0Vsnq3vidZFVIYELx5RfEGkfRgzFGjaIXIFpHtB98H-44TSLW3FkS23y4__smqxV8KkQzhDcIrtMDd54PvOwu7HKUysGugzvXrVqq_m4opXUrFNCKpViWKVmDLIysUb0rZaANtikgGbbgAlHzpdAAAFDOtagBRXHCzzrXpBeIvOAgQxZp_sO87RNL1oW1ebVHxJkBkBSjaoGhjA3ObFFH8k5VGqu56GEbWXQn2whKOIre5EEleEEmcw32ivjiUbO7uv__p8ImfmGvl_2xXYq7rzjLSHh8C2pxbCG01c5oikobXhkP_Jy4niKhlYETSaOC_XPRRGF5AFFtSFvfuU1kf2VtbALFmB9FtpDZX6XAxnrv4gMhFhrd-63CBER4NLIUSZw59cK9ww7D-mne-rgQv53BQhuPYtRnJNtAinuxwQmu83QOtyJMdTmglt1oDkSvL4YTI-BoMtGJPdjihFT-mtfBkhxNa9DGtxJMdTmhFv2lU6lkOJ0TIYwVlnuxwQit8TCvEnu1wQmx8MwzFQs92OC4WZr9pVUg8zeGEyoNPeRh5tsMJseRBsSvb4d3ImJg1Q5XYsx3ekPOq4t3EcEB9xYVQvxjXfzLFgGuQDYNz_g5yB6Wsj1zwZg851PLE7KwG2cCzPDP1vLYn2O15OTwr9eFQvv2RPGW_PgWK3B5KOyFzAy8vJ39KUX_g9IHB1_UWX3_Zq8871m6wuXUPfnxfB_OOTPEhH2mPpQ2pYsjUbqc46te15RhZTolaZnbPvNMUp4s9q9bYcW9cp-LIVP12rc0__PXupFXlFj-6mx3sYvS589w6rmvtDYGQzR68ZFC8Gwa4rxeP_vuOfzb8quWiAcL7_dk5wpBM8DEdd2SLcXua3tQLkI4mBEgmMi5GE8YT6Wg6YZ_IGpG78u5H-_XGp-5vzIzvNsmsWkZVFmX5jC3DJKSUpglOZodlFWdZVcYxXixIWdLdbpeF4Q4nWVGRpCLZjC8JJhTTCOOIxpgGGUurtMJFuqNFsYgrRDGrcy4CIU613bUzrnXLlhmOYzoTecGEdu_QhDTsDM6JCLGv1GppY-ZFu9f2Iefa6E8Vw41wL9_Pz2sUb-BbPzw06INsRQUFA1a3IjesgjM3B9kaUExLZey0MRIKbubF-7zgBoTc83LWKrG8GzbcHNoiKGWNyNam7r_mRyX_ZaVBZOsK1ohs3Q39FwAA__9gDfXf">