sbcl.sbcl/contrib/sb-simd/code/instruction-sets/sse4-2.lisp
Marco Heisig 724690647b Merge sb-simd.
This commit contains the sb-simd contrib in its most recent form.  The
original sb-simd repository will be archived, and development of sb-simd
will now be a part of the regular SBCL development.  Thanks for everyone
who made this work possible!
2022-06-21 07:59:31 +02:00

27 lines
1.3 KiB
Common Lisp

(in-package #:sb-simd-sse4.2)
(define-instruction-set :sse4.2
(:include :sse4.1)
(:test (sse4.2-supported-p))
(:instructions
;; u64.2
(two-arg-u64.2>~ #:pcmpgtq (u64.2) (u64.2 u64.2) :cost 3 :encoding :sse)
(two-arg-u64.2> nil (u64.2) (u64.2 u64.2) :cost 3 :encoding :fake-vop)
(two-arg-u64.2>= nil (u64.2) (u64.2 u64.2) :cost 4 :encoding :fake-vop)
(two-arg-u64.2< nil (u64.2) (u64.2 u64.2) :cost 3 :encoding :fake-vop)
(two-arg-u64.2<= nil (u64.2) (u64.2 u64.2) :cost 4 :encoding :fake-vop)
;; s64.2
(two-arg-s64.2> #:pcmpgtq (u64.2) (s64.2 s64.2) :cost 3 :encoding :sse)
(two-arg-s64.2>= nil (u64.2) (s64.2 s64.2) :cost 4 :encoding :fake-vop)
(two-arg-s64.2< nil (u64.2) (s64.2 s64.2) :cost 3 :encoding :fake-vop)
(two-arg-s64.2<= nil (u64.2) (s64.2 s64.2) :cost 4 :encoding :fake-vop))
(:comparisons
(u64.2< two-arg-u64.2< u64.2-and +u64-true+)
(u64.2<= two-arg-u64.2<= u64.2-and +u64-true+)
(u64.2> two-arg-u64.2> u64.2-and +u64-true+)
(u64.2>= two-arg-u64.2>= u64.2-and +u64-true+)
(s64.2< two-arg-s64.2< u64.2-and +u64-true+)
(s64.2<= two-arg-s64.2<= u64.2-and +u64-true+)
(s64.2> two-arg-s64.2> u64.2-and +u64-true+)
(s64.2>= two-arg-s64.2>= u64.2-and +u64-true+)))