mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[dev.ssa] cmd/compile: make sure to keep offset and sym of MOV opcodes.
MOVXload and MOVXstore opcodes have both an auxint offset and an aux offset (a symbol name, like a local or arg or global). Make sure we keep those values during rewrites. Change-Id: Ic9fd61bf295b5d1457784c281079a4fb38f7ad3b Reviewed-on: https://go-review.googlesource.com/13849 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
This commit is contained in:
parent
5844603f14
commit
01490eb96c
4 changed files with 773 additions and 299 deletions
|
|
@ -122,6 +122,8 @@ func addOff(x, y int64) int64 {
|
|||
return z
|
||||
}
|
||||
|
||||
// mergeSym merges two symbolic offsets. There is no real merging of
|
||||
// offsets, we just pick the non-nil one.
|
||||
func mergeSym(x, y interface{}) interface{} {
|
||||
if x == nil {
|
||||
return y
|
||||
|
|
@ -132,6 +134,9 @@ func mergeSym(x, y interface{}) interface{} {
|
|||
panic(fmt.Sprintf("mergeSym with two non-nil syms %s %s", x, y))
|
||||
return nil
|
||||
}
|
||||
func canMergeSym(x, y interface{}) bool {
|
||||
return x == nil || y == nil
|
||||
}
|
||||
|
||||
func inBounds8(idx, len int64) bool { return int8(idx) >= 0 && int8(idx) < int8(len) }
|
||||
func inBounds16(idx, len int64) bool { return int16(idx) >= 0 && int16(idx) < int16(len) }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue