diff options
author | xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2011-08-18 15:28:46 +0000 |
---|---|---|
committer | xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2011-08-18 15:28:46 +0000 |
commit | 5b73a4f223a0cadb7df3f1320fed86cde0d67d6e (patch) | |
tree | fd315fb086acb9e81882a2bc1b255b9562d8940d /ia32/Asmgen.v | |
parent | 50ee6bdf639ffba989968abb9c24a57126ab35a4 (diff) |
More careful treatment of 'load immediate 0' as 'xor self'
git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1718 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'ia32/Asmgen.v')
-rw-r--r-- | ia32/Asmgen.v | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/ia32/Asmgen.v b/ia32/Asmgen.v index 4c1167b..478cdf5 100644 --- a/ia32/Asmgen.v +++ b/ia32/Asmgen.v @@ -317,9 +317,11 @@ Definition transl_op | Omove, a1 :: nil => mk_mov (preg_of res) (preg_of a1) k | Ointconst n, nil => - do r <- ireg_of res; OK (Pmov_ri r n :: k) + do r <- ireg_of res; + OK ((if Int.eq_dec n Int.zero then Pxor_r r else Pmov_ri r n) :: k) | Ofloatconst f, nil => - do r <- freg_of res; OK (Pmovsd_fi r f :: k) + do r <- freg_of res; + OK ((if Float.eq_dec f Float.zero then Pxorpd_f r else Pmovsd_fi r f) :: k) | Ocast8signed, a1 :: nil => do r1 <- ireg_of a1; do r <- ireg_of res; mk_intconv Pmovsb_rr r r1 k | Ocast8unsigned, a1 :: nil => |