]> git.proxmox.com Git - mirror_qemu.git/commitdiff
target/xtensa: implement salt/saltu
authorMax Filippov <jcmvbkbc@gmail.com>
Sat, 18 Feb 2017 00:39:30 +0000 (16:39 -0800)
committerMax Filippov <jcmvbkbc@gmail.com>
Tue, 9 Jan 2018 17:55:39 +0000 (09:55 -0800)
SALT/SALTU are recent additions to the core Xtensa ISA that do
signed/unsigned setcond.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
target/xtensa/translate.c

index 3e8a0015b31470e52933b536f8d9b552fb73d8b7..bf4bd2d48d627a9878235846356f82f774c13216 100644 (file)
@@ -2194,6 +2194,16 @@ static void translate_s32e(DisasContext *dc, const uint32_t arg[],
     }
 }
 
+static void translate_salt(DisasContext *dc, const uint32_t arg[],
+                           const uint32_t par[])
+{
+    if (gen_window_check3(dc, arg[0], arg[1], arg[2])) {
+        tcg_gen_setcond_i32(par[0],
+                            cpu_R[arg[0]],
+                            cpu_R[arg[1]], cpu_R[arg[2]]);
+    }
+}
+
 static void translate_sext(DisasContext *dc, const uint32_t arg[],
                            const uint32_t par[])
 {
@@ -3661,6 +3671,14 @@ static const XtensaOpcodeOps core_ops[] = {
         .name = "s8i",
         .translate = translate_ldst,
         .par = (const uint32_t[]){MO_UB, false, true},
+    }, {
+        .name = "salt",
+        .translate = translate_salt,
+        .par = (const uint32_t[]){TCG_COND_LT},
+    }, {
+        .name = "saltu",
+        .translate = translate_salt,
+        .par = (const uint32_t[]){TCG_COND_LTU},
     }, {
         .name = "sext",
         .translate = translate_sext,