Source file src/cmd/compile/internal/ssa/tern_helpers.go

     1  // Code generated by 'go run genfiles.go'; DO NOT EDIT.
     2  
     3  package ssa
     4  
     5  type SIMDLogicalOP uint8
     6  
     7  const (
     8  	// boolean simd operations, for reducing expression to VPTERNLOG* instructions
     9  	// sloInterior is set for non-root nodes in logical-op expression trees.
    10  	// the operations are even-numbered.
    11  	sloInterior SIMDLogicalOP = 1
    12  	sloNone     SIMDLogicalOP = 2 * iota
    13  	sloAnd
    14  	sloOr
    15  	sloAndNot
    16  	sloXor
    17  	sloNot
    18  )
    19  
    20  func classifyBooleanSIMD(v *Value) SIMDLogicalOP {
    21  	switch v.Op {
    22  	case OpAndInt8x16, OpAndInt16x8, OpAndInt32x4, OpAndInt64x2, OpAndInt8x32, OpAndInt16x16, OpAndInt32x8, OpAndInt64x4, OpAndInt8x64, OpAndInt16x32, OpAndInt32x16, OpAndInt64x8:
    23  		return sloAnd
    24  
    25  	case OpOrInt8x16, OpOrInt16x8, OpOrInt32x4, OpOrInt64x2, OpOrInt8x32, OpOrInt16x16, OpOrInt32x8, OpOrInt64x4, OpOrInt8x64, OpOrInt16x32, OpOrInt32x16, OpOrInt64x8:
    26  		return sloOr
    27  
    28  	case OpAndNotInt8x16, OpAndNotInt16x8, OpAndNotInt32x4, OpAndNotInt64x2, OpAndNotInt8x32, OpAndNotInt16x16, OpAndNotInt32x8, OpAndNotInt64x4, OpAndNotInt8x64, OpAndNotInt16x32, OpAndNotInt32x16, OpAndNotInt64x8:
    29  		return sloAndNot
    30  	case OpXorInt8x16:
    31  		if y := v.Args[1]; y.Op == OpEqualInt8x16 &&
    32  			y.Args[0] == y.Args[1] {
    33  			return sloNot
    34  		}
    35  		return sloXor
    36  	case OpXorInt16x8:
    37  		if y := v.Args[1]; y.Op == OpEqualInt16x8 &&
    38  			y.Args[0] == y.Args[1] {
    39  			return sloNot
    40  		}
    41  		return sloXor
    42  	case OpXorInt32x4:
    43  		if y := v.Args[1]; y.Op == OpEqualInt32x4 &&
    44  			y.Args[0] == y.Args[1] {
    45  			return sloNot
    46  		}
    47  		return sloXor
    48  	case OpXorInt64x2:
    49  		if y := v.Args[1]; y.Op == OpEqualInt64x2 &&
    50  			y.Args[0] == y.Args[1] {
    51  			return sloNot
    52  		}
    53  		return sloXor
    54  	case OpXorInt8x32:
    55  		if y := v.Args[1]; y.Op == OpEqualInt8x32 &&
    56  			y.Args[0] == y.Args[1] {
    57  			return sloNot
    58  		}
    59  		return sloXor
    60  	case OpXorInt16x16:
    61  		if y := v.Args[1]; y.Op == OpEqualInt16x16 &&
    62  			y.Args[0] == y.Args[1] {
    63  			return sloNot
    64  		}
    65  		return sloXor
    66  	case OpXorInt32x8:
    67  		if y := v.Args[1]; y.Op == OpEqualInt32x8 &&
    68  			y.Args[0] == y.Args[1] {
    69  			return sloNot
    70  		}
    71  		return sloXor
    72  	case OpXorInt64x4:
    73  		if y := v.Args[1]; y.Op == OpEqualInt64x4 &&
    74  			y.Args[0] == y.Args[1] {
    75  			return sloNot
    76  		}
    77  		return sloXor
    78  	case OpXorInt8x64:
    79  		if y := v.Args[1]; y.Op == OpEqualInt8x64 &&
    80  			y.Args[0] == y.Args[1] {
    81  			return sloNot
    82  		}
    83  		return sloXor
    84  	case OpXorInt16x32:
    85  		if y := v.Args[1]; y.Op == OpEqualInt16x32 &&
    86  			y.Args[0] == y.Args[1] {
    87  			return sloNot
    88  		}
    89  		return sloXor
    90  	case OpXorInt32x16:
    91  		if y := v.Args[1]; y.Op == OpEqualInt32x16 &&
    92  			y.Args[0] == y.Args[1] {
    93  			return sloNot
    94  		}
    95  		return sloXor
    96  	case OpXorInt64x8:
    97  		if y := v.Args[1]; y.Op == OpEqualInt64x8 &&
    98  			y.Args[0] == y.Args[1] {
    99  			return sloNot
   100  		}
   101  		return sloXor
   102  
   103  	}
   104  	return sloNone
   105  }
   106  
   107  func ternOpForLogical(op Op) Op {
   108  	switch op {
   109  	case OpAndInt8x16, OpOrInt8x16, OpXorInt8x16, OpAndNotInt8x16:
   110  		return OpternInt32x4
   111  	case OpAndUint8x16, OpOrUint8x16, OpXorUint8x16, OpAndNotUint8x16:
   112  		return OpternUint32x4
   113  	case OpAndInt16x8, OpOrInt16x8, OpXorInt16x8, OpAndNotInt16x8:
   114  		return OpternInt32x4
   115  	case OpAndUint16x8, OpOrUint16x8, OpXorUint16x8, OpAndNotUint16x8:
   116  		return OpternUint32x4
   117  	case OpAndInt32x4, OpOrInt32x4, OpXorInt32x4, OpAndNotInt32x4:
   118  		return OpternInt32x4
   119  	case OpAndUint32x4, OpOrUint32x4, OpXorUint32x4, OpAndNotUint32x4:
   120  		return OpternUint32x4
   121  	case OpAndInt64x2, OpOrInt64x2, OpXorInt64x2, OpAndNotInt64x2:
   122  		return OpternInt64x2
   123  	case OpAndUint64x2, OpOrUint64x2, OpXorUint64x2, OpAndNotUint64x2:
   124  		return OpternUint64x2
   125  	case OpAndInt8x32, OpOrInt8x32, OpXorInt8x32, OpAndNotInt8x32:
   126  		return OpternInt32x8
   127  	case OpAndUint8x32, OpOrUint8x32, OpXorUint8x32, OpAndNotUint8x32:
   128  		return OpternUint32x8
   129  	case OpAndInt16x16, OpOrInt16x16, OpXorInt16x16, OpAndNotInt16x16:
   130  		return OpternInt32x8
   131  	case OpAndUint16x16, OpOrUint16x16, OpXorUint16x16, OpAndNotUint16x16:
   132  		return OpternUint32x8
   133  	case OpAndInt32x8, OpOrInt32x8, OpXorInt32x8, OpAndNotInt32x8:
   134  		return OpternInt32x8
   135  	case OpAndUint32x8, OpOrUint32x8, OpXorUint32x8, OpAndNotUint32x8:
   136  		return OpternUint32x8
   137  	case OpAndInt64x4, OpOrInt64x4, OpXorInt64x4, OpAndNotInt64x4:
   138  		return OpternInt64x4
   139  	case OpAndUint64x4, OpOrUint64x4, OpXorUint64x4, OpAndNotUint64x4:
   140  		return OpternUint64x4
   141  	case OpAndInt8x64, OpOrInt8x64, OpXorInt8x64, OpAndNotInt8x64:
   142  		return OpternInt32x16
   143  	case OpAndUint8x64, OpOrUint8x64, OpXorUint8x64, OpAndNotUint8x64:
   144  		return OpternUint32x16
   145  	case OpAndInt16x32, OpOrInt16x32, OpXorInt16x32, OpAndNotInt16x32:
   146  		return OpternInt32x16
   147  	case OpAndUint16x32, OpOrUint16x32, OpXorUint16x32, OpAndNotUint16x32:
   148  		return OpternUint32x16
   149  	case OpAndInt32x16, OpOrInt32x16, OpXorInt32x16, OpAndNotInt32x16:
   150  		return OpternInt32x16
   151  	case OpAndUint32x16, OpOrUint32x16, OpXorUint32x16, OpAndNotUint32x16:
   152  		return OpternUint32x16
   153  	case OpAndInt64x8, OpOrInt64x8, OpXorInt64x8, OpAndNotInt64x8:
   154  		return OpternInt64x8
   155  	case OpAndUint64x8, OpOrUint64x8, OpXorUint64x8, OpAndNotUint64x8:
   156  		return OpternUint64x8
   157  
   158  	}
   159  	return op
   160  }
   161  

View as plain text