# mach: aarch64

# Check the basic integer compare instructions: adds, adds64, subs, subs64.
# For add, check value pairs 1 and -1 (Z), -1 and -1 (N), 2 and -1 (C),
# and MIN_INT and -1 (V), 
# Also check -2 and 1 (not C).
# For sub, negate the second value.

.include "testutils.inc"

	start
	mov w0, #1
	mov w1, #-1
	adds w2, w0, w1
	bne .Lfailure
	mov w0, #-1
	mov w1, #-1
	adds w2, w0, w1
	bpl .Lfailure
	mov w0, #2
	mov w1, #-1
	adds w2, w0, w1
	bcc .Lfailure
	mov w0, #0x80000000
	mov w1, #-1
	adds w2, w0, w1
	bvc .Lfailure
	mov w0, #-2
	mov w1, #1
	adds w2, w0, w1
	bcs .Lfailure

	mov x0, #1
	mov x1, #-1
	adds x2, x0, x1
	bne .Lfailure
	mov x0, #-1
	mov x1, #-1
	adds x2, x0, x1
	bpl .Lfailure
	mov x0, #2
	mov x1, #-1
	adds x2, x0, x1
	bcc .Lfailure
	mov x0, #0x8000000000000000
	mov x1, #-1
	adds x2, x0, x1
	bvc .Lfailure
	mov x0, #-2
	mov x1, #1
	adds x2, x0, x1
	bcs .Lfailure

	mov w0, #1
	mov w1, #1
	subs w2, w0, w1
	bne .Lfailure
	mov w0, #-1
	mov w1, #1
	subs w2, w0, w1
	bpl .Lfailure
	mov w0, #2
	mov w1, #1
	subs w2, w0, w1
	bcc .Lfailure
	mov w0, #0x80000000
	mov w1, #1
	subs w2, w0, w1
	bvc .Lfailure
	mov w0, #-2
	mov w1, #-1
	subs w2, w0, w1
	bcs .Lfailure

	mov x0, #1
	mov x1, #1
	subs x2, x0, x1
	bne .Lfailure
	mov x0, #-1
	mov x1, #1
	subs x2, x0, x1
	bpl .Lfailure
	mov x0, #2
	mov x1, #1
	subs x2, x0, x1
	bcc .Lfailure
	mov x0, #0x8000000000000000
	mov x1, #1
	subs x2, x0, x1
	bvc .Lfailure
	mov x0, #-2
	mov x1, #-1
	subs x2, x0, x1
	bcs .Lfailure

	pass
.Lfailure:
	fail