<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">