diff --git a/llvm-extra.cabal b/llvm-extra.cabal
--- a/llvm-extra.cabal
+++ b/llvm-extra.cabal
@@ -1,5 +1,5 @@
 Name:           llvm-extra
-Version:        0.8.2
+Version:        0.8.3
 License:        BSD3
 License-File:   LICENSE
 Author:         Henning Thielemann <haskell@henning-thielemann.de>
@@ -76,7 +76,7 @@
   default:     True
 
 Source-Repository this
-  Tag:         0.8.2
+  Tag:         0.8.3
   Type:        darcs
   Location:    http://code.haskell.org/~thielema/llvm-extra/
 
diff --git a/src/Array.hs b/src/Array.hs
--- a/src/Array.hs
+++ b/src/Array.hs
@@ -111,6 +111,16 @@
     A.mul (valueOf 0.25) =<< add s0 s1
 -}
 
+mixScalar :: Value (Vector D4 Float) -> CodeGenFunction r (Value Float)
+mixScalar y = do
+    y0 <- extractelement y (valueOf 0)
+    y1 <- extractelement y (valueOf 1)
+    y2 <- extractelement y (valueOf 2)
+    y3 <- extractelement y (valueOf 3)
+    s0 <- A.add y0 y1
+    s1 <- A.add y2 y3
+    A.mul (valueOf 0.25) =<< A.add s0 s1
+
 {-
 Here we do use consistently Vectors of size 4.
 Since we declare the upper floats as undefined
@@ -133,8 +143,8 @@
 -}
 mixHorizontal :: Value (Vector D4 Float) -> CodeGenFunction r (Value Float)
 mixHorizontal y = do
-    z <- Ext.runUnsafe X86.haddps (value undef) y
-    s <- Ext.runUnsafe X86.haddps (value undef) z
+    z <- Ext.runUnsafe X86.haddps y (value undef)
+    s <- Ext.runUnsafe X86.haddps z (value undef)
     A.mul (valueOf 0.25) =<< extractelement s (valueOf 0)
 
 {-
