Home | History | Annotate | Line # | Download | only in aarch64
      1 # mach: aarch64
      2 
      3 # Check the vector multiply subtract instruction: mls.
      4 
      5 .include "testutils.inc"
      6 
      7 	.data
      8 	.align 4
      9 input:
     10 	.word 0x04030201
     11 	.word 0x08070605
     12 	.word 0x0c0b0a09
     13 	.word 0x100f0e0d
     14 m8b:
     15 	.word 0xf1f8fd00
     16 	.word 0xc1d0dde8
     17 m16b:
     18 	.word 0xf1f8fd00
     19 	.word 0xc1d0dde8
     20 	.word 0x71889db0
     21 	.word 0x01203d58
     22 m4h:
     23 	.word 0xe7f8fc00
     24 	.word 0x8fd0c3e8
     25 m8h:
     26 	.word 0xe7f8fc00
     27 	.word 0x8fd0c3e8
     28 	.word 0xf7884bb0
     29 	.word 0x1f209358
     30 m2s:
     31 	.word 0xebf5fc00
     32 	.word 0x5b95c3e8
     33 m4s:
     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