reg: support for register casting
Adds methods for referencing sub- or super-registers. For example, for general purpose registers you can now reference As8(), As16(), ... and for vector AsX(), AsY(), AsZ(). Closes #1
This commit is contained in:
24
tests/cast/asm.go
Normal file
24
tests/cast/asm.go
Normal file
@@ -0,0 +1,24 @@
|
||||
// +build ignore
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
. "github.com/mmcloughlin/avo/build"
|
||||
)
|
||||
|
||||
func main() {
|
||||
TEXT("Split", "func(x uint64) (q uint64, l uint32, w uint16, b uint8)")
|
||||
Doc(
|
||||
"Split returns the low 64, 32, 16 and 8 bits of x.",
|
||||
"Tests the As() methods of virtual general-purpose registers.",
|
||||
)
|
||||
x := GP64v()
|
||||
Load(Param("x"), x)
|
||||
Store(x, Return("q"))
|
||||
Store(x.As32(), Return("l"))
|
||||
Store(x.As16(), Return("w"))
|
||||
Store(x.As8(), Return("b"))
|
||||
RET()
|
||||
|
||||
Generate()
|
||||
}
|
||||
Reference in New Issue
Block a user