@@ -1,7 +1,11 @@
|
||||
# Examples
|
||||
|
||||
Feature demonstrations:
|
||||
Simple functions:
|
||||
|
||||
* **[add](add):** Add two numbers. The "Hello World!" of `avo`.
|
||||
* **[sum](sum):** Sum an array of numbers.
|
||||
|
||||
Features:
|
||||
|
||||
* **[args](args):** Loading function arguments.
|
||||
* **[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