Changeset 31457 for lang/scheme

Show
Ignore:
Timestamp:
03/23/09 09:39:12 (5 years ago)
Author:
mokehehe
Message:

1.6 ローカル変数、1.7 プロシジャ、1.8 末尾呼び出し最適化

Location:
lang/scheme/backend-to-frontend
Files:
3 added
7 modified

Legend:

Unmodified
Added
Removed
  • lang/scheme/backend-to-frontend/1.1.scm

    r31383 r31457  
    55  (unless (integer? x) (error ---)) 
    66  (emit "    .text") 
     7#| 
    78  (emit "    .global _scheme_entry") 
    89  (emit "    .def       _scheme_entry;  .scl    2;      .type   32;     .endef") 
    910  (emit "_scheme_entry:") 
     11|# 
     12  (emit ".globl scheme_entry") 
     13  (emit "    .type      scheme_entry, @function") 
     14  (emit "scheme_entry:") 
     15 
    1016  (emit "    movl $~s, %eax" x) 
    1117  (emit "    ret")) 
  • lang/scheme/backend-to-frontend/1.2.scm

    r31384 r31457  
    3636  (unless (immediate? x) (error ---)) 
    3737  (emit "    .text") 
     38#| 
    3839  (emit "    .global _scheme_entry") 
    3940  (emit "    .def       _scheme_entry;  .scl    2;      .type   32;     .endef") 
    4041  (emit "_scheme_entry:") 
     42|# 
     43  (emit ".globl scheme_entry") 
     44  (emit "    .type      scheme_entry, @function") 
     45  (emit "scheme_entry:") 
     46 
    4147  (emit "    movl $~s, %eax" (immediate-rep x)) 
    4248  (emit "    ret")) 
  • lang/scheme/backend-to-frontend/1.3.scm

    r31386 r31457  
    11(load "./tests-driver.scm") 
    22(load "./tests-1.3-req.scm") 
     3(load "./tests-1.2-req.scm") 
     4(load "./tests-1.1-req.scm") 
    35 
    46(define fxshift 2) 
     
    8284  (emit "    .text") 
    8385  (emit (string-append "    .global " funcname)) 
    84   (emit "    .def       _scheme_entry;  .scl    2;      .type   32;     .endef") 
     86;  (emit "    .def      _scheme_entry;  .scl    2;      .type   32;     .endef") 
     87  (emit (string-append "    .type " funcname ", @function")) 
     88 
    8589  (emit (string-append funcname ":"))) 
    8690 
    8791 
    8892(define (emit-program expr) 
    89   (emit-function-header "_scheme_entry") 
     93  (emit-function-header "scheme_entry") 
    9094  (emit-expr expr) 
    9195  (emit "    ret")) 
     
    9397 
    9498(define-primitive ($fxadd1 arg) 
    95                   (emit-expr arg) 
    96                   (emit "    addl $~s, %eax" (immediate-rep 1))) 
     99  (emit-expr arg) 
     100  (emit "    addl $~s, %eax" (immediate-rep 1))) 
    97101 
    98102(define-primitive ($fxsub1 arg) 
    99                   (emit-expr arg) 
    100                   (emit "    subl $~s, %eax" (immediate-rep 1))) 
     103  (emit-expr arg) 
     104  (emit "    subl $~s, %eax" (immediate-rep 1))) 
    101105 
    102106(define-primitive ($fixnum->char arg) 
    103                   (emit-expr arg) 
    104                   (emit "    shll $~s, %eax" (- charshift fxshift)) 
    105                   (emit "    orl $~s, %eax" chartag)) 
     107  (emit-expr arg) 
     108  (emit "    shll $~s, %eax" (- charshift fxshift)) 
     109  (emit "    orl $~s, %eax" chartag)) 
    106110 
    107111(define-primitive ($char->fixnum arg) 
    108                   (emit-expr arg) 
    109                   (emit "    shrl $~s, %eax" (- charshift fxshift))) 
     112  (emit-expr arg) 
     113  (emit "    shrl $~s, %eax" (- charshift fxshift))) 
    110114 
    111115(define (emit-to-boolean) 
     
    116120 
    117121(define-primitive (fixnum? arg) 
    118                   (emit-expr arg) 
    119                   (emit "    and $~s, %al" fxmask) 
    120                   (emit "    cmp $~s, %al" fxtag) 
    121                   (emit-to-boolean)) 
     122  (emit-expr arg) 
     123  (emit "    and $~s, %al" fxmask) 
     124  (emit "    cmp $~s, %al" fxtag) 
     125  (emit-to-boolean)) 
    122126 
    123127(define-primitive ($fxzero? arg) 
    124                   (emit-expr arg) 
    125                   (emit "    cmp $0, %al") 
    126                   (emit-to-boolean)) 
     128  (emit-expr arg) 
     129  (emit "    testl %eax, %eax") 
     130  (emit-to-boolean)) 
    127131 
    128132(define-primitive (null? arg) 
    129                   (emit-expr arg) 
    130                   (emit "    cmp $~s, %al" nullval) 
    131                   (emit-to-boolean)) 
     133  (emit-expr arg) 
     134  (emit "    cmp $~s, %al" nullval) 
     135  (emit-to-boolean)) 
    132136 
    133137(define-primitive (boolean? arg) 
    134                   (emit-expr arg) 
    135                   (emit "    and $~s, %al" bool_mask) 
    136                   (emit "    cmp $~s, %al" bool_tag) 
    137                   (emit-to-boolean)) 
     138  (emit-expr arg) 
     139  (emit "    and $~s, %al" bool_mask) 
     140  (emit "    cmp $~s, %al" bool_tag) 
     141  (emit-to-boolean)) 
    138142 
    139143(define-primitive (char? arg) 
    140                   (emit-expr arg) 
    141                   (emit "    and $~s, %al" charmask) 
    142                   (emit "    cmp $~s, %al" chartag) 
    143                   (emit-to-boolean)) 
     144  (emit-expr arg) 
     145  (emit "    and $~s, %al" charmask) 
     146  (emit "    cmp $~s, %al" chartag) 
     147  (emit-to-boolean)) 
    144148 
    145149(define-primitive (not arg) 
    146                   (emit-expr arg) 
    147                   (emit "    cmp $~s, %al" bool_f) 
    148                   (emit-to-boolean)) 
     150  (emit-expr arg) 
     151  (emit "    cmp $~s, %al" bool_f) 
     152  (emit-to-boolean)) 
    149153 
    150 (define-primitive ($fxlognot arg) 
    151                   ; assert(fixnum?) 
    152                   (emit-expr arg) 
    153                   (emit "    notl %eax") 
    154                   (emit "    and $~s, %eax" (lognot fxmask))) 
     154(define-primitive (fxlognot arg) 
     155  (emit-expr arg) 
     156  (emit "    notl %eax") 
     157  (emit "    and $~s, %eax" (lognot fxmask))) 
    155158 
    156159;;;; 
  • lang/scheme/backend-to-frontend/1.4.scm

    r31423 r31457  
    11(load "./tests-driver.scm") 
    22(load "./tests-1.4-req.scm") 
     3(load "./tests-1.3-req.scm") 
     4(load "./tests-1.2-req.scm") 
     5(load "./tests-1.1-req.scm") 
    36 
    47(define fxshift 2) 
     
    2528 
    2629(define (emit-program expr) 
    27   (emit-function-header "_scheme_entry") 
     30  (emit-function-header "scheme_entry") 
    2831  (emit-expr expr) 
    2932  (emit "    ret")) 
     
    3235  (emit "    .text") 
    3336  (emit (string-append "    .global " funcname)) 
    34   (emit (string-append "    .def        " funcname ";   .scl    2;      .type   32;     .endef")) 
     37;  (emit (string-append "    .def       " funcname ";   .scl    2;      .type   32;     .endef")) 
     38  (emit (string-append "    .type " funcname ", @function")) 
     39 
    3540  (emit (string-append funcname ":"))) 
    3641 
     
    226231 
    227232(define-primitive ($fxadd1 arg) 
    228                   (emit-expr arg) 
    229                   (emit "    addl $~s, %eax" (immediate-rep 1))) 
     233  (emit-expr arg) 
     234  (emit "    addl $~s, %eax" (immediate-rep 1))) 
    230235 
    231236(define-primitive ($fxsub1 arg) 
    232                   (emit-expr arg) 
    233                   (emit "    subl $~s, %eax" (immediate-rep 1))) 
     237  (emit-expr arg) 
     238  (emit "    subl $~s, %eax" (immediate-rep 1))) 
    234239 
    235240(define-primitive ($fixnum->char arg) 
    236                   (emit-expr arg) 
    237                   (emit "    shll $~s, %eax" (- charshift fxshift)) 
    238                   (emit "    orl $~s, %eax" chartag)) 
     241  (emit-expr arg) 
     242  (emit "    shll $~s, %eax" (- charshift fxshift)) 
     243  (emit "    orl $~s, %eax" chartag)) 
    239244 
    240245(define-primitive ($char->fixnum arg) 
    241                   (emit-expr arg) 
    242                   (emit "    shrl $~s, %eax" (- charshift fxshift))) 
     246  (emit-expr arg) 
     247  (emit "    shrl $~s, %eax" (- charshift fxshift))) 
    243248 
    244249(define (emit-to-boolean) 
     
    249254 
    250255(define-predicate (fixnum? arg) 
    251                   (emit-expr arg) 
    252                   (emit "    and $~s, %al" fxmask) 
    253                   (emit "    cmp $~s, %al" fxtag)) 
     256  (emit-expr arg) 
     257  (emit "    and $~s, %al" fxmask) 
     258  (emit "    cmp $~s, %al" fxtag)) 
    254259 
    255260(define-predicate ($fxzero? arg) 
    256                   (emit-expr arg) 
    257                   (emit "    cmp $0, %al")) 
     261  (emit-expr arg) 
     262  (emit "    testl %eax, %eax")) 
    258263 
    259264(define-predicate (null? arg) 
    260                   (emit-expr arg) 
    261                   (emit "    cmp $~s, %al" nullval)) 
     265  (emit-expr arg) 
     266  (emit "    cmp $~s, %al" nullval)) 
    262267 
    263268(define-predicate (boolean? arg) 
    264                   (emit-expr arg) 
    265                   (emit "    and $~s, %al" bool_mask) 
    266                   (emit "    cmp $~s, %al" bool_tag)) 
     269  (emit-expr arg) 
     270  (emit "    and $~s, %al" bool_mask) 
     271  (emit "    cmp $~s, %al" bool_tag)) 
    267272 
    268273(define-predicate (char? arg) 
    269                   (emit-expr arg) 
    270                   (emit "    and $~s, %al" charmask) 
    271                   (emit "    cmp $~s, %al" chartag)) 
     274  (emit-expr arg) 
     275  (emit "    and $~s, %al" charmask) 
     276  (emit "    cmp $~s, %al" chartag)) 
    272277 
    273278(define-predicate (not arg) 
    274                   (emit-expr arg) 
    275                   (emit "    cmp $~s, %al" bool_f)) 
    276  
    277 (define-primitive ($fxlognot arg) 
    278                   ; assert(fixnum?) 
    279                   (emit-expr arg) 
    280                   (emit "    notl %eax") 
    281                   (emit "    and $~s, %eax" (lognot fxmask))) 
     279  (emit-expr arg) 
     280  (emit "    cmp $~s, %al" bool_f)) 
     281 
     282(define-primitive (fxlognot arg) 
     283  (emit-expr arg) 
     284  (emit "    notl %eax") 
     285  (emit "    and $~s, %eax" (lognot fxmask))) 
    282286 
    283287;;;; 
  • lang/scheme/backend-to-frontend/1.5.runtime.c

    r31423 r31457  
    11#include <stdio.h> 
     2#include <stdlib.h>  // for exit 
    23#include <sys/mman.h> 
    34 
     
    6465 
    6566int main(int argc, char** argv) { 
    66         int stack_size = (16 * 4096);   /* holds 16K cells */ 
     67        int stack_size = (128 * 4096);  /* holds 128K cells */ 
    6768        char* stack_top = allocate_protected_space(stack_size); 
    6869        char* stack_base = stack_top + stack_size; 
  • lang/scheme/backend-to-frontend/1.5.scm

    r31423 r31457  
    11(load "./tests-driver.scm") 
    22(load "./tests-1.5-req.scm") 
     3(load "./tests-1.4-req.scm") 
     4(load "./tests-1.3-req.scm") 
     5(load "./tests-1.2-req.scm") 
     6(load "./tests-1.1-req.scm") 
    37 
    48(define fxshift 2) 
     
    2529 
    2630(define (emit-program expr) 
    27   (emit-function-header "_scheme_entry") 
     31  (emit-function-header "scheme_entry") 
    2832  (emit "    movl %esp, %ecx") 
    2933  (emit "    movl 4(%esp), %esp") 
     
    3337   
    3438  (emit-label "L_scheme_entry") 
    35   (emit-expr 0 expr) 
     39  (emit-expr (- wordsize) expr) 
    3640  (emit "    ret")) 
    3741 
     
    3943  (emit "    .text") 
    4044  (emit (string-append "    .global " funcname)) 
    41   (emit (string-append "    .def        " funcname ";   .scl    2;      .type   32;     .endef")) 
     45;  (emit (string-append "    .def       " funcname ";   .scl    2;      .type   32;     .endef")) 
     46  (emit (string-append "    .type " funcname ", @function")) 
     47 
    4248  (emit (string-append funcname ":"))) 
    4349 
     
    6167 
    6268(define (emit-predicate-val si expr) 
    63   (emit-predicate-test si expr) 
    64   (let ((prim (car expr)) (args (cdr expr))) 
    65     (emit-to-boolean))) 
     69  (let ((c (emit-predicate-test si expr)) 
     70                (prim (car expr)) 
     71                (args (cdr expr))) 
     72    (emit-to-boolean c))) 
    6673 
    6774(define (emit-predicate-test si expr) 
     
    7582(define (emit-test si expr) 
    7683  (if (predicate-call? expr) 
    77       (begin 
    78         (emit-predicate-test si expr) 
    79         #t) 
     84          (emit-predicate-test si expr) 
    8085    (begin 
    8186      (emit-expr si expr) 
    8287      (emit "    cmp $~s, %al" bool_f) 
    83       #f))) 
     88      'NEQ))) 
     89 
     90(define (emit-jump-if-not pred label) 
     91  (let ((c (case pred 
     92                         ((EQ)  "jne") 
     93                         ((NEQ) "je") 
     94                         ((LT)  "jge") 
     95                         ((GT)  "jle") 
     96                         ((LE)  "jg") 
     97                         ((GE)  "Jl") 
     98                         (else (error "illegal condition"))))) 
     99        (emit "    ~a ~a" c label))) 
    84100 
    85101(define (emit-if si expr) 
    86102  (let ((alt-label (unique-label)) 
    87103        (end-label (unique-label))) 
    88     (if (emit-test si (if-test expr)) 
    89         (emit "    jne ~a" alt-label) 
    90       (emit "    je ~a" alt-label)) 
     104    (emit-jump-if-not (emit-test si (if-test expr)) 
     105                                          alt-label) 
    91106    (emit-expr si (if-conseq expr)) 
    92107    (emit "    jmp ~a" end-label) 
     
    233248 
    234249(define-primitive ($fxadd1 si arg) 
    235                   (emit-expr si arg) 
    236                   (emit "    addl $~s, %eax" (immediate-rep 1))) 
     250  (emit-expr si arg) 
     251  (emit "    addl $~s, %eax" (immediate-rep 1))) 
    237252 
    238253(define-primitive ($fxsub1 si arg) 
    239                   (emit-expr si arg) 
    240                   (emit "    subl $~s, %eax" (immediate-rep 1))) 
     254  (emit-expr si arg) 
     255  (emit "    subl $~s, %eax" (immediate-rep 1))) 
    241256 
    242257(define-primitive ($fixnum->char si arg) 
    243                   (emit-expr si arg) 
    244                   (emit "    shll $~s, %eax" (- charshift fxshift)) 
    245                   (emit "    orl $~s, %eax" chartag)) 
     258  (emit-expr si arg) 
     259  (emit "    shll $~s, %eax" (- charshift fxshift)) 
     260  (emit "    orl $~s, %eax" chartag)) 
    246261 
    247262(define-primitive ($char->fixnum si arg) 
    248                   (emit-expr si arg) 
    249                   (emit "    shrl $~s, %eax" (- charshift fxshift))) 
    250  
    251 (define (emit-to-boolean) 
    252   (emit "    sete %al") 
    253   (emit "    movzbl %al, %eax") 
    254   (emit "    sal $~s, %al" bool_bit) 
    255   (emit "    or $~s, %al" bool_f)) 
     263  (emit-expr si arg) 
     264  (emit "    shrl $~s, %eax" (- charshift fxshift))) 
     265 
     266(define (emit-to-boolean c) 
     267  (let ((op (case c 
     268                          ((EQ)  "sete") 
     269                          ((NEQ) "setne") 
     270                          ((LT)  "setl") 
     271                          ((GT)  "setg") 
     272                          ((LE)  "setle") 
     273                          ((GE)  "setge") 
     274                          (else (error "illegal condition"))))) 
     275        (emit "    ~a %al" op) 
     276        (emit "    movzbl %al, %eax") 
     277        (emit "    sal $~s, %al" bool_bit) 
     278        (emit "    or $~s, %al" bool_f))) 
    256279 
    257280(define-predicate (fixnum? si arg) 
    258                   (emit-expr si arg) 
    259                   (emit "    and $~s, %al" fxmask) 
    260                   (emit "    cmp $~s, %al" fxtag)) 
     281  (emit-expr si arg) 
     282  (emit "    and $~s, %al" fxmask) 
     283  (emit "    cmp $~s, %al" fxtag) 
     284  'EQ) 
    261285 
    262286(define-predicate ($fxzero? si arg) 
    263                   (emit-expr si arg) 
    264                   (emit "    cmp $0, %al")) 
     287  (emit-expr si arg) 
     288  (emit "    testl %eax, %eax") 
     289  'EQ) 
    265290 
    266291(define-predicate (null? si arg) 
    267                   (emit-expr si arg) 
    268                   (emit "    cmp $~s, %al" nullval)) 
     292  (emit-expr si arg) 
     293  (emit "    cmp $~s, %al" nullval) 
     294  'EQ) 
    269295 
    270296(define-predicate (boolean? si arg) 
    271                   (emit-expr si arg) 
    272                   (emit "    and $~s, %al" bool_mask) 
    273                   (emit "    cmp $~s, %al" bool_tag)) 
     297  (emit-expr si arg) 
     298  (emit "    and $~s, %al" bool_mask) 
     299  (emit "    cmp $~s, %al" bool_tag) 
     300  'EQ) 
    274301 
    275302(define-predicate (char? si arg) 
    276                   (emit-expr si arg) 
    277                   (emit "    and $~s, %al" charmask) 
    278                   (emit "    cmp $~s, %al" chartag)) 
     303  (emit-expr si arg) 
     304  (emit "    and $~s, %al" charmask) 
     305  (emit "    cmp $~s, %al" chartag) 
     306  'EQ) 
    279307 
    280308(define-predicate (not si arg) 
    281                   (emit-expr si arg) 
    282                   (emit "    cmp $~s, %al" bool_f)) 
     309  (emit-expr si arg) 
     310  (emit "    cmp $~s, %al" bool_f) 
     311  'EQ) 
    283312 
    284313(define-primitive (fxlognot si arg) 
    285                   ; assert(fixnum?) 
    286                   (emit-expr si arg) 
    287                   (emit "    notl %eax") 
    288                   (emit "    and $~s, %eax" (lognot fxmask))) 
     314  (emit-expr si arg) 
     315  (emit "    notl %eax") 
     316  (emit "    and $~s, %eax" (lognot fxmask))) 
    289317 
    290318 
    291319(define-primitive (fx+ si arg1 arg2) 
    292                   (emit-expr (- si wordsize) arg1) 
    293                   (emit "    movl %eax, ~s(%esp)" (- si wordsize)) 
    294                   (emit-expr (- si (* 2 wordsize)) arg2) 
    295                   (emit "    addl ~s(%esp), %eax" (- si wordsize))) 
     320  (define (out2) 
     321        (emit-expr si arg1) 
     322        (emit "    movl %eax, ~s(%esp)" si) 
     323        (emit-expr (- si wordsize) arg2) 
     324        (emit "    addl ~s(%esp), %eax" si)) 
     325  (define (out1 expr const) 
     326        (emit-expr si expr) 
     327        (emit "    addl $~s, %eax" (immediate-rep const))) 
     328  ;; �Q�‚Ƃ����̏ꍇ�͂��Ə��ŏ����������̂ŁA�����ł͏������Ȃ� 
     329  (cond ((fixnum? arg2) (out1 arg1 arg2)) 
     330                ((fixnum? arg1) (out1 arg2 arg1)) 
     331                (else (out2)))) 
    296332 
    297333(define-primitive (fx- si arg1 arg2) 
    298                   (emit-expr (- si (* 2 wordsize)) arg2) 
    299                   (emit "    movl %eax, ~s(%esp)" (- si wordsize)) 
    300                   (emit-expr (- si wordsize) arg1) 
    301                   (emit "    subl ~s(%esp), %eax" (- si wordsize))) 
     334  (define (out2) 
     335        (emit-expr si arg2) 
     336        (emit "    movl %eax, ~s(%esp)" si) 
     337        (emit-expr (- si wordsize) arg1) 
     338        (emit "    subl ~s(%esp), %eax" si)) 
     339  (define (out1 expr const) 
     340        (emit-expr si expr) 
     341        (emit "    subl $~s, %eax" (immediate-rep const))) 
     342  (cond ((fixnum? arg2) (out1 arg1 arg2)) 
     343                (else (out2)))) 
    302344 
    303345(define-primitive (fx* si arg1 arg2) 
    304                   (emit-expr (- si wordsize) arg1) 
    305                   (emit "    sarl $2, %eax")  ; �E�V�t�g 
    306                   (emit "    movl %eax, ~s(%esp)" (- si wordsize)) 
    307                   (emit-expr (- si (* 2 wordsize)) arg2) 
    308                   (emit "    imull ~s(%esp), %eax" (- si wordsize))) 
     346  (define (out2) 
     347        (emit-expr si arg1) 
     348        (emit "    sarl $2, %eax")  ; �E�V�t�g 
     349        (emit "    movl %eax, ~s(%esp)" si) 
     350        (emit-expr (- si wordsize) arg2) 
     351        (emit "    imull ~s(%esp), %eax" si)) 
     352  (define (out1 expr const) 
     353        (emit-expr si expr) 
     354        (emit "    imull $~s, %eax" const))  ; �V�t�g�K�v�Ȃ� 
     355  (cond ((fixnum? arg2) (out1 arg1 arg2)) 
     356                ((fixnum? arg1) (out1 arg2 arg1)) 
     357                (else (out2)))) 
    309358 
    310359(define-primitive (fxlogor si arg1 arg2) 
    311                   (emit-expr (- si wordsize) arg1) 
    312                   (emit "    movl %eax, ~s(%esp)" (- si wordsize)) 
    313                   (emit-expr (- si (* 2 wordsize)) arg2) 
    314                   (emit "    orl ~s(%esp), %eax" (- si wordsize))) 
     360  (emit-expr si arg1) 
     361  (emit "    movl %eax, ~s(%esp)" si) 
     362  (emit-expr (- si wordsize) arg2) 
     363  (emit "    orl ~s(%esp), %eax" si)) 
    315364 
    316365(define-primitive (fxlogand si arg1 arg2) 
    317                   (emit-expr (- si wordsize) arg1) 
    318                   (emit "    movl %eax, ~s(%esp)" (- si wordsize)) 
    319                   (emit-expr (- si (* 2 wordsize)) arg2) 
    320                   (emit "    andl ~s(%esp), %eax" (- si wordsize))) 
     366  (emit-expr si arg1) 
     367  (emit "    movl %eax, ~s(%esp)" si) 
     368  (emit-expr (- si wordsize) arg2) 
     369  (emit "    andl ~s(%esp), %eax" si)) 
    321370 
    322371(define-predicate (fx= si arg1 arg2) 
    323                   (emit-expr (- si wordsize) arg1) 
    324                   (emit "    movl %eax, ~s(%esp)" (- si wordsize)) 
    325                   (emit-expr (- si (* 2 wordsize)) arg2) 
    326                   (emit "    cmpl ~s(%esp), %eax" (- si wordsize))) 
     372  (emit-expr si arg1) 
     373  (emit "    movl %eax, ~s(%esp)" si) 
     374  (emit-expr (- si wordsize) arg2) 
     375  (emit "    cmpl ~s(%esp), %eax" si) 
     376  'EQ) 
     377 
     378(define-predicate (fx< si arg1 arg2) 
     379  (emit-expr si arg2) 
     380  (emit "    movl %eax, ~s(%esp)" si) 
     381  (emit-expr (- si wordsize) arg1) 
     382  (emit "    cmpl ~s(%esp), %eax" si) 
     383  'LT) 
     384 
     385(define-predicate (fx<= si arg1 arg2) 
     386  (emit-expr si arg2) 
     387  (emit "    movl %eax, ~s(%esp)" si) 
     388  (emit-expr (- si wordsize) arg1) 
     389  (emit "    cmpl ~s(%esp), %eax" si) 
     390  'LE) 
     391 
     392(define-predicate (fx> si arg1 arg2) 
     393  (emit-expr si arg2) 
     394  (emit "    movl %eax, ~s(%esp)" si) 
     395  (emit-expr (- si wordsize) arg1) 
     396  (emit "    cmpl ~s(%esp), %eax" si) 
     397  'GT) 
     398 
     399(define-predicate (fx>= si arg1 arg2) 
     400  (emit-expr si arg2) 
     401  (emit "    movl %eax, ~s(%esp)" si) 
     402  (emit-expr (- si wordsize) arg1) 
     403  (emit "    cmpl ~s(%esp), %eax" si) 
     404  'GE) 
    327405 
    328406;;;; 
  • lang/scheme/backend-to-frontend/tests-driver.scm

    r31388 r31457  
    9494 
    9595(define (execute) 
    96   (unless (fxzero? (system "stst.exe > stst.out")) 
     96  (unless (fxzero? (system "./stst.exe > stst.out")) 
    9797    (error 'execute "produced program exited abnormally"))) 
    9898