diff options
author | xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2012-06-09 08:49:06 +0000 |
---|---|---|
committer | xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2012-06-09 08:49:06 +0000 |
commit | f3250c32ff42ae18fd03a5311c1f0caec3415aba (patch) | |
tree | b37da52bcf8015c4b29bb8387c30727e2b4de824 /ia32/PrintAsm.ml | |
parent | 326d33e5b0f9dc0d3ccf6d75c62fedbc3ca085e5 (diff) |
Make min_int / -1 and min_int % -1 semantically undefined
git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1919 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'ia32/PrintAsm.ml')
-rw-r--r-- | ia32/PrintAsm.ml | 12 |
1 files changed, 1 insertions, 11 deletions
diff --git a/ia32/PrintAsm.ml b/ia32/PrintAsm.ml index e9a44eb..4e7c916 100644 --- a/ia32/PrintAsm.ml +++ b/ia32/PrintAsm.ml @@ -591,18 +591,8 @@ let print_instruction oc = function fprintf oc " xorl %%edx, %%edx\n"; fprintf oc " divl %a\n" ireg r1 | Pidiv(r1) -> - let lbl1 = new_label() in - let lbl2 = new_label() in - fprintf oc " cmpl $-1, %a\n" ireg r1; - fprintf oc " je %a\n" label lbl1; fprintf oc " cltd\n"; - fprintf oc " idivl %a\n" ireg r1; - fprintf oc " jmp %a\n" label lbl2; - (* Division by -1 can cause an overflow trap if dividend = min_int. - Force x div (-1) = -x and x mod (-1) = 0. *) - fprintf oc "%a: negl %a\n" label lbl1 ireg EAX; - fprintf oc " xorl %a, %a\n" ireg EDX ireg EDX; - fprintf oc "%a:\n" label lbl2 + fprintf oc " idivl %a\n" ireg r1 | Pand_rr(rd, r1) -> fprintf oc " andl %a, %a\n" ireg r1 ireg rd | Pand_ri(rd, n) -> |