summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* [dev.power64] liblink: fix Solaris builddev.power64Austin Clements2014-11-141-1/+1
| | | | | | | | | a->class is a char. Boo hoo. LGTM=minux R=rsc, minux CC=golang-codereviews https://codereview.appspot.com/169630043
* [dev.power64] 6g,9g: formatters for Prog and Addr detailsAustin Clements2014-11-147-1/+90
| | | | | | | | | | | | The pretty printers for these make it hard to understand what's actually in the fields of these structures. These "ugly printers" show exactly what's in each field, which can be useful for understanding and debugging code. LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/175780043
* [dev.power64] liblink: generate dnames[5689] for D_* constantsAustin Clements2014-11-142-3/+87
| | | | | | | | | | | | This is more complicated than the other enums because the D_* enums are full of explicit initializers and repeated values. This tries its best. (This will get much cleaner once we tease these constants apart better.) LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/166700043
* [dev.power64] 5g,6g,8g,9g: debug prints for regopt pass 6 and paint2Austin Clements2014-11-147-50/+94
| | | | | | | | | | | Theses were very helpful in understanding the regions and register selection when porting regopt to 9g. Add them to the other compilers (and improve 9g's successor debug print). LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/174130043
* [dev.power64] 5g,6g,8g: synchronize documentation for regopt structuresAustin Clements2014-11-143-20/+68
| | | | | | | | | | | I added several comments to the regopt-related structures when porting it to 9g. Synchronize those comments back in to the other compilers. LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/175720043
* [dev.power64] 9g: implement regoptAustin Clements2014-11-132-29/+1232
| | | | | | | | | | This adds registerization support to 9g equivalent to what the other compilers have. LGTM=rsc R=rsc, dave CC=golang-codereviews https://codereview.appspot.com/174980043
* [dev.power64] 9l: remove enum as's tag for c2goAustin Clements2014-11-131-2/+2
| | | | | | | | | | | None of the other compilers have a tag for this enum. Cleaning all of this up to use proper types will happen after the conversion. LGTM=minux, rsc R=rsc, minux CC=golang-codereviews https://codereview.appspot.com/166690043
* [dev.power64] 6g,8g: remove unnecessary and incorrect reg use scanningAustin Clements2014-11-132-96/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | Previously, the 6g and 8g registerizers scanned for used registers beyond the end of a region being considered for registerization. This ancient artifact was copied from the C compilers, where it was probably necessary to track implicitly used registers. In the Go compilers it's harmless (because it can only over-restrict the set of available registers), but no longer necessary because the Go compilers correctly track register use/set information. The consequences of this extra scan were (at least) that 1) we would not consider allocating the AX register if there was a deferproc call in the future because deferproc uses AX as a return register, so we see the use of AX, but don't track that AX is set by the CALL, and 2) we could not consider allocating the DX register if there was a MUL in the future because MUL implicitly sets DX and (thanks to an abuse of copyu in this code) we would also consider DX used. This commit fixes these problems by nuking this code. LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/174110043
* [dev.power64] liblink: improve documentation of struct ProgAustin Clements2014-11-121-4/+7
| | | | | | | LGTM=dave, rsc R=rsc, dave CC=golang-codereviews https://codereview.appspot.com/169460043
* [dev.power64] 9g: proginfo fixesAustin Clements2014-11-121-8/+14
| | | | | | | | | | | | For D_OREG addresses, store the used registers in regindex instead of reguse because they're really part of addressing. Add implicit register use/set for DUFFZERO/DUFFCOPY. LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/174050044
* [dev.power64] 9g: fix width check and width calculation for OADDRAustin Clements2014-11-121-1/+2
| | | | | | | LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/174970043
* [dev.power64] 5g: fix mistaken bit-wise AND in regoptAustin Clements2014-11-071-1/+1
| | | | | | | | | | | Replace a bit-wise AND with a logical one. This happened to work before because bany returns 0 or 1, but the intent here is clearly logical (and this makes 5g match with 6g and 8g). LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/172850043
* [dev.power64] 5g: fix etype and width of itable AddrsAustin Clements2014-11-061-1/+2
| | | | | | | | | | For OITAB nodes, 5g's naddr was setting the wrong etype and failing to set the width of the resulting Addr. LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/171220043
* [dev.power64] 9g: fix addr width calculation; enable MOV* width checkAustin Clements2014-11-061-12/+13
| | | | | | | | | | | | | | 9g's naddr was missing assignments to a->width in several cases, so the optimizer was getting bogus width information. Add them. This correct width information also lets us enable the width check in gins for MOV*. LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/167310043
* [dev.power64] gc: fix etype of stringsAustin Clements2014-11-064-4/+4
| | | | | | | | | | | | | | The etype of references to strings was being incorrectly set to TINT32 on all platforms. Change it to TSTRING. It seems this doesn't matter for compilation, since x86 uses LEA instructions to load string addresses and arm and power64 disassemble the string into its constituent pieces (with the correct types), but it helps when debugging. LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/170100043
* [dev.power64] 6g: don't create variables for indirect addressesAustin Clements2014-11-051-0/+3
| | | | | | | | | | | | | Previously, mkvar treated, for example, 0(AX) the same as AX. As a result, a move to an indirect address would be marked as *setting* the register, rather than just using it, resulting in unnecessary register moves. Fix this by not producing variables for indirect addresses. LGTM=rsc R=rsc, dave CC=golang-codereviews https://codereview.appspot.com/164610043
* [dev.power64] gc: convert Bits to a uint64 arrayAustin Clements2014-11-048-109/+119
| | | | | | | | | | | | | So far all of our architectures have had at most 32 registers, so we've been able to use entry 0 in the Bits uint32 array directly as a register mask. Power64 has 64 registers, so this converts Bits to a uint64 array so we can continue to use entry 0 directly as a register mask on Power64. LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/169060043
* [dev.power64] test: "fix" live.go test on power64xAustin Clements2014-11-031-1/+1
| | | | | | | | | | | | | On power64x, this one line in live.go reports that t is live because of missing optimization passes. This isn't what this test is trying to test, so shuffle bad40 so that it still accomplishes the intent of the test without also depending on optimization. LGTM=rsc R=rsc, dave CC=golang-codereviews https://codereview.appspot.com/167110043
* [dev.power64] test: disable nilptr3 test on power64xAustin Clements2014-11-031-0/+2
| | | | | | | | | | The remaining failures in this test are because of incomplete optimization support on power64x. Tracked in issue 9058. LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/168130043
* [dev.power64] liblink: fix printing of branch targetsAustin Clements2014-11-031-5/+6
| | | | | | | | | | | | Print PC stored in target Prog* of branch instructions when available instead of the offset stored in the branch instruction. The offset tends to be wrong after code transformations, so previously this led to confusing listings. LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/168980043
* [dev.power64] 9g: fix niloptAustin Clements2014-11-032-5/+3
| | | | | | | | | | | | | | | | | | | Previously, nilopt was disabled on power64x because it threw away "seemly random segments of code." Indeed, excise on power64x failed to preserve the link field, so it excised not only the requested instruction but all following instructions in the function. Fix excise to retain the link field while otherwise zeroing the instruction. This makes nilopt safe on power64x. It still fails nilptr3.go's tests for removal of repeated nil checks because those depend on also optimizing away repeated loads, which doesn't currently happen on power64x. LGTM=dave, rsc R=rsc, dave CC=golang-codereviews https://codereview.appspot.com/168120043
* [dev.power64] all: merge default into dev.power64Austin Clements2014-11-03160-2695/+39388
|\ | | | | | | | | | | | | | | | | | | Trivial merge except for src/runtime/asm_power64x.s and src/runtime/signal_power64x.c LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/168950044
| * [dev.power64] cmd/objdump: disable tests on power64/power64leDave Cheney2014-11-021-0/+12
| | | | | | | | | | | | | | LGTM=rsc, austin R=austin, rsc, bradfitz CC=golang-codereviews https://codereview.appspot.com/164300043
| * [dev.power64] runtime: fix gcinfo_test on power64xAustin Clements2014-10-311-7/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | The GC info masks for slices and strings were changed in commit caab29a25f68, but the reference masks used by gcinfo_test for power64x hadn't caught up. Now they're identical to amd64, so this CL fixes this test by combining the reference masks for these platforms. LGTM=rsc R=rsc, dave CC=golang-codereviews https://codereview.appspot.com/162620044
| * [dev.power64] reflect: fix asm on power64xAustin Clements2014-10-311-2/+5
| | | | | | | | | | | | | | | | | | | | | | reflect/asm_power64x.s was missing changes made to other platforms for stack maps. This CL ports those changes. With this fix, the reflect test passes on power64x. LGTM=rsc R=rsc, dave CC=golang-codereviews https://codereview.appspot.com/170870043
| * [dev.power64] runtime: fix fastrand1 on power64xAustin Clements2014-10-311-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | fastrand1 depends on testing the high bit of its uint32 state. For efficiency, all of the architectures implement this as a sign bit test. However, on power64, fastrand1 was using a 64-bit sign test on the zero-extended 32-bit state. This always failed, causing fastrand1 to have very short periods and often decay to 0 and get stuck. Fix this by using a 32-bit signed compare instead of a 64-bit compare. This fixes various tests for the randomization of select of map iteration. LGTM=rsc R=rsc, dave CC=golang-codereviews https://codereview.appspot.com/166990043
| * [dev.power64] 9g: fix under-zeroing in clearfatAustin Clements2014-10-313-8/+82
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | All three cases of clearfat were wrong on power64x. The cases that handle 1032 bytes and up and 32 bytes and up both use MOVDU (one directly generated in a loop and the other via duffzero), which leaves the pointer register pointing at the *last written* address. The generated code was not accounting for this, so the byte fill loop was re-zeroing the last zeroed dword, rather than the bytes following the last zeroed dword. Fix this by simply adding an additional 8 byte offset to the byte zeroing loop. The case that handled under 32 bytes was also wrong. It didn't update the pointer register at all, so the byte zeroing loop was simply re-zeroing the beginning of region. Again, the fix is to add an offset to the byte zeroing loop to account for this. LGTM=dave, bradfitz R=rsc, dave, bradfitz CC=golang-codereviews https://codereview.appspot.com/168870043
| * [dev.power64] runtime: fix a syntax error that slipped in to asm_power64x.sAustin Clements2014-10-301-1/+1
| | | | | | | | | | | | | | | | | | | | Apparently I had already moved on to fixing another problem when I submitted CL 169790043. LGTM=dave R=rsc, dave CC=golang-codereviews https://codereview.appspot.com/165210043
| * [dev.power64] runtime: make asm_power64x.s go vet-cleanAustin Clements2014-10-301-20/+21
| | | | | | | | | | | | | | | | | | | | No real problems found. Just lots of argument names that didn't quite match up. LGTM=rsc R=rsc, dave CC=golang-codereviews https://codereview.appspot.com/169790043
| * [dev.power64] runtime: fix out-of-date comment in panicAustin Clements2014-10-301-1/+1
| | | | | | | | | | | | | | LGTM=bradfitz R=rsc, bradfitz CC=golang-codereviews https://codereview.appspot.com/162500043
| * [dev.power64] runtime: test CAS on large unsigned 32-bit numbersAustin Clements2014-10-301-0/+6
| | | | | | | | | | | | | | | | | | | | | | This adds a test to runtime?check to ensure CAS of large unsigned 32-bit numbers does not accidentally sign-extend its arguments. LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/162490044
| * [dev.power64] runtime: match argument/return type signedness in power64x ↵Austin Clements2014-10-301-7/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | assembly Previously, the power64x runtime assembly was sloppy about using sign-extending versus zero-extending moves of arguments and return values. I think all of the cases that actually mattered have been fixed in recent CLs; this CL fixes up the few remaining mismatches. LGTM=rsc R=rsc, dave CC=golang-codereviews https://codereview.appspot.com/162480043
| * [dev.power64] all: merge default (dd5014ed9b01) into dev.power64Russ Cox2014-10-29158-2693/+39290
| |\ | | | | | | | | | | | | | | | | | | | | | | | | Still passes on amd64. LGTM=austin R=austin CC=golang-codereviews https://codereview.appspot.com/165110043
| | * [dev.power64] cmd/5a, cmd/6a, cmd/8a, cmd/9a: make labels function-scopedRuss Cox2014-10-2837-4034/+3442
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I removed support for jumping between functions years ago, as part of doing the instruction layout for each function separately. Given that, it makes sense to treat labels as function-scoped. This lets each function have its own 'loop' label, for example. Makes the assembly much cleaner and removes the last reason anyone would reach for the 123(PC) form instead. Note that this is on the dev.power64 branch, but it changes all the assemblers. The change will ship in Go 1.5 (perhaps after being ported into the new assembler). Came up as part of CL 167730043. LGTM=r R=r CC=austin, dave, golang-codereviews, minux https://codereview.appspot.com/159670043
| | * [dev.power64] runtime: fix atomicor8 for power64xAustin Clements2014-10-282-6/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Power64 servers do not currently support sub-word size atomic memory access, so atomicor8 uses word size atomic access. However, previously atomicor8 made no attempt to align this access, resulting in errors. Fix this by aligning the pointer to a word boundary and shifting the value appropriately. Since atomicor8 is used in GC, add a test to runtime?check to make sure this doesn't break in the future. This also fixes an incorrect branch label, an incorrectly sized argument move, and adds argument names to help go vet. LGTM=rsc R=rsc, dave CC=golang-codereviews https://codereview.appspot.com/165820043
| | * [dev.power64] 9a: correct generation of four argument opsAustin Clements2014-10-281-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The "to" field was the penultimate argument to outgcode, instead of the last argument, which swapped the third and fourth operands. The argument order was correct in a.y, so just swap the meaning of the arguments in outgcode. This hadn't come up because we hadn't used these more obscure operations in any hand-written assembly until now. LGTM=rsc, dave R=rsc, dave CC=golang-codereviews https://codereview.appspot.com/160690043
| | * [dev.power64] liblink: emit wrapper code in correct placeAustin Clements2014-10-281-63/+63
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The wrapper code was being emitted before the stack reservation, rather than after. LGTM=rsc R=rsc, dave CC=golang-codereviews https://codereview.appspot.com/161540043
| | * [dev.power64] runtime: fix cas64 on power64xDave Cheney2014-10-281-5/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | cas64 was jumping to the wrong offset. LGTM=minux, rsc R=rsc, austin, minux CC=golang-codereviews https://codereview.appspot.com/158710043
| | * [dev.power64] runtime: fix power64le buildDave Cheney2014-10-281-13/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | Brings defs_linux_power64le.h up to date with the big endian version. LGTM=rsc R=rsc, austin CC=golang-codereviews https://codereview.appspot.com/161470043
| | * [dev.power64] runtime: power64 fixes and ports of changesAustin Clements2014-10-2715-383/+342
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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://codereview.appspot.com/161450043
| | * [dev.power64] liblink: fix lost branch targetAustin Clements2014-10-271-2/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A recent commit lost the branch target in the really-big-stack case of splitstack, causing an infinite loop stack preempt case. Revive the branch target. LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/157790044
| | * [dev.power64] all: merge default into dev.power64Austin Clements2014-10-27121-219/+37430
| | |\ | | | | | | | | | | | | | | | | | | | | | | | | LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/164110043
| | | * [dev.power64] liblink: power64 fixes and ports of changesAustin Clements2014-10-272-126/+102
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ports of platform-specific changes that happened on default after dev.power64 forked (fixes for c2go, wrapper math fixes, moved stackguard field, stackguard1 support, precise stacks). Bug fixes (missing AMOVW in instruction table, correct unsigned 32-bit remainder). LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/164920044
| | | * [dev.power64] cc: 8-byte align argument size on power64Austin Clements2014-10-271-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/163370043
| | | * [dev.power64] liblink: print line numbers in disassembly on power64Austin Clements2014-10-241-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Matching other platforms. LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/161320043
| | | * [dev.power64] runtime: fix SigaltstackT definition for power64leDave Cheney2014-10-232-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Also updated defs3_linux.go but had to manually edit defs_linux_power64le.h. Will regenerate the file when cgo is working natively on ppc64. LGTM=austin R=rsc, austin CC=golang-codereviews https://codereview.appspot.com/158360043
| | | * [dev.power64] runtime: fix early GC of Defer objectsAustin Clements2014-10-221-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | go_bootstrap was panicking during runtime initialization (under runtime.main) because Defer objects were being prematurely GC'd. This happened because of an incorrect change to runtime?unrollgcprog_m to make it endian-agnostic during the conversion of runtime bitmaps to byte arrays. LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/161960044
| | | * [dev.power64] all: merge default into dev.power64Austin Clements2014-10-22121-218/+37453
| | | |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This brings dev.power64 up-to-date with the current tip of default. go_bootstrap is still panicking with a bad defer when initializing the runtime (even on amd64). LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/152570049
| | | | * [dev.power64] runtime: Fix broken merge of noasm.goAustin Clements2014-10-221-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The earlier dev.power64 merge missed the port of runtime/noasm.goc to runtime/noasm_arm.go. This CL fixes this by moving noasm_arm.go to noasm.go and adding a +build to share the file between arm and power64. LGTM=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/158350043
| | | | * build: merge the great pkg/ rename into dev.power64Austin Clements2014-10-222208-854/+402
| | | | |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This also removes pkg/runtime/traceback_lr.c, which was ported to Go in an earlier commit and then moved to runtime/traceback.go. Reviewer: rsc@golang.org rsc: LGTM