
The big change is that the GeoJSON package has been completely rewritten to fix a few of geometry calculation bugs, increase performance, and to better follow the GeoJSON spec RFC 7946. GeoJSON updates - A LineString now requires at least two points. - All json members, even foreign, now persist with the object. - The bbox member persists too but is no longer used for geometry calculations. This is change in behavior. Previously Tile38 would treat the bbox as the object's physical rectangle. - Corrections to geometry intersects and within calculations. Faster spatial queries - The performance of Point-in-polygon and object intersect operations are greatly improved for complex polygons and line strings. It went from O(n) to roughly O(log n). - The same for all collection types with many children, including FeatureCollection, GeometryCollection, MultiPoint, MultiLineString, and MultiPolygon. Codebase changes - The pkg directory has been renamed to internal - The GeoJSON internal package has been moved to a seperate repo at https://github.com/tidwall/geojson. It's now vendored. Please look out for higher memory usage for datasets using complex shapes. A complex shape is one that has 64 or more points. For these shapes it's expected that there will be increase of least 54 bytes per point.
57 lines
925 B
ArmAsm
57 lines
925 B
ArmAsm
// +build amd64,go1.6
|
|
|
|
#include "textflag.h"
|
|
|
|
// func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32)
|
|
TEXT ·cpuid(SB), NOSPLIT, $0-24
|
|
MOVL eaxArg+0(FP), AX
|
|
MOVL ecxArg+4(FP), CX
|
|
CPUID
|
|
MOVL AX, eax+8(FP)
|
|
MOVL BX, ebx+12(FP)
|
|
MOVL CX, ecx+16(FP)
|
|
MOVL DX, edx+20(FP)
|
|
RET
|
|
|
|
// func EncodeInt(lat, lng float64) uint64
|
|
TEXT ·EncodeInt(SB), NOSPLIT, $0
|
|
CMPB ·useAsm(SB), $1
|
|
JNE fallback
|
|
|
|
#define LATF X0
|
|
#define LATI R8
|
|
#define LNGF X1
|
|
#define LNGI R9
|
|
#define TEMP R10
|
|
#define GHSH R11
|
|
#define MASK BX
|
|
|
|
MOVSD lat+0(FP), LATF
|
|
MOVSD lng+8(FP), LNGF
|
|
|
|
MOVQ $0x5555555555555555, MASK
|
|
|
|
MULSD $(0.005555555555555556), LATF
|
|
ADDSD $(1.5), LATF
|
|
|
|
MULSD $(0.002777777777777778), LNGF
|
|
ADDSD $(1.5), LNGF
|
|
|
|
MOVQ LNGF, LNGI
|
|
SHRQ $20, LNGI
|
|
|
|
MOVQ LATF, LATI
|
|
SHRQ $20, LATI
|
|
PDEPQ MASK, LATI, GHSH
|
|
|
|
PDEPQ MASK, LNGI, TEMP
|
|
|
|
SHLQ $1, TEMP
|
|
XORQ TEMP, GHSH
|
|
|
|
MOVQ GHSH, ret+16(FP)
|
|
RET
|
|
|
|
fallback:
|
|
JMP ·encodeInt(SB)
|