[Wisp-cvs] wisp/modules universal.wrti,1.10,1.11
Status: Alpha
Brought to you by:
digg
|
From: <di...@us...> - 2002-08-31 14:29:25
|
Update of /cvsroot/wisp/wisp/modules
In directory usw-pr-cvs1:/tmp/cvs-serv4879/modules
Modified Files:
universal.wrti
Log Message:
Implemented the beginnings of Worth's delay-optimization.
Index: universal.wrti
===================================================================
RCS file: /cvsroot/wisp/wisp/modules/universal.wrti,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- universal.wrti 8 Aug 2002 17:12:36 -0000 1.10
+++ universal.wrti 31 Aug 2002 14:29:22 -0000 1.11
@@ -85,6 +85,210 @@
(stack<=! 1)
jump)
+ ;; Conditional branch hooks
+ ;; In the future, the translator may generate virtual references to
+ ;; these macros. The stack layout will be ( arg ... jump-target ).
+ ;; Note that this code *must not* change stack depth; in the
+ ;; future-futue, it might get checked.
+
+ (macro \=?j
+ (->reg 2)
+ ,(cmp ,2 ,1)
+ ,(jmp %?e ,0))
+
+ (macro \<>?j
+ (->reg 2)
+ ,(cmp ,2 ,1)
+ ,(jmp %?-e ,0))
+
+ (macro \<?j
+ (->reg 2)
+ ,(cmp ,2 ,1)
+ ,(jmp %?l ,0))
+
+ (macro \<=?j
+ (->reg 2)
+ ,(cmp ,2 ,1)
+ ,(jmp %?le ,0))
+
+ (macro \>?j
+ (->reg 2)
+ ,(cmp ,2 ,1)
+ ,(jmp %?g ,0))
+
+ (macro \>=?j
+ (->reg 2)
+ ,(cmp ,2 ,1)
+ ,(jmp %?ge ,0))
+
+ (macro \u<?j
+ (->reg 2)
+ ,(cmp ,2 ,1)
+ ,(jmp %?b ,0))
+
+ (macro \u<=?j
+ (->reg 2)
+ ,(cmp ,2 ,1)
+ ,(jmp %?be ,0))
+
+ (macro \u>?j
+ (->reg 2)
+ ,(cmp ,2 ,1)
+ ,(jmp %?a ,0))
+
+ (macro \u>=?j
+ (->reg 2)
+ ,(cmp ,2 ,1)
+ ,(jmp %?ae ,0))
+
+ ; The following ones are optional
+
+ (macro \0=?j
+ (->reg 1)
+ ,(test ,1 ,1)
+ ,(jmp %?z ,0))
+
+ (macro \0<>?j
+ (->reg 1)
+ ,(test ,1 ,1)
+ ,(jmp %?-z ,0))
+
+ (macro \0<?j
+ (->reg 1)
+ ,(test ,1 ,1)
+ ,(jmp %?l))
+
+ (macro \0<=?j
+ (->reg 1)
+ ,(test ,1 ,1)
+ ,(jmp %?le))
+
+ (macro \0>?j
+ (->reg 1)
+ ,(test ,1 ,1)
+ ,(jmp %?g))
+
+ (macro \0>=?j
+ (->reg 1)
+ ,(test ,1 ,1)
+ ,(jmp %?ge))
+
+ ;; Conditional value hooks. Stack: ( arg ... -- value ).
+
+ (macro \=?v
+ (register %eax %ebx %ecx %edx)
+ (->reg 2)
+ ,(cmp ,2 ,1)
+ ,(mov ,0 %?e) ,(neg ,0)
+ nip nip)
+
+ (macro \<>?v
+ (register %eax %ebx %ecx %edx)
+ (->reg 2)
+ ,(cmp ,2 ,1)
+ ,(mov ,0 %?-e) ,(neg ,0)
+ nip nip)
+
+ (macro \<?v
+ (register %eax %ebx %ecx %edx)
+ (->reg 2)
+ ,(cmp ,2 ,1)
+ ,(mov ,0 %?l) ,(neg ,0)
+ nip nip)
+
+ (macro \<=?v
+ (register %eax %ebx %ecx %edx)
+ (->reg 2)
+ ,(cmp ,2 ,1)
+ ,(mov ,0 %?le) ,(neg ,0)
+ nip nip)
+
+ (macro \>?v
+ (register %eax %ebx %ecx %edx)
+ (->reg 2)
+ ,(cmp ,2 ,1)
+ ,(mov ,0 %?g) ,(neg ,0)
+ nip nip)
+
+ (macro \>=?v
+ (register %eax %ebx %ecx %edx)
+ (->reg 2)
+ ,(cmp ,2 ,1)
+ ,(mov ,0 %?ge) ,(neg ,0)
+ nip nip)
+
+ (macro \u<?v
+ (register %eax %ebx %ecx %edx)
+ (->reg 2)
+ ,(cmp ,2 ,1)
+ ,(mov ,0 %?b) ,(neg ,0)
+ nip nip)
+
+ (macro \u<=?v
+ (register %eax %ebx %ecx %edx)
+ (->reg 2)
+ ,(cmp ,2 ,1)
+ ,(mov ,0 %?be) ,(neg ,0)
+ nip nip)
+
+ (macro \u>?v
+ (register %eax %ebx %ecx %edx)
+ (->reg 2)
+ ,(cmp ,2 ,1)
+ ,(mov ,0 %?a) ,(neg ,0)
+ nip nip)
+
+ (macro \u>=?v
+ (register %eax %ebx %ecx %edx)
+ (->reg 2)
+ ,(cmp ,2 ,1)
+ ,(mov ,0 %?ae) ,(neg ,0)
+ nip nip)
+
+ ; The following ones are optional
+
+ (macro \0=?v
+ (register %eax %ebx %ecx %edx)
+ (->reg 1)
+ ,(test ,1 ,1)
+ ,(mov ,0 %?z) ,(neg ,0)
+ nip)
+
+ (macro \0<>?v
+ (register %eax %ebx %ecx %edx)
+ (->reg 1)
+ ,(test ,1 ,1)
+ ,(mov ,0 %?-z) ,(neg ,0)
+ nip)
+
+ (macro \0<?v
+ (register %eax %ebx %ecx %edx)
+ (->reg 1)
+ ,(test ,1 ,1)
+ ,(mov ,0 %?l) ,(neg ,0)
+ nip)
+
+ (macro \0<=?v
+ (register %eax %ebx %ecx %edx)
+ (->reg 1)
+ ,(test ,1 ,1)
+ ,(mov ,0 %?le) ,(neg ,0)
+ nip)
+
+ (macro \0>?v
+ (register %eax %ebx %ecx %edx)
+ (->reg 1)
+ ,(test ,1 ,1)
+ ,(mov ,0 %?a) ,(neg ,0)
+ nip)
+
+ (macro \0>=?v
+ (register %eax %ebx %ecx %edx)
+ (->reg 1)
+ ,(test ,1 ,1)
+ ,(mov ,0 %?ae) ,(neg ,0)
+ nip)
+
;; Arithmetics
(macro +
(binary +
@@ -252,76 +456,6 @@
,(bsr ,0 ,0))
;; Comparison
- (macro =
- (->reg 1)
- (register %eax)
- ,(cmp ,2 ,1)
- ,(mov %al %?e) ,(neg %al) ,(sex %eax %al)
- -rot drop drop)
-
- (macro <>
- (->reg 1)
- (register %eax)
- ,(cmp ,2 ,1)
- ,(mov %al %?-e) ,(neg %al) ,(sex %eax %al)
- -rot drop drop)
-
- (macro <
- (->reg 1)
- (register %eax)
- ,(cmp ,2 ,1)
- ,(mov %al %?l) ,(neg %al) ,(sex %eax %al)
- -rot drop drop)
-
- (macro >
- (->reg 1)
- (register %eax)
- ,(cmp ,2 ,1)
- ,(mov %al %?g) ,(neg %al) ,(sex %eax %al)
- -rot drop drop)
-
- (macro <=
- (->reg 1)
- (register %eax)
- ,(cmp ,2 ,1)
- ,(mov %al %?le) ,(neg %al) ,(sex %eax %al)
- -rot drop drop)
-
- (macro >=
- (->reg 1)
- (register %eax)
- ,(cmp ,2 ,1)
- ,(mov %al %?ge) ,(neg %al) ,(sex %eax %al)
- -rot drop drop)
-
- (macro u<
- (->reg 1)
- (register %eax)
- ,(cmp ,2 ,1)
- ,(mov %al %?b) ,(neg %al) ,(sex %eax %al)
- -rot drop drop)
-
- (macro u>
- (->reg 1)
- (register %eax)
- ,(cmp ,2 ,1)
- ,(mov %al %?a) ,(neg %al) ,(sex %eax %al)
- -rot drop drop)
-
- (macro u<=
- (->reg 1)
- (register %eax)
- ,(cmp ,2 ,1)
- ,(mov %al %?be) ,(neg %al) ,(sex %eax %al)
- -rot drop drop)
-
- (macro u>=
- (->reg 1)
- (register %eax)
- ,(cmp ,2 ,1)
- ,(mov %al %?ae) ,(neg %al) ,(sex %eax %al)
- -rot drop drop)
-
(macro within
-rot over <= -rot > and)
|