math.vectors.simd: make vcount work for all ints
							parent
							
								
									5411a67b22
								
							
						
					
					
						commit
						dd8dda4f48
					
				| 
						 | 
					@ -110,6 +110,21 @@ DEFER: simd-construct-op
 | 
				
			||||||
: vv->x-op ( a b rep quot: ( (a) (b) rep -- obj ) fallback-quot -- obj )
 | 
					: vv->x-op ( a b rep quot: ( (a) (b) rep -- obj ) fallback-quot -- obj )
 | 
				
			||||||
    [ '[ _ (vv->x-op) ] ] [ '[ drop @ ] ] bi* if-both-vectors-match ; inline
 | 
					    [ '[ _ (vv->x-op) ] ] [ '[ drop @ ] ] bi* if-both-vectors-match ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: mask>count ( n rep -- n' )
 | 
				
			||||||
 | 
					    [ bit-count ] dip {
 | 
				
			||||||
 | 
					        { float-4-rep     [ ] }
 | 
				
			||||||
 | 
					        { double-2-rep    [ ] }
 | 
				
			||||||
 | 
					        { uchar-16-rep    [ ] }
 | 
				
			||||||
 | 
					        { char-16-rep     [ ] }
 | 
				
			||||||
 | 
					        { ushort-8-rep    [ -1 shift ] }
 | 
				
			||||||
 | 
					        { short-8-rep     [ -1 shift ] }
 | 
				
			||||||
 | 
					        { ushort-8-rep    [ -1 shift ] }
 | 
				
			||||||
 | 
					        { int-4-rep       [ -2 shift ] }
 | 
				
			||||||
 | 
					        { uint-4-rep      [ -2 shift ] }
 | 
				
			||||||
 | 
					        { longlong-2-rep  [ -3 shift ] }
 | 
				
			||||||
 | 
					        { ulonglong-2-rep [ -3 shift ] }
 | 
				
			||||||
 | 
					    } case ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PRIVATE>
 | 
					PRIVATE>
 | 
				
			||||||
>>
 | 
					>>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -222,7 +237,9 @@ M: simd-128 vany?
 | 
				
			||||||
M: simd-128 vall?
 | 
					M: simd-128 vall?
 | 
				
			||||||
    dup simd-rep [ (simd-vall?)             ] [ call-next-method ] v->x-op  ; inline
 | 
					    dup simd-rep [ (simd-vall?)             ] [ call-next-method ] v->x-op  ; inline
 | 
				
			||||||
M: simd-128 vcount
 | 
					M: simd-128 vcount
 | 
				
			||||||
    dup simd-rep [ (simd-vgetmask) assert-positive ] [ call-next-method ] v->x-op bit-count ; inline
 | 
					    dup simd-rep
 | 
				
			||||||
 | 
					    [ [ (simd-vgetmask) assert-positive ] [ call-next-method ] v->x-op ]
 | 
				
			||||||
 | 
					    [ mask>count ] bi ; inline
 | 
				
			||||||
M: simd-128 vnone?
 | 
					M: simd-128 vnone?
 | 
				
			||||||
    dup simd-rep [ (simd-vnone?)            ] [ call-next-method ] v->x-op  ; inline
 | 
					    dup simd-rep [ (simd-vnone?)            ] [ call-next-method ] v->x-op  ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue