Source file src/cmd/compile/internal/test/move_test.go

     1  // Copyright 2025 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package test
     6  
     7  import "testing"
     8  
     9  var (
    10  	n = [16]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
    11  	m = [16]int{2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32}
    12  )
    13  
    14  func TestEqual(t *testing.T) {
    15  	if r := move2(n, m, 0); r != n {
    16  		t.Fatalf("%v != %v", r, n)
    17  	}
    18  	if r := move2(n, m, 1); r != m {
    19  		t.Fatalf("%v != %v", r, m)
    20  	}
    21  	if r := move2p(n, m, 0); r != n {
    22  		t.Fatalf("%v != %v", r, n)
    23  	}
    24  	if r := move2p(n, m, 1); r != m {
    25  		t.Fatalf("%v != %v", r, m)
    26  	}
    27  }
    28  
    29  //go:noinline
    30  func move2(a, b [16]int, c int) [16]int {
    31  	e := a
    32  	f := b
    33  	var d [16]int
    34  	if c%2 == 0 {
    35  		d = e
    36  	} else {
    37  		d = f
    38  	}
    39  	r := d
    40  	return r
    41  }
    42  
    43  //go:noinline
    44  func move2p(a, b [16]int, c int) [16]int {
    45  	e := a
    46  	f := b
    47  	var p *[16]int
    48  	if c%2 == 0 {
    49  		p = &e
    50  	} else {
    51  		p = &f
    52  	}
    53  	r := *p
    54  	return r
    55  }
    56  

View as plain text