Commit 062e354c authored by Austin Clements's avatar Austin Clements

[dev.power64] runtime: power64 fixes and ports of changes

Fix include paths that got moved in the great pkg/ rename.  Add
missing runtime/arch_* files for power64.  Port changes that
happened on default since branching to
runtime/{asm,atomic,sys_linux}_power64x.s (precise stacks,
calling convention change, various new and deleted functions.
Port struct renaming and fix some bugs in
runtime/defs_linux_power64.h.

LGTM=rsc
R=rsc, dave
CC=golang-codereviews
https://golang.org/cl/161450043
parent 6be0c8a5
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
// +build power64 power64le // +build power64 power64le
#include "../../cmd/ld/textflag.h" #include "textflag.h"
TEXT ·Asin(SB),NOSPLIT,$0 TEXT ·Asin(SB),NOSPLIT,$0
BR ·asin(SB) BR ·asin(SB)
......
// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package runtime
type uintreg uint64
type intptr int64 // TODO(rsc): remove
// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package runtime
type uintreg uint64
type intptr int64 // TODO(rsc): remove
This diff is collapsed.
...@@ -4,34 +4,37 @@ ...@@ -4,34 +4,37 @@
// +build power64 power64le // +build power64 power64le
#include "../../cmd/ld/textflag.h" #include "textflag.h"
// uint32 runtime·atomicload(uint32 volatile* addr) // uint32 runtime·atomicload(uint32 volatile* addr)
TEXT ·atomicload(SB),NOSPLIT,$-8-8 TEXT ·atomicload(SB),NOSPLIT,$-8-12
MOVD 0(FP), R3 MOVD 0(FP), R3
SYNC SYNC
MOVWZ 0(R3), R3 MOVWZ 0(R3), R3
CMPW R3, R3, CR7 CMPW R3, R3, CR7
BC 4, 30, 1(PC) // bne- cr7,0x4 BC 4, 30, 1(PC) // bne- cr7,0x4
ISYNC ISYNC
MOVW R3, ret+8(FP)
RETURN RETURN
// uint64 runtime·atomicload64(uint64 volatile* addr) // uint64 runtime·atomicload64(uint64 volatile* addr)
TEXT ·atomicload64(SB),NOSPLIT,$-8-8 TEXT ·atomicload64(SB),NOSPLIT,$-8-16
MOVD 0(FP), R3 MOVD 0(FP), R3
SYNC SYNC
MOVD 0(R3), R3 MOVD 0(R3), R3
CMP R3, R3, CR7 CMP R3, R3, CR7
BC 4, 30, 1(PC) // bne- cr7,0x4 BC 4, 30, 1(PC) // bne- cr7,0x4
ISYNC ISYNC
MOVD R3, ret+8(FP)
RETURN RETURN
// void *runtime·atomicloadp(void *volatile *addr) // void *runtime·atomicloadp(void *volatile *addr)
TEXT ·atomicloadp(SB),NOSPLIT,$-8-8 TEXT ·atomicloadp(SB),NOSPLIT,$-8-16
MOVD 0(FP), R3 MOVD 0(FP), R3
SYNC SYNC
MOVD 0(R3), R3 MOVD 0(R3), R3
CMP R3, R3, CR7 CMP R3, R3, CR7
BC 4, 30, 1(PC) // bne- cr7,0x4 BC 4, 30, 1(PC) // bne- cr7,0x4
ISYNC ISYNC
MOVD R3, ret+8(FP)
RETURN RETURN
...@@ -7,6 +7,12 @@ ...@@ -7,6 +7,12 @@
#ifdef GOARCH_arm #ifdef GOARCH_arm
#define JMP B #define JMP B
#endif #endif
#ifdef GOARCH_power64
#define JMP BR
#endif
#ifdef GOARCH_power64le
#define JMP BR
#endif
TEXT ·setMaxStack(SB),NOSPLIT,$0-0 TEXT ·setMaxStack(SB),NOSPLIT,$0-0
JMP runtime·setMaxStack(SB) JMP runtime·setMaxStack(SB)
......
...@@ -88,11 +88,10 @@ enum { ...@@ -88,11 +88,10 @@ enum {
typedef struct Sigset Sigset; typedef struct Sigset Sigset;
typedef struct Timespec Timespec; typedef struct Timespec Timespec;
typedef struct Timeval Timeval; typedef struct Timeval Timeval;
typedef struct Sigaction Sigaction; typedef struct SigactionT SigactionT;
typedef struct Siginfo Siginfo; typedef struct Siginfo Siginfo;
typedef struct Itimerval Itimerval; typedef struct Itimerval Itimerval;
typedef struct EpollEvent EpollEvent; typedef struct EpollEvent EpollEvent;
typedef uint64 Usigset;
#pragma pack on #pragma pack on
...@@ -109,11 +108,11 @@ struct Timeval { ...@@ -109,11 +108,11 @@ struct Timeval {
int64 tv_sec; int64 tv_sec;
int64 tv_usec; int64 tv_usec;
}; };
struct Sigaction { struct SigactionT {
void *sa_handler; void *sa_handler;
uint64 sa_flags; uint64 sa_flags;
void *sa_restorer; void *sa_restorer;
Usigset sa_mask; uint64 sa_mask;
}; };
struct Siginfo { struct Siginfo {
int32 si_signo; int32 si_signo;
...@@ -129,7 +128,7 @@ struct Itimerval { ...@@ -129,7 +128,7 @@ struct Itimerval {
struct EpollEvent { struct EpollEvent {
uint32 events; uint32 events;
byte Pad_cgo_0[4]; byte Pad_cgo_0[4];
uint64 data; byte data[8]; // unaligned uintptr
}; };
...@@ -144,7 +143,6 @@ enum { ...@@ -144,7 +143,6 @@ enum {
SA_RESTORER = 0, SA_RESTORER = 0,
}; };
//typedef struct Usigset Usigset;
typedef struct Ptregs Ptregs; typedef struct Ptregs Ptregs;
typedef struct Vreg Vreg; typedef struct Vreg Vreg;
typedef struct SigaltstackT SigaltstackT; typedef struct SigaltstackT SigaltstackT;
...@@ -153,11 +151,6 @@ typedef struct Ucontext Ucontext; ...@@ -153,11 +151,6 @@ typedef struct Ucontext Ucontext;
#pragma pack on #pragma pack on
//struct Usigset {
// uint64 sig[1];
//};
//typedef Sigset Usigset;
struct Ptregs { struct Ptregs {
uint64 gpr[32]; uint64 gpr[32];
uint64 nip; uint64 nip;
...@@ -202,8 +195,8 @@ struct Ucontext { ...@@ -202,8 +195,8 @@ struct Ucontext {
uint64 uc_flags; uint64 uc_flags;
Ucontext *uc_link; Ucontext *uc_link;
SigaltstackT uc_stack; SigaltstackT uc_stack;
Usigset uc_sigmask; uint64 uc_sigmask;
Usigset __unused[15]; uint64 __unused[15];
Sigcontext uc_mcontext; Sigcontext uc_mcontext;
}; };
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
// +build power64 power64le // +build power64 power64le
#include "../../cmd/ld/textflag.h" #include "textflag.h"
// void runtime·memclr(void*, uintptr) // void runtime·memclr(void*, uintptr)
TEXT runtime·memclr(SB),NOSPLIT,$0-16 TEXT runtime·memclr(SB),NOSPLIT,$0-16
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
// +build power64 power64le // +build power64 power64le
#include "../../cmd/ld/textflag.h" #include "textflag.h"
// void runtime·memmove(void*, void*, uintptr) // void runtime·memmove(void*, void*, uintptr)
TEXT runtime·memmove(SB), NOSPLIT, $-8-24 TEXT runtime·memmove(SB), NOSPLIT, $-8-24
......
#include "../../cmd/ld/textflag.h" #include "textflag.h"
// actually a function descriptor for _main<>(SB) // actually a function descriptor for _main<>(SB)
TEXT _rt0_power64_linux(SB),7,$0 TEXT _rt0_power64_linux(SB),NOSPLIT,$0
DWORD $_main<>(SB) DWORD $_main<>(SB)
DWORD $0 DWORD $0
DWORD $0 DWORD $0
...@@ -12,6 +12,6 @@ TEXT _main<>(SB),NOSPLIT,$-8 ...@@ -12,6 +12,6 @@ TEXT _main<>(SB),NOSPLIT,$-8
BR main(SB) BR main(SB)
TEXT main(SB),NOSPLIT,$-8 TEXT main(SB),NOSPLIT,$-8
MOVD $_rt0_go(SB), R31 MOVD $runtime·rt0_go(SB), R31
MOVD R31, CTR MOVD R31, CTR
BR (CTR) BR (CTR)
#include "../../cmd/ld/textflag.h" #include "textflag.h"
TEXT _rt0_power64le_linux(SB),7,$0 TEXT _rt0_power64le_linux(SB),NOSPLIT,$0
BR _main<>(SB) BR _main<>(SB)
TEXT _main<>(SB),NOSPLIT,$-8 TEXT _main<>(SB),NOSPLIT,$-8
...@@ -9,6 +9,6 @@ TEXT _main<>(SB),NOSPLIT,$-8 ...@@ -9,6 +9,6 @@ TEXT _main<>(SB),NOSPLIT,$-8
BR main(SB) BR main(SB)
TEXT main(SB),NOSPLIT,$-8 TEXT main(SB),NOSPLIT,$-8
MOVD $_rt0_go(SB), R31 MOVD $runtime·rt0_go(SB), R31
MOVD R31, CTR MOVD R31, CTR
BR (CTR) BR (CTR)
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
// //
#include "zasm_GOOS_GOARCH.h" #include "zasm_GOOS_GOARCH.h"
#include "../../cmd/ld/textflag.h" #include "textflag.h"
#define SYS_exit 1 #define SYS_exit 1
#define SYS_read 3 #define SYS_read 3
...@@ -44,49 +44,54 @@ ...@@ -44,49 +44,54 @@
#define SYS_clock_gettime 246 #define SYS_clock_gettime 246
#define SYS_epoll_create1 315 #define SYS_epoll_create1 315
TEXT runtime·exit(SB),NOSPLIT,$-8-8 TEXT runtime·exit(SB),NOSPLIT,$-8-4
MOVW 8(R1), R3 MOVW code+0(FP), R3
SYSCALL $SYS_exit_group SYSCALL $SYS_exit_group
RETURN RETURN
TEXT runtime·exit1(SB),NOSPLIT,$-8-8 TEXT runtime·exit1(SB),NOSPLIT,$-8-4
MOVW 8(R1), R3 MOVW code+0(FP), R3
SYSCALL $SYS_exit SYSCALL $SYS_exit
RETURN RETURN
TEXT runtime·open(SB),NOSPLIT,$-8-16 TEXT runtime·open(SB),NOSPLIT,$-8-20
MOVD 8(R1), R3 MOVD name+0(FP), R3
MOVW 16(R1), R4 MOVW mode+8(FP), R4
MOVW 20(R1), R5 MOVW perm+12(FP), R5
SYSCALL $SYS_open SYSCALL $SYS_open
MOVW R3, ret+16(FP)
RETURN RETURN
TEXT runtime·close(SB),NOSPLIT,$-8-16 TEXT runtime·close(SB),NOSPLIT,$-8-12
MOVW 8(R1), R3 MOVW fd+0(FP), R3
SYSCALL $SYS_close SYSCALL $SYS_close
MOVW R3, ret+8(FP)
RETURN RETURN
TEXT runtime·write(SB),NOSPLIT,$-8-24 TEXT runtime·write(SB),NOSPLIT,$-8-28
MOVD 8(R1), R3 MOVD fd+0(FP), R3
MOVD 16(R1), R4 MOVD p+8(FP), R4
MOVW 24(R1), R5 MOVW n+16(FP), R5
SYSCALL $SYS_write SYSCALL $SYS_write
MOVW R3, ret+24(FP)
RETURN RETURN
TEXT runtime·read(SB),NOSPLIT,$-8-24 TEXT runtime·read(SB),NOSPLIT,$-8-28
MOVW 8(R1), R3 MOVW fd+0(FP), R3
MOVD 16(R1), R4 MOVD p+8(FP), R4
MOVW 24(R1), R5 MOVW n+16(FP), R5
SYSCALL $SYS_read SYSCALL $SYS_read
MOVW R3, ret+24(FP)
RETURN RETURN
TEXT runtime·getrlimit(SB),NOSPLIT,$-8-24 TEXT runtime·getrlimit(SB),NOSPLIT,$-8-20
MOVW 8(R1), R3 MOVW kind+0(FP), R3
MOVD 16(R1), R4 MOVD limit+8(FP), R4
SYSCALL $SYS_ugetrlimit SYSCALL $SYS_ugetrlimit
MOVW R3, ret+16(FP)
RETURN RETURN
TEXT runtime·usleep(SB),NOSPLIT,$-8-16 TEXT runtime·usleep(SB),NOSPLIT,$16-4
MOVW usec+0(FP), R3 MOVW usec+0(FP), R3
MOVD R3, R5 MOVD R3, R5
MOVW $1000000, R4 MOVW $1000000, R4
...@@ -113,17 +118,18 @@ TEXT runtime·raise(SB),NOSPLIT,$-8 ...@@ -113,17 +118,18 @@ TEXT runtime·raise(SB),NOSPLIT,$-8
RETURN RETURN
TEXT runtime·setitimer(SB),NOSPLIT,$-8-24 TEXT runtime·setitimer(SB),NOSPLIT,$-8-24
MOVW 8(R1), R3 MOVW mode+0(FP), R3
MOVD 16(R1), R4 MOVD new+8(FP), R4
MOVD 24(R1), R5 MOVD old+16(FP), R5
SYSCALL $SYS_setitimer SYSCALL $SYS_setitimer
RETURN RETURN
TEXT runtime·mincore(SB),NOSPLIT,$-8-24 TEXT runtime·mincore(SB),NOSPLIT,$-8-28
MOVD 8(R1), R3 MOVD addr+0(FP), R3
MOVD 16(R1), R4 MOVD n+8(FP), R4
MOVD 24(R1), R5 MOVD dst+16(FP), R5
SYSCALL $SYS_mincore SYSCALL $SYS_mincore
MOVW R3, ret+24(FP)
RETURN RETURN
// func now() (sec int64, nsec int32) // func now() (sec int64, nsec int32)
...@@ -150,24 +156,26 @@ TEXT runtime·nanotime(SB),NOSPLIT,$16 ...@@ -150,24 +156,26 @@ TEXT runtime·nanotime(SB),NOSPLIT,$16
MOVD $1000000000, R4 MOVD $1000000000, R4
MULLD R4, R3 MULLD R4, R3
ADD R5, R3 ADD R5, R3
MOVD R3, ret+0(FP)
RETURN RETURN
TEXT runtime·rtsigprocmask(SB),NOSPLIT,$-8-32 TEXT runtime·rtsigprocmask(SB),NOSPLIT,$-8-28
MOVW 8(R1), R3 MOVW sig+0(FP), R3
MOVD 16(R1), R4 MOVD new+8(FP), R4
MOVD 24(R1), R5 MOVD old+16(FP), R5
MOVW 32(R1), R6 MOVW size+24(FP), R6
SYSCALL $SYS_rt_sigprocmask SYSCALL $SYS_rt_sigprocmask
BVC 2(PC) BVC 2(PC)
MOVD R0, 0xf1(R0) // crash MOVD R0, 0xf1(R0) // crash
RETURN RETURN
TEXT runtime·rt_sigaction(SB),NOSPLIT,$-8-32 TEXT runtime·rt_sigaction(SB),NOSPLIT,$-8-36
MOVD 8(R1), R3 MOVD sig+0(FP), R3
MOVD 16(R1), R4 MOVD new+8(FP), R4
MOVD 24(R1), R5 MOVD old+16(FP), R5
MOVD 32(R1), R6 MOVD size+24(FP), R6
SYSCALL $SYS_rt_sigaction SYSCALL $SYS_rt_sigaction
MOVW R3, ret+32(FP)
RETURN RETURN
#ifdef GOARCH_power64le #ifdef GOARCH_power64le
...@@ -214,28 +222,29 @@ TEXT runtime·_sigtramp(SB),NOSPLIT,$64 ...@@ -214,28 +222,29 @@ TEXT runtime·_sigtramp(SB),NOSPLIT,$64
RETURN RETURN
TEXT runtime·mmap(SB),NOSPLIT,$-8 TEXT runtime·mmap(SB),NOSPLIT,$-8
MOVD 8(R1), R3 MOVD addr+0(FP), R3
MOVD 16(R1), R4 MOVD n+8(FP), R4
MOVW 24(R1), R5 MOVW prot+16(FP), R5
MOVW 28(R1), R6 MOVW flags+20(FP), R6
MOVW 32(R1), R7 MOVW fd+24(FP), R7
MOVW 36(R1), R8 MOVW off+28(FP), R8
SYSCALL $SYS_mmap SYSCALL $SYS_mmap
MOVD R3, ret+32(FP)
RETURN RETURN
TEXT runtime·munmap(SB),NOSPLIT,$-8 TEXT runtime·munmap(SB),NOSPLIT,$-8
MOVD 8(R1), R3 MOVD addr+0(FP), R3
MOVD 16(R1), R4 MOVD n+8(FP), R4
SYSCALL $SYS_munmap SYSCALL $SYS_munmap
BVC 2(PC) BVC 2(PC)
MOVD R0, 0xf3(R0) MOVD R0, 0xf3(R0)
RETURN RETURN
TEXT runtime·madvise(SB),NOSPLIT,$-8 TEXT runtime·madvise(SB),NOSPLIT,$-8
MOVD 8(R1), R3 MOVD addr+0(FP), R3
MOVD 16(R1), R4 MOVD n+8(FP), R4
MOVD 24(R1), R5 MOVW flags+16(FP), R5
SYSCALL $SYS_madvise SYSCALL $SYS_madvise
// ignore failure - maybe pages are locked // ignore failure - maybe pages are locked
RETURN RETURN
...@@ -243,19 +252,20 @@ TEXT runtime·madvise(SB),NOSPLIT,$-8 ...@@ -243,19 +252,20 @@ TEXT runtime·madvise(SB),NOSPLIT,$-8
// int64 futex(int32 *uaddr, int32 op, int32 val, // int64 futex(int32 *uaddr, int32 op, int32 val,
// struct timespec *timeout, int32 *uaddr2, int32 val2); // struct timespec *timeout, int32 *uaddr2, int32 val2);
TEXT runtime·futex(SB),NOSPLIT,$-8 TEXT runtime·futex(SB),NOSPLIT,$-8
MOVD 8(R1), R3 MOVD addr+0(FP), R3
MOVW 16(R1), R4 MOVW op+8(FP), R4
MOVW 20(R1), R5 MOVW val+12(FP), R5
MOVD 24(R1), R6 MOVD ts+16(FP), R6
MOVD 32(R1), R7 MOVD addr2+24(FP), R7
MOVW 40(R1), R8 MOVW val3+32(FP), R8
SYSCALL $SYS_futex SYSCALL $SYS_futex
MOVW R3, ret+40(FP)
RETURN RETURN
// int64 clone(int32 flags, void *stack, M *mp, G *gp, void (*fn)(void)); // int64 clone(int32 flags, void *stk, M *mp, G *gp, void (*fn)(void));
TEXT runtime·clone(SB),NOSPLIT,$-8 TEXT runtime·clone(SB),NOSPLIT,$-8
MOVW flags+0(FP), R3 MOVW flags+0(FP), R3
MOVD stack+8(FP), R4 MOVD stk+8(FP), R4
// Copy mp, gp, fn off parent stack for use by child. // Copy mp, gp, fn off parent stack for use by child.
// Careful: Linux system call clobbers ???. // Careful: Linux system call clobbers ???.
...@@ -273,7 +283,8 @@ TEXT runtime·clone(SB),NOSPLIT,$-8 ...@@ -273,7 +283,8 @@ TEXT runtime·clone(SB),NOSPLIT,$-8
// In parent, return. // In parent, return.
CMP R3, $0 CMP R3, $0
BEQ 2(PC) BEQ 3(PC)
MOVW R3, ret+40(FP)
RETURN RETURN
// In child, on new stack. // In child, on new stack.
...@@ -322,45 +333,50 @@ TEXT runtime·osyield(SB),NOSPLIT,$-8 ...@@ -322,45 +333,50 @@ TEXT runtime·osyield(SB),NOSPLIT,$-8
RETURN RETURN
TEXT runtime·sched_getaffinity(SB),NOSPLIT,$-8 TEXT runtime·sched_getaffinity(SB),NOSPLIT,$-8
MOVD 8(R1), R3 MOVD pid+0(FP), R3
MOVD 16(R1), R4 MOVD len+8(FP), R4
MOVD 24(R1), R5 MOVD buf+16(FP), R5
SYSCALL $SYS_sched_getaffinity SYSCALL $SYS_sched_getaffinity
MOVW R3, ret+24(FP)
RETURN RETURN
// int32 runtime·epollcreate(int32 size); // int32 runtime·epollcreate(int32 size);
TEXT runtime·epollcreate(SB),NOSPLIT,$-8 TEXT runtime·epollcreate(SB),NOSPLIT,$-8
MOVW 8(R1), R3 MOVW size+0(FP), R3
SYSCALL $SYS_epoll_create SYSCALL $SYS_epoll_create
MOVW R3, ret+8(FP)
RETURN RETURN
// int32 runtime·epollcreate1(int32 flags); // int32 runtime·epollcreate1(int32 flags);
TEXT runtime·epollcreate1(SB),NOSPLIT,$-8 TEXT runtime·epollcreate1(SB),NOSPLIT,$-8
MOVW 8(R1), R3 MOVW flags+0(FP), R3
SYSCALL $SYS_epoll_create1 SYSCALL $SYS_epoll_create1
MOVW R3, ret+8(FP)
RETURN RETURN
// int32 runtime·epollctl(int32 epfd, int32 op, int32 fd, EpollEvent *ev); // func epollctl(epfd, op, fd int32, ev *epollEvent) int
TEXT runtime·epollctl(SB),NOSPLIT,$-8 TEXT runtime·epollctl(SB),NOSPLIT,$-8
MOVW 8(R1), R3 MOVW epfd+0(FP), R3
MOVW 12(R1), R4 MOVW op+4(FP), R4
MOVW 16(R1), R5 MOVW fd+8(FP), R5
MOVD 24(R1), R6 MOVD ev+16(FP), R6
SYSCALL $SYS_epoll_ctl SYSCALL $SYS_epoll_ctl
MOVW R3, ret+24(FP)
RETURN RETURN
// int32 runtime·epollwait(int32 epfd, EpollEvent *ev, int32 nev, int32 timeout); // int32 runtime·epollwait(int32 epfd, EpollEvent *ev, int32 nev, int32 timeout);
TEXT runtime·epollwait(SB),NOSPLIT,$-8 TEXT runtime·epollwait(SB),NOSPLIT,$-8
MOVW 8(R1), R3 MOVW epfd+0(FP), R3
MOVD 16(R1), R4 MOVD ev+8(FP), R4
MOVW 24(R1), R5 MOVW nev+16(FP), R5
MOVW 28(R1), R6 MOVW timeout+20(FP), R6
SYSCALL $SYS_epoll_wait SYSCALL $SYS_epoll_wait
MOVW R3, ret+24(FP)
RETURN RETURN
// void runtime·closeonexec(int32 fd); // void runtime·closeonexec(int32 fd);
TEXT runtime·closeonexec(SB),NOSPLIT,$-8 TEXT runtime·closeonexec(SB),NOSPLIT,$-8
MOVW 8(R1), R3 // fd MOVW fd+0(FP), R3 // fd
MOVD $2, R4 // F_SETFD MOVD $2, R4 // F_SETFD
MOVD $1, R5 // FD_CLOEXEC MOVD $1, R5 // FD_CLOEXEC
SYSCALL $SYS_fcntl SYSCALL $SYS_fcntl
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
// +build power64 power64le // +build power64 power64le
#include "../../../cmd/ld/textflag.h" #include "textflag.h"
TEXT ·SwapInt32(SB),NOSPLIT,$0-20 TEXT ·SwapInt32(SB),NOSPLIT,$0-20
BR ·SwapUint32(SB) BR ·SwapUint32(SB)
......
...@@ -4,5 +4,12 @@ ...@@ -4,5 +4,12 @@
#include "textflag.h" #include "textflag.h"
#ifdef GOARCH_power64
#define RET RETURN
#endif
#ifdef GOARCH_power64le
#define RET RETURN
#endif
TEXT ·use(SB),NOSPLIT,$0 TEXT ·use(SB),NOSPLIT,$0
RET RET
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
// +build linux // +build linux
// +build power64 power64le // +build power64 power64le
#include "../../cmd/ld/textflag.h" #include "textflag.h"
// //
// System calls for Power64, Linux // System calls for Power64, Linux
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment