@@ -1,7 +1,11 @@
|
|||||||
# Examples
|
# Examples
|
||||||
|
|
||||||
Feature demonstrations:
|
Simple functions:
|
||||||
|
|
||||||
* **[add](add):** Add two numbers. The "Hello World!" of `avo`.
|
* **[add](add):** Add two numbers. The "Hello World!" of `avo`.
|
||||||
|
* **[sum](sum):** Sum an array of numbers.
|
||||||
|
|
||||||
|
Features:
|
||||||
|
|
||||||
* **[args](args):** Loading function arguments.
|
* **[args](args):** Loading function arguments.
|
||||||
* **[complex](complex):** Working with `complex{64,128}` types.
|
* **[complex](complex):** Working with `complex{64,128}` types.
|
||||||
|
|||||||
26
examples/sum/README.md
Normal file
26
examples/sum/README.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# sum
|
||||||
|
|
||||||
|
Sum an array of `uint64`s.
|
||||||
|
|
||||||
|
[embedmd]:# (asm.go go /func main/ /^}/)
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
TEXT("Sum", "func(xs []uint64) uint64")
|
||||||
|
Doc("Sum returns the sum of the elements in xs.")
|
||||||
|
ptr := Load(Param("xs").Base(), GP64v())
|
||||||
|
n := Load(Param("xs").Len(), GP64v())
|
||||||
|
s := GP64v()
|
||||||
|
XORQ(s, s)
|
||||||
|
LABEL("loop")
|
||||||
|
CMPQ(n, operand.Imm(0))
|
||||||
|
JE(operand.LabelRef("done"))
|
||||||
|
ADDQ(operand.Mem{Base: ptr}, s)
|
||||||
|
ADDQ(operand.Imm(8), ptr)
|
||||||
|
DECQ(n)
|
||||||
|
JMP(operand.LabelRef("loop"))
|
||||||
|
LABEL("done")
|
||||||
|
Store(s, ReturnIndex(0))
|
||||||
|
RET()
|
||||||
|
Generate()
|
||||||
|
}
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user