changeset 712:aebd2e3d6382

minor iasm fixes (floating points)
author thomask
date Sun, 23 Oct 2005 10:32:26 +0000
parents 5c3e15ed07b6
children 60009f2d4a3e
files run/a/asm_f2xm1_01.d run/a/asm_fabs_01.d run/a/asm_fadd_01_A.d run/a/asm_fadd_01_B.d run/a/asm_faddp_01.d run/a/asm_fbld_01.d run/a/asm_fbstp_01.d run/a/asm_fchs_01.d run/a/asm_fcom_01_A.d run/a/asm_fcom_01_B.d
diffstat 10 files changed, 210 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/run/a/asm_f2xm1_01.d	Sun Oct 23 10:31:14 2005 +0000
+++ b/run/a/asm_f2xm1_01.d	Sun Oct 23 10:32:26 2005 +0000
@@ -2,10 +2,15 @@
 // $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
 // $Author: thomask $
 
+// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+
 module dstress.run.a.asm_f2xm1_01;
+import addon.cpuinfo;
 
 int main(){
 	version(D_InlineAsm){
+		haveFPU();
+		
 		float f = -1.0f;
 		
 		asm{
--- a/run/a/asm_fabs_01.d	Sun Oct 23 10:31:14 2005 +0000
+++ b/run/a/asm_fabs_01.d	Sun Oct 23 10:32:26 2005 +0000
@@ -2,10 +2,15 @@
 // $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
 // $Author: thomask $
 
-module dstress.run.a.asm_fabs_01;
+// __DSTRESS_DFLAGS__ addon/cpuinfo.d
 
+module dstress.run.a.asm_fabs_01;
+import addon.cpuinfo;
+		
 int main(){
-	version(D_InlineAsm){
+	version(D_InlineAsm){	
+		haveFPU();
+	
 		float f = -1.0f;
 		
 		asm{
--- a/run/a/asm_fadd_01_A.d	Sun Oct 23 10:31:14 2005 +0000
+++ b/run/a/asm_fadd_01_A.d	Sun Oct 23 10:32:26 2005 +0000
@@ -2,10 +2,15 @@
 // $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
 // $Author: thomask $
 
+// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+
 module dstress.run.a.asm_fadd_01_A;
+import addon.cpuinfo;
 
 int main(){
 	version(D_InlineAsm){
+		haveFPU();
+		
 		float a = -1.0f;
 		float b = 3.5f;
 		
--- a/run/a/asm_fadd_01_B.d	Sun Oct 23 10:31:14 2005 +0000
+++ b/run/a/asm_fadd_01_B.d	Sun Oct 23 10:32:26 2005 +0000
@@ -2,10 +2,15 @@
 // $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
 // $Author: thomask $
 
+// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+
 module dstress.run.a.asm_fadd_01_B;
+import addon.cpuinfo;
 
 int main(){
 	version(D_InlineAsm){
+		haveFPU();
+		
 		double a = -1.0f;
 		double b = 3.5f;
 		
--- a/run/a/asm_faddp_01.d	Sun Oct 23 10:31:14 2005 +0000
+++ b/run/a/asm_faddp_01.d	Sun Oct 23 10:32:26 2005 +0000
@@ -2,10 +2,15 @@
 // $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
 // $Author: thomask $
 
+// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+
 module dstress.run.a.asm_faddp_01;
+import addon.cpuinfo;
 
 int main(){
 	version(D_InlineAsm){
+		haveFPU();
+		
 		double a = -1.0f;
 		double b = 3.5f;
 		
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_fbld_01.d	Sun Oct 23 10:32:26 2005 +0000
@@ -0,0 +1,45 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+
+module dstress.run.a.asm_fbld_01;
+import addon.cpuinfo;
+		
+int main(){
+	version(D_InlineAsm){	
+		haveFPU();
+	
+		byte[10] raw;
+		
+		raw[0] = 1 | (2 << 4);
+		raw[1] = 3 | (4 << 4);
+		raw[2] = 5 | (6 << 4);
+		raw[3] = 0;
+		raw[4] = 0;
+		raw[5] = 0;
+		raw[6] = 0;
+		raw[7] = 0;
+		raw[8] = 0;
+		raw[9] = 0;
+		
+		real r = 17;
+		
+		asm{
+			fbld raw;
+			fstp r;
+		}
+		
+		r -= 654321.0;
+		
+		r = (r<0) ? (-r) : r;
+		
+		assert(r < r.epsilon * 4);
+		
+		return 0;
+	}else{
+		pragma(msg, "no Inline asm support");
+		static assert(0);
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_fbstp_01.d	Sun Oct 23 10:32:26 2005 +0000
@@ -0,0 +1,39 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+
+module dstress.run.a.asm_fbstp_01;
+import addon.cpuinfo;
+		
+int main(){
+	version(D_InlineAsm){	
+		haveFPU();
+	
+		byte[10] raw;
+		
+		real r = 654321.0L;
+		
+		asm{
+			fld r;
+			fbstp raw;
+		}
+		
+		assert(raw[0] == 1 | (2 << 4));
+		assert(raw[1] == 3 | (4 << 4));
+		assert(raw[2] == 5 | (6 << 4));
+		assert(raw[3] == 0);
+		assert(raw[4] == 0);
+		assert(raw[5] == 0);
+		assert(raw[6] == 0);
+		assert(raw[7] == 0);
+		assert(raw[8] == 0);
+		assert(raw[9] == 0);
+		
+		return 0;
+	}else{
+		pragma(msg, "no Inline asm support");
+		static assert(0);
+	}
+}
\ No newline at end of file
--- a/run/a/asm_fchs_01.d	Sun Oct 23 10:31:14 2005 +0000
+++ b/run/a/asm_fchs_01.d	Sun Oct 23 10:32:26 2005 +0000
@@ -2,10 +2,15 @@
 // $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
 // $Author: thomask $
 
+// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+
 module dstress.run.a.asm_fchs_01;
+import addon.cpuinfo;
 
 int main(){
 	version(D_InlineAsm){
+		haveFPU();
+		
 		real a = -1.2L;
 		
 		asm{
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_fcom_01_A.d	Sun Oct 23 10:32:26 2005 +0000
@@ -0,0 +1,46 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_adc_01_A.d $
+// $Date: 2005-08-24 00:23:55 +0200 (Wed, 24 Aug 2005) $
+// $Author: thomask $
+
+// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+
+module dstress.run.a.asm_fcom_01_A;
+import addon.cpuinfo;
+
+int main(){
+	version(D_InlineAsm){
+		haveFPU();
+		
+		float f1, f2;
+		ushort s;
+				
+		asm{
+			fldz;
+			fldz;
+			fld1;
+			fldz;
+			fcom;
+			fstsw s;
+			fstp f1;
+			fstp f2;
+		}
+
+		assert(f1 == 0.0);
+		assert(f2 == 1.0);
+		
+		ushort C0 = 1 << 8;
+		ushort C1 = 1 << 9;
+		ushort C2 = 1 << 10;
+		ushort C3 = 1 << 14;
+		
+		assert(s & C0);
+		assert(!(s & C1));
+		assert(!(s & C2));
+		assert(!(s & C3));
+		
+		return 0;
+	}else{
+		pragma(msg, "no Inline asm support");
+		static assert(0);
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_fcom_01_B.d	Sun Oct 23 10:32:26 2005 +0000
@@ -0,0 +1,48 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_adc_01_A.d $
+// $Date: 2005-08-24 00:23:55 +0200 (Wed, 24 Aug 2005) $
+// $Author: thomask $
+
+// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+
+module dstress.run.a.asm_fcom_01_B;
+import addon.cpuinfo;
+
+int main(){
+	version(D_InlineAsm){
+		haveFPU();
+		
+		float f1, f2;
+		f1 = 0.0;
+		
+		ushort s;
+				
+		asm{
+			fldz;
+			fldz;
+			fld1;
+			fldz;
+			fcom ST(1);
+			fstsw s;
+			fstp f1;
+			fstp f2;
+		}
+
+		assert(f1 == 0.0);
+		assert(f2 == 1.0);
+
+		ushort C0 = 1 << 8;
+		ushort C1 = 1 << 9;
+		ushort C2 = 1 << 10;
+		ushort C3 = 1 << 14;
+		
+		assert(s & C0);
+		assert(!(s & C1));
+		assert(!(s & C2));
+		assert(!(s & C3));
+				
+		return 0;
+	}else{
+		pragma(msg, "no Inline asm support");
+		static assert(0);
+	}
+}
\ No newline at end of file