]> Cypherpunks.ru repositories - gostls13.git/blobdiff - src/runtime/asm_power64x.s
[dev.garbage] all: merge dev.power64 (7667e41f3ced) into dev.garbage
[gostls13.git] / src / runtime / asm_power64x.s
index fd0c6be16151fd0cc7c8a3f983f89cc5c6f1a2cc..ba900c2b3f5fe827e3bbe6f119ab29711ed67fd0 100644 (file)
@@ -86,7 +86,7 @@ TEXT runtime·reginit(SB),NOSPLIT,$-8-0
 // void gosave(Gobuf*)
 // save state in Gobuf; setjmp
 TEXT runtime·gosave(SB), NOSPLIT, $-8-8
-       MOVD    gobuf+0(FP), R3
+       MOVD    buf+0(FP), R3
        MOVD    R1, gobuf_sp(R3)
        MOVD    LR, R31
        MOVD    R31, gobuf_pc(R3)
@@ -99,7 +99,7 @@ TEXT runtime·gosave(SB), NOSPLIT, $-8-8
 // void gogo(Gobuf*)
 // restore state from Gobuf; longjmp
 TEXT runtime·gogo(SB), NOSPLIT, $-8-8
-       MOVD    gobuf+0(FP), R5
+       MOVD    buf+0(FP), R5
        MOVD    gobuf_g(R5), g  // make sure g is not nil
        MOVD    0(g), R4
        MOVD    gobuf_sp(R5), R1
@@ -299,7 +299,7 @@ TEXT runtime·morestack_noctxt(SB),NOSPLIT,$-8-0
 // Note: can't just "BR NAME(SB)" - bad inlining results.
 
 TEXT ·reflectcall(SB), NOSPLIT, $-8-24
-       MOVW argsize+16(FP), R3
+       MOVWZ n+16(FP), R3
        DISPATCH(runtime·call16, 16)
        DISPATCH(runtime·call32, 32)
        DISPATCH(runtime·call64, 64)
@@ -335,8 +335,8 @@ TEXT ·reflectcall(SB), NOSPLIT, $-8-24
 TEXT NAME(SB), WRAPPER, $MAXSIZE-24;           \
        NO_LOCAL_POINTERS;                      \
        /* copy arguments to stack */           \
-       MOVD    argptr+8(FP), R3;               \
-       MOVW    argsize+16(FP), R4;             \
+       MOVD    arg+8(FP), R3;                  \
+       MOVWZ   n+16(FP), R4;                   \
        MOVD    R1, R5;                         \
        ADD     $(8-1), R5;                     \
        SUB     $1, R3;                         \
@@ -353,9 +353,9 @@ TEXT NAME(SB), WRAPPER, $MAXSIZE-24;                \
        PCDATA  $PCDATA_StackMapIndex, $0;      \
        BL      (CTR);                          \
        /* copy return values back */           \
-       MOVD    argptr+8(FP), R3;               \
-       MOVW    argsize+16(FP), R4;             \
-       MOVW    retoffset+20(FP), R6;           \
+       MOVD    arg+8(FP), R3;                  \
+       MOVWZ   n+16(FP), R4;                   \
+       MOVWZ   retoffset+20(FP), R6;           \
        MOVD    R1, R5;                         \
        ADD     R6, R5;                         \
        ADD     R6, R3;                         \
@@ -398,7 +398,7 @@ CALLFN(·call268435456, 268435456)
 CALLFN(·call536870912, 536870912)
 CALLFN(·call1073741824, 1073741824)
 
-// bool cas(int32 *val, int32 old, int32 new)
+// bool cas(uint32 *ptr, uint32 old, uint32 new)
 // Atomically:
 //     if(*val == old){
 //             *val = new;
@@ -406,9 +406,9 @@ CALLFN(·call1073741824, 1073741824)
 //     } else
 //             return 0;
 TEXT runtime·cas(SB), NOSPLIT, $0-17
-       MOVD    p+0(FP), R3
-       MOVW    old+8(FP), R4
-       MOVW    new+12(FP), R5
+       MOVD    ptr+0(FP), R3
+       MOVWZ   old+8(FP), R4
+       MOVWZ   new+12(FP), R5
 cas_again:
        SYNC
        LWAR    (R3), R6
@@ -425,7 +425,7 @@ cas_fail:
        MOVD    $0, R3
        BR      -5(PC)
 
-// bool        runtime·cas64(uint64 *val, uint64 old, uint64 new)
+// bool        runtime·cas64(uint64 *ptr, uint64 old, uint64 new)
 // Atomically:
 //     if(*val == *old){
 //             *val = new;
@@ -434,7 +434,7 @@ cas_fail:
 //             return 0;
 //     }
 TEXT runtime·cas64(SB), NOSPLIT, $0-25
-       MOVD    p+0(FP), R3
+       MOVD    ptr+0(FP), R3
        MOVD    old+8(FP), R4
        MOVD    new+16(FP), R5
 cas64_again:
@@ -475,12 +475,12 @@ TEXT runtime·atomicstoreuintptr(SB), NOSPLIT, $0-16
 TEXT runtime·casp1(SB), NOSPLIT, $0-25
        BR runtime·cas64(SB)
 
-// uint32 xadd(uint32 volatile *val, int32 delta)
+// uint32 xadd(uint32 volatile *ptr, int32 delta)
 // Atomically:
 //     *val += delta;
 //     return *val;
 TEXT runtime·xadd(SB), NOSPLIT, $0-20
-       MOVD    p+0(FP), R4
+       MOVD    ptr+0(FP), R4
        MOVW    delta+8(FP), R5
        SYNC
        LWAR    (R4), R3
@@ -493,7 +493,7 @@ TEXT runtime·xadd(SB), NOSPLIT, $0-20
        RETURN
 
 TEXT runtime·xadd64(SB), NOSPLIT, $0-24
-       MOVD    p+0(FP), R4
+       MOVD    ptr+0(FP), R4
        MOVD    delta+8(FP), R5
        SYNC
        LDAR    (R4), R3
@@ -506,7 +506,7 @@ TEXT runtime·xadd64(SB), NOSPLIT, $0-24
        RETURN
 
 TEXT runtime·xchg(SB), NOSPLIT, $0-20
-       MOVD    p+0(FP), R4
+       MOVD    ptr+0(FP), R4
        MOVW    new+8(FP), R5
        SYNC
        LWAR    (R4), R3
@@ -518,7 +518,7 @@ TEXT runtime·xchg(SB), NOSPLIT, $0-20
        RETURN
 
 TEXT runtime·xchg64(SB), NOSPLIT, $0-24
-       MOVD    p+0(FP), R4
+       MOVD    ptr+0(FP), R4
        MOVD    new+8(FP), R5
        SYNC
        LDAR    (R4), R3
@@ -651,7 +651,7 @@ TEXT runtime·setcallerpc(SB),NOSPLIT,$-8-16
        RETURN
 
 TEXT runtime·getcallersp(SB),NOSPLIT,$0-16
-       MOVD    sp+0(FP), R3
+       MOVD    argp+0(FP), R3
        SUB     $8, R3
        MOVD    R3, ret+8(FP)
        RETURN
@@ -695,16 +695,17 @@ TEXT runtime·aeshashstr(SB),NOSPLIT,$-8-0
 TEXT runtime·memeq(SB),NOSPLIT,$-8-25
        MOVD    a+0(FP), R3
        MOVD    b+8(FP), R4
-       MOVD    count+16(FP), R5
+       MOVD    size+16(FP), R5
        SUB     $1, R3
        SUB     $1, R4
        ADD     R3, R5, R8
 loop:
        CMP     R3, R8
-       BNE     4(PC)
+       BNE     test
        MOVD    $1, R3
        MOVB    R3, ret+24(FP)
        RETURN
+test:
        MOVBZU  1(R3), R6
        MOVBZU  1(R4), R7
        CMP     R6, R7
@@ -828,7 +829,7 @@ notfound:
 // in ../../cmd/9g/ggen.c:/^clearfat.
 // R0: always zero
 // R3 (aka REGRT1): ptr to memory to be zeroed - 8
-// R3 is updated as a side effect.
+// On return, R3 points to the last zeroed dword.
 TEXT runtime·duffzero(SB), NOSPLIT, $-8-0
        MOVDU   R0, 8(R3)
        MOVDU   R0, 8(R3)
@@ -964,7 +965,7 @@ TEXT runtime·fastrand1(SB), NOSPLIT, $0-4
        MOVD    g_m(g), R4
        MOVWZ   m_fastrand(R4), R3
        ADD     R3, R3
-       CMP     R3, $0
+       CMPW    R3, $0
        BGE     2(PC)
        XOR     $0x88888eef, R3
        MOVW    R3, m_fastrand(R4)
@@ -979,3 +980,9 @@ TEXT runtime·return0(SB), NOSPLIT, $0
 // Must obey the gcc calling convention.
 TEXT _cgo_topofstack(SB),NOSPLIT,$0
        MOVD    R0, 26(R0)
+
+// The top-most function running on a goroutine
+// returns to goexit+PCQuantum.
+TEXT runtime·goexit(SB),NOSPLIT,$-8-0
+       MOVD    R0, R0  // NOP
+       BL      runtime·goexit1(SB)    // does not return