1# mach: aarch64 2 3# Check the vector multiply subtract instruction: mls. 4 5.include "testutils.inc" 6 7 .data 8 .align 4 9input: 10 .word 0x04030201 11 .word 0x08070605 12 .word 0x0c0b0a09 13 .word 0x100f0e0d 14m8b: 15 .word 0xf1f8fd00 16 .word 0xc1d0dde8 17m16b: 18 .word 0xf1f8fd00 19 .word 0xc1d0dde8 20 .word 0x71889db0 21 .word 0x01203d58 22m4h: 23 .word 0xe7f8fc00 24 .word 0x8fd0c3e8 25m8h: 26 .word 0xe7f8fc00 27 .word 0x8fd0c3e8 28 .word 0xf7884bb0 29 .word 0x1f209358 30m2s: 31 .word 0xebf5fc00 32 .word 0x5b95c3e8 33m4s: 34 .word 0xebf5fc00 35 .word 0x5b95c3e8 36 .word 0x4ad54bb0 37 .word 0xb9b49358 38 39 start 40 adrp x0, input 41 ldr q0, [x0, #:lo12:input] 42 43 movi v1.8b, #1 44 mls v1.8b, v0.8b, v0.8b 45 mov x1, v1.d[0] 46 adrp x3, m8b 47 ldr x4, [x3, #:lo12:m8b] 48 cmp x1, x4 49 bne .Lfailure 50 51 movi v1.16b, #1 52 mls v1.16b, v0.16b, v0.16b 53 mov x1, v1.d[0] 54 mov x2, v1.d[1] 55 adrp x3, m16b 56 ldr x4, [x3, #:lo12:m16b] 57 cmp x1, x4 58 bne .Lfailure 59 ldr x5, [x3, #:lo12:m16b+8] 60 cmp x2, x5 61 bne .Lfailure 62 63 movi v1.4h, #1 64 mls v1.4h, v0.4h, v0.4h 65 mov x1, v1.d[0] 66 adrp x3, m4h 67 ldr x4, [x3, #:lo12:m4h] 68 cmp x1, x4 69 bne .Lfailure 70 71 movi v1.8h, #1 72 mls v1.8h, v0.8h, v0.8h 73 mov x1, v1.d[0] 74 mov x2, v1.d[1] 75 adrp x3, m8h 76 ldr x4, [x3, #:lo12:m8h] 77 cmp x1, x4 78 bne .Lfailure 79 ldr x5, [x3, #:lo12:m8h+8] 80 cmp x2, x5 81 bne .Lfailure 82 83 movi v1.2s, #1 84 mls v1.2s, v0.2s, v0.2s 85 mov x1, v1.d[0] 86 adrp x3, m2s 87 ldr x4, [x3, #:lo12:m2s] 88 cmp x1, x4 89 bne .Lfailure 90 91 movi v1.4s, #1 92 mls v1.4s, v0.4s, v0.4s 93 mov x1, v1.d[0] 94 mov x2, v1.d[1] 95 adrp x3, m4s 96 ldr x4, [x3, #:lo12:m4s] 97 cmp x1, x4 98 bne .Lfailure 99 ldr x5, [x3, #:lo12:m4s+8] 100 cmp x2, x5 101 bne .Lfailure 102 103 pass 104.Lfailure: 105 fail 106