diff --git a/plugins/GSdx/CMakeLists.txt b/plugins/GSdx/CMakeLists.txt
index 1fe226758a..c7e4618be1 100644
--- a/plugins/GSdx/CMakeLists.txt
+++ b/plugins/GSdx/CMakeLists.txt
@@ -3,7 +3,7 @@ if(NOT TOP_CMAKE_WAS_SOURCED)
     message(FATAL_ERROR "
     You did not 'cmake' the good CMakeLists.txt file. Use the one in the top dir.
     It is advice to delete all wrongly generated cmake stuff => CMakeFiles & CMakeCache.txt")
-endif(NOT TOP_CMAKE_WAS_SOURCED)
+endif()
 
 
 # plugin name
@@ -27,28 +27,28 @@ set(OptimizationFlags
     )
 
 #Clang doesn't support a few common flags that GCC does.
-if(NOT USE_CLANG)
+if(NOT USE_CLANG AND _M_X86_32)
 	add_definitions(${CommonFlags} -mpreferred-stack-boundary=2)
-endif(NOT USE_CLANG)
+endif()
 
 # Debug - Build
 if(CMAKE_BUILD_TYPE STREQUAL Debug)
     add_definitions(${CommonFlags} -D_DEBUG -g -Wall)
-endif(CMAKE_BUILD_TYPE STREQUAL Debug)
+endif()
 
 # Devel - Build
 if(CMAKE_BUILD_TYPE STREQUAL Devel)
     add_definitions(${CommonFlags} ${OptimizationFlags} -D_DEVEL -g)
-endif(CMAKE_BUILD_TYPE STREQUAL Devel)
+endif()
 
 # Release - Build
 if(CMAKE_BUILD_TYPE STREQUAL Release)
     add_definitions(${CommonFlags} ${OptimizationFlags} -W)
-endif(CMAKE_BUILD_TYPE STREQUAL Release)
+endif()
 
 if(XDG_STD)
     add_definitions(-DXDG_STD)
-endif(XDG_STD)
+endif()
 
 if(GLES_API AND GLESV2_FOUND)
     add_definitions(-DENABLE_GLES)
diff --git a/plugins/GSdx/GPUDrawScanlineCodeGenerator.cpp b/plugins/GSdx/GPUDrawScanlineCodeGenerator.cpp
index f37c33b63d..c92e28d7c3 100644
--- a/plugins/GSdx/GPUDrawScanlineCodeGenerator.cpp
+++ b/plugins/GSdx/GPUDrawScanlineCodeGenerator.cpp
@@ -33,10 +33,6 @@ GPUDrawScanlineCodeGenerator::GPUDrawScanlineCodeGenerator(void* param, uint32 k
 	: GSCodeGenerator(code, maxsize)
 	, m_local(*(GPUScanlineLocalData*)param)
 {
-	#if _M_AMD64
-	//#error TODO
-	#endif
-
 	m_sel.key = key;
 
 	Generate();
diff --git a/plugins/GSdx/GPUSetupPrimCodeGenerator.cpp b/plugins/GSdx/GPUSetupPrimCodeGenerator.cpp
index c4cd4274f2..5367fc3a0b 100644
--- a/plugins/GSdx/GPUSetupPrimCodeGenerator.cpp
+++ b/plugins/GSdx/GPUSetupPrimCodeGenerator.cpp
@@ -36,10 +36,6 @@ GPUSetupPrimCodeGenerator::GPUSetupPrimCodeGenerator(void* param, uint32 key, vo
 	: GSCodeGenerator(code, maxsize)
 	, m_local(*(GPUScanlineLocalData*)param)
 {
-	#if _M_AMD64
-	//#error TODO
-	#endif
-
 	m_sel.key = key;
 
 	Generate();
diff --git a/plugins/GSdx/GS.cpp b/plugins/GSdx/GS.cpp
index 979820f37c..2f23f0903f 100644
--- a/plugins/GSdx/GS.cpp
+++ b/plugins/GSdx/GS.cpp
@@ -99,7 +99,7 @@ EXPORT_C_(void) PS2EsetEmuVersion(const char* emuId, uint32 version)
 
 EXPORT_C_(uint32) PS2EgetCpuPlatform()
 {
-#if _M_AMD64
+#ifdef _M_AMD64
 
 	return PS2E_X86_64;
 
diff --git a/plugins/GSdx/GSDrawScanlineCodeGenerator.x64.cpp b/plugins/GSdx/GSDrawScanlineCodeGenerator.x64.cpp
index 10c14de4d8..40631c1c9e 100644
--- a/plugins/GSdx/GSDrawScanlineCodeGenerator.x64.cpp
+++ b/plugins/GSdx/GSDrawScanlineCodeGenerator.x64.cpp
@@ -24,8 +24,6 @@
 
 #if _M_SSE < 0x500 && (defined(_M_AMD64) || defined(_WIN64))
 
-#error TODO
-
 void GSDrawScanlineCodeGenerator::Generate()
 {
 }
@@ -98,21 +96,21 @@ void GSDrawScanlineCodeGenerator::WriteFrame()
 {
 }
 
-void GSDrawScanlineCodeGenerator::ReadPixel(const Xmm& dst, const Reg32& addr)
+void GSDrawScanlineCodeGenerator::ReadPixel(const Xmm& dst, const Reg64& addr)
 {
 }
 
-void GSDrawScanlineCodeGenerator::WritePixel(const Xmm& src, const Reg32& addr, const Reg8& mask, bool fast, int psm, int fz)
+void GSDrawScanlineCodeGenerator::WritePixel(const Xmm& src, const Reg64& addr, const Reg8& mask, bool fast, int psm, int fz)
 {
 }
 
 static const int s_offsets[4] = {0, 2, 8, 10};
 
-void GSDrawScanlineCodeGenerator::WritePixel(const Xmm& src, const Reg32& addr, uint8 i, int psm)
+void GSDrawScanlineCodeGenerator::WritePixel(const Xmm& src, const Reg64& addr, uint8 i, int psm)
 {
 }
 
-void GSDrawScanlineCodeGenerator::ReadTexel(const Xmm& dst, const Xmm& addr, const Xmm& temp1, const Xmm& temp2)
+void GSDrawScanlineCodeGenerator::ReadTexel(int pixels, int mip_offset)
 {
 }
 
diff --git a/plugins/GSdx/GSSetupPrimCodeGenerator.x64.cpp b/plugins/GSdx/GSSetupPrimCodeGenerator.x64.cpp
index 15e6c21e50..6456ead387 100644
--- a/plugins/GSdx/GSSetupPrimCodeGenerator.x64.cpp
+++ b/plugins/GSdx/GSSetupPrimCodeGenerator.x64.cpp
@@ -36,7 +36,7 @@ void GSSetupPrimCodeGenerator::Generate()
 
 	mov(r8, (size_t)&m_local);
 
-	if((m_en.z || m_en.f) && !m_sel.sprite || m_en.t || m_en.c && m_sel.iip)
+	if((m_en.z || m_en.f) && m_sel.prim != GS_SPRITE_CLASS || m_en.t || m_en.c && m_sel.iip)
 	{
 		for(int i = 0; i < 5; i++)
 		{
@@ -65,7 +65,7 @@ void GSSetupPrimCodeGenerator::Depth()
 		return;
 	}
 
-	if(!m_sel.sprite)
+	if(m_sel.prim != GS_SPRITE_CLASS)
 	{
 		// GSVector4 p = dscan.p;
 
@@ -96,7 +96,9 @@ void GSSetupPrimCodeGenerator::Depth()
 				cvttps2dq(xmm2, xmm2);
 				pshuflw(xmm2, xmm2, _MM_SHUFFLE(2, 2, 0, 0));
 				pshufhw(xmm2, xmm2, _MM_SHUFFLE(2, 2, 0, 0));
-				movdqa(ptr[r8 + offsetof(GSScanlineLocalData, d[i].f)], xmm2);
+
+				const size_t variableOffset = offsetof(GSScanlineLocalData, d[0].f) + (i * sizeof(GSScanlineLocalData::d[0]));
+				movdqa(ptr[r8 + variableOffset], xmm2);
 			}
 		}
 
@@ -118,7 +120,9 @@ void GSSetupPrimCodeGenerator::Depth()
 
 				movaps(xmm1, xmm0);
 				mulps(xmm1, Xmm(4 + i));
-				movdqa(ptr[r8 + offsetof(GSScanlineLocalData, d[i].z)], xmm1);
+
+				const size_t variableOffset = offsetof(GSScanlineLocalData, d[0].z) + (i * sizeof(GSScanlineLocalData::d[0]));
+				movdqa(ptr[r8 + variableOffset], xmm1);
 			}
 		}
 	}
@@ -226,21 +230,28 @@ void GSSetupPrimCodeGenerator::Texture()
 
 				cvttps2dq(xmm2, xmm2);
 
+				const size_t variableOffsetS = offsetof(GSScanlineLocalData, d[0].s) + (i * sizeof(GSScanlineLocalData::d[0]));
+				const size_t variableOffsetT = offsetof(GSScanlineLocalData, d[0].t) + (i * sizeof(GSScanlineLocalData::d[0]));
+
 				switch(j)
 				{
-				case 0: movdqa(ptr[r8 + offsetof(GSScanlineLocalData, d[i].si)], xmm2); break;
-				case 1: movdqa(ptr[r8 + offsetof(GSScanlineLocalData, d[i].ti)], xmm2); break;
+				case 0: movdqa(ptr[r8 + variableOffsetS], xmm2); break;
+				case 1: movdqa(ptr[r8 + variableOffsetT], xmm2); break;
 				}
 			}
 			else
 			{
 				// m_local.d[i].s/t/q = v;
 
+				const size_t variableOffsetS = offsetof(GSScanlineLocalData, d[0].s) + (i * sizeof(GSScanlineLocalData::d[0]));
+				const size_t variableOffsetT = offsetof(GSScanlineLocalData, d[0].t) + (i * sizeof(GSScanlineLocalData::d[0]));
+				const size_t variableOffsetQ = offsetof(GSScanlineLocalData, d[0].q) + (i * sizeof(GSScanlineLocalData::d[0]));
+
 				switch(j)
 				{
-				case 0: movaps(ptr[r8 + offsetof(GSScanlineLocalData, d[i].s)], xmm2); break;
-				case 1: movaps(ptr[r8 + offsetof(GSScanlineLocalData, d[i].t)], xmm2); break;
-				case 2: movaps(ptr[r8 + offsetof(GSScanlineLocalData, d[i].q)], xmm2); break;
+				case 0: movaps(ptr[r8 + variableOffsetS], xmm2); break;
+				case 1: movaps(ptr[r8 + variableOffsetT], xmm2); break;
+				case 2: movaps(ptr[r8 + variableOffsetQ], xmm2); break;
 				}
 			}
 		}
@@ -297,7 +308,9 @@ void GSSetupPrimCodeGenerator::Color()
 			// m_local.d[i].rb = r.upl16(b);
 
 			punpcklwd(xmm2, xmm3);
-			movdqa(ptr[r8 + offsetof(GSScanlineLocalData, d[i].rb)], xmm2);
+
+			const size_t variableOffset = offsetof(GSScanlineLocalData, d[0].rb) + (i * sizeof(GSScanlineLocalData::d[0]));
+			movdqa(ptr[r8 + variableOffset], xmm2);
 		}
 
 		// GSVector4 c = dscan.c;
@@ -330,7 +343,9 @@ void GSSetupPrimCodeGenerator::Color()
 			// m_local.d[i].ga = g.upl16(a);
 
 			punpcklwd(xmm2, xmm3);
-			movdqa(ptr[r8 + offsetof(GSScanlineLocalData, d[i].ga)], xmm2);
+
+			const size_t variableOffset = offsetof(GSScanlineLocalData, d[0].ga) + (i * sizeof(GSScanlineLocalData::d[0]));
+			movdqa(ptr[r8 + variableOffset], xmm2);
 		}
 	}
 	else
@@ -362,4 +377,4 @@ void GSSetupPrimCodeGenerator::Color()
 	}
 }
 
-#endif
\ No newline at end of file
+#endif
diff --git a/plugins/GSdx/GSUtil.cpp b/plugins/GSdx/GSUtil.cpp
index 2210d0e0e4..533e51642a 100644
--- a/plugins/GSdx/GSUtil.cpp
+++ b/plugins/GSdx/GSUtil.cpp
@@ -46,7 +46,7 @@ const char* GSUtil::GetLibName()
 		if(SVN_MODS) str += "m";
 		#endif
 
-		#if _M_AMD64
+		#ifdef _M_AMD64
 		str += " 64-bit";
 		#endif