Go: Cleanup of legacy code on Big Endian Power architecture

Go: Cleanup of legacy code on Big Endian Power architecture

As I mentioned in my previous post, in Go 1.9, the new minimum processor requirement for ppc64 Big Endian will be POWER8.

I started cleaning up old code that was required to maintain compatibility with POWER5 to POWER7 in the SSA backend and in the atomics implementation. Commits c644a76 and 189053a remove some checks that were preventing ppc64 from using (and benefiting from) instruction sequences we added for ppc64le, which would break older processors support.

This is another step forward making ppc64 and ppc64le differ only in endianess, and not in functionality or performance. If you spot any other legacy code that needs removal, patches are welcome!

by 

Go: Performance optimization for IndexByte for Power

Go: Performance optimization for IndexByte for Power

I added a new implementation for both bytes·IndexByte and strings·IndexByte for Power architecture. The new lazy search-based algorithm gives a speedup of up to 15x over the previous implementation. This works on both Little Endian and Big Endian ppc64.

I may add a vectorized version of this algorithm in the future, if it proves more efficient for long slices.

In addition, for Go 1.9, we will drop support for processors older than POWER8 upstream. This means that both ppc64 and ppc64le will only differ on endianess, and not on processor support.

Committed as d60166d.

by 

Go 1.8 released

Go 1.8 released

Go 1.8 was released yesterday. This release includes some significant changes, including:

For the Power architecture, this is the first release in which the assembler is fully VMX/VSX enabled, which will allow us to further improve performance in the runtime packages and create more efficient code sequences in the SSA backend. In addition, there are new performance optimizations (mostly added by new SSA rules), runtime hardware capability/processor detection enabled, and bug fixes.

In the next release, we plan to continue improving performance on Power. Also, there is a discussion about bringing the minimum processor support for big endian ppc64 to POWER8 in Go 1.9. This would allow users running on big endian to get the same benefits of the work we have been doing for little endian.

For more information, please see the Go 1.8 release notes.

* Gopher image by Renee French, licensed under Creative Commons 3.0 Attributions license.

by 

Go: Added more Power instructions to the assembler

Go: Added more Power instructions to the assembler

I added a few more missing instructions from ISA 2.05 to 2.07 to the Go assembler. These will be used in upcoming runtime performance optimizations shortly.

In addition, I also fixed a few bugs and added more opcode assembling rules, including:

  • Fix for rldicr/rldicl instructions. Now they accept any 6-bit mask as they are supposed to.
  • Added special treatment to support extended VSX mnemonics that take a floating point or Altivec register as an argument, instead of a VSX register.
  • Added support for two missing cases for 3-operand X-form floating point instructions and 2-operand X-form instructions.

Committed as 85ecc5.

by