Source file test/codegen/bmi.go

     1  // asmcheck
     2  
     3  // Copyright 2021 The Go Authors. All rights reserved.
     4  // Use of this source code is governed by a BSD-style
     5  // license that can be found in the LICENSE file.
     6  
     7  package codegen
     8  
     9  func andn64(x, y int64) int64 {
    10  	// amd64/v3:"ANDNQ"
    11  	return x &^ y
    12  }
    13  
    14  func andn32(x, y int32) int32 {
    15  	// amd64/v3:"ANDNL"
    16  	return x &^ y
    17  }
    18  
    19  func blsi64(x int64) int64 {
    20  	// amd64/v3:"BLSIQ"
    21  	return x & -x
    22  }
    23  
    24  func blsi32(x int32) int32 {
    25  	// amd64/v3:"BLSIL"
    26  	return x & -x
    27  }
    28  
    29  func blsmsk64(x int64) int64 {
    30  	// amd64/v3:"BLSMSKQ"
    31  	return x ^ (x - 1)
    32  }
    33  
    34  func blsmsk32(x int32) int32 {
    35  	// amd64/v3:"BLSMSKL"
    36  	return x ^ (x - 1)
    37  }
    38  
    39  func blsr64(x int64) int64 {
    40  	// amd64/v3:"BLSRQ"
    41  	return x & (x - 1)
    42  }
    43  
    44  func blsr32(x int32) int32 {
    45  	// amd64/v3:"BLSRL"
    46  	return x & (x - 1)
    47  }
    48  
    49  func sarx64(x, y int64) int64 {
    50  	// amd64/v3:"SARXQ"
    51  	return x >> y
    52  }
    53  
    54  func sarx32(x, y int32) int32 {
    55  	// amd64/v3:"SARXL"
    56  	return x >> y
    57  }
    58  
    59  func sarx64_load(x []int64, i int) int64 {
    60  	// amd64/v3: `SARXQ\t[A-Z]+[0-9]*, \([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), [A-Z]+[0-9]*`
    61  	s := x[i] >> (i & 63)
    62  	// amd64/v3: `SARXQ\t[A-Z]+[0-9]*, 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), [A-Z]+[0-9]*`
    63  	s = x[i+1] >> (s & 63)
    64  	return s
    65  }
    66  
    67  func sarx32_load(x []int32, i int) int32 {
    68  	// amd64/v3: `SARXL\t[A-Z]+[0-9]*, \([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), [A-Z]+[0-9]*`
    69  	s := x[i] >> (i & 63)
    70  	// amd64/v3: `SARXL\t[A-Z]+[0-9]*, 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), [A-Z]+[0-9]*`
    71  	s = x[i+1] >> (s & 63)
    72  	return s
    73  }
    74  
    75  func shlrx64(x, y uint64) uint64 {
    76  	// amd64/v3:"SHRXQ"
    77  	s := x >> y
    78  	// amd64/v3:"SHLXQ"
    79  	s = s << y
    80  	return s
    81  }
    82  
    83  func shlrx32(x, y uint32) uint32 {
    84  	// amd64/v3:"SHRXL"
    85  	s := x >> y
    86  	// amd64/v3:"SHLXL"
    87  	s = s << y
    88  	return s
    89  }
    90  
    91  func shlrx64_load(x []uint64, i int, s uint64) uint64 {
    92  	// amd64/v3: `SHRXQ\t[A-Z]+[0-9]*, \([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), [A-Z]+[0-9]*`
    93  	s = x[i] >> i
    94  	// amd64/v3: `SHLXQ\t[A-Z]+[0-9]*, 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), [A-Z]+[0-9]*`
    95  	s = x[i+1] << s
    96  	return s
    97  }
    98  
    99  func shlrx32_load(x []uint32, i int, s uint32) uint32 {
   100  	// amd64/v3: `SHRXL\t[A-Z]+[0-9]*, \([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), [A-Z]+[0-9]*`
   101  	s = x[i] >> i
   102  	// amd64/v3: `SHLXL\t[A-Z]+[0-9]*, 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), [A-Z]+[0-9]*`
   103  	s = x[i+1] << s
   104  	return s
   105  }
   106  

View as plain text