From 4c2b13ebe08fc0737ef7fca3153eb0c4b5e06fe8 Mon Sep 17 00:00:00 2001 From: Abdulaziz Ghuloum Date: Sat, 12 Sep 2009 22:20:07 +0300 Subject: [PATCH] fixed invalid code generation of (movl k0 (disp k1 k2)) which is invalid in X86_64. --- scheme/ikarus.compiler.altcogen.ss | 36 ++++++++++++------------------ scheme/ikarus.intel-assembler.ss | 4 ++-- scheme/ikarus.io.ss | 1 + scheme/last-revision | 2 +- scheme/x86-64-repl.ss | 2 +- 5 files changed, 19 insertions(+), 26 deletions(-) diff --git a/scheme/ikarus.compiler.altcogen.ss b/scheme/ikarus.compiler.altcogen.ss index 23fac91..36f6374 100644 --- a/scheme/ikarus.compiler.altcogen.ss +++ b/scheme/ikarus.compiler.altcogen.ss @@ -2337,28 +2337,20 @@ (E (make-asm-instr 'move u b)) (E (make-asm-instr op a u))))] [else - (let ([s1 (disp-s0 a)] [s2 (disp-s1 a)]) - (cond - [(and (mem? s1) (mem? s2)) - (let ([u (mku)]) - (make-seq - (make-seq - (E (make-asm-instr 'move u s1)) - (E (make-asm-instr 'int+ u s2))) - (make-asm-instr op - (make-disp u (make-constant 0)) - b)))] - [(mem? s1) - (let ([u (mku)]) - (make-seq - (E (make-asm-instr 'move u s1)) - (E (make-asm-instr op (make-disp u s2) b))))] - [(mem? s2) - (let ([u (mku)]) - (make-seq - (E (make-asm-instr 'move u s2)) - (E (make-asm-instr op (make-disp u s1) b))))] - [else x]))])] + (check-disp a + (lambda (a) + (let ([s0 (disp-s0 a)] [s1 (disp-s1 a)]) + (cond + [(and (constant? s0) (constant? s1)) + (let ([u (mku)]) + (make-seq + (make-seq + (E (make-asm-instr 'move u s0)) + (E (make-asm-instr 'int+ u s1))) + (make-asm-instr op + (make-disp u (make-constant 0)) + b)))] + [else (make-asm-instr op a b)]))))])] [(fl:load fl:store fl:add! fl:sub! fl:mul! fl:div! fl:load-single fl:store-single) (check-disp-arg a diff --git a/scheme/ikarus.intel-assembler.ss b/scheme/ikarus.intel-assembler.ss index 6509455..b170fb9 100644 --- a/scheme/ikarus.intel-assembler.ss +++ b/scheme/ikarus.intel-assembler.ss @@ -554,8 +554,8 @@ (CODE c0 (CODE c1 (IMM32 i32 ac)))) -(define (dotrace orig ls) - (printf "TRACE: ~s\n" +(define (dotrace instr orig ls) + (printf "TRACE: ~s ~s\n" instr (let f ([ls ls]) (if (eq? ls orig) '() diff --git a/scheme/ikarus.io.ss b/scheme/ikarus.io.ss index 6563536..3c04971 100644 --- a/scheme/ikarus.io.ss +++ b/scheme/ikarus.io.ss @@ -139,6 +139,7 @@ open-directory-stream directory-stream? read-directory-stream close-directory-stream + process* )) ;(define-syntax assert* (identifier-syntax assert)) diff --git a/scheme/last-revision b/scheme/last-revision index ea6d98f..7dbf0f4 100644 --- a/scheme/last-revision +++ b/scheme/last-revision @@ -1 +1 @@ -1853 +1855 diff --git a/scheme/x86-64-repl.ss b/scheme/x86-64-repl.ss index cf04377..a2683b0 100755 --- a/scheme/x86-64-repl.ss +++ b/scheme/x86-64-repl.ss @@ -50,7 +50,7 @@ (put-u8 p b)) (append stub1 (mkstub2 (length ls)) stub3 ls)) (close-output-port p)) - (system "otool64 -tv tmp.o")) + (system "otool -tv tmp.o")) (printf "Trying a simple sequence ...\n")