-
Notifications
You must be signed in to change notification settings - Fork 18.4k
Closed
Labels
FrozenDueToAgeNeedsFixThe path to resolution is known, but the work has not been done.The path to resolution is known, but the work has not been done.
Milestone
Description
On a 32-bit system, an expression like uint64value & constantUint64Mask
could easily be decomposed two 32-bit mask operations. That does not seem to happen (see below, especially the OR instructions). It seems like probably it should.
$ cat x.go
package p
func f(x uint64) uint64 {
return x & (1<<60 - 1)
}
$ GOARCH=arm go build -gcflags=-S x.go
# command-line-arguments
"".f STEXT size=40 args=0x10 locals=0x0 leaf
0x0000 00000 (/Users/rsc/x.go:3) TEXT "".f(SB), LEAF|NOFRAME|ABIInternal, $-4-16
0x0000 00000 (/Users/rsc/x.go:3) FUNCDATA $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
0x0000 00000 (/Users/rsc/x.go:3) FUNCDATA $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
0x0000 00000 (/Users/rsc/x.go:3) FUNCDATA $2, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
0x0000 00000 (/Users/rsc/x.go:4) PCDATA $0, $0
0x0000 00000 (/Users/rsc/x.go:4) PCDATA $1, $0
0x0000 00000 (/Users/rsc/x.go:4) MOVW "".x(FP), R0
0x0004 00004 (/Users/rsc/x.go:4) SRL $28, R0, R1
0x0008 00008 (/Users/rsc/x.go:4) MOVW "".x+4(FP), R2
0x000c 00012 (/Users/rsc/x.go:4) ORR R2<<4, R1, R1
0x0010 00016 (/Users/rsc/x.go:4) BFXU $28, R0, $0, R0
0x0014 00020 (/Users/rsc/x.go:4) ORR R1<<28, R0, R0
0x0018 00024 (/Users/rsc/x.go:4) MOVW R0, "".~r1+8(FP)
0x001c 00028 (/Users/rsc/x.go:4) SRL $4, R1, R0
0x0020 00032 (/Users/rsc/x.go:4) MOVW R0, "".~r1+12(FP)
0x0024 00036 (/Users/rsc/x.go:4) JMP (R14)
...
$ GOARCH=386 go build -gcflags=-S x.go
# command-line-arguments
"".f STEXT size=62 args=0x10 locals=0x0
0x0000 00000 (/Users/rsc/x.go:3) TEXT "".f(SB), ABIInternal, $0-16
0x0000 00000 (/Users/rsc/x.go:3) MOVL (TLS), CX
0x0007 00007 (/Users/rsc/x.go:3) CMPL SP, 8(CX)
0x000a 00010 (/Users/rsc/x.go:3) JLS 55
0x000c 00012 (/Users/rsc/x.go:3) FUNCDATA $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
0x000c 00012 (/Users/rsc/x.go:3) FUNCDATA $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
0x000c 00012 (/Users/rsc/x.go:3) FUNCDATA $2, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
0x000c 00012 (/Users/rsc/x.go:4) PCDATA $0, $0
0x000c 00012 (/Users/rsc/x.go:4) PCDATA $1, $0
0x000c 00012 (/Users/rsc/x.go:4) MOVL "".x+8(SP), AX
0x0010 00016 (/Users/rsc/x.go:4) SHLL $4, AX
0x0013 00019 (/Users/rsc/x.go:4) MOVL "".x+4(SP), CX
0x0017 00023 (/Users/rsc/x.go:4) MOVL CX, DX
0x0019 00025 (/Users/rsc/x.go:4) SHRL $28, CX
0x001c 00028 (/Users/rsc/x.go:4) ORL AX, CX
0x001e 00030 (/Users/rsc/x.go:4) SHLL $4, DX
0x0021 00033 (/Users/rsc/x.go:4) SHRL $4, DX
0x0024 00036 (/Users/rsc/x.go:4) MOVL CX, AX
0x0026 00038 (/Users/rsc/x.go:4) SHLL $28, CX
0x0029 00041 (/Users/rsc/x.go:4) ORL DX, CX
0x002b 00043 (/Users/rsc/x.go:4) MOVL CX, "".~r1+12(SP)
0x002f 00047 (/Users/rsc/x.go:4) SHRL $4, AX
0x0032 00050 (/Users/rsc/x.go:4) MOVL AX, "".~r1+16(SP)
0x0036 00054 (/Users/rsc/x.go:4) RET
0x0037 00055 (/Users/rsc/x.go:4) NOP
0x0037 00055 (/Users/rsc/x.go:3) PCDATA $1, $-1
0x0037 00055 (/Users/rsc/x.go:3) PCDATA $0, $-1
0x0037 00055 (/Users/rsc/x.go:3) CALL runtime.morestack_noctxt(SB)
0x003c 00060 (/Users/rsc/x.go:3) JMP 0
Metadata
Metadata
Assignees
Labels
FrozenDueToAgeNeedsFixThe path to resolution is known, but the work has not been done.The path to resolution is known, but the work has not been done.