From 0de0ed369f902675cdfa9ed164497ae81c42bcdd Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Mon, 9 Apr 2018 10:25:15 -0700 Subject: [PATCH] test: check that unaligned load-add opcodes work. A test for CL 102036. Change-Id: Ief6dcb4f478670813fbe22ea75a06815a4b201a3 Reviewed-on: https://go-review.googlesource.com/105875 Run-TryBot: Keith Randall Reviewed-by: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- test/align.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 test/align.go diff --git a/test/align.go b/test/align.go new file mode 100644 index 0000000000..61d07c49b8 --- /dev/null +++ b/test/align.go @@ -0,0 +1,29 @@ +// run + +// Copyright 2018 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. + +package main + +// On 32-bit archs, one of the f fields of a [2]T +// will be unaligned (address of 4 mod 8). +// Make sure we can access the f fields successfully, +// particularly for load-add combo instructions +// introduced by CL 102036. +type T struct { + pad uint32 + f float64 +} + +//go:noinline +func f(t, u *T) float64 { + return 3.0 + t.f + u.f +} + +func main() { + t := [2]T{{0, 1.0}, {0, 2.0}} + sink = f(&t[0], &t[1]) +} + +var sink float64