diff dmd/backend/iasm.d @ 20:1628b221808d

Fleshed out more unimplemented methods.
author Robert Clipsham <robert@octarineparrot.com>
date Wed, 07 Apr 2010 00:29:13 +0100
parents 2cc604139636
children fd4acc376c45
line wrap: on
line diff
--- a/dmd/backend/iasm.d	Tue Apr 06 02:21:04 2010 +0100
+++ b/dmd/backend/iasm.d	Wed Apr 07 00:29:13 2010 +0100
@@ -1035,10 +1035,12 @@
 			}
 			else
 			{	
-				asm_make_modrm_byte(
-///debug {
+				debug asm_make_modrm_byte(
 				auchOpcode, &usIdx,
-///}
+				pc, 
+				ptb.pptb1.usFlags,
+				popnd1, null);
+				else asm_make_modrm_byte(
 				pc, 
 				ptb.pptb1.usFlags,
 				popnd1, null);
@@ -1128,23 +1130,21 @@
 					ptb.pptb0.usOpcode == 0x660F7E	// MOVD _rm32,_xmm
 				   )
 				{
-					asm_make_modrm_byte(
-///debug {
-					auchOpcode, &usIdx,
-///}
-					pc, 
-					ptb.pptb1.usFlags,
-					popnd1, popnd2);
+					debug asm_make_modrm_byte(
+						auchOpcode, &usIdx,
+						pc, 
+						ptb.pptb1.usFlags,
+						popnd1, popnd2);
+					else asm_make_modrm_byte(pc, ptb.pptb1.usFlags, popnd1, popnd2);
 				}
 				else
 				{
-					asm_make_modrm_byte(
-///debug {
-					auchOpcode, &usIdx,
-///}
-					pc, 
-					ptb.pptb1.usFlags,
-					popnd2, popnd1);
+					debug asm_make_modrm_byte(
+						auchOpcode, &usIdx,
+						pc, 
+						ptb.pptb1.usFlags,
+						popnd2, popnd1);
+					else asm_make_modrm_byte(pc, ptb.pptb1.usFlags, popnd2, popnd1);
 				}
 				popndTmp = popnd1;
 				aoptyTmp = aoptyTable1;
@@ -1188,23 +1188,31 @@
 					 ptb.pptb0.usOpcode == 0x660FD7 ||
 					 ptb.pptb0.usOpcode == 0x0FD7)
 				{
-					asm_make_modrm_byte(
+					debug asm_make_modrm_byte(
 ///debug {
 						auchOpcode, &usIdx,
 ///}
 						pc, 
 						ptb.pptb1.usFlags,
 						popnd2, popnd1);
+					else asm_make_modrm_byte(
+						pc, 
+						ptb.pptb1.usFlags,
+						popnd2, popnd1); 
 				}
 				else
 				{
-					asm_make_modrm_byte(
+					debug asm_make_modrm_byte(
 ///debug {
 						auchOpcode, &usIdx,
 ///}
 						pc, 
 						ptb.pptb1.usFlags,
 						popnd1, popnd2);
+					else asm_make_modrm_byte(
+						pc, 
+						ptb.pptb1.usFlags,
+						popnd1, popnd2); 
 
 				}
 				if (aoptyTable1 == ASM_OPERAND_TYPE._imm)
@@ -1226,13 +1234,17 @@
 			if (aoptyTable2 == ASM_OPERAND_TYPE._m || aoptyTable2 == ASM_OPERAND_TYPE._rm ||
 				usOpcode == 0x0FC5) // PEXTRW
 			{
-				asm_make_modrm_byte(
+				debug asm_make_modrm_byte(
 ///debug {
 					auchOpcode, &usIdx,
 ///}
 					pc, 
 					ptb.pptb1.usFlags,
 					popnd2, popnd1);
+				else asm_make_modrm_byte(
+					pc, 
+					ptb.pptb1.usFlags,
+					popnd2, popnd1); 
 				popndTmp = popnd3;
 				aoptyTmp = aoptyTable3;
 				uSizemaskTmp = cast(ushort)uSizemaskTable3;
@@ -1266,14 +1278,19 @@
 }
 				}
 				else
-					asm_make_modrm_byte(
+				{
+					debug asm_make_modrm_byte(
 ///debug {
 						auchOpcode, &usIdx,
 ///}
 						pc, 
 						ptb.pptb1.usFlags,
 						popnd1, popnd2);
-
+					else asm_make_modrm_byte(
+						pc, 
+						ptb.pptb1.usFlags,
+						popnd1, popnd2); 
+				}
 				popndTmp = popnd3;
 				aoptyTmp = aoptyTable3;
 				uSizemaskTmp = cast(ushort)uSizemaskTable3;
@@ -2230,16 +2247,16 @@
 	return X(r1, 9);
 }
 
-void asm_make_modrm_byte(
-///debug {
-	ubyte[] puchOpcode, uint* pusIdx,
-///}
-	code *pc,
-	ushort usFlags,
-	OPND *popnd, OPND *popnd2)
+// Save a copy/pasted function
+template Tuple(T...) { alias T Tuple; }
+debug alias Tuple!(ubyte[], uint*) asm_make_modrm_args;
+else alias Tuple!() asm_make_modrm_args;
+
+void asm_make_modrm_byte(asm_make_modrm_args ocidx, code *pc, ushort usFlags, OPND *popnd, OPND *popnd2)
 {
 ///    #undef modregrm
-
+debug alias ocidx[0] puchOpcode;
+debug alias ocidx[1] pusIdx;
     union MODRM_BYTE			// mrmb
 	{
 		struct MODRM