| /* Checks that CPY is allowed after a movprfx, special case in that SIMD&Scalar |
| version is also valid and Pg is 4 bits rather than 3. |
| Has invalid usages. Diagnosis required. */ |
| .text |
| .arch armv8-a+sve |
| |
| f: |
| /* OK, immediate predicated, alias mov. */ |
| movprfx z1.d, p1/m, z3.d |
| cpy z1.d, p1/m, #12 |
| |
| /* OK, immediate predicated, alias mov, fmov. */ |
| movprfx z1.d, p1/m, z3.d |
| cpy z1.d, p1/m, #0 |
| |
| /* OK, immediate predicated, alias mov. */ |
| movprfx z1.d, p1/m, z3.d |
| fmov z1.d, p1/m, #0 |
| |
| /* Not OK, immediate predicated, but different predicate registers. */ |
| movprfx z1.d, p1/m, z3.d |
| cpy z1.d, p9/m, #12 |
| |
| /* Not OK, zeroing predicate. */ |
| movprfx z1.d, p1/m, z3.d |
| cpy z1.d, p1/z, #12 |
| |
| /* OK, scalar predicated, alias mov. */ |
| movprfx z1.d, p1/m, z3.d |
| cpy z1.d, p1/m, x2 |
| |
| /* OK, scalar predicated, alias mov. */ |
| movprfx z1.d, p1/m, z3.d |
| cpy z1.d, p1/m, x1 |
| |
| /* OK, SIMD&FP predicated, alias mov */ |
| movprfx z1.d, p1/m, z3.d |
| cpy z1.d, p1/m, d2 |
| |
| /* Not OK, SIMD&FP predicated, but register d1 is architecturally the |
| same. */ |
| movprfx z1.d, p1/m, z3.d |
| cpy z1.d, p1/m, d1 |
| ret |
| |