llvm-extra-0.7.3: Utility functions for the llvm interface

Safe HaskellNone

LLVM.Extra.Extension.X86

Description

Some special operations on X86 processors. If you want to use them in algorithms you will always have to prepare an alternative implementation in terms of plain LLVM instructions. You will then run them with run and this driver function then selects the most advanced of both implementations. Functions that are written this way can be found in LLVM.Extra.Vector. Availability of extensions is checked with the CPUID instruction. However this does only work if you compile code for the host machine, that is cross compilation will fail! For cross compilation we would need access to the SubTarget detection of LLVM that is only available in the C++ interface in version 2.6.

Synopsis

Documentation

maxss :: T (V4Float -> V4Float -> CodeGenFunction r V4Float)Source

minss :: T (V4Float -> V4Float -> CodeGenFunction r V4Float)Source

maxps :: T (V4Float -> V4Float -> CodeGenFunction r V4Float)Source

minps :: T (V4Float -> V4Float -> CodeGenFunction r V4Float)Source

maxsd :: T (V2Double -> V2Double -> CodeGenFunction r V2Double)Source

minsd :: T (V2Double -> V2Double -> CodeGenFunction r V2Double)Source

maxpd :: T (V2Double -> V2Double -> CodeGenFunction r V2Double)Source

minpd :: T (V2Double -> V2Double -> CodeGenFunction r V2Double)Source

cmpss :: T (FPPredicate -> V4Float -> V4Float -> CodeGenFunction r V4Int32)Source

cmpps :: T (FPPredicate -> V4Float -> V4Float -> CodeGenFunction r V4Int32)Source

cmpsd :: T (FPPredicate -> V2Double -> V2Double -> CodeGenFunction r V2Int64)Source

cmppd :: T (FPPredicate -> V2Double -> V2Double -> CodeGenFunction r V2Int64)Source

cmpps256 :: T (FPPredicate -> V8Float -> V8Float -> CodeGenFunction r V8Int32)Source

cmppd256 :: T (FPPredicate -> V4Double -> V4Double -> CodeGenFunction r V4Int64)Source

pcmpgtb :: T (V16Int8 -> V16Int8 -> CodeGenFunction r V16Int8)Source

pcmpgtw :: T (V8Int16 -> V8Int16 -> CodeGenFunction r V8Int16)Source

pcmpgtd :: T (V4Int32 -> V4Int32 -> CodeGenFunction r V4Int32)Source

pcmpgtq :: T (V2Int64 -> V2Int64 -> CodeGenFunction r V2Int64)Source

pcmpugtb :: T (V16Word8 -> V16Word8 -> CodeGenFunction r V16Word8)Source

pcmpugtw :: T (V8Word16 -> V8Word16 -> CodeGenFunction r V8Word16)Source

pcmpugtd :: T (V4Word32 -> V4Word32 -> CodeGenFunction r V4Word32)Source

pcmpugtq :: T (V2Word64 -> V2Word64 -> CodeGenFunction r V2Word64)Source

pminsb :: T (V16Int8 -> V16Int8 -> CodeGenFunction r V16Int8)Source

pminsw :: T (V8Int16 -> V8Int16 -> CodeGenFunction r V8Int16)Source

pminsd :: T (V4Int32 -> V4Int32 -> CodeGenFunction r V4Int32)Source

pmaxsb :: T (V16Int8 -> V16Int8 -> CodeGenFunction r V16Int8)Source

pmaxsw :: T (V8Int16 -> V8Int16 -> CodeGenFunction r V8Int16)Source

pmaxsd :: T (V4Int32 -> V4Int32 -> CodeGenFunction r V4Int32)Source

pminub :: T (V16Word8 -> V16Word8 -> CodeGenFunction r V16Word8)Source

pminuw :: T (V8Word16 -> V8Word16 -> CodeGenFunction r V8Word16)Source

pminud :: T (V4Word32 -> V4Word32 -> CodeGenFunction r V4Word32)Source

pmaxub :: T (V16Word8 -> V16Word8 -> CodeGenFunction r V16Word8)Source

pmaxuw :: T (V8Word16 -> V8Word16 -> CodeGenFunction r V8Word16)Source

pmaxud :: T (V4Word32 -> V4Word32 -> CodeGenFunction r V4Word32)Source

pabsb :: T (V16Int8 -> CodeGenFunction r V16Int8)Source

pabsw :: T (V8Int16 -> CodeGenFunction r V8Int16)Source

pabsd :: T (V4Int32 -> CodeGenFunction r V4Int32)Source

pmuludq :: T (V4Word32 -> V4Word32 -> CodeGenFunction r V2Word64)Source

pmuldq :: T (V4Int32 -> V4Int32 -> CodeGenFunction r V2Int64)Source

pmulld :: T (V4Word32 -> V4Word32 -> CodeGenFunction r V4Word32)Source

cvtps2dq :: T (V4Float -> CodeGenFunction r V4Int32)Source

cvtpd2dq :: T (V2Double -> CodeGenFunction r V4Int32)Source

the upper two integers are set to zero, there is no instruction that converts to Int64

cvtdq2ps :: T (V4Int32 -> CodeGenFunction r V4Float)Source

cvtdq2pd :: T (V4Int32 -> CodeGenFunction r V2Double)Source

the upper two integers are ignored, there is no instruction that converts from Int64

ldmxcsr :: T (Value (Ptr Word32) -> CodeGenFunction r ())Source

MXCSR is not really supported by LLVM-2.6. LLVM does not know about the dependency of all floating point operations on this status register.

stmxcsr :: T (Value (Ptr Word32) -> CodeGenFunction r ())Source

withMXCSR :: Word32 -> T (CodeGenFunction r a -> CodeGenFunction r a)Source

haddps :: T (V4Float -> V4Float -> CodeGenFunction r V4Float)Source

haddpd :: T (V2Double -> V2Double -> CodeGenFunction r V2Double)Source

dpps :: T (V4Float -> V4Float -> Value Int8 -> CodeGenFunction r V4Float)Source

dppd :: T (V2Double -> V2Double -> Value Int8 -> CodeGenFunction r V2Double)Source

roundss :: T (V4Float -> Value Word32 -> CodeGenFunction r V4Float)Source

roundps :: T (V4Float -> Value Word32 -> CodeGenFunction r V4Float)Source

roundsd :: T (V2Double -> Value Word32 -> CodeGenFunction r V2Double)Source

roundpd :: T (V2Double -> Value Word32 -> CodeGenFunction r V2Double)Source

absss :: T (V4Float -> CodeGenFunction r V4Float)Source

abssd :: T (V2Double -> CodeGenFunction r V2Double)Source

absps :: Positive n => T (Value (Vector n Float) -> CodeGenFunction r (Value (Vector n Float)))Source

abspd :: Positive n => T (Value (Vector n Double) -> CodeGenFunction r (Value (Vector n Double)))Source