Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(14)

Delta Between Two Patch Sets: src/pkg/runtime/asm_amd64.s

Issue 5279048: code review 5279048: runtime: faster and more scalable GC (Closed)
Left Patch Set: diff -r 9e73a59f386c https://go.googlecode.com/hg/ Created 13 years, 5 months ago
Right Patch Set: diff -r f44057cc01b2 https://go.googlecode.com/hg/ Created 12 years, 11 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Right: Side by side diff | Download
« no previous file with change/comment | « src/pkg/runtime/asm_386.s ('k') | src/pkg/runtime/atomic_386.c » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
(no file at all)
1 // Copyright 2009 The Go Authors. All rights reserved. 1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style 2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file. 3 // license that can be found in the LICENSE file.
4 4
5 #include "zasm_GOOS_GOARCH.h" 5 #include "zasm_GOOS_GOARCH.h"
6 6
7 TEXT _rt0_amd64(SB),7,$-8 7 TEXT _rt0_amd64(SB),7,$-8
8 // copy arguments forward on an even stack 8 // copy arguments forward on an even stack
9 MOVQ 0(DI), AX // argc 9 MOVQ 0(DI), AX // argc
10 LEAQ 8(DI), BX // argv 10 LEAQ 8(DI), BX // argv
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 MOVL 16(SP), AX 337 MOVL 16(SP), AX
338 MOVL 20(SP), CX 338 MOVL 20(SP), CX
339 LOCK 339 LOCK
340 CMPXCHGL CX, 0(BX) 340 CMPXCHGL CX, 0(BX)
341 JZ 3(PC) 341 JZ 3(PC)
342 MOVL $0, AX 342 MOVL $0, AX
343 RET 343 RET
344 MOVL $1, AX 344 MOVL $1, AX
345 RET 345 RET
346 346
347 // bool runtime·cas64(uint64 *val, uint64 *old, uint64 new)
348 // Atomically:
349 // if(*val == *old){
350 // *val = new;
351 // return 1;
352 // } else {
353 // *old = *val
354 // return 0;
355 // }
356 TEXT runtime·cas64(SB), 7, $0
357 MOVQ 8(SP), BX
358 MOVQ 16(SP), BP
359 MOVQ 0(BP), AX
360 MOVQ 24(SP), CX
361 LOCK
362 CMPXCHGQ CX, 0(BX)
363 JNZ cas64_fail
364 MOVL $1, AX
365 RET
366 cas64_fail:
367 MOVQ AX, 0(BP)
368 XORL AX, AX
369 RET
370
347 // bool casp(void **val, void *old, void *new) 371 // bool casp(void **val, void *old, void *new)
348 // Atomically: 372 // Atomically:
349 // if(*val == old){ 373 // if(*val == old){
350 // *val = new; 374 // *val = new;
351 // return 1; 375 // return 1;
352 // } else 376 // } else
353 // return 0; 377 // return 0;
354 TEXT runtime·casp(SB), 7, $0 378 TEXT runtime·casp(SB), 7, $0
355 MOVQ 8(SP), BX 379 MOVQ 8(SP), BX
356 MOVQ 16(SP), AX 380 MOVQ 16(SP), AX
(...skipping 12 matching lines...) Expand all
369 // return *val; 393 // return *val;
370 TEXT runtime·xadd(SB), 7, $0 394 TEXT runtime·xadd(SB), 7, $0
371 MOVQ 8(SP), BX 395 MOVQ 8(SP), BX
372 MOVL 16(SP), AX 396 MOVL 16(SP), AX
373 MOVL AX, CX 397 MOVL AX, CX
374 LOCK 398 LOCK
375 XADDL AX, 0(BX) 399 XADDL AX, 0(BX)
376 ADDL CX, AX 400 ADDL CX, AX
377 RET 401 RET
378 402
403 TEXT runtime·xadd64(SB), 7, $0
404 MOVQ 8(SP), BX
405 MOVQ 16(SP), AX
406 MOVQ AX, CX
407 LOCK
408 XADDQ AX, 0(BX)
409 ADDQ CX, AX
410 RET
411
379 TEXT runtime·xchg(SB), 7, $0 412 TEXT runtime·xchg(SB), 7, $0
380 MOVQ 8(SP), BX 413 MOVQ 8(SP), BX
381 MOVL 16(SP), AX 414 MOVL 16(SP), AX
382 XCHGL AX, 0(BX) 415 XCHGL AX, 0(BX)
383 RET 416 RET
384 417
385 TEXT runtime·procyield(SB),7,$0 418 TEXT runtime·procyield(SB),7,$0
386 MOVL 8(SP), AX 419 MOVL 8(SP), AX
387 again: 420 again:
388 PAUSE 421 PAUSE
389 SUBL $1, AX 422 SUBL $1, AX
390 JNZ again 423 JNZ again
391 RET 424 RET
392 425
393 TEXT runtime·atomicstorep(SB), 7, $0 426 TEXT runtime·atomicstorep(SB), 7, $0
394 MOVQ 8(SP), BX 427 MOVQ 8(SP), BX
395 MOVQ 16(SP), AX 428 MOVQ 16(SP), AX
396 XCHGQ AX, 0(BX) 429 XCHGQ AX, 0(BX)
397 RET 430 RET
398 431
399 TEXT runtime·atomicstore(SB), 7, $0 432 TEXT runtime·atomicstore(SB), 7, $0
400 MOVQ 8(SP), BX 433 MOVQ 8(SP), BX
401 MOVL 16(SP), AX 434 MOVL 16(SP), AX
402 XCHGL AX, 0(BX) 435 XCHGL AX, 0(BX)
436 RET
437
438 TEXT runtime·atomicstore64(SB), 7, $0
439 MOVQ 8(SP), BX
440 MOVQ 16(SP), AX
441 XCHGQ AX, 0(BX)
442 RET
443
444 TEXT runtime·prefetch(SB), 7, $0
445 MOVQ 8(SP), AX
446 // PREFETCHNTA (AX)
447 BYTE $0x0f; BYTE $0x18; BYTE $0x00
403 RET 448 RET
404 449
405 // void jmpdefer(fn, sp); 450 // void jmpdefer(fn, sp);
406 // called from deferreturn. 451 // called from deferreturn.
407 // 1. pop the caller 452 // 1. pop the caller
408 // 2. sub 5 bytes from the callers return 453 // 2. sub 5 bytes from the callers return
409 // 3. jmp to the argument 454 // 3. jmp to the argument
410 TEXT runtime·jmpdefer(SB), 7, $0 455 TEXT runtime·jmpdefer(SB), 7, $0
411 MOVQ 8(SP), AX // fn 456 MOVQ 8(SP), AX // fn
412 MOVQ 16(SP), BX // caller sp 457 MOVQ 16(SP), BX // caller sp
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 TEXT runtime·stackguard(SB),7,$0 635 TEXT runtime·stackguard(SB),7,$0
591 MOVQ SP, DX 636 MOVQ SP, DX
592 MOVQ DX, sp+0(FP) 637 MOVQ DX, sp+0(FP)
593 get_tls(CX) 638 get_tls(CX)
594 MOVQ g(CX), BX 639 MOVQ g(CX), BX
595 MOVQ g_stackguard(BX), DX 640 MOVQ g_stackguard(BX), DX
596 MOVQ DX, guard+8(FP) 641 MOVQ DX, guard+8(FP)
597 RET 642 RET
598 643
599 GLOBL runtime·tls0(SB), $64 644 GLOBL runtime·tls0(SB), $64
LEFTRIGHT

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b