// operands
Addr from;
- uchar reg; // arm, power64 only (e.g., ADD from, reg, to);
+ uchar reg; // arm, ppc64 only (e.g., ADD from, reg, to);
// starts at 0 for both GPRs and FPRs;
- // also used for ADATA width on arm, power64
- Addr from3; // power64 only (e.g., RLWM/FMADD from, reg, from3, to)
+ // also used for ADATA width on arm, ppc64
+ Addr from3; // ppc64 only (e.g., RLWM/FMADD from, reg, from3, to)
Addr to;
// for 5g, 6g, 8g internal use
extern LinkArch linkamd64;
extern LinkArch linkamd64p32;
extern LinkArch linkarm;
-extern LinkArch linkpower64;
-extern LinkArch linkpower64le;
+extern LinkArch linkppc64;
+extern LinkArch linkppc64le;
#pragma varargck type "A" int
#pragma varargck type "E" uint
http://golang.org/doc/asm
-Its target architecture is the Power64, referred to by these tools as
-power64 (big endian) or power64le (little endian).
+Its target architecture is 64-bit PowerPC and Power Architecture processors,
+referred to by these tools as ppc64 (big endian) or ppc64le (little endian).
*/
package main
Dlist[nDlist++] = p;
}
-LinkArch* thelinkarch = &linkpower64;
+LinkArch* thelinkarch = &linkppc64;
void
usage(void)
char *p;
thechar = '9';
- thestring = "power64";
+ thestring = "ppc64";
// Allow GOARCH=thestring or GOARCH=thestringsuffix,
// but not other values.
p = getgoarch();
if(strncmp(p, thestring, strlen(thestring)) != 0)
sysfatal("cannot use %cc with GOARCH=%s", thechar, p);
- if(strcmp(p, "power64le") == 0)
- thelinkarch = &linkpower64le;
+ if(strcmp(p, "ppc64le") == 0)
+ thelinkarch = &linkppc64le;
ctxt = linknew(thelinkarch);
ctxt->diag = yyerror;
/*
-9g is the version of the gc compiler for the Power64.
-The $GOARCH for these tools is power64 (big endian) or
-power64le (little endian).
+9g is the version of the gc compiler for 64-bit PowerPC or Power Architecture processors.
+The $GOARCH for these tools is ppc64 (big endian) or
+ppc64le (little endian).
It reads .go files and outputs .9 files. The flags are documented in ../gc/doc.go.
#include "gg.h"
int thechar = '9';
-char* thestring = "power64";
+char* thestring = "ppc64";
LinkArch* thelinkarch;
void
linkarchinit(void)
{
thestring = getgoarch();
- if(strcmp(thestring, "power64le") == 0)
- thelinkarch = &linkpower64le;
+ if(strcmp(thestring, "ppc64le") == 0)
+ thelinkarch = &linkppc64le;
else
- thelinkarch = &linkpower64;
+ thelinkarch = &linkppc64;
}
vlong MAXWIDTH = 1LL<<50;
// However, the stack trace code will show the line
// of the instruction byte before the return PC.
// To avoid that being an unrelated instruction,
- // insert a Power64 NOP that we will have the right line number.
- // Power64 NOP is really or r0, r0, r0; use that description
+ // insert a ppc64 NOP that we will have the right line number.
+ // The ppc64 NOP is really or r0, r0, r0; use that description
// because the NOP pseudo-instruction would be removed by
// the linker.
nodreg(®, types[TINT], D_R0);
f = sysfunc("duffzero");
p = gins(ADUFFZERO, N, f);
afunclit(&p->to, f);
- // 4 and 128 = magic constants: see ../../runtime/asm_power64x.s
+ // 4 and 128 = magic constants: see ../../runtime/asm_ppc64x.s
p->to.offset = 4*(128-q);
// duffzero leaves R3 on the last zeroed dword
boff = 8;
}
// copysub replaces v with s in a if f!=0 or indicates it if could if f==0.
-// Returns 1 on failure to substitute (it always succeeds on power64).
+// Returns 1 on failure to substitute (it always succeeds on ppc64).
static int
copysub(Addr *a, Addr *v, Addr *s, int f)
{
}
// copysub1 replaces v with s in p1->reg if f!=0 or indicates if it could if f==0.
-// Returns 1 on failure to substitute (it always succeeds on power64).
+// Returns 1 on failure to substitute (it always succeeds on ppc64).
static int
copysub1(Prog *p1, Addr *v, Addr *s, int f)
{
*val = symaddr(r->sym) + r->add - symaddr(linklookup(ctxt, ".got", 0));
return 0;
case R_ADDRPOWER:
- // r->add is two power64 instructions holding an immediate 32-bit constant.
+ // r->add is two ppc64 instructions holding an immediate 32-bit constant.
// We want to add r->sym's address to that constant.
// The encoding of the immediate x<<16 + y,
// where x is the low 16 bits of the first instruction and y is the low 16
/*
-9l is the linker for the Power64.
-The $GOARCH for these tools is power64 (big endian) or
-power64le (little endian).
+9l is the linker for 64-bit PowerPC and Power Architecture processors.
+The $GOARCH for these tools is ppc64 (big endian) or
+ppc64le (little endian).
The flags are documented in ../ld/doc.go.
#include "../ld/dwarf.h"
#include <ar.h>
-char *thestring = "power64";
+char *thestring = "ppc64";
LinkArch *thelinkarch;
void
linkarchinit(void)
{
thestring = getgoarch();
- if(strcmp(thestring, "power64le") == 0)
- thelinkarch = &linkpower64le;
+ if(strcmp(thestring, "ppc64le") == 0)
+ thelinkarch = &linkppc64le;
else
- thelinkarch = &linkpower64;
+ thelinkarch = &linkppc64;
}
void
if(INITRND == -1)
INITRND = 4096;
break;
- case Hlinux: /* power64 elf */
+ case Hlinux: /* ppc64 elf */
debug['d'] = 1; // TODO(minux): dynamic linking is not supported yet.
elfinit();
HEADR = ELFRESERVE;
}
var ptrSizeMap = map[string]int64{
- "386": 4,
- "amd64": 8,
- "arm": 4,
- "ppc64": 8,
- "ppc64le": 8,
- "power64": 8,
- "power64le": 8,
+ "386": 4,
+ "amd64": 8,
+ "arm": 4,
+ "ppc64": 8,
+ "ppc64le": 8,
}
var intSizeMap = map[string]int64{
- "386": 4,
- "amd64": 8,
- "arm": 4,
- "ppc64": 8,
- "ppc64le": 8,
- "power64": 8,
- "power64le": 8,
+ "386": 4,
+ "amd64": 8,
+ "arm": 4,
+ "ppc64": 8,
+ "ppc64le": 8,
}
var cPrefix string
"amd64",
"amd64p32",
"386",
- "power64",
- "power64le",
+ "ppc64",
+ "ppc64le",
};
// The known operating systems.
else if(contains(u.machine, "arm"))
gohostarch = "arm";
else if(contains(u.machine, "ppc64le"))
- gohostarch = "power64le";
+ gohostarch = "ppc64le";
else if(contains(u.machine, "ppc64"))
- gohostarch = "power64";
+ gohostarch = "ppc64";
else
fatal("unknown architecture: %s", u.machine);
}
}
var byteOrders = map[string]binary.ByteOrder{
- "386": binary.LittleEndian,
- "amd64": binary.LittleEndian,
- "arm": binary.LittleEndian,
- "power64": binary.BigEndian,
- "power64le": binary.LittleEndian,
+ "386": binary.LittleEndian,
+ "amd64": binary.LittleEndian,
+ "arm": binary.LittleEndian,
+ "ppc64": binary.BigEndian,
+ "ppc64le": binary.LittleEndian,
}
case elf.EM_ARM:
return "arm"
case elf.EM_PPC64:
- return "power64"
+ return "ppc64"
}
return ""
}
case macho.CpuArm:
return "arm"
case macho.CpuPpc64:
- return "power64"
+ return "ppc64"
}
return ""
}
ElfMachSparc32Plus, /* SPARC V8+ */
ElfMach960, /* Intel 80960 */
ElfMachPower, /* PowerPC */
- ElfMachPower64, /* PowerPC 64 */
+ ElfMachPower64, /* PowerPC 64-bit */
ElfMachS390, /* IBM System/390 */
ElfMachV800 = 36, /* NEC V800 */
ElfMachFr20, /* Fujitsu FR20 */
break;
case '9':
if(obj->machine != ElfMachPower64 || hdr->ident[4] != ElfClass64) {
- diag("%s: elf object but not power64", pn);
+ diag("%s: elf object but not ppc64", pn);
return;
}
break;
func TestDisasm(t *testing.T) {
switch runtime.GOARCH {
- case "power64", "power64le":
+ case "ppc64", "ppc64le":
t.Skipf("skipping on %s, issue 9039", runtime.GOARCH)
}
testDisasm(t)
t.Skipf("skipping on %s", runtime.GOOS)
}
switch runtime.GOARCH {
- case "power64", "power64le":
+ case "ppc64", "ppc64le":
t.Skipf("skipping on %s, no support for external linking, issue 9038", runtime.GOARCH)
}
testDisasm(t, "-ldflags=-linkmode=external")
func (i R_PPC) String() string { return stringName(uint32(i), rppcStrings, false) }
func (i R_PPC) GoString() string { return stringName(uint32(i), rppcStrings, true) }
-// Relocation types for PowerPC 64.
+// Relocation types for 64-bit PowerPC or Power Architecture processors.
type R_PPC64 int
const (
return "6", nil
case "arm":
return "5", nil
- case "power64", "power64le":
+ case "ppc64", "ppc64le":
return "9", nil
}
return "", errors.New("unsupported GOARCH " + goarch)
package build
const goosList = "android darwin dragonfly freebsd linux nacl netbsd openbsd plan9 solaris windows "
-const goarchList = "386 amd64 amd64p32 arm power64 power64le "
+const goarchList = "386 amd64 amd64p32 arm ppc64 ppc64le "
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build 386 arm power64 power64le
+// +build 386 arm ppc64 ppc64le
package crc32
// NOP
//
// The NOP is needed to give the jumps somewhere to land.
- // It is a liblink NOP, not a Power64 NOP: it encodes to 0 instruction bytes.
+ // It is a liblink NOP, not a ppc64 NOP: it encodes to 0 instruction bytes.
q = appendp(ctxt, q);
return p;
}
-LinkArch linkpower64 = {
- .name = "power64",
+LinkArch linkppc64 = {
+ .name = "ppc64",
.thechar = '9',
.endian = BigEndian,
.AUSEFIELD = AUSEFIELD,
};
-LinkArch linkpower64le = {
- .name = "power64le",
+LinkArch linkppc64le = {
+ .name = "ppc64le",
.thechar = '9',
.endian = LittleEndian,
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build power64 power64le
+// +build ppc64 ppc64le
#include "textflag.h"
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build power64 power64le
+// +build ppc64 ppc64le
#include "textflag.h"
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build power64 power64le
+// +build ppc64 ppc64le
#include "textflag.h"
// Assembly to get into package runtime without using exported symbols.
-// +build amd64 amd64p32 arm 386 power64 power64le
+// +build amd64 amd64p32 arm 386 ppc64 ppc64le
#include "textflag.h"
#ifdef GOARCH_arm
#define JMP B
#endif
-#ifdef GOARCH_power64
+#ifdef GOARCH_ppc64
#define JMP BR
#endif
-#ifdef GOARCH_power64le
+#ifdef GOARCH_ppc64le
#define JMP BR
#endif
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build power64 power64le
+// +build ppc64 ppc64le
#include "textflag.h"
#include "funcdata.h"
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build power64 power64le
+// +build ppc64 ppc64le
#include "go_asm.h"
#include "go_tls.h"
// R5 = (R3 << 0) & ~3
RLDCR $0, R3, $~3, R5
// Compute val shift.
-#ifdef GOARCH_power64
+#ifdef GOARCH_ppc64
// Big endian. ptr = ptr ^ 3
XOR $3, R3
#endif
MOVD R3, ret+0(FP)
RETURN
-// AES hashing not implemented for Power
+// AES hashing not implemented for ppc64
TEXT runtimeĀ·aeshash(SB),NOSPLIT,$-8-0
MOVW (R0), R1
TEXT runtimeĀ·aeshash32(SB),NOSPLIT,$-8-0
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build power64 power64le
+// +build ppc64 ppc64le
package runtime
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build power64 power64le
+// +build ppc64 ppc64le
#include "textflag.h"
#ifdef GOARCH_arm
#define JMP B
#endif
-#ifdef GOARCH_power64
+#ifdef GOARCH_ppc64
#define JMP BR
#endif
-#ifdef GOARCH_power64le
+#ifdef GOARCH_ppc64le
#define JMP BR
#endif
/*
Input to cgo -cdefs
-GOARCH=power64 cgo -cdefs defs_linux.go defs3_linux.go > defs_linux_power64.h
+GOARCH=ppc64 cgo -cdefs defs_linux.go defs3_linux.go > defs_linux_ppc64.h
*/
package runtime
BitsScalar, BitsScalar, BitsScalar, BitsScalar, // t int; y uint16; u uint64
BitsPointer, BitsDead, // i string
}
- case "amd64", "power64", "power64le":
+ case "amd64", "ppc64", "ppc64le":
return []byte{
BitsPointer, // q *int
BitsScalar, BitsScalar, BitsScalar, // w byte; e [17]byte
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build power64 power64le
+// +build ppc64 ppc64le
// +build linux
package runtime
import "unsafe"
-// On Power64, Linux limits the user address space to 46 bits (see
+// On ppc64, Linux limits the user address space to 46 bits (see
// TASK_SIZE_USER64 in the Linux kernel). This has grown over time,
// so here we allow 48 bit addresses.
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build power64 power64le
+// +build ppc64 ppc64le
#include "textflag.h"
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build power64 power64le
+// +build ppc64 ppc64le
#include "textflag.h"
// Routines that are implemented in assembly in asm_{amd64,386}.s
// but are implemented in Go for arm.
-// +build arm power64 power64le
+// +build arm ppc64 ppc64le
package runtime
// we can only call nosplit routines.
argp := uintptr(unsafe.Pointer(&fn))
argp += unsafe.Sizeof(fn)
- if GOARCH == "arm" || GOARCH == "power64" || GOARCH == "power64le" {
+ if GOARCH == "arm" || GOARCH == "ppc64" || GOARCH == "ppc64le" {
argp += ptrSize // skip caller's saved link register
}
callerpc := getcallerpc(unsafe.Pointer(&siz))
//uint32 runtimeĀ·panicking;
var paniclk mutex
-const hasLinkRegister = GOARCH == "arm" || GOARCH == "power64" || GOARCH == "power64le"
+const hasLinkRegister = GOARCH == "arm" || GOARCH == "ppc64" || GOARCH == "ppc64le"
// Unwind the stack after a deferred function calls recover
// after a panic. Then arrange to continue running as though
#include "textflag.h"
// actually a function descriptor for _main<>(SB)
-TEXT _rt0_power64_linux(SB),NOSPLIT,$0
+TEXT _rt0_ppc64_linux(SB),NOSPLIT,$0
DWORD $_main<>(SB)
DWORD $0
DWORD $0
#include "textflag.h"
-TEXT _rt0_power64le_linux(SB),NOSPLIT,$0
+TEXT _rt0_ppc64le_linux(SB),NOSPLIT,$0
BR _main<>(SB)
TEXT _main<>(SB),NOSPLIT,$-8
// license that can be found in the LICENSE file.
// +build linux
-// +build power64 power64le
+// +build ppc64 ppc64le
package runtime
// license that can be found in the LICENSE file.
// +build linux
-// +build power64 power64le
+// +build ppc64 ppc64le
package runtime
// license that can be found in the LICENSE file.
// +build linux
-// +build power64 power64le
+// +build ppc64 ppc64le
//
-// System calls and other sys.stuff for Power64, Linux
+// System calls and other sys.stuff for ppc64, Linux
//
#include "go_asm.h"
MOVW R3, ret+32(FP)
RETURN
-#ifdef GOARCH_power64le
-// power64le doesn't need function descriptors
+#ifdef GOARCH_ppc64le
+// ppc64le doesn't need function descriptors
TEXT runtimeĀ·sigtramp(SB),NOSPLIT,$64
#else
// function descriptor for the real sigtramp
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build power64 power64le
+// +build ppc64 ppc64le
package runtime
#ifdef GOARCH_arm
#define JMP B
#endif
-#ifdef GOARCH_power64
+#ifdef GOARCH_ppc64
#define JMP BR
#endif
-#ifdef GOARCH_power64le
+#ifdef GOARCH_ppc64le
#define JMP BR
#endif
const goarch_amd64 = 0
const goarch_amd64p32 = 0
const goarch_arm = 0
-const goarch_power64 = 0
-const goarch_power64le = 0
+const goarch_ppc64 = 0
+const goarch_ppc64le = 0
const goarch_amd64 = 1
const goarch_amd64p32 = 0
const goarch_arm = 0
-const goarch_power64 = 0
-const goarch_power64le = 0
+const goarch_ppc64 = 0
+const goarch_ppc64le = 0
const goarch_amd64 = 0
const goarch_amd64p32 = 1
const goarch_arm = 0
-const goarch_power64 = 0
-const goarch_power64le = 0
+const goarch_ppc64 = 0
+const goarch_ppc64le = 0
const goarch_amd64 = 0
const goarch_amd64p32 = 0
const goarch_arm = 1
-const goarch_power64 = 0
-const goarch_power64le = 0
+const goarch_ppc64 = 0
+const goarch_ppc64le = 0
package runtime
-const theGoarch = `power64`
+const theGoarch = `ppc64`
const goarch_386 = 0
const goarch_amd64 = 0
const goarch_amd64p32 = 0
const goarch_arm = 0
-const goarch_power64 = 1
-const goarch_power64le = 0
+const goarch_ppc64 = 1
+const goarch_ppc64le = 0
package runtime
-const theGoarch = `power64le`
+const theGoarch = `ppc64le`
const goarch_386 = 0
const goarch_amd64 = 0
const goarch_amd64p32 = 0
const goarch_arm = 0
-const goarch_power64 = 0
-const goarch_power64le = 1
+const goarch_ppc64 = 0
+const goarch_ppc64le = 1
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build power64 power64le
+// +build ppc64 ppc64le
#include "textflag.h"
#include "textflag.h"
-#ifdef GOARCH_power64
+#ifdef GOARCH_ppc64
#define RET RETURN
#endif
-#ifdef GOARCH_power64le
+#ifdef GOARCH_ppc64le
#define RET RETURN
#endif
// license that can be found in the LICENSE file.
// +build linux
-// +build power64 power64le
+// +build ppc64 ppc64le
#include "textflag.h"
//
-// System calls for Power64, Linux
+// System calls for ppc64, Linux
//
// func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64);
mksysnum="curl -s 'http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/arch/arm/include/uapi/asm/unistd.h' | ./mksysnum_linux.pl"
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
;;
-linux_power64)
- GOOSARCH_in=syscall_linux_power64x.go
+linux_ppc64)
+ GOOSARCH_in=syscall_linux_ppc64x.go
unistd_h=/usr/include/asm/unistd.h
mkerrors="$mkerrors -m64"
mksysnum="./mksysnum_linux.pl $unistd_h"
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
;;
-linux_power64le)
- GOOSARCH_in=syscall_linux_power64x.go
+linux_ppc64le)
+ GOOSARCH_in=syscall_linux_ppc64x.go
unistd_h=/usr/include/powerpc64le-linux-gnu/asm/unistd.h
mkerrors="$mkerrors -m64"
mksysnum="./mksysnum_linux.pl $unistd_h"
// license that can be found in the LICENSE file.
// +build linux
-// +build power64 power64le
+// +build ppc64 ppc64le
package syscall
-// mksyscall.pl syscall_linux.go syscall_linux_power64x.go
+// mksyscall.pl syscall_linux.go syscall_linux_ppc64x.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
package syscall
-// mksyscall.pl syscall_linux.go syscall_linux_power64x.go
+// mksyscall.pl syscall_linux.go syscall_linux_ppc64x.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
package syscall
// errorcheck -0 -d=nil
-// Fails on power64x because of incomplete optimization. See issue 9058.
-// +build !power64,!power64le
+// Fails on ppc64x because of incomplete optimization. See issue 9058.
+// +build !ppc64,!ppc64le
// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
# Calling a nosplit function from a nosplit function requires
# having room for the saved caller PC and the called frame.
# Because ARM doesn't save LR in the leaf, it gets an extra 4 bytes.
-# Because Power64 doesn't save LR in the leaf, it gets an extra 8 bytes.
+# Because ppc64 doesn't save LR in the leaf, it gets an extra 8 bytes.
main 112 nosplit call f; f 0 nosplit
main 116 nosplit call f; f 0 nosplit
main 120 nosplit call f; f 0 nosplit; REJECT amd64
# Calling a splitting function from a nosplit function requires
# having room for the saved caller PC of the call but also the
# saved caller PC for the call to morestack.
-# Again the ARM and Power64 work in less space.
+# Again the ARM and ppc64 work in less space.
main 104 nosplit call f; f 0 call f
main 108 nosplit call f; f 0 call f
main 112 nosplit call f; f 0 call f; REJECT amd64
var buf bytes.Buffer
ptrSize := 4
switch goarch {
- case "power64", "power64le":
+ case "ppc64", "ppc64le":
ptrSize = 8
fmt.Fprintf(&buf, "#define CALL BL\n#define REGISTER (CTR)\n#define RET RETURN\n")
case "arm":