examples/geohash: first version

Adds helper for constants as DATA sections.
This commit is contained in:
Michael McLoughlin
2018-12-27 15:44:52 -08:00
parent 5dea46407c
commit 6fc67c1fbc
6 changed files with 101 additions and 0 deletions

40
examples/geohash/asm.go Normal file
View File

@@ -0,0 +1,40 @@
// +build ignore
package main
import (
. "github.com/mmcloughlin/avo/build"
. "github.com/mmcloughlin/avo/operand"
)
func main() {
TEXT("EncodeInt", "func(lat, lng float64) uint64")
lat := Load(Param("lat"), Xv())
lng := Load(Param("lng"), Xv())
MULSD(ConstData("reciprocal180", F64(1/180.0)), lat)
onepointfive := ConstData("onepointfive", F64(1.5))
ADDSD(onepointfive, lat)
MULSD(ConstData("reciprocal360", F64(1/360.0)), lng)
ADDSD(onepointfive, lng)
lngi, lati := GP64v(), GP64v()
MOVQ(lat, lati)
SHRQ(U8(20), lati)
MOVQ(lng, lngi)
SHRQ(U8(20), lngi)
mask := ConstData("mask", U64(0x5555555555555555))
ghsh := GP64v()
PDEPQ(mask, lati, ghsh)
temp := GP64v()
PDEPQ(mask, lngi, temp)
SHLQ(U8(1), temp)
XORQ(temp, ghsh)
Store(ghsh, ReturnIndex(0))
RET()
Generate()
}