[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) |