| // Copyright 2013 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. |
| |
| // Routines that are implemented in assembly in asm_{amd64,386}.s |
| // but are implemented in C for arm. |
| |
| package runtime |
| #include "runtime.h" |
| #include "../../cmd/ld/textflag.h" |
| |
| #pragma textflag NOSPLIT |
| func cmpstring(s1 String, s2 String) (v int) { |
| uintgo i, l; |
| byte c1, c2; |
| |
| l = s1.len; |
| if(s2.len < l) |
| l = s2.len; |
| for(i=0; i<l; i++) { |
| c1 = s1.str[i]; |
| c2 = s2.str[i]; |
| if(c1 < c2) { |
| v = -1; |
| goto done; |
| } |
| if(c1 > c2) { |
| v = +1; |
| goto done; |
| } |
| } |
| if(s1.len < s2.len) { |
| v = -1; |
| goto done; |
| } |
| if(s1.len > s2.len) { |
| v = +1; |
| goto done; |
| } |
| v = 0; |
| done:; |
| } |
| |
| #pragma textflag NOSPLIT |
| func bytesยทCompare(s1 Slice, s2 Slice) (v int) { |
| uintgo i, l; |
| byte c1, c2; |
| |
| l = s1.len; |
| if(s2.len < l) |
| l = s2.len; |
| for(i=0; i<l; i++) { |
| c1 = s1.array[i]; |
| c2 = s2.array[i]; |
| if(c1 < c2) { |
| v = -1; |
| goto done; |
| } |
| if(c1 > c2) { |
| v = +1; |
| goto done; |
| } |
| } |
| if(s1.len < s2.len) { |
| v = -1; |
| goto done; |
| } |
| if(s1.len > s2.len) { |
| v = +1; |
| goto done; |
| } |
| v = 0; |
| done:; |
| } |