diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 2016-09-18 10:29:11 +0200 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 2016-09-18 10:29:11 +0200 |
commit | 99554c986d023d00192eb3d1fbfe1c0cc138596e (patch) | |
tree | af3509d66ed70784e3b1bd0126bbddb17fd59fb3 /ia32/TargetPrinter.ml | |
parent | 322f3c865341fdfd5d22ab885b2934a5213ddbaa (diff) | |
download | compcert-99554c986d023d00192eb3d1fbfe1c0cc138596e.tar.gz compcert-99554c986d023d00192eb3d1fbfe1c0cc138596e.zip |
IA32: model integer division and modulus closer to the machine
lib/Integers.v: define division-remainder of a double word by a word
ia32/Asm.v: use it to give Pdiv and Pidiv their "true" semantics like in the processor; add Pcltd as an instruction
ia32/*: adapt accordingly
Additional benefit: Pcltd could be used for an alternate implementation of shrximm.
Diffstat (limited to 'ia32/TargetPrinter.ml')
-rw-r--r-- | ia32/TargetPrinter.ml | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/ia32/TargetPrinter.ml b/ia32/TargetPrinter.ml index 979ac800..4ffb701b 100644 --- a/ia32/TargetPrinter.ml +++ b/ia32/TargetPrinter.ml @@ -421,11 +421,11 @@ module Target(System: SYSTEM):TARGET = fprintf oc " imull %a\n" ireg r1 | Pmul_r(r1) -> fprintf oc " mull %a\n" ireg r1 + | Pcltd -> + fprintf oc " cltd\n" | Pdiv(r1) -> - fprintf oc " xorl %%edx, %%edx\n"; fprintf oc " divl %a\n" ireg r1 | Pidiv(r1) -> - fprintf oc " cltd\n"; fprintf oc " idivl %a\n" ireg r1 | Pand_rr(rd, r1) -> fprintf oc " andl %a, %a\n" ireg r1 ireg rd |