Source file src/cmd/compile/internal/wasm/simdssa.go

     1  // Code generated by 'wasmgen'; DO NOT EDIT.
     2  
     3  package wasm
     4  
     5  import (
     6  	"cmd/compile/internal/ssa"
     7  	"cmd/compile/internal/ssa/ssaop"
     8  	"cmd/compile/internal/ssagen"
     9  	"cmd/internal/obj"
    10  	"cmd/internal/obj/wasm"
    11  )
    12  
    13  func ssaGenSIMDValue(s *ssagen.State, v *ssa.Value, extend bool) bool {
    14  	switch v.Op {
    15  	case ssaop.OpWasmF32x4ExtractLane, ssaop.OpWasmI64x2ExtractLane, ssaop.OpWasmF64x2ExtractLane:
    16  		getValue128(s, v.Args[0])
    17  		p := s.Prog(v.Op.Asm())
    18  		p.To = obj.Addr{Type: obj.TYPE_CONST, Offset: v.AuxInt}
    19  	case ssaop.OpWasmI8x16ExtractLaneU, ssaop.OpWasmI16x8ExtractLaneU:
    20  		getValue128(s, v.Args[0])
    21  		p := s.Prog(v.Op.Asm())
    22  		p.To = obj.Addr{Type: obj.TYPE_CONST, Offset: v.AuxInt}
    23  		if extend {
    24  			s.Prog(wasm.AI64ExtendI32U)
    25  		}
    26  	case ssaop.OpWasmI8x16ExtractLaneS, ssaop.OpWasmI16x8ExtractLaneS, ssaop.OpWasmI32x4ExtractLane:
    27  		getValue128(s, v.Args[0])
    28  		p := s.Prog(v.Op.Asm())
    29  		p.To = obj.Addr{Type: obj.TYPE_CONST, Offset: v.AuxInt}
    30  		if extend {
    31  			s.Prog(wasm.AI64ExtendI32S)
    32  		}
    33  	case ssaop.OpWasmI8x16ReplaceLane, ssaop.OpWasmI16x8ReplaceLane, ssaop.OpWasmI32x4ReplaceLane:
    34  		getValue128(s, v.Args[0])
    35  		getValue32(s, v.Args[1])
    36  		p := s.Prog(v.Op.Asm())
    37  		p.To = obj.Addr{Type: obj.TYPE_CONST, Offset: v.AuxInt}
    38  	case ssaop.OpWasmF32x4ReplaceLane, ssaop.OpWasmI64x2ReplaceLane, ssaop.OpWasmF64x2ReplaceLane:
    39  		getValue128(s, v.Args[0])
    40  		getValue64(s, v.Args[1])
    41  		p := s.Prog(v.Op.Asm())
    42  		p.To = obj.Addr{Type: obj.TYPE_CONST, Offset: v.AuxInt}
    43  	case ssaop.OpWasmI8x16Splat, ssaop.OpWasmI16x8Splat, ssaop.OpWasmI32x4Splat:
    44  		getValue32(s, v.Args[0])
    45  		s.Prog(v.Op.Asm())
    46  	case ssaop.OpWasmI64x2Splat:
    47  		getValue64(s, v.Args[0])
    48  		s.Prog(v.Op.Asm())
    49  	case ssaop.OpWasmF32x4Splat:
    50  		getValueFxx(s, v.Args[0])
    51  		s.Prog(v.Op.Asm())
    52  	case ssaop.OpWasmF64x2Splat:
    53  		getValueFxx(s, v.Args[0])
    54  		s.Prog(v.Op.Asm())
    55  	case ssaop.OpWasmI8x16AllTrue, ssaop.OpWasmV128AnyTrue, ssaop.OpWasmI16x8AllTrue,
    56  		ssaop.OpWasmI32x4AllTrue, ssaop.OpWasmI64x2AllTrue, ssaop.OpWasmI8x16Abs,
    57  		ssaop.OpWasmI16x8Abs, ssaop.OpWasmI32x4Abs, ssaop.OpWasmF32x4Abs,
    58  		ssaop.OpWasmI64x2Abs, ssaop.OpWasmF64x2Abs, ssaop.OpWasmF32x4Ceil,
    59  		ssaop.OpWasmF64x2Ceil, ssaop.OpWasmF64x2ConvertLowI32x4S, ssaop.OpWasmF64x2ConvertLowI32x4U,
    60  		ssaop.OpWasmF32x4ConvertI32x4S, ssaop.OpWasmF32x4ConvertI32x4U, ssaop.OpWasmI32x4TruncSatF32x4S,
    61  		ssaop.OpWasmI32x4TruncSatF32x4U, ssaop.OpWasmI64x2ExtendHighI32x4S, ssaop.OpWasmI64x2ExtendHighI32x4U,
    62  		ssaop.OpWasmI32x4ExtendHighI16x8S, ssaop.OpWasmI32x4ExtendHighI16x8U, ssaop.OpWasmI16x8ExtendHighI8x16S,
    63  		ssaop.OpWasmI16x8ExtendHighI8x16U, ssaop.OpWasmI64x2ExtendLowI32x4S, ssaop.OpWasmI64x2ExtendLowI32x4U,
    64  		ssaop.OpWasmI32x4ExtendLowI16x8S, ssaop.OpWasmI32x4ExtendLowI16x8U, ssaop.OpWasmI16x8ExtendLowI8x16S,
    65  		ssaop.OpWasmI16x8ExtendLowI8x16U, ssaop.OpWasmF32x4Floor, ssaop.OpWasmF64x2Floor,
    66  		ssaop.OpWasmI8x16Neg, ssaop.OpWasmI16x8Neg, ssaop.OpWasmI32x4Neg,
    67  		ssaop.OpWasmF32x4Neg, ssaop.OpWasmI64x2Neg, ssaop.OpWasmF64x2Neg,
    68  		ssaop.OpWasmV128Not, ssaop.OpWasmI8x16Popcnt, ssaop.OpWasmF32x4Nearest,
    69  		ssaop.OpWasmF64x2Nearest, ssaop.OpWasmF32x4Sqrt, ssaop.OpWasmF64x2Sqrt,
    70  		ssaop.OpWasmF32x4Trunc, ssaop.OpWasmF64x2Trunc:
    71  		getValue128(s, v.Args[0])
    72  		s.Prog(v.Op.Asm())
    73  	case ssaop.OpWasmI16x8Q15MulrSatS, ssaop.OpWasmI16x8RelaxedQ15MulrS, ssaop.OpWasmF32x4Pmax,
    74  		ssaop.OpWasmF32x4Pmin, ssaop.OpWasmF32x4RelaxedMax, ssaop.OpWasmF32x4RelaxedMin,
    75  		ssaop.OpWasmF64x2Pmax, ssaop.OpWasmF64x2Pmin, ssaop.OpWasmF64x2RelaxedMax,
    76  		ssaop.OpWasmF64x2RelaxedMin, ssaop.OpWasmI8x16Add, ssaop.OpWasmI16x8Add,
    77  		ssaop.OpWasmI32x4Add, ssaop.OpWasmF32x4Add, ssaop.OpWasmI64x2Add,
    78  		ssaop.OpWasmF64x2Add, ssaop.OpWasmI8x16AddSatS, ssaop.OpWasmI8x16AddSatU,
    79  		ssaop.OpWasmI16x8AddSatS, ssaop.OpWasmI16x8AddSatU, ssaop.OpWasmV128And,
    80  		ssaop.OpWasmV128Andnot, ssaop.OpWasmI8x16AvgrU, ssaop.OpWasmI16x8AvgrU,
    81  		ssaop.OpWasmF32x4Div, ssaop.OpWasmF64x2Div, ssaop.OpWasmI8x16Eq,
    82  		ssaop.OpWasmI16x8Eq, ssaop.OpWasmI32x4Eq, ssaop.OpWasmF32x4Eq,
    83  		ssaop.OpWasmI64x2Eq, ssaop.OpWasmF64x2Eq, ssaop.OpWasmI8x16GtS,
    84  		ssaop.OpWasmI8x16GtU, ssaop.OpWasmI16x8GtS, ssaop.OpWasmI16x8GtU,
    85  		ssaop.OpWasmI32x4GtS, ssaop.OpWasmI32x4GtU, ssaop.OpWasmF32x4Gt,
    86  		ssaop.OpWasmI64x2GtS, ssaop.OpWasmF64x2Gt, ssaop.OpWasmI8x16GeS,
    87  		ssaop.OpWasmI8x16GeU, ssaop.OpWasmI16x8GeS, ssaop.OpWasmI16x8GeU,
    88  		ssaop.OpWasmI32x4GeS, ssaop.OpWasmI32x4GeU, ssaop.OpWasmF32x4Ge,
    89  		ssaop.OpWasmI64x2GeS, ssaop.OpWasmF64x2Ge, ssaop.OpWasmI8x16LtS,
    90  		ssaop.OpWasmI8x16LtU, ssaop.OpWasmI16x8LtS, ssaop.OpWasmI16x8LtU,
    91  		ssaop.OpWasmI32x4LtS, ssaop.OpWasmI32x4LtU, ssaop.OpWasmF32x4Lt,
    92  		ssaop.OpWasmI64x2LtS, ssaop.OpWasmF64x2Lt, ssaop.OpWasmI8x16LeS,
    93  		ssaop.OpWasmI8x16LeU, ssaop.OpWasmI16x8LeS, ssaop.OpWasmI16x8LeU,
    94  		ssaop.OpWasmI32x4LeS, ssaop.OpWasmI32x4LeU, ssaop.OpWasmF32x4Le,
    95  		ssaop.OpWasmI64x2LeS, ssaop.OpWasmF64x2Le, ssaop.OpWasmI8x16Swizzle,
    96  		ssaop.OpWasmI8x16MaxS, ssaop.OpWasmI8x16MaxU, ssaop.OpWasmI16x8MaxS,
    97  		ssaop.OpWasmI16x8MaxU, ssaop.OpWasmI32x4MaxS, ssaop.OpWasmI32x4MaxU,
    98  		ssaop.OpWasmF32x4Max, ssaop.OpWasmF64x2Max, ssaop.OpWasmI8x16MinS,
    99  		ssaop.OpWasmI8x16MinU, ssaop.OpWasmI16x8MinS, ssaop.OpWasmI16x8MinU,
   100  		ssaop.OpWasmI32x4MinS, ssaop.OpWasmI32x4MinU, ssaop.OpWasmF32x4Min,
   101  		ssaop.OpWasmF64x2Min, ssaop.OpWasmI16x8Mul, ssaop.OpWasmI32x4Mul,
   102  		ssaop.OpWasmF32x4Mul, ssaop.OpWasmI64x2Mul, ssaop.OpWasmF64x2Mul,
   103  		ssaop.OpWasmI16x8ExtmulHighI8x16S, ssaop.OpWasmI16x8ExtmulHighI8x16U, ssaop.OpWasmI32x4ExtmulHighI16x8S,
   104  		ssaop.OpWasmI32x4ExtmulHighI16x8U, ssaop.OpWasmI64x2ExtmulHighI32x4S, ssaop.OpWasmI64x2ExtmulHighI32x4U,
   105  		ssaop.OpWasmI16x8ExtmulLowI8x16S, ssaop.OpWasmI16x8ExtmulLowI8x16U, ssaop.OpWasmI32x4ExtmulLowI16x8S,
   106  		ssaop.OpWasmI32x4ExtmulLowI16x8U, ssaop.OpWasmI64x2ExtmulLowI32x4S, ssaop.OpWasmI64x2ExtmulLowI32x4U,
   107  		ssaop.OpWasmI8x16Ne, ssaop.OpWasmI16x8Ne, ssaop.OpWasmI32x4Ne,
   108  		ssaop.OpWasmF32x4Ne, ssaop.OpWasmI64x2Ne, ssaop.OpWasmF64x2Ne,
   109  		ssaop.OpWasmV128Or, ssaop.OpWasmI8x16Sub, ssaop.OpWasmI16x8Sub,
   110  		ssaop.OpWasmI32x4Sub, ssaop.OpWasmF32x4Sub, ssaop.OpWasmI64x2Sub,
   111  		ssaop.OpWasmF64x2Sub, ssaop.OpWasmI8x16SubSatS, ssaop.OpWasmI8x16SubSatU,
   112  		ssaop.OpWasmI16x8SubSatS, ssaop.OpWasmI16x8SubSatU, ssaop.OpWasmV128Xor:
   113  		getValue128(s, v.Args[0])
   114  		getValue128(s, v.Args[1])
   115  		s.Prog(v.Op.Asm())
   116  	case ssaop.OpWasmI8x16Shl, ssaop.OpWasmI16x8Shl, ssaop.OpWasmI32x4Shl,
   117  		ssaop.OpWasmI64x2Shl, ssaop.OpWasmI8x16ShrS, ssaop.OpWasmI8x16ShrU,
   118  		ssaop.OpWasmI16x8ShrS, ssaop.OpWasmI16x8ShrU, ssaop.OpWasmI32x4ShrS,
   119  		ssaop.OpWasmI32x4ShrU, ssaop.OpWasmI64x2ShrS, ssaop.OpWasmI64x2ShrU:
   120  		getValue128(s, v.Args[0])
   121  		getValue32(s, v.Args[1])
   122  		s.Prog(v.Op.Asm())
   123  	case ssaop.OpWasmV128Bitselect:
   124  		getValue128(s, v.Args[0])
   125  		getValue128(s, v.Args[1])
   126  		getValue128(s, v.Args[2])
   127  		s.Prog(v.Op.Asm())
   128  
   129  	default:
   130  		return false
   131  	}
   132  	return true
   133  }
   134  

View as plain text