diff options
author | xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2013-07-29 12:10:11 +0000 |
---|---|---|
committer | xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2013-07-29 12:10:11 +0000 |
commit | 41b7ecb127b93b1aecc29a298ec21dc94603e6fa (patch) | |
tree | 287ce1cbf88caf973534715c7816d57b9089b265 /powerpc/Asm.v | |
parent | 4bf8b331372388dc9cb39154c986c918df9e071c (diff) | |
download | compcert-kvx-41b7ecb127b93b1aecc29a298ec21dc94603e6fa.tar.gz compcert-kvx-41b7ecb127b93b1aecc29a298ec21dc94603e6fa.zip |
Optimize integer divisions by positive constants, turning them into
multiply-high and shifts.
git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@2300 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'powerpc/Asm.v')
-rw-r--r-- | powerpc/Asm.v | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/powerpc/Asm.v b/powerpc/Asm.v index bbe2d3e8..e6e9d76d 100644 --- a/powerpc/Asm.v +++ b/powerpc/Asm.v @@ -193,6 +193,8 @@ Inductive instruction : Type := | Pmtlr: ireg -> instruction (**r move ireg to LR *) | Pmulli: ireg -> ireg -> constant -> instruction (**r integer multiply immediate *) | Pmullw: ireg -> ireg -> ireg -> instruction (**r integer multiply *) + | Pmulhw: ireg -> ireg -> ireg -> instruction (**r multiply high signed *) + | Pmulhwu: ireg -> ireg -> ireg -> instruction (**r multiply high signed *) | Pnand: ireg -> ireg -> ireg -> instruction (**r bitwise not-and *) | Pnor: ireg -> ireg -> ireg -> instruction (**r bitwise not-or *) | Por: ireg -> ireg -> ireg -> instruction (**r bitwise or *) @@ -702,6 +704,10 @@ Definition exec_instr (c: code) (i: instruction) (rs: regset) (m: mem) : outcome Next (nextinstr (rs#rd <- (Val.mul rs#r1 (const_low cst)))) m | Pmullw rd r1 r2 => Next (nextinstr (rs#rd <- (Val.mul rs#r1 rs#r2))) m + | Pmulhw rd r1 r2 => + Next (nextinstr (rs#rd <- (Val.mulhs rs#r1 rs#r2))) m + | Pmulhwu rd r1 r2 => + Next (nextinstr (rs#rd <- (Val.mulhu rs#r1 rs#r2))) m | Pnand rd r1 r2 => Next (nextinstr (rs#rd <- (Val.notint (Val.and rs#r1 rs#r2)))) m | Pnor rd r1 r2 => |