aboutsummaryrefslogtreecommitdiffstats
path: root/kvx/Asmexpand.ml
diff options
context:
space:
mode:
Diffstat (limited to 'kvx/Asmexpand.ml')
-rw-r--r--kvx/Asmexpand.ml8
1 files changed, 7 insertions, 1 deletions
diff --git a/kvx/Asmexpand.ml b/kvx/Asmexpand.ml
index 5d4fd2f5..1e76a355 100644
--- a/kvx/Asmexpand.ml
+++ b/kvx/Asmexpand.ml
@@ -359,7 +359,7 @@ let expand_bswap32 d s = let open Asmvliw in
emit (Psrliw(GPR32, s, _8)); emit Psemi;
emit (Pandiw(GPR32, GPR32, coqint_of_camlint 0xFFl)); emit Psemi;
emit (Pslliw(GPR32, GPR32, _16)); emit Psemi;
- emit (Porw(GPR16, GPR16, GPR31)); emit Psemi;
+ emit (Porw(GPR16, GPR16, GPR32)); emit Psemi;
emit (Psrliw(GPR32, s, _16)); emit Psemi;
emit (Pandiw(GPR32, GPR32, coqint_of_camlint 0xFFl)); emit Psemi;
emit (Pslliw(GPR32, GPR32, _8)); emit Psemi;
@@ -399,8 +399,14 @@ let expand_builtin_inline name args res = let open Asmvliw in
(* Vararg stuff *)
| "__builtin_va_start", [BA(IR a)], _ ->
expand_builtin_va_start a
+ | "__builtin_kvx_clzw", [BA(IR a)], BR(IR res) ->
+ emit (Pclzw(res, a))
| "__builtin_clzll", [BA(IR a)], BR(IR res) ->
emit (Pclzll(res, a))
+ | "__builtin_kvx_ctzw", [BA(IR a)], BR(IR res) ->
+ emit (Pctzw(res, a))
+ | "__builtin_ctzll", [BA(IR a)], BR(IR res) ->
+ emit (Pctzll(res, a))
| "__builtin_kvx_stsud", [BA(IR a1); BA(IR a2)], BR(IR res) ->
emit (Pstsud(res, a1, a2))
| "__builtin_kvx_get", [BA_int(n)], BR(IR res) ->