From 348dcbcbd7aff539b43e0e05c80c0926ddc82c17 Mon Sep 17 00:00:00 2001 From: "Jan (janneke) Nieuwenhuizen" Date: Fri, 1 Jan 2021 10:31:46 +0100 Subject: [PATCH] mescc: Only use signed division when numerator is signed. Currently, sign-extension (CLTD vs XOR EDX) and signed division (IDIV vs DIV) selected by setting "signed?". See, module/mescc/x86/as.scm. Possibly we need a signed? based on numerator and denominator, and add a extend-sign? based on the signedness of the numerator? * module/mescc/compile.scm (expr->register): Base "signed?" strictly on signedness of numerator. --- module/mescc/compile.scm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/module/mescc/compile.scm b/module/mescc/compile.scm index c9e266e6..65c16b32 100644 --- a/module/mescc/compile.scm +++ b/module/mescc/compile.scm @@ -1218,9 +1218,9 @@ ((rshift ,a ,b) ((binop->r info) a b 'r0>>r1)) ((div ,a ,b) ((binop->r info) a b 'r0/r1 - (or (signed? (ast->type a info)) (signed? (ast->type b info))))) + (signed? (ast->type a info)))) ((mod ,a ,b) ((binop->r info) a b 'r0%r1 - (or (signed? (ast->type a info)) (signed? (ast->type b info))))) + (signed? (ast->type a info)))) ((mul ,a ,b) ((binop->r info) a b 'r0*r1)) ((not ,expr) @@ -1361,7 +1361,7 @@ info))) (info (expr->register a info)) (info (append-text info (wrap-as (as info 'swap-r0-r1)))) - (signed? (or (signed? type) (signed? type-b))) + (signed? (signed? type)) (info (append-text info (cond ((equal? op "+=") (wrap-as (as info 'r0+r1))) ((equal? op "-=") (wrap-as (as info 'r0-r1))) ((equal? op "*=") (wrap-as (as info 'r0*r1)))