summaryrefslogtreecommitdiff
path: root/powerpc/PrintAsm.ml
diff options
context:
space:
mode:
authorGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2013-04-20 17:46:58 +0000
committerGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2013-04-20 17:46:58 +0000
commit468f0c4407895557ca8089430f894a85f06afe97 (patch)
tree76d4d5bb302da822797ccbbecd8f4cfd935bf938 /powerpc/PrintAsm.ml
parent600e5f3be65eeffc80d5c4cad800121fe521a1aa (diff)
Add __builtin_bswap16 and __builtin_bswap32 to all ports.
Remove __builtin_{read,write}_reversed from IA32 and ARM ports. Machregs: tighten destroyed_by_builtin Packedstructs: use bswap if read/write-reversed not available. git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@2208 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'powerpc/PrintAsm.ml')
-rw-r--r--powerpc/PrintAsm.ml8
1 files changed, 6 insertions, 2 deletions
diff --git a/powerpc/PrintAsm.ml b/powerpc/PrintAsm.ml
index 319e12c..d48cffe 100644
--- a/powerpc/PrintAsm.ml
+++ b/powerpc/PrintAsm.ml
@@ -440,10 +440,14 @@ let print_builtin_inline oc name args res =
fprintf oc " mulhwu %a, %a, %a\n" ireg res ireg a1 ireg a2
| "__builtin_cntlz", [IR a1], [IR res] ->
fprintf oc " cntlzw %a, %a\n" ireg res ireg a1
- | "__builtin_bswap", [IR a1], [IR res] ->
+ | ("__builtin_bswap" | "__builtin_bswap32"), [IR a1], [IR res] ->
fprintf oc " stwu %a, -8(%a)\n" ireg a1 ireg GPR1;
fprintf oc " lwbrx %a, %a, %a\n" ireg res ireg_or_zero GPR0 ireg GPR1;
fprintf oc " addi %a, %a, 8\n" ireg GPR1 ireg GPR1
+ | "__builtin_bswap16", [IR a1], [IR res] ->
+ fprintf oc " rlwinm %a, %a, 8, 16, 23\n" ireg GPR0 ireg a1;
+ fprintf oc " rlwinm %a, %a, 24, 24, 31\n" ireg res ireg a1;
+ fprintf oc " or %a, %a, %a\n" ireg reg ireg GPR0 ireg res
(* Float arithmetic *)
| "__builtin_fmadd", [FR a1; FR a2; FR a3], [FR res] ->
fprintf oc " fmadd %a, %a, %a, %a\n" freg res freg a1 freg a2 freg a3
@@ -854,7 +858,7 @@ let instr_size = function
begin match ef with
| EF_builtin(name, sg) ->
begin match extern_atom name with
- | "__builtin_bswap" -> 3
+ | "__builtin_bswap" | "__builtin_bswap32" | "__builtin_bswap16" -> 3
| "__builtin_fcti" -> 4
| _ -> 1
end