# mach: aarch64

# Check the multiply highpart instructions: smulh, umulh.

# Test -2*2, -1<<32*-1<<32, -2*-2, and 2*2.

.include "testutils.inc"

	start

	mov x0, #-2
	mov x1, #2
	smulh x2, x0, x1
	cmp x2, #-1
	bne .Lfailure
	umulh x3, x0, x1
	cmp x3, #1
	bne .Lfailure

	mov w0, #-1
	lsl x0, x0, #32 // 0xffffffff00000000
	mov x1, x0
	smulh x2, x0, x1
	cmp x2, #1
	bne .Lfailure
	umulh x3, x0, x1
	mov w4, #-2
	lsl x4, x4, #32
	add x4, x4, #1  // 0xfffffffe00000001
	cmp x3, x4
	bne .Lfailure

	mov x0, #-2
	mov x1, #-2
	smulh x2, x0, x1
	cmp x2, #0
	bne .Lfailure
	umulh x3, x0, x1
	cmp x3, #-4
	bne .Lfailure

	mov x0, #2
	mov x1, #2
	smulh x2, x0, x1
	cmp x2, #0
	bne .Lfailure
	umulh x3, x0, x1
	cmp x3, #0
	bne .Lfailure

	pass
.Lfailure:
	fail