@@ -2730,12 +2730,12 @@ func init() {
2730
2730
func (s * state , n * Node , args []* ssa.Value ) * ssa.Value {
2731
2731
return s .newValue1 (ssa .OpCtz64 , types .Types [TINT ], args [0 ])
2732
2732
},
2733
- sys .AMD64 , sys .ARM64 , sys .ARM , sys .S390X , sys .MIPS )
2733
+ sys .AMD64 , sys .ARM64 , sys .ARM , sys .S390X , sys .MIPS , sys . PPC64 )
2734
2734
addF ("math/bits" , "TrailingZeros32" ,
2735
2735
func (s * state , n * Node , args []* ssa.Value ) * ssa.Value {
2736
2736
return s .newValue1 (ssa .OpCtz32 , types .Types [TINT ], args [0 ])
2737
2737
},
2738
- sys .AMD64 , sys .ARM64 , sys .ARM , sys .S390X , sys .MIPS )
2738
+ sys .AMD64 , sys .ARM64 , sys .ARM , sys .S390X , sys .MIPS , sys . PPC64 )
2739
2739
addF ("math/bits" , "TrailingZeros16" ,
2740
2740
func (s * state , n * Node , args []* ssa.Value ) * ssa.Value {
2741
2741
x := s .newValue1 (ssa .OpZeroExt16to32 , types .Types [TUINT32 ], args [0 ])
@@ -2776,7 +2776,7 @@ func init() {
2776
2776
func (s * state , n * Node , args []* ssa.Value ) * ssa.Value {
2777
2777
return s .newValue1 (ssa .OpBitLen64 , types .Types [TINT ], args [0 ])
2778
2778
},
2779
- sys .AMD64 , sys .ARM64 , sys .ARM , sys .S390X , sys .MIPS )
2779
+ sys .AMD64 , sys .ARM64 , sys .ARM , sys .S390X , sys .MIPS , sys . PPC64 )
2780
2780
addF ("math/bits" , "Len32" ,
2781
2781
func (s * state , n * Node , args []* ssa.Value ) * ssa.Value {
2782
2782
if s .config .PtrSize == 4 {
@@ -2785,7 +2785,7 @@ func init() {
2785
2785
x := s .newValue1 (ssa .OpZeroExt32to64 , types .Types [TUINT64 ], args [0 ])
2786
2786
return s .newValue1 (ssa .OpBitLen64 , types .Types [TINT ], x )
2787
2787
},
2788
- sys .AMD64 , sys .ARM64 , sys .ARM , sys .S390X , sys .MIPS )
2788
+ sys .AMD64 , sys .ARM64 , sys .ARM , sys .S390X , sys .MIPS , sys . PPC64 )
2789
2789
addF ("math/bits" , "Len16" ,
2790
2790
func (s * state , n * Node , args []* ssa.Value ) * ssa.Value {
2791
2791
if s .config .PtrSize == 4 {
@@ -2795,7 +2795,7 @@ func init() {
2795
2795
x := s .newValue1 (ssa .OpZeroExt16to64 , types .Types [TUINT64 ], args [0 ])
2796
2796
return s .newValue1 (ssa .OpBitLen64 , types .Types [TINT ], x )
2797
2797
},
2798
- sys .AMD64 , sys .ARM64 , sys .ARM , sys .S390X , sys .MIPS )
2798
+ sys .AMD64 , sys .ARM64 , sys .ARM , sys .S390X , sys .MIPS , sys . PPC64 )
2799
2799
// Note: disabled on AMD64 because the Go code is faster!
2800
2800
addF ("math/bits" , "Len8" ,
2801
2801
func (s * state , n * Node , args []* ssa.Value ) * ssa.Value {
@@ -2806,7 +2806,7 @@ func init() {
2806
2806
x := s .newValue1 (ssa .OpZeroExt8to64 , types .Types [TUINT64 ], args [0 ])
2807
2807
return s .newValue1 (ssa .OpBitLen64 , types .Types [TINT ], x )
2808
2808
},
2809
- sys .ARM64 , sys .ARM , sys .S390X , sys .MIPS )
2809
+ sys .ARM64 , sys .ARM , sys .S390X , sys .MIPS , sys . PPC64 )
2810
2810
2811
2811
addF ("math/bits" , "Len" ,
2812
2812
func (s * state , n * Node , args []* ssa.Value ) * ssa.Value {
@@ -2815,7 +2815,7 @@ func init() {
2815
2815
}
2816
2816
return s .newValue1 (ssa .OpBitLen64 , types .Types [TINT ], args [0 ])
2817
2817
},
2818
- sys .AMD64 , sys .ARM64 , sys .ARM , sys .S390X , sys .MIPS )
2818
+ sys .AMD64 , sys .ARM64 , sys .ARM , sys .S390X , sys .MIPS , sys . PPC64 )
2819
2819
// LeadingZeros is handled because it trivially calls Len.
2820
2820
addF ("math/bits" , "Reverse64" ,
2821
2821
func (s * state , n * Node , args []* ssa.Value ) * ssa.Value {
@@ -2845,7 +2845,7 @@ func init() {
2845
2845
return s .newValue1 (ssa .OpBitRev64 , types .Types [TINT ], args [0 ])
2846
2846
},
2847
2847
sys .ARM64 )
2848
- makeOnesCount := func (op64 ssa.Op , op32 ssa.Op ) func (s * state , n * Node , args []* ssa.Value ) * ssa.Value {
2848
+ makeOnesCountAMD64 := func (op64 ssa.Op , op32 ssa.Op ) func (s * state , n * Node , args []* ssa.Value ) * ssa.Value {
2849
2849
return func (s * state , n * Node , args []* ssa.Value ) * ssa.Value {
2850
2850
aux := s .lookupSymbol (n , & ssa.ExternSymbol {Sym : syslook ("support_popcnt" ).Sym .Linksym ()})
2851
2851
addr := s .entryNewValue1A (ssa .OpAddr , types .Types [TBOOL ].PtrTo (), aux , s .sb )
@@ -2881,17 +2881,27 @@ func init() {
2881
2881
}
2882
2882
}
2883
2883
addF ("math/bits" , "OnesCount64" ,
2884
- makeOnesCount (ssa .OpPopCount64 , ssa .OpPopCount64 ),
2884
+ makeOnesCountAMD64 (ssa .OpPopCount64 , ssa .OpPopCount64 ),
2885
2885
sys .AMD64 )
2886
+ addF ("math/bits" , "OnesCount64" ,
2887
+ func (s * state , n * Node , args []* ssa.Value ) * ssa.Value {
2888
+ return s .newValue1 (ssa .OpPopCount64 , types .Types [TINT ], args [0 ])
2889
+ },
2890
+ sys .PPC64 )
2886
2891
addF ("math/bits" , "OnesCount32" ,
2887
- makeOnesCount (ssa .OpPopCount32 , ssa .OpPopCount32 ),
2892
+ makeOnesCountAMD64 (ssa .OpPopCount32 , ssa .OpPopCount32 ),
2888
2893
sys .AMD64 )
2894
+ addF ("math/bits" , "OnesCount32" ,
2895
+ func (s * state , n * Node , args []* ssa.Value ) * ssa.Value {
2896
+ return s .newValue1 (ssa .OpPopCount32 , types .Types [TINT ], args [0 ])
2897
+ },
2898
+ sys .PPC64 )
2889
2899
addF ("math/bits" , "OnesCount16" ,
2890
- makeOnesCount (ssa .OpPopCount16 , ssa .OpPopCount16 ),
2900
+ makeOnesCountAMD64 (ssa .OpPopCount16 , ssa .OpPopCount16 ),
2891
2901
sys .AMD64 )
2892
2902
// Note: no OnesCount8, the Go implementation is faster - just a table load.
2893
2903
addF ("math/bits" , "OnesCount" ,
2894
- makeOnesCount (ssa .OpPopCount64 , ssa .OpPopCount32 ),
2904
+ makeOnesCountAMD64 (ssa .OpPopCount64 , ssa .OpPopCount32 ),
2895
2905
sys .AMD64 )
2896
2906
2897
2907
/******** sync/atomic ********/
0 commit comments