summaryrefslogtreecommitdiff
path: root/arm
diff options
context:
space:
mode:
authorGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2011-08-05 09:40:29 +0000
committerGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2011-08-05 09:40:29 +0000
commit40a41ae1131f05269514e21f769d5d8c07c09c4a (patch)
tree315fa537a178ece91582eec5f92d7f2b56e849ff /arm
parentc72445321a6ae3577a1522c0ad12859565fb19bc (diff)
arm/PrintAsm: bugs in expansion of new builtins
test/: testing the builtins git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1696 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'arm')
-rw-r--r--arm/PrintAsm.ml7
1 files changed, 4 insertions, 3 deletions
diff --git a/arm/PrintAsm.ml b/arm/PrintAsm.ml
index c50acba..542f3a4 100644
--- a/arm/PrintAsm.ml
+++ b/arm/PrintAsm.ml
@@ -372,7 +372,7 @@ let print_builtin_vstore oc chunk args =
(* Magic sequence for byte-swapping *)
-let print_bswap oc src dst tmp =
+let print_bswap oc src tmp dst =
(* tmp <> src, tmp <> dst, but can have dst = src *)
(* src = A . B .C . D *)
fprintf oc " eor %a, %a, %a, ror #16\n" ireg tmp ireg src ireg src;
@@ -400,8 +400,9 @@ let print_builtin_inline oc name args res =
(* Memory accesses *)
| "__builtin_read_int16_reversed", [IR a1], IR res ->
fprintf oc " ldrh %a, [%a, #0]\n" ireg res ireg a1;
- fprintf oc " mov %a, %a, lsr #8\n" ireg IR14 ireg res;
- fprintf oc " orr %a, %a, %a, lsl #8\n" ireg res ireg IR14 ireg res; 3
+ fprintf oc " mov %a, %a, lsl #8\n" ireg IR14 ireg res;
+ fprintf oc " and %a, %a, #0xFF00\n" ireg IR14 ireg IR14;
+ fprintf oc " orr %a, %a, %a, lsr #8\n" ireg res ireg IR14 ireg res; 4
| "__builtin_read_int32_reversed", [IR a1], IR res ->
fprintf oc " ldr %a, [%a, #0]\n" ireg res ireg a1;
print_bswap oc res IR14 res; 5