github.com/spotify/syslog-redirector-golang@v0.0.0-20140320174030-4859f03d829a/src/pkg/runtime/zstring_linux_amd64.c (about) 1 // auto generated by go tool dist 2 // goos=linux goarch=amd64 3 4 #include "runtime.h" 5 #include "arch_GOARCH.h" 6 #include "malloc.h" 7 #include "race.h" 8 #include "../../cmd/ld/textflag.h" 9 10 #line 12 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 11 String runtime·emptystring; 12 #line 14 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 13 #pragma textflag NOSPLIT 14 intgo 15 runtime·findnull ( byte *s ) 16 { 17 intgo l; 18 #line 20 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 19 if ( s == nil ) 20 return 0; 21 for ( l=0; s[l]!=0; l++ ) 22 ; 23 return l; 24 } 25 #line 27 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 26 intgo 27 runtime·findnullw ( uint16 *s ) 28 { 29 intgo l; 30 #line 32 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 31 if ( s == nil ) 32 return 0; 33 for ( l=0; s[l]!=0; l++ ) 34 ; 35 return l; 36 } 37 #line 39 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 38 uintptr runtime·maxstring = 256; 39 #line 41 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 40 static String 41 gostringsize ( intgo l ) 42 { 43 String s; 44 uintptr ms; 45 #line 47 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 46 if ( l == 0 ) 47 return runtime·emptystring; 48 #line 50 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 49 s.str = runtime·mallocgc ( l+1 , 0 , FlagNoScan|FlagNoZero ) ; 50 s.len = l; 51 s.str[l] = 0; 52 for ( ;; ) { 53 ms = runtime·maxstring; 54 if ( ( uintptr ) l <= ms || runtime·casp ( ( void** ) &runtime·maxstring , ( void* ) ms , ( void* ) l ) ) 55 break; 56 } 57 return s; 58 } 59 #line 61 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 60 String 61 runtime·gostring ( byte *str ) 62 { 63 intgo l; 64 String s; 65 #line 67 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 66 l = runtime·findnull ( str ) ; 67 s = gostringsize ( l ) ; 68 runtime·memmove ( s.str , str , l ) ; 69 return s; 70 } 71 #line 73 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 72 String 73 runtime·gostringn ( byte *str , intgo l ) 74 { 75 String s; 76 #line 78 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 77 s = gostringsize ( l ) ; 78 runtime·memmove ( s.str , str , l ) ; 79 return s; 80 } 81 #line 83 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 82 Slice 83 runtime·gobytes ( byte *p , intgo n ) 84 { 85 Slice sl; 86 #line 88 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 87 sl.array = runtime·mallocgc ( n , 0 , FlagNoScan|FlagNoZero ) ; 88 sl.len = n; 89 sl.cap = n; 90 runtime·memmove ( sl.array , p , n ) ; 91 return sl; 92 } 93 #line 95 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 94 String 95 runtime·gostringnocopy ( byte *str ) 96 { 97 String s; 98 #line 100 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 99 s.str = str; 100 s.len = runtime·findnull ( str ) ; 101 return s; 102 } 103 #line 105 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 104 void 105 runtime·cstringToGo ( byte *str , String s ) 106 { 107 s = runtime·gostringnocopy ( str ) ; 108 FLUSH ( &s ) ; 109 } 110 #line 112 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 111 String 112 runtime·gostringw ( uint16 *str ) 113 { 114 intgo n1 , n2 , i; 115 byte buf[8]; 116 String s; 117 #line 119 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 118 n1 = 0; 119 for ( i=0; str[i]; i++ ) 120 n1 += runtime·runetochar ( buf , str[i] ) ; 121 s = gostringsize ( n1+4 ) ; 122 n2 = 0; 123 for ( i=0; str[i]; i++ ) { 124 #line 126 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 125 if ( n2 >= n1 ) 126 break; 127 n2 += runtime·runetochar ( s.str+n2 , str[i] ) ; 128 } 129 s.len = n2; 130 s.str[s.len] = 0; 131 return s; 132 } 133 #line 135 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 134 String 135 runtime·catstring ( String s1 , String s2 ) 136 { 137 String s3; 138 #line 140 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 139 if ( s1.len == 0 ) 140 return s2; 141 if ( s2.len == 0 ) 142 return s1; 143 #line 145 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 144 s3 = gostringsize ( s1.len + s2.len ) ; 145 runtime·memmove ( s3.str , s1.str , s1.len ) ; 146 runtime·memmove ( s3.str+s1.len , s2.str , s2.len ) ; 147 return s3; 148 } 149 #line 151 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 150 static String 151 concatstring ( intgo n , String *s ) 152 { 153 intgo i , l , count; 154 String out; 155 #line 157 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 156 l = 0; 157 count = 0; 158 for ( i=0; i<n; i++ ) { 159 if ( l + s[i].len < l ) 160 runtime·throw ( "string concatenation too long" ) ; 161 l += s[i].len; 162 if ( s[i].len > 0 ) { 163 count++; 164 out = s[i]; 165 } 166 } 167 if ( count == 0 ) 168 return runtime·emptystring; 169 if ( count == 1 ) 170 return out; 171 #line 173 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 172 out = gostringsize ( l ) ; 173 l = 0; 174 for ( i=0; i<n; i++ ) { 175 runtime·memmove ( out.str+l , s[i].str , s[i].len ) ; 176 l += s[i].len; 177 } 178 return out; 179 } 180 #line 185 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 181 #pragma textflag NOSPLIT 182 void 183 runtime·concatstring ( intgo n , String s1 , ... ) 184 { 185 ( &s1 ) [n] = concatstring ( n , &s1 ) ; 186 } 187 void 188 runtime·eqstring(String s1, String s2, bool v) 189 { 190 #line 192 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 191 192 if(s1.len != s2.len) { 193 v = false; 194 return; 195 } 196 if(s1.str == s2.str) { 197 v = true; 198 return; 199 } 200 v = runtime·memeq(s1.str, s2.str, s1.len); 201 FLUSH(&v); 202 } 203 204 #line 204 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 205 int32 206 runtime·strcmp ( byte *s1 , byte *s2 ) 207 { 208 uintptr i; 209 byte c1 , c2; 210 #line 210 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 211 for ( i=0;; i++ ) { 212 c1 = s1[i]; 213 c2 = s2[i]; 214 if ( c1 < c2 ) 215 return -1; 216 if ( c1 > c2 ) 217 return +1; 218 if ( c1 == 0 ) 219 return 0; 220 } 221 } 222 #line 222 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 223 byte* 224 runtime·strstr ( byte *s1 , byte *s2 ) 225 { 226 byte *sp1 , *sp2; 227 #line 227 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 228 if ( *s2 == 0 ) 229 return s1; 230 for ( ; *s1; s1++ ) { 231 if ( *s1 != *s2 ) 232 continue; 233 sp1 = s1; 234 sp2 = s2; 235 for ( ;; ) { 236 if ( *sp2 == 0 ) 237 return s1; 238 if ( *sp1++ != *sp2++ ) 239 break; 240 } 241 } 242 return nil; 243 } 244 void 245 runtime·intstring(int64 v, String s) 246 { 247 #line 244 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 248 249 s = gostringsize(8); 250 s.len = runtime·runetochar(s.str, v); 251 s.str[s.len] = 0; 252 FLUSH(&s); 253 } 254 void 255 runtime·slicebytetostring(Slice b, String s) 256 { 257 #line 250 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 258 259 void *pc; 260 261 if(raceenabled) { 262 pc = runtime·getcallerpc(&b); 263 runtime·racereadrangepc(b.array, b.len, pc, runtime·slicebytetostring); 264 } 265 s = gostringsize(b.len); 266 runtime·memmove(s.str, b.array, s.len); 267 FLUSH(&s); 268 } 269 void 270 runtime·stringtoslicebyte(String s, Slice b) 271 { 272 #line 261 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 273 274 b.array = runtime·mallocgc(s.len, 0, FlagNoScan|FlagNoZero); 275 b.len = s.len; 276 b.cap = s.len; 277 runtime·memmove(b.array, s.str, s.len); 278 FLUSH(&b); 279 } 280 void 281 runtime·slicerunetostring(Slice b, String s) 282 { 283 #line 268 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 284 285 intgo siz1, siz2, i; 286 int32 *a; 287 byte dum[8]; 288 void *pc; 289 290 if(raceenabled) { 291 pc = runtime·getcallerpc(&b); 292 runtime·racereadrangepc(b.array, b.len*sizeof(*a), pc, runtime·slicerunetostring); 293 } 294 a = (int32*)b.array; 295 siz1 = 0; 296 for(i=0; i<b.len; i++) { 297 siz1 += runtime·runetochar(dum, a[i]); 298 } 299 300 s = gostringsize(siz1+4); 301 siz2 = 0; 302 for(i=0; i<b.len; i++) { 303 // check for race 304 if(siz2 >= siz1) 305 break; 306 siz2 += runtime·runetochar(s.str+siz2, a[i]); 307 } 308 s.len = siz2; 309 s.str[s.len] = 0; 310 FLUSH(&s); 311 } 312 void 313 runtime·stringtoslicerune(String s, Slice b) 314 { 315 #line 296 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 316 317 intgo n; 318 int32 dum, *r; 319 uint8 *p, *ep; 320 321 // two passes. 322 // unlike slicerunetostring, no race because strings are immutable. 323 p = s.str; 324 ep = s.str+s.len; 325 n = 0; 326 while(p < ep) { 327 p += runtime·charntorune(&dum, p, ep-p); 328 n++; 329 } 330 331 b.array = runtime·mallocgc(n*sizeof(r[0]), 0, FlagNoScan|FlagNoZero); 332 b.len = n; 333 b.cap = n; 334 p = s.str; 335 r = (int32*)b.array; 336 while(p < ep) 337 p += runtime·charntorune(r++, p, ep-p); 338 FLUSH(&b); 339 } 340 341 #line 320 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 342 enum 343 { 344 Runeself = 0x80 , 345 } ; 346 void 347 runtime·stringiter(String s, intgo k, intgo retk) 348 { 349 #line 325 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 350 351 int32 l; 352 353 if(k >= s.len) { 354 // retk=0 is end of iteration 355 retk = 0; 356 goto out; 357 } 358 359 l = s.str[k]; 360 if(l < Runeself) { 361 retk = k+1; 362 goto out; 363 } 364 365 // multi-char rune 366 retk = k + runtime·charntorune(&l, s.str+k, s.len-k); 367 368 out: 369 FLUSH(&retk); 370 } 371 void 372 runtime·stringiter2(String s, intgo k, intgo retk, int32 retv) 373 { 374 #line 346 "/tmp/makerelease886106415/go/src/pkg/runtime/string.goc" 375 376 if(k >= s.len) { 377 // retk=0 is end of iteration 378 retk = 0; 379 retv = 0; 380 goto out; 381 } 382 383 retv = s.str[k]; 384 if(retv < Runeself) { 385 retk = k+1; 386 goto out; 387 } 388 389 // multi-char rune 390 retk = k + runtime·charntorune(&retv, s.str+k, s.len-k); 391 392 out: 393 FLUSH(&retk); 394 FLUSH(&retv); 395 }