changeset 1289:ad4d84aba69b

partial inline asm review
author thomask
date Wed, 27 Dec 2006 11:59:35 +0000
parents 61d7e32e70a8
children e3d0dea394ab
files run/a/asm_pi2fd_01_A.d run/a/asm_pi2fd_01_B.d run/a/asm_pinsrw_01_C.d run/a/asm_pinsrw_01_D.d
diffstat 4 files changed, 50 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/run/a/asm_pi2fd_01_A.d	Wed Dec 27 11:59:19 2006 +0000
+++ b/run/a/asm_pi2fd_01_A.d	Wed Dec 27 11:59:35 2006 +0000
@@ -16,17 +16,32 @@
 	int main(){
 		have3DNow!()();
 
-		int[] a = new int[2];
+		int* a = (new int[2]).ptr;
 		a[0] = 6;
 		a[1] = 2;
 
-		float[] b = new float[2];
+		float* b = (new float[2]).ptr;
 
-		asm{
-			movq MM1, a;
-			pi2fd MM0, MM1;
-			movq b, MM0;
-			emms;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movq MM1, [EAX];
+				pi2fd MM0, MM1;
+				mov EAX, b;
+				movq [EAX], MM0;
+				emms;
+			}
+		}else static if(size_t.sizeof == 8){
+			asm{
+				mov RAX, a;
+				movq MM1, [RAX];
+				pi2fd MM0, MM1;
+				mov RAX, b;
+				movq [RAX], MM0;
+				emms;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(b[0] != 6.0f){
--- a/run/a/asm_pi2fd_01_B.d	Wed Dec 27 11:59:19 2006 +0000
+++ b/run/a/asm_pi2fd_01_B.d	Wed Dec 27 11:59:35 2006 +0000
@@ -16,16 +16,30 @@
 	int main(){
 		have3DNow!()();
 
-		int[] a = new int[2];
+		int* a = (new int[2]).ptr;
 		a[0] = 6;
 		a[1] = 2;
 
-		float[] b = new float[2];
+		float* b = (new float[2]).ptr;
 
-		asm{
-			pi2fd MM0, a;
-			movq b, MM0;
-			emms;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				pi2fd MM0, [EAX];
+				mov EAX, b;
+				movq [EAX], MM0;
+				emms;
+			}
+		}else static if(size_t.sizeof == 8){
+			asm{
+				mov RAX, a;
+				pi2fd MM0, [RAX];
+				mov RAX, b;
+				movq [RAX], MM0;
+				emms;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(b[0] != 6.0f){
--- a/run/a/asm_pinsrw_01_C.d	Wed Dec 27 11:59:19 2006 +0000
+++ b/run/a/asm_pinsrw_01_C.d	Wed Dec 27 11:59:35 2006 +0000
@@ -16,8 +16,10 @@
 	int main(){
 		haveSSE!()();
 
-		ushort* a = [cast(ushort)1, 2, 3, 4, 5, 0xFFFF, 7, 0];
-		ushort* b = new ushort[8];
+		ushort[] A  = [cast(ushort)1, 2, 3, 4, 5, 0xFFFF, 7, 0];
+		ushort* a = A.ptr;
+
+		ushort* b = (new ushort[8]).ptr;
 
 		static if(size_t.sizeof == 4){
 			asm{
--- a/run/a/asm_pinsrw_01_D.d	Wed Dec 27 11:59:19 2006 +0000
+++ b/run/a/asm_pinsrw_01_D.d	Wed Dec 27 11:59:35 2006 +0000
@@ -16,8 +16,10 @@
 	int main(){
 		haveSSE!()();
 
-		ushort* a = [cast(ushort)1, 2, 3, 4, 5, 0xFFFF, 7, 0];
-		ushort* b = new ushort[8];
+		ushort[] A = [cast(ushort)1, 2, 3, 4, 5, 0xFFFF, 7, 0];
+		ushort* a = A.ptr;
+
+		ushort* b = (new ushort[8]).ptr;
 
 		ushort x = 0x34CD;
 		ushort y = 0x0010;