Browse Source

Improved restoring activity register

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8313 8c9fc860-2736-0410-a75d-ab315db34111
negelef 7 years ago
parent
commit
3cfb5ed9f6
4 changed files with 26 additions and 16 deletions
  1. 7 5
      source/AMD64.WMTransitions.Mod
  2. 6 2
      source/AMD64.srE.Mod
  3. 12 8
      source/BIOS.ATADisks.Mod
  4. 1 1
      source/VMWareTools.Mod

+ 7 - 5
source/AMD64.WMTransitions.Mod

@@ -368,7 +368,6 @@ CODE {SYSTEM.AMD64, SYSTEM.MMX}
 	;
 	; Initialize the counter and skip if the latter is equal to zero
 	;
-	PUSH		RCX
 	MOV		ECX, [RBP + i]
 	CMP		ECX, 0
 	JZ			skip565
@@ -488,7 +487,6 @@ doblend565:
 	EMMS								; Declare FPU registers free
 
 skip565:
-	POP		RCX
 END Calc565MMXLine;
 
 
@@ -590,7 +588,9 @@ PROCEDURE Calc888MMXLine (adra, adrb, adrr: ADDRESS; i : LONGINT; a64, m64 : HUG
 CODE {SYSTEM.AMD64, SYSTEM.MMX}
 
 	; (re)load the width counter
-	PUSH			RCX
+	#IF COOP THEN
+		PUSH		RBX
+	#END
 	MOV			ECX, [RBP + i]
 
 	;
@@ -695,7 +695,9 @@ doblend24:
 	POP			RDI
 	EMMS								; Declare FPU registers free
 
-	POP			RCX
+	#IF COOP THEN
+		POP		RBX
+	#END
 END Calc888MMXLine;
 
 (* ***
@@ -791,4 +793,4 @@ END WMTransitions.
 System.Free WMTransitions ~
 
 WMTransitions.Test ~
-WMTransitions.Test2 ~
+WMTransitions.Test2 ~

+ 6 - 2
source/AMD64.srE.Mod

@@ -17,7 +17,9 @@ END E;
 
 PROCEDURE Eprime(VAR in:ARRAY OF SREAL; VAR out: ARRAY OF INTEGER);
 CODE {SYSTEM.AMD64, SYSTEM.FPU}
-   PUSH  RCX
+   #IF COOP THEN
+      PUSH   RBX
+   #END
    MOV   RDI, [RBP+out+0]         ; dest   = ADR(out)
    MOV   RCX, [RBP+out+8]       ; count  = LEN(out)
    MOV   RSI, [RBP+in+0]        ; source = ADR(in)
@@ -44,7 +46,9 @@ Check:
    JG    Loop
    FLDCW [RSP]               ; restore original FPU configuration
    ADD   RSP, 8
-   POP   RCX
+   #IF COOP THEN
+      POP   RBX
+   #END
 END Eprime;
 
 PROCEDURE E2*(in: srBase.PT; VAR out: srBase.IPT);

+ 12 - 8
source/BIOS.ATADisks.Mod

@@ -1913,21 +1913,23 @@ VAR
 PROCEDURE RepInWord(port, bufAdr: ADDRESS; len: SIZE);
 CODE
 #IF I386 THEN
-	PUSH	ECX
+	#IF COOP THEN
+		MOV	ESI, ECX
+	#END
 	MOV	EDX, [EBP + port]
 	MOV	EDI, [EBP + bufAdr]
 	MOV	ECX, [EBP + len]
 	CLD
 	REP	INSW
-	POP	ECX
+	#IF COOP THEN
+		MOV	ECX, ESI
+	#END
 #ELSIF AMD64 THEN
-	PUSH	RCX
 	MOV	RDX, [RBP + port]
 	MOV	RDI, [RBP + bufAdr]
 	MOV	RCX, [RBP + len]
 	CLD
 	REP	INSW
-	POP	RCX
 #ELSE
 	unimplemented
 #END
@@ -1938,21 +1940,23 @@ END RepInWord;
 PROCEDURE RepOutWord(port, bufAdr: ADDRESS; len: SIZE);
 CODE
 #IF I386 THEN
-	PUSH	ECX
+	#IF COOP THEN
+		MOV	ESI, ECX
+	#END
 	MOV	EDX, [EBP + port]
 	MOV	ESI, [EBP + bufAdr]
 	MOV	ECX, [EBP + len]
 	CLD
 	REP	OUTSW
-	POP	ECX
+	#IF COOP THEN
+		MOV	ECX, ESI
+	#END
 #ELSIF AMD64 THEN
-	PUSH	RCX
 	MOV	RDX, [RBP + port]
 	MOV	RSI, [RBP + bufAdr]
 	MOV	RCX, [RBP + len]
 	CLD
 	REP	OUTSW
-	POP	RCX
 #ELSE
 	unimplemented
 #END

+ 1 - 1
source/VMWareTools.Mod

@@ -301,7 +301,7 @@ CODE
 	#IF COOP THEN
 		MOV RBX, RSI
 	#END
-##ELSE
+#ELSE
 	unimplemented
 #END
 END SetGUIOptions;