Merge pull request #17368 from karalabe/bn256-go1.11
crypto/bn256: fix issues caused by Go 1.11
This commit is contained in:
		
						commit
						2a06791461
					
				| @ -110,7 +110,7 @@ TEXT ·gfpMul(SB),0,$160-24 | ||||
| 	MOVQ b+16(FP), SI | ||||
| 
 | ||||
| 	// Jump to a slightly different implementation if MULX isn't supported. | ||||
| 	CMPB runtime·support_bmi2(SB), $0 | ||||
| 	CMPB ·hasBMI2(SB), $0 | ||||
| 	JE   nobmi2Mul | ||||
| 
 | ||||
| 	mulBMI2(0(DI),8(DI),16(DI),24(DI), 0(SI)) | ||||
|  | ||||
| @ -5,6 +5,13 @@ package bn256 | ||||
| // This file contains forward declarations for the architecture-specific
 | ||||
| // assembly implementations of these functions, provided that they exist.
 | ||||
| 
 | ||||
| import ( | ||||
| 	"golang.org/x/sys/cpu" | ||||
| ) | ||||
| 
 | ||||
| //nolint:varcheck
 | ||||
| var hasBMI2 = cpu.X86.HasBMI2 | ||||
| 
 | ||||
| // go:noescape
 | ||||
| func gfpNeg(c, a *gfP) | ||||
| 
 | ||||
|  | ||||
| @ -2,7 +2,7 @@ | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| // Package bn256 implements a particular bilinear group at the 128-bit security level.
 | ||||
| // Package bn256 implements a particular bilinear group.
 | ||||
| //
 | ||||
| // Bilinear groups are the basis of many of the new cryptographic protocols
 | ||||
| // that have been proposed over the past decade. They consist of a triplet of
 | ||||
| @ -14,6 +14,10 @@ | ||||
| // Barreto-Naehrig curve as described in
 | ||||
| // http://cryptojedi.org/papers/dclxvi-20100714.pdf. Its output is compatible
 | ||||
| // with the implementation described in that paper.
 | ||||
| //
 | ||||
| // (This package previously claimed to operate at a 128-bit security level.
 | ||||
| // However, recent improvements in attacks mean that is no longer true. See
 | ||||
| // https://moderncrypto.org/mail-archive/curves/2016/000740.html.)
 | ||||
| package bn256 | ||||
| 
 | ||||
| import ( | ||||
| @ -50,8 +54,8 @@ func RandomG1(r io.Reader) (*big.Int, *G1, error) { | ||||
| 	return k, new(G1).ScalarBaseMult(k), nil | ||||
| } | ||||
| 
 | ||||
| func (g *G1) String() string { | ||||
| 	return "bn256.G1" + g.p.String() | ||||
| func (e *G1) String() string { | ||||
| 	return "bn256.G1" + e.p.String() | ||||
| } | ||||
| 
 | ||||
| // CurvePoints returns p's curve points in big integer
 | ||||
| @ -98,15 +102,19 @@ func (e *G1) Neg(a *G1) *G1 { | ||||
| } | ||||
| 
 | ||||
| // Marshal converts n to a byte slice.
 | ||||
| func (n *G1) Marshal() []byte { | ||||
| 	n.p.MakeAffine(nil) | ||||
| 
 | ||||
| 	xBytes := new(big.Int).Mod(n.p.x, P).Bytes() | ||||
| 	yBytes := new(big.Int).Mod(n.p.y, P).Bytes() | ||||
| 
 | ||||
| func (e *G1) Marshal() []byte { | ||||
| 	// Each value is a 256-bit number.
 | ||||
| 	const numBytes = 256 / 8 | ||||
| 
 | ||||
| 	if e.p.IsInfinity() { | ||||
| 		return make([]byte, numBytes*2) | ||||
| 	} | ||||
| 
 | ||||
| 	e.p.MakeAffine(nil) | ||||
| 
 | ||||
| 	xBytes := new(big.Int).Mod(e.p.x, P).Bytes() | ||||
| 	yBytes := new(big.Int).Mod(e.p.y, P).Bytes() | ||||
| 
 | ||||
| 	ret := make([]byte, numBytes*2) | ||||
| 	copy(ret[1*numBytes-len(xBytes):], xBytes) | ||||
| 	copy(ret[2*numBytes-len(yBytes):], yBytes) | ||||
| @ -175,8 +183,8 @@ func RandomG2(r io.Reader) (*big.Int, *G2, error) { | ||||
| 	return k, new(G2).ScalarBaseMult(k), nil | ||||
| } | ||||
| 
 | ||||
| func (g *G2) String() string { | ||||
| 	return "bn256.G2" + g.p.String() | ||||
| func (e *G2) String() string { | ||||
| 	return "bn256.G2" + e.p.String() | ||||
| } | ||||
| 
 | ||||
| // CurvePoints returns the curve points of p which includes the real
 | ||||
| @ -216,6 +224,13 @@ func (e *G2) Add(a, b *G2) *G2 { | ||||
| 
 | ||||
| // Marshal converts n into a byte slice.
 | ||||
| func (n *G2) Marshal() []byte { | ||||
| 	// Each value is a 256-bit number.
 | ||||
| 	const numBytes = 256 / 8 | ||||
| 
 | ||||
| 	if n.p.IsInfinity() { | ||||
| 		return make([]byte, numBytes*4) | ||||
| 	} | ||||
| 
 | ||||
| 	n.p.MakeAffine(nil) | ||||
| 
 | ||||
| 	xxBytes := new(big.Int).Mod(n.p.x.x, P).Bytes() | ||||
| @ -223,9 +238,6 @@ func (n *G2) Marshal() []byte { | ||||
| 	yxBytes := new(big.Int).Mod(n.p.y.x, P).Bytes() | ||||
| 	yyBytes := new(big.Int).Mod(n.p.y.y, P).Bytes() | ||||
| 
 | ||||
| 	// Each value is a 256-bit number.
 | ||||
| 	const numBytes = 256 / 8 | ||||
| 
 | ||||
| 	ret := make([]byte, numBytes*4) | ||||
| 	copy(ret[1*numBytes-len(xxBytes):], xxBytes) | ||||
| 	copy(ret[2*numBytes-len(xyBytes):], xyBytes) | ||||
|  | ||||
| @ -245,11 +245,19 @@ func (c *curvePoint) Mul(a *curvePoint, scalar *big.Int, pool *bnPool) *curvePoi | ||||
| 	return c | ||||
| } | ||||
| 
 | ||||
| // MakeAffine converts c to affine form and returns c. If c is ∞, then it sets
 | ||||
| // c to 0 : 1 : 0.
 | ||||
| func (c *curvePoint) MakeAffine(pool *bnPool) *curvePoint { | ||||
| 	if words := c.z.Bits(); len(words) == 1 && words[0] == 1 { | ||||
| 		return c | ||||
| 	} | ||||
| 
 | ||||
| 	if c.IsInfinity() { | ||||
| 		c.x.SetInt64(0) | ||||
| 		c.y.SetInt64(1) | ||||
| 		c.z.SetInt64(0) | ||||
| 		c.t.SetInt64(0) | ||||
| 		return c | ||||
| 	} | ||||
| 	zInv := pool.Get().ModInverse(c.z, P) | ||||
| 	t := pool.Get().Mul(c.y, zInv) | ||||
| 	t.Mod(t, P) | ||||
|  | ||||
| @ -225,11 +225,19 @@ func (c *twistPoint) Mul(a *twistPoint, scalar *big.Int, pool *bnPool) *twistPoi | ||||
| 	return c | ||||
| } | ||||
| 
 | ||||
| // MakeAffine converts c to affine form and returns c. If c is ∞, then it sets
 | ||||
| // c to 0 : 1 : 0.
 | ||||
| func (c *twistPoint) MakeAffine(pool *bnPool) *twistPoint { | ||||
| 	if c.z.IsOne() { | ||||
| 		return c | ||||
| 	} | ||||
| 
 | ||||
| 	if c.IsInfinity() { | ||||
| 		c.x.SetZero() | ||||
| 		c.y.SetOne() | ||||
| 		c.z.SetZero() | ||||
| 		c.t.SetZero() | ||||
| 		return c | ||||
| 	} | ||||
| 	zInv := newGFp2(pool).Invert(c.z, pool) | ||||
| 	t := newGFp2(pool).Mul(c.y, zInv, pool) | ||||
| 	zInv2 := newGFp2(pool).Square(zInv, pool) | ||||
|  | ||||
							
								
								
									
										38
									
								
								vendor/golang.org/x/sys/cpu/cpu.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								vendor/golang.org/x/sys/cpu/cpu.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,38 @@ | ||||
| // Copyright 2018 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| // Package cpu implements processor feature detection for
 | ||||
| // various CPU architectures.
 | ||||
| package cpu | ||||
| 
 | ||||
| // CacheLinePad is used to pad structs to avoid false sharing.
 | ||||
| type CacheLinePad struct{ _ [cacheLineSize]byte } | ||||
| 
 | ||||
| // X86 contains the supported CPU features of the
 | ||||
| // current X86/AMD64 platform. If the current platform
 | ||||
| // is not X86/AMD64 then all feature flags are false.
 | ||||
| //
 | ||||
| // X86 is padded to avoid false sharing. Further the HasAVX
 | ||||
| // and HasAVX2 are only set if the OS supports XMM and YMM
 | ||||
| // registers in addition to the CPUID feature bit being set.
 | ||||
| var X86 struct { | ||||
| 	_            CacheLinePad | ||||
| 	HasAES       bool // AES hardware implementation (AES NI)
 | ||||
| 	HasADX       bool // Multi-precision add-carry instruction extensions
 | ||||
| 	HasAVX       bool // Advanced vector extension
 | ||||
| 	HasAVX2      bool // Advanced vector extension 2
 | ||||
| 	HasBMI1      bool // Bit manipulation instruction set 1
 | ||||
| 	HasBMI2      bool // Bit manipulation instruction set 2
 | ||||
| 	HasERMS      bool // Enhanced REP for MOVSB and STOSB
 | ||||
| 	HasFMA       bool // Fused-multiply-add instructions
 | ||||
| 	HasOSXSAVE   bool // OS supports XSAVE/XRESTOR for saving/restoring XMM registers.
 | ||||
| 	HasPCLMULQDQ bool // PCLMULQDQ instruction - most often used for AES-GCM
 | ||||
| 	HasPOPCNT    bool // Hamming weight instruction POPCNT.
 | ||||
| 	HasSSE2      bool // Streaming SIMD extension 2 (always available on amd64)
 | ||||
| 	HasSSE3      bool // Streaming SIMD extension 3
 | ||||
| 	HasSSSE3     bool // Supplemental streaming SIMD extension 3
 | ||||
| 	HasSSE41     bool // Streaming SIMD extension 4 and 4.1
 | ||||
| 	HasSSE42     bool // Streaming SIMD extension 4 and 4.2
 | ||||
| 	_            CacheLinePad | ||||
| } | ||||
							
								
								
									
										7
									
								
								vendor/golang.org/x/sys/cpu/cpu_arm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								vendor/golang.org/x/sys/cpu/cpu_arm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | ||||
| // Copyright 2018 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| const cacheLineSize = 32 | ||||
							
								
								
									
										7
									
								
								vendor/golang.org/x/sys/cpu/cpu_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								vendor/golang.org/x/sys/cpu/cpu_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | ||||
| // Copyright 2018 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| const cacheLineSize = 64 | ||||
							
								
								
									
										16
									
								
								vendor/golang.org/x/sys/cpu/cpu_gc_x86.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								vendor/golang.org/x/sys/cpu/cpu_gc_x86.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| // Copyright 2018 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| // +build 386 amd64 amd64p32
 | ||||
| // +build !gccgo
 | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| // cpuid is implemented in cpu_x86.s for gc compiler
 | ||||
| // and in cpu_gccgo.c for gccgo.
 | ||||
| func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) | ||||
| 
 | ||||
| // xgetbv with ecx = 0 is implemented in cpu_x86.s for gc compiler
 | ||||
| // and in cpu_gccgo.c for gccgo.
 | ||||
| func xgetbv() (eax, edx uint32) | ||||
							
								
								
									
										43
									
								
								vendor/golang.org/x/sys/cpu/cpu_gccgo.c
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								vendor/golang.org/x/sys/cpu/cpu_gccgo.c
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,43 @@ | ||||
| // Copyright 2018 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| // +build 386 amd64 amd64p32
 | ||||
| // +build gccgo
 | ||||
| 
 | ||||
| #include <cpuid.h> | ||||
| #include <stdint.h> | ||||
| 
 | ||||
| // Need to wrap __get_cpuid_count because it's declared as static.
 | ||||
| int | ||||
| gccgoGetCpuidCount(uint32_t leaf, uint32_t subleaf, | ||||
|                    uint32_t *eax, uint32_t *ebx, | ||||
|                    uint32_t *ecx, uint32_t *edx) | ||||
| { | ||||
| 	return __get_cpuid_count(leaf, subleaf, eax, ebx, ecx, edx); | ||||
| } | ||||
| 
 | ||||
| // xgetbv reads the contents of an XCR (Extended Control Register)
 | ||||
| // specified in the ECX register into registers EDX:EAX.
 | ||||
| // Currently, the only supported value for XCR is 0.
 | ||||
| //
 | ||||
| // TODO: Replace with a better alternative:
 | ||||
| //
 | ||||
| //     #include <xsaveintrin.h>
 | ||||
| //
 | ||||
| //     #pragma GCC target("xsave")
 | ||||
| //
 | ||||
| //     void gccgoXgetbv(uint32_t *eax, uint32_t *edx) {
 | ||||
| //       unsigned long long x = _xgetbv(0);
 | ||||
| //       *eax = x & 0xffffffff;
 | ||||
| //       *edx = (x >> 32) & 0xffffffff;
 | ||||
| //     }
 | ||||
| //
 | ||||
| // Note that _xgetbv is defined starting with GCC 8.
 | ||||
| void | ||||
| gccgoXgetbv(uint32_t *eax, uint32_t *edx) | ||||
| { | ||||
| 	__asm("  xorl %%ecx, %%ecx\n" | ||||
| 	      "  xgetbv" | ||||
| 	    : "=a"(*eax), "=d"(*edx)); | ||||
| } | ||||
							
								
								
									
										26
									
								
								vendor/golang.org/x/sys/cpu/cpu_gccgo.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								vendor/golang.org/x/sys/cpu/cpu_gccgo.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | ||||
| // Copyright 2018 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| // +build 386 amd64 amd64p32
 | ||||
| // +build gccgo
 | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| //extern gccgoGetCpuidCount
 | ||||
| func gccgoGetCpuidCount(eaxArg, ecxArg uint32, eax, ebx, ecx, edx *uint32) | ||||
| 
 | ||||
| func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) { | ||||
| 	var a, b, c, d uint32 | ||||
| 	gccgoGetCpuidCount(eaxArg, ecxArg, &a, &b, &c, &d) | ||||
| 	return a, b, c, d | ||||
| } | ||||
| 
 | ||||
| //extern gccgoXgetbv
 | ||||
| func gccgoXgetbv(eax, edx *uint32) | ||||
| 
 | ||||
| func xgetbv() (eax, edx uint32) { | ||||
| 	var a, d uint32 | ||||
| 	gccgoXgetbv(&a, &d) | ||||
| 	return a, d | ||||
| } | ||||
							
								
								
									
										9
									
								
								vendor/golang.org/x/sys/cpu/cpu_mips64x.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								vendor/golang.org/x/sys/cpu/cpu_mips64x.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| // Copyright 2018 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| // +build mips64 mips64le
 | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| const cacheLineSize = 32 | ||||
							
								
								
									
										9
									
								
								vendor/golang.org/x/sys/cpu/cpu_mipsx.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								vendor/golang.org/x/sys/cpu/cpu_mipsx.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| // Copyright 2018 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| // +build mips mipsle
 | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| const cacheLineSize = 32 | ||||
							
								
								
									
										9
									
								
								vendor/golang.org/x/sys/cpu/cpu_ppc64x.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								vendor/golang.org/x/sys/cpu/cpu_ppc64x.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| // Copyright 2018 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| // +build ppc64 ppc64le
 | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| const cacheLineSize = 128 | ||||
							
								
								
									
										7
									
								
								vendor/golang.org/x/sys/cpu/cpu_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								vendor/golang.org/x/sys/cpu/cpu_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | ||||
| // Copyright 2018 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| const cacheLineSize = 256 | ||||
							
								
								
									
										55
									
								
								vendor/golang.org/x/sys/cpu/cpu_x86.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								vendor/golang.org/x/sys/cpu/cpu_x86.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,55 @@ | ||||
| // Copyright 2018 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| // +build 386 amd64 amd64p32
 | ||||
| 
 | ||||
| package cpu | ||||
| 
 | ||||
| const cacheLineSize = 64 | ||||
| 
 | ||||
| func init() { | ||||
| 	maxID, _, _, _ := cpuid(0, 0) | ||||
| 
 | ||||
| 	if maxID < 1 { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	_, _, ecx1, edx1 := cpuid(1, 0) | ||||
| 	X86.HasSSE2 = isSet(26, edx1) | ||||
| 
 | ||||
| 	X86.HasSSE3 = isSet(0, ecx1) | ||||
| 	X86.HasPCLMULQDQ = isSet(1, ecx1) | ||||
| 	X86.HasSSSE3 = isSet(9, ecx1) | ||||
| 	X86.HasFMA = isSet(12, ecx1) | ||||
| 	X86.HasSSE41 = isSet(19, ecx1) | ||||
| 	X86.HasSSE42 = isSet(20, ecx1) | ||||
| 	X86.HasPOPCNT = isSet(23, ecx1) | ||||
| 	X86.HasAES = isSet(25, ecx1) | ||||
| 	X86.HasOSXSAVE = isSet(27, ecx1) | ||||
| 
 | ||||
| 	osSupportsAVX := false | ||||
| 	// For XGETBV, OSXSAVE bit is required and sufficient.
 | ||||
| 	if X86.HasOSXSAVE { | ||||
| 		eax, _ := xgetbv() | ||||
| 		// Check if XMM and YMM registers have OS support.
 | ||||
| 		osSupportsAVX = isSet(1, eax) && isSet(2, eax) | ||||
| 	} | ||||
| 
 | ||||
| 	X86.HasAVX = isSet(28, ecx1) && osSupportsAVX | ||||
| 
 | ||||
| 	if maxID < 7 { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	_, ebx7, _, _ := cpuid(7, 0) | ||||
| 	X86.HasBMI1 = isSet(3, ebx7) | ||||
| 	X86.HasAVX2 = isSet(5, ebx7) && osSupportsAVX | ||||
| 	X86.HasBMI2 = isSet(8, ebx7) | ||||
| 	X86.HasERMS = isSet(9, ebx7) | ||||
| 	X86.HasADX = isSet(19, ebx7) | ||||
| } | ||||
| 
 | ||||
| func isSet(bitpos uint, value uint32) bool { | ||||
| 	return value&(1<<bitpos) != 0 | ||||
| } | ||||
							
								
								
									
										27
									
								
								vendor/golang.org/x/sys/cpu/cpu_x86.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								vendor/golang.org/x/sys/cpu/cpu_x86.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| // Copyright 2018 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| // +build 386 amd64 amd64p32 | ||||
| // +build !gccgo | ||||
| 
 | ||||
| #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 xgetbv() (eax, edx uint32) | ||||
| TEXT ·xgetbv(SB),NOSPLIT,$0-8 | ||||
| 	MOVL $0, CX | ||||
| 	XGETBV | ||||
| 	MOVL AX, eax+0(FP) | ||||
| 	MOVL DX, edx+4(FP) | ||||
| 	RET | ||||
							
								
								
									
										6
									
								
								vendor/vendor.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/vendor.json
									
									
									
									
										vendored
									
									
								
							| @ -747,6 +747,12 @@ | ||||
| 			"revision": "f52d1811a62927559de87708c8913c1650ce4f26", | ||||
| 			"revisionTime": "2017-05-17T20:25:26Z" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"checksumSHA1": "REkmyB368pIiip76LiqMLspgCRk=", | ||||
| 			"path": "golang.org/x/sys/cpu", | ||||
| 			"revision": "904bdc257025c7b3f43c19360ad3ab85783fad78", | ||||
| 			"revisionTime": "2018-08-08T08:17:46Z" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"checksumSHA1": "r1jWq0V3AI5DLN0aCnXXMH/is9Q=", | ||||
| 			"path": "golang.org/x/sys/unix", | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user