github.com/varialus/godfly@v0.0.0-20130904042352-1934f9f095ab/src/pkg/runtime/noasm_arm.goc (about) 1 // Copyright 2013 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 // Routines that are implemented in assembly in asm_{amd64,386}.s 6 // but are implemented in C for arm. 7 8 package runtime 9 #include "runtime.h" 10 #include "../../cmd/ld/textflag.h" 11 12 #pragma textflag NOSPLIT 13 func cmpstring(s1 String, s2 String) (v int) { 14 uintgo i, l; 15 byte c1, c2; 16 17 l = s1.len; 18 if(s2.len < l) 19 l = s2.len; 20 for(i=0; i<l; i++) { 21 c1 = s1.str[i]; 22 c2 = s2.str[i]; 23 if(c1 < c2) { 24 v = -1; 25 goto done; 26 } 27 if(c1 > c2) { 28 v = +1; 29 goto done; 30 } 31 } 32 if(s1.len < s2.len) { 33 v = -1; 34 goto done; 35 } 36 if(s1.len > s2.len) { 37 v = +1; 38 goto done; 39 } 40 v = 0; 41 done:; 42 } 43 44 #pragma textflag NOSPLIT 45 func bytes·Compare(s1 Slice, s2 Slice) (v int) { 46 uintgo i, l; 47 byte c1, c2; 48 49 l = s1.len; 50 if(s2.len < l) 51 l = s2.len; 52 for(i=0; i<l; i++) { 53 c1 = s1.array[i]; 54 c2 = s2.array[i]; 55 if(c1 < c2) { 56 v = -1; 57 goto done; 58 } 59 if(c1 > c2) { 60 v = +1; 61 goto done; 62 } 63 } 64 if(s1.len < s2.len) { 65 v = -1; 66 goto done; 67 } 68 if(s1.len > s2.len) { 69 v = +1; 70 goto done; 71 } 72 v = 0; 73 done:; 74 }