Skip to content

Commit

Permalink
doc: README for data example
Browse files Browse the repository at this point in the history
  • Loading branch information
mmcloughlin committed Jan 2, 2019
1 parent 49c7957 commit 85a7299
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 2 deletions.
1 change: 1 addition & 0 deletions examples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ Features:
* **[args](args):** Loading function arguments.
* **[returns](returns):** Building return values.
* **[complex](complex):** Working with `complex{64,128}` types.
* **[data](data):** Defining `DATA` sections.
33 changes: 33 additions & 0 deletions examples/data/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# data

Constructing data sections in `avo`.

A data section is declared with the `GLOBL` function, and values are specified with `DATA`. The size of the data section will grow as values are added to it.

[embedmd]:# (asm.go go /.*GLOBL\(/ /^$/)
```go
bytes := GLOBL("bytes", RODATA|NOPTR)
DATA(0, U64(0x0011223344556677))
DATA(8, String("strconst"))
DATA(16, F32(math.Pi))
DATA(24, F64(math.Pi))
DATA(32, U32(0x00112233))
DATA(36, U16(0x4455))
DATA(38, U8(0x66))
DATA(39, U8(0x77))
```

The `GLOBL` function returns a reference which may be used in assembly code. The following function indexes into the data section just created.

[embedmd]:# (asm.go go /.*TEXT.*DataAt/ /RET.*/)
```go
TEXT("DataAt", "func(i int) byte")
Doc("DataAt returns byte i in the 'bytes' global data section.")
i := Load(Param("i"), GP64v())
ptr := Mem{Base: GP64v()}
LEAQ(bytes, ptr.Base)
b := GP8v()
MOVB(ptr.Idx(i, 1), b)
Store(b, ReturnIndex(0))
RET()
```
4 changes: 2 additions & 2 deletions examples/data/asm.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ package main
import (
"math"

"github.com/mmcloughlin/avo"
. "github.com/mmcloughlin/avo"
. "github.com/mmcloughlin/avo/build"
. "github.com/mmcloughlin/avo/operand"
)

func main() {
bytes := GLOBL("bytes", avo.RODATA|avo.NOPTR)
bytes := GLOBL("bytes", RODATA|NOPTR)
DATA(0, U64(0x0011223344556677))
DATA(8, String("strconst"))
DATA(16, F32(math.Pi))
Expand Down

0 comments on commit 85a7299

Please sign in to comment.