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  }