]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: use 64-bit negative error code on 64-bit machines
authorRuss Cox <rsc@golang.org>
Fri, 15 Mar 2013 03:42:11 +0000 (23:42 -0400)
committerRuss Cox <rsc@golang.org>
Fri, 15 Mar 2013 03:42:11 +0000 (23:42 -0400)
NEGL does a negation of the bottom 32 bits and then zero-extends to 64 bits,
resulting in a negative 32-bit number but a positive 64-bit number.

NEGQ does a full 64-bit negation, so that the result is negative both as
a 32-bit and as a 64-bit number.

This doesn't matter for the functions that are declared to return int32.
It only matters for the ones that return int64 or void* [sic].

This will fix the current incorrect error in the OpenBSD/amd64 build.
The build will still be broken, but it won't report a bogus error.

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/7536046

src/pkg/runtime/sys_darwin_amd64.s
src/pkg/runtime/sys_freebsd_amd64.s
src/pkg/runtime/sys_netbsd_amd64.s
src/pkg/runtime/sys_openbsd_amd64.s

index 271d43a31befdce58f8f70bff33d0b4cdc5616bc..c8a45439d101094b50a7646f80ac8564053a2fd2 100644 (file)
@@ -289,7 +289,7 @@ TEXT runtime·bsdthread_create(SB),7,$0
        MOVQ    $(0x2000000+360), AX    // bsdthread_create
        SYSCALL
        JCC 3(PC)
-       NEGL    AX
+       NEGQ    AX
        RET
        MOVL    $0, AX
        RET
@@ -342,7 +342,7 @@ TEXT runtime·bsdthread_register(SB),7,$0
        MOVQ    $(0x2000000+366), AX    // bsdthread_register
        SYSCALL
        JCC 3(PC)
-       NEGL    AX
+       NEGQ    AX
        RET
        MOVL    $0, AX
        RET
@@ -435,7 +435,7 @@ TEXT runtime·sysctl(SB),7,$0
        MOVL    $(0x2000000+202), AX    // syscall entry
        SYSCALL
        JCC 3(PC)
-       NEGL    AX
+       NEGQ    AX
        RET
        MOVL    $0, AX
        RET
@@ -448,7 +448,7 @@ TEXT runtime·kqueue(SB),7,$0
        MOVL    $(0x2000000+362), AX
        SYSCALL
        JCC     2(PC)
-       NEGL    AX
+       NEGQ    AX
        RET
 
 // int32 runtime·kevent(int kq, Kevent *changelist, int nchanges, Kevent *eventlist, int nevents, Timespec *timeout);
@@ -462,7 +462,7 @@ TEXT runtime·kevent(SB),7,$0
        MOVL    $(0x2000000+363), AX
        SYSCALL
        JCC     2(PC)
-       NEGL    AX
+       NEGQ    AX
        RET
 
 // void runtime·closeonexec(int32 fd);
index f393b870000d36d5a599ee2979a6c4535b0e7d0e..3738f16073f0888cd710eb9ee511b75eed765924 100644 (file)
@@ -261,7 +261,7 @@ TEXT runtime·sysctl(SB),7,$0
        MOVQ    $202, AX                // sys___sysctl
        SYSCALL
        JCC 3(PC)
-       NEGL    AX
+       NEGQ    AX
        RET
        MOVL    $0, AX
        RET
index 329373c858ddaab029659e6812f15528e6fe14a5..958b97e601c2ff8ae4aa2c71c199dffc03f9f5e1 100644 (file)
@@ -16,7 +16,7 @@ TEXT runtime·lwp_create(SB),7,$0
        MOVL    $309, AX                // sys__lwp_create
        SYSCALL
        JCC     2(PC)
-       NEGL    AX
+       NEGQ    AX
        RET
 
 TEXT runtime·lwp_tramp(SB),7,$0
@@ -254,7 +254,7 @@ TEXT runtime·mmap(SB),7,$0
        MOVL    $197, AX                // sys_mmap
        SYSCALL
        JCC     2(PC)
-       NEGL    AX
+       NEGQ    AX
        ADDQ    $16, SP
        RET
 
@@ -306,7 +306,7 @@ TEXT runtime·sysctl(SB),7,$0
        MOVQ    $202, AX                // sys___sysctl
        SYSCALL
        JCC 3(PC)
-       NEGL    AX
+       NEGQ    AX
        RET
        MOVL    $0, AX
        RET
index 5ec52dfccfd025027ed59e482e92275d9ca2488d..585fe47c2b2f903deb695f9a1e94e747d6684d85 100644 (file)
@@ -23,7 +23,7 @@ TEXT runtime·tfork(SB),7,$32
 
        // Return if tfork syscall failed.
        JCC     3(PC)
-       NEGL    AX
+       NEGQ    AX
        RET
 
        // In parent, return.
@@ -243,7 +243,7 @@ TEXT runtime·mmap(SB),7,$0
        MOVL    $197, AX
        SYSCALL
        JCC     2(PC)
-       NEGL    AX
+       NEGQ    AX
        ADDQ    $16, SP
        RET
 
@@ -294,7 +294,7 @@ TEXT runtime·sysctl(SB),7,$0
        MOVQ    $202, AX                // sys___sysctl
        SYSCALL
        JCC     3(PC)
-       NEGL    AX
+       NEGQ    AX
        RET
        MOVL    $0, AX
        RET