diff options
author | xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2011-08-05 09:40:29 +0000 |
---|---|---|
committer | xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2011-08-05 09:40:29 +0000 |
commit | 40a41ae1131f05269514e21f769d5d8c07c09c4a (patch) | |
tree | 315fa537a178ece91582eec5f92d7f2b56e849ff /arm | |
parent | c72445321a6ae3577a1522c0ad12859565fb19bc (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.ml | 7 |
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 |