Files
avo/examples/complex
Michael McLoughlin 304c7425d2 build: add attributes argument to TEXT
Brings the TEXT() function signature closer to how the directive works
in assembly.

Also update almost all examples to use NOSPLIT.

Closes #11
2019-01-06 20:04:51 -08:00
..
2019-01-06 20:04:51 -08:00
2018-12-27 23:09:44 -08:00
2018-12-27 23:09:44 -08:00

complex

Demonstrates how to access complex types in avo.

The Real() and Imag() parameter methods may be used to load the sub-components of complex arguments. The following function uses these to implement the complex norm.

	TEXT("Norm", "func(z complex128) float64")
	Doc("Norm returns the complex norm of z.")
	r = Load(Param("z").Real(), XMM())
	i = Load(Param("z").Imag(), XMM())
	MULSD(r, r)
	MULSD(i, i)
	ADDSD(i, r)
	n := XMM()
	SQRTSD(r, n)
	Store(n, ReturnIndex(0))
	RET()

Generated assembly:

// func Norm(z complex128) float64
TEXT ·Norm(SB), $0-24
	MOVSD	z_real(FP), X0
	MOVSD	z_imag+8(FP), X1
	MULSD	X0, X0
	MULSD	X1, X1
	ADDSD	X1, X0
	SQRTSD	X0, X2
	MOVSD	X2, ret+16(FP)
	RET