2
0
Эх сурвалжийг харах

Simplified inline assembly code variations

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8176 8c9fc860-2736-0410-a75d-ab315db34111
negelef 7 жил өмнө
parent
commit
b0e64d5776

+ 14 - 16
source/Unix.IP.Mod

@@ -615,25 +615,23 @@ VAR
 
 	(* Swap internal representation of an IP address from big to little endian or vice versa. *)
 	PROCEDURE  -SwapEndian(  VAR adr: LONGINT );
+	CODE
 	#IF I386 THEN
-		CODE
-			POP EAX
-			MOV ECX, [EAX]
-			XCHG CL, CH
-			ROL ECX, 16
-			XCHG CL, CH
-			MOV [EAX], ECX
+		POP EAX
+		MOV ECX, [EAX]
+		XCHG CL, CH
+		ROL ECX, 16
+		XCHG CL, CH
+		MOV [EAX], ECX
 	#ELSIF AMD64 THEN
-		CODE
-			POP RAX
-			MOV ECX, [RAX]
-			XCHG CL, CH
-			ROL ECX, 16
-			XCHG CL, CH
-			MOV [RAX], ECX
+		POP RAX
+		MOV ECX, [RAX]
+		XCHG CL, CH
+		ROL ECX, 16
+		XCHG CL, CH
+		MOV [RAX], ECX
 	#ELSE
-		BEGIN
-			ASSERT (FALSE);
+		unimplemented
 	#END
 	END SwapEndian;
 

+ 14 - 16
source/Windows.IP.Mod

@@ -458,25 +458,23 @@ END Init;
 
 (* Swap internal representation of an IP address from big to little endian or vice versa. *)
 PROCEDURE -SwapEndian(VAR adr: LONGINT);
+CODE
 #IF I386 THEN
-	CODE
-		POP EAX
-		MOV ECX, [EAX]
-		XCHG CL, CH
-		ROL ECX, 16
-		XCHG CL, CH
-		MOV [EAX], ECX
+	POP EAX
+	MOV ECX, [EAX]
+	XCHG CL, CH
+	ROL ECX, 16
+	XCHG CL, CH
+	MOV [EAX], ECX
 #ELSIF AMD64 THEN
-	CODE
-		POP RAX
-		MOV ECX, [RAX]
-		XCHG CL, CH
-		ROL ECX, 16
-		XCHG CL, CH
-		MOV [RAX], ECX
+	POP RAX
+	MOV ECX, [RAX]
+	XCHG CL, CH
+	ROL ECX, 16
+	XCHG CL, CH
+	MOV [RAX], ECX
 #ELSE
-	BEGIN
-		ASSERT (FALSE);
+	unimplemented
 #END
 END SwapEndian;
 

+ 92 - 108
source/Windows.Network.Mod

@@ -483,180 +483,164 @@ END Equal;
 (** Put a 32-bit host value into buf[ofs..ofs+3] *)
 
 PROCEDURE Put4*(VAR buf: ARRAY OF CHAR; ofs, val: LONGINT);
+CODE
 #IF I386 THEN
-	CODE
-		MOV EAX, [EBP+val]
-		MOV EBX, [EBP+ofs]
-		MOV ECX, [EBP+buf]
-		MOV [ECX+EBX], EAX
+	MOV EAX, [EBP+val]
+	MOV EBX, [EBP+ofs]
+	MOV ECX, [EBP+buf]
+	MOV [ECX+EBX], EAX
 #ELSIF AMD64 THEN
-	CODE
-		MOV EAX, [RBP+val]
-		MOV EBX, [RBP+ofs]
-		MOV RCX, [RBP+buf]
-		MOV [RCX+RBX], EAX
+	MOV EAX, [RBP+val]
+	MOV EBX, [RBP+ofs]
+	MOV RCX, [RBP+buf]
+	MOV [RCX+RBX], EAX
 #ELSE
-	BEGIN
-		ASSERT (FALSE);
+	unimplemented
 #END
 END Put4;
 
 (** Put a 16-bit host value into buf[ofs..ofs+1] *)
 
 PROCEDURE Put2*(VAR buf: ARRAY OF CHAR; ofs, val: LONGINT);
+CODE
 #IF I386 THEN
-	CODE
-		MOV EAX, [EBP+val]
-		MOV EBX, [EBP+ofs]
-		MOV ECX, [EBP+buf]
-		MOV [ECX+EBX], AX
+	MOV EAX, [EBP+val]
+	MOV EBX, [EBP+ofs]
+	MOV ECX, [EBP+buf]
+	MOV [ECX+EBX], AX
 #ELSIF AMD64 THEN
-	CODE
-		MOV EAX, [RBP+val]
-		MOV EBX, [RBP+ofs]
-		MOV RCX, [RBP+buf]
-		MOV [RCX+RBX], AX
+	MOV EAX, [RBP+val]
+	MOV EBX, [RBP+ofs]
+	MOV RCX, [RBP+buf]
+	MOV [RCX+RBX], AX
 #ELSE
-	BEGIN
-		ASSERT (FALSE);
+	unimplemented
 #END
 END Put2;
 
 (** Get a 32-bit host value from buf[ofs..ofs+3] *)
 
 PROCEDURE Get4*(CONST buf: ARRAY OF CHAR; ofs: LONGINT): LONGINT;
+CODE
 #IF I386 THEN
-	CODE
-		MOV EBX, [EBP+ofs]
-		MOV ECX, [EBP+buf]
-		MOV EAX, [ECX+EBX]
+	MOV EBX, [EBP+ofs]
+	MOV ECX, [EBP+buf]
+	MOV EAX, [ECX+EBX]
 #ELSIF AMD64 THEN
-	CODE
-		MOV EBX, [RBP+ofs]
-		MOV RCX, [RBP+buf]
-		MOV EAX, [RCX+RBX]
+	MOV EBX, [RBP+ofs]
+	MOV RCX, [RBP+buf]
+	MOV EAX, [RCX+RBX]
 #ELSE
-	BEGIN
-		ASSERT (FALSE);
+	unimplemented
 #END
 END Get4;
 
 (** Get a 16-bit host value from buf[ofs..ofs+1] *)
 
 PROCEDURE Get2*(CONST buf: ARRAY OF CHAR; ofs: LONGINT): LONGINT;
+CODE
 #IF I386 THEN
-	CODE
-		MOV EBX, [EBP+ofs]
-		MOV ECX, [EBP+buf]
-		XOR EAX, EAX
-		MOV AX, [ECX+EBX]
+	MOV EBX, [EBP+ofs]
+	MOV ECX, [EBP+buf]
+	XOR EAX, EAX
+	MOV AX, [ECX+EBX]
 #ELSIF AMD64 THEN
-	CODE
-		MOV EBX, [RBP+ofs]
-		MOV RCX, [RBP+buf]
-		XOR EAX, EAX
-		MOV AX, [RCX+RBX]
+	MOV EBX, [RBP+ofs]
+	MOV RCX, [RBP+buf]
+	XOR EAX, EAX
+	MOV AX, [RCX+RBX]
 #ELSE
-	BEGIN
-		ASSERT (FALSE);
+	unimplemented
 #END
 END Get2;
 
 (** Put a 32-bit host value into buf[ofs..ofs+3] in network byte order *)
 
 PROCEDURE PutNet4*(VAR buf: ARRAY OF CHAR; ofs, val: LONGINT);
+CODE
 #IF I386 THEN
-	CODE
-		MOV EAX, [EBP+val]
-		XCHG AL, AH
-		ROL EAX, 16
-		XCHG AL, AH
-		MOV EBX, [EBP+ofs]
-		MOV ECX, [EBP+buf]
-		MOV [ECX+EBX], EAX
+	MOV EAX, [EBP+val]
+	XCHG AL, AH
+	ROL EAX, 16
+	XCHG AL, AH
+	MOV EBX, [EBP+ofs]
+	MOV ECX, [EBP+buf]
+	MOV [ECX+EBX], EAX
 #ELSIF AMD64 THEN
-	CODE
-		MOV EAX, [RBP+val]
-		XCHG AL, AH
-		ROL EAX, 16
-		XCHG AL, AH
-		MOV EBX, [RBP+ofs]
-		MOV RCX, [RBP+buf]
-		MOV [RCX+RBX], EAX
+	MOV EAX, [RBP+val]
+	XCHG AL, AH
+	ROL EAX, 16
+	XCHG AL, AH
+	MOV EBX, [RBP+ofs]
+	MOV RCX, [RBP+buf]
+	MOV [RCX+RBX], EAX
 #ELSE
-	BEGIN
-		ASSERT (FALSE);
+	unimplemented
 #END
 END PutNet4;
 
 (** Put a 16-bit host value into buf[ofs..ofs+1] in network byte order *)
 
 PROCEDURE PutNet2*(VAR buf: ARRAY OF CHAR; ofs, val: LONGINT);
+CODE
 #IF I386 THEN
-	CODE
-		MOV EAX, [EBP+val]
-		XCHG AL, AH
-		MOV EBX, [EBP+ofs]
-		MOV ECX, [EBP+buf]
-		MOV [ECX+EBX], AX
+	MOV EAX, [EBP+val]
+	XCHG AL, AH
+	MOV EBX, [EBP+ofs]
+	MOV ECX, [EBP+buf]
+	MOV [ECX+EBX], AX
 #ELSIF AMD64 THEN
-	CODE
-		MOV EAX, [RBP+val]
-		XCHG AL, AH
-		MOV EBX, [RBP+ofs]
-		MOV RCX, [RBP+buf]
-		MOV [RCX+RBX], AX
+	MOV EAX, [RBP+val]
+	XCHG AL, AH
+	MOV EBX, [RBP+ofs]
+	MOV RCX, [RBP+buf]
+	MOV [RCX+RBX], AX
 #ELSE
-	BEGIN
-		ASSERT (FALSE);
+	unimplemented
 #END
 END PutNet2;
 
 (** Get a 32-bit network value from buf[ofs..ofs+3] in host byte order *)
 
 PROCEDURE GetNet4*(CONST buf: ARRAY OF CHAR; ofs: LONGINT): LONGINT;
+CODE
 #IF I386 THEN
-	CODE
-		MOV EBX, [EBP+ofs]
-		MOV ECX, [EBP+buf]
-		MOV EAX, [ECX+EBX]
-		XCHG AL, AH
-		ROL EAX, 16
-		XCHG AL, AH
+	MOV EBX, [EBP+ofs]
+	MOV ECX, [EBP+buf]
+	MOV EAX, [ECX+EBX]
+	XCHG AL, AH
+	ROL EAX, 16
+	XCHG AL, AH
 #ELSIF AMD64 THEN
-	CODE
-		MOV EBX, [RBP+ofs]
-		MOV RCX, [RBP+buf]
-		MOV EAX, [RCX+EBX]
-		XCHG AL, AH
-		ROL EAX, 16
-		XCHG AL, AH
+	MOV EBX, [RBP+ofs]
+	MOV RCX, [RBP+buf]
+	MOV EAX, [RCX+EBX]
+	XCHG AL, AH
+	ROL EAX, 16
+	XCHG AL, AH
 #ELSE
-	BEGIN
-		ASSERT (FALSE);
+	unimplemented
 #END
 END GetNet4;
 
 (** Get a 16-bit network value from buf[ofs..ofs+1] in host byte order *)
 
 PROCEDURE GetNet2*(CONST buf: ARRAY OF CHAR; ofs: LONGINT): LONGINT;
+CODE
 #IF I386 THEN
-	CODE
-		MOV EBX, [EBP+ofs]
-		MOV ECX, [EBP+buf]
-		XOR EAX, EAX
-		MOV AX, [ECX+EBX]
-		XCHG AL, AH
+	MOV EBX, [EBP+ofs]
+	MOV ECX, [EBP+buf]
+	XOR EAX, EAX
+	MOV AX, [ECX+EBX]
+	XCHG AL, AH
 #ELSIF AMD64 THEN
-	CODE
-		MOV EBX, [RBP+ofs]
-		MOV RCX, [RBP+buf]
-		XOR EAX, EAX
-		MOV AX, [RCX+RBX]
-		XCHG AL, AH
+	MOV EBX, [RBP+ofs]
+	MOV RCX, [RBP+buf]
+	XOR EAX, EAX
+	MOV AX, [RCX+RBX]
+	XCHG AL, AH
 #ELSE
-	BEGIN
-		ASSERT (FALSE);
+	unimplemented
 #END
 END GetNet2;