1// Copyright 2018 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5// +build ignore_for_gccgo 6// +build !386,!amd64,!s390x,!arm,!arm64,!ppc64,!ppc64le,!mips,!mipsle,!wasm,!mips64,!mips64le 7 8package bytealg 9 10import _ "unsafe" // for go:linkname 11 12func Compare(a, b []byte) int { 13 l := len(a) 14 if len(b) < l { 15 l = len(b) 16 } 17 if l == 0 || &a[0] == &b[0] { 18 goto samebytes 19 } 20 for i := 0; i < l; i++ { 21 c1, c2 := a[i], b[i] 22 if c1 < c2 { 23 return -1 24 } 25 if c1 > c2 { 26 return +1 27 } 28 } 29samebytes: 30 if len(a) < len(b) { 31 return -1 32 } 33 if len(a) > len(b) { 34 return +1 35 } 36 return 0 37} 38 39//go:linkname runtime_cmpstring runtime.cmpstring 40func runtime_cmpstring(a, b string) int { 41 l := len(a) 42 if len(b) < l { 43 l = len(b) 44 } 45 for i := 0; i < l; i++ { 46 c1, c2 := a[i], b[i] 47 if c1 < c2 { 48 return -1 49 } 50 if c1 > c2 { 51 return +1 52 } 53 } 54 if len(a) < len(b) { 55 return -1 56 } 57 if len(a) > len(b) { 58 return +1 59 } 60 return 0 61} 62