| // compile | 
 |  | 
 | // Copyright 2017 The Go Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style | 
 | // license that can be found in the LICENSE file. | 
 |  | 
 | // Issue 19137: folding address into load/store causes | 
 | // odd offset on ARM64. | 
 |  | 
 | package p | 
 |  | 
 | type T struct { | 
 | 	p *int | 
 | 	a [2]byte | 
 | 	b [6]byte // not 4-byte aligned | 
 | } | 
 |  | 
 | func f(b [6]byte) T { | 
 | 	var x [1000]int // a large stack frame | 
 | 	_ = x | 
 | 	return T{b: b} | 
 | } | 
 |  | 
 | // Arg symbol's base address may be not at an aligned offset to | 
 | // SP. Folding arg's address into load/store may cause odd offset. | 
 | func move(a, b [20]byte) [20]byte { | 
 | 	var x [1000]int // a large stack frame | 
 | 	_ = x | 
 | 	return b // b is not 8-byte aligned to SP | 
 | } | 
 | func zero() ([20]byte, [20]byte) { | 
 | 	var x [1000]int // a large stack frame | 
 | 	_ = x | 
 | 	return [20]byte{}, [20]byte{} // the second return value is not 8-byte aligned to SP | 
 | } | 
 |  | 
 | // Issue 21992: unaligned offset between 256 and 504 and handled | 
 | // incorrectly. | 
 | type T2 struct { | 
 | 	a [257]byte | 
 | 	// fields below are not 8-, 4-, 2-byte aligned | 
 | 	b [8]byte | 
 | 	c [4]byte | 
 | 	d [2]byte | 
 | } | 
 |  | 
 | func f2(x *T2) { | 
 | 	x.b = [8]byte{} | 
 | 	x.c = [4]byte{} | 
 | 	x.d = [2]byte{} | 
 | } |