@@ -10,3 +10,4 @@ Features:
|
|||||||
* **[args](args):** Loading function arguments.
|
* **[args](args):** Loading function arguments.
|
||||||
* **[returns](returns):** Building return values.
|
* **[returns](returns):** Building return values.
|
||||||
* **[complex](complex):** Working with `complex{64,128}` types.
|
* **[complex](complex):** Working with `complex{64,128}` types.
|
||||||
|
* **[data](data):** Defining `DATA` sections.
|
||||||
|
|||||||
33
examples/data/README.md
Normal file
33
examples/data/README.md
Normal file
@@ -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()
|
||||||
|
```
|
||||||
@@ -5,13 +5,13 @@ package main
|
|||||||
import (
|
import (
|
||||||
"math"
|
"math"
|
||||||
|
|
||||||
"github.com/mmcloughlin/avo"
|
. "github.com/mmcloughlin/avo"
|
||||||
. "github.com/mmcloughlin/avo/build"
|
. "github.com/mmcloughlin/avo/build"
|
||||||
. "github.com/mmcloughlin/avo/operand"
|
. "github.com/mmcloughlin/avo/operand"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
bytes := GLOBL("bytes", avo.RODATA|avo.NOPTR)
|
bytes := GLOBL("bytes", RODATA|NOPTR)
|
||||||
DATA(0, U64(0x0011223344556677))
|
DATA(0, U64(0x0011223344556677))
|
||||||
DATA(8, String("strconst"))
|
DATA(8, String("strconst"))
|
||||||
DATA(16, F32(math.Pi))
|
DATA(16, F32(math.Pi))
|
||||||
|
|||||||
Reference in New Issue
Block a user