tcg-op.h revision 8b23a6c7e1aee255004dd19098d4c2462b61b849
18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/*
28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Tiny Code Generator for QEMU
38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *
48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Copyright (c) 2008 Fabrice Bellard
58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *
68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Permission is hereby granted, free of charge, to any person obtaining a copy
78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * of this software and associated documentation files (the "Software"), to deal
88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * in the Software without restriction, including without limitation the rights
98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * copies of the Software, and to permit persons to whom the Software is
118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * furnished to do so, subject to the following conditions:
128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *
138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * The above copyright notice and this permission notice shall be included in
148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * all copies or substantial portions of the Software.
158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *
168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * THE SOFTWARE.
238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */
248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "tcg.h"
258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef CONFIG_DYNGEN_OP
278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* legacy dyngen operations */
288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "gen-op.h"
298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint gen_new_label(void);
328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_op1(int opc, TCGv arg1)
348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg1);
378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_op1i(int opc, TCGArg arg1)
408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg1;
438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_op2(int opc, TCGv arg1, TCGv arg2)
468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg1);
498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg2);
508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_op2i(int opc, TCGv arg1, TCGArg arg2)
538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg1);
568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg2;
578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_op2ii(int opc, TCGArg arg1, TCGArg arg2)
608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg1;
638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg2;
648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_op3(int opc, TCGv arg1, TCGv arg2, TCGv arg3)
678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg1);
708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg2);
718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg3);
728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_op3i(int opc, TCGv arg1, TCGv arg2, TCGArg arg3)
758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg1);
788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg2);
798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg3;
808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_op4(int opc, TCGv arg1, TCGv arg2, TCGv arg3,
838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                               TCGv arg4)
848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg1);
878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg2);
888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg3);
898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg4);
908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_op4i(int opc, TCGv arg1, TCGv arg2, TCGv arg3,
938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                TCGArg arg4)
948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg1);
978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg2);
988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg3);
998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg4;
1008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
1018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_op4ii(int opc, TCGv arg1, TCGv arg2, TCGArg arg3,
1038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                 TCGArg arg4)
1048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
1068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg1);
1078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg2);
1088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg3;
1098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg4;
1108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
1118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_op5(int opc, TCGv arg1, TCGv arg2,
1138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                               TCGv arg3, TCGv arg4,
1148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                               TCGv arg5)
1158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
1178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg1);
1188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg2);
1198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg3);
1208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg4);
1218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg5);
1228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
1238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_op5i(int opc, TCGv arg1, TCGv arg2,
1258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                TCGv arg3, TCGv arg4,
1268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                TCGArg arg5)
1278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
1298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg1);
1308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg2);
1318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg3);
1328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg4);
1338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg5;
1348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
1358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_op6(int opc, TCGv arg1, TCGv arg2,
1378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                               TCGv arg3, TCGv arg4,
1388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                               TCGv arg5, TCGv arg6)
1398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
1418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg1);
1428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg2);
1438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg3);
1448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg4);
1458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg5);
1468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg6);
1478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
1488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_op6ii(int opc, TCGv arg1, TCGv arg2,
1508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                 TCGv arg3, TCGv arg4,
1518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                 TCGArg arg5, TCGArg arg6)
1528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
1548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg1);
1558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg2);
1568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg3);
1578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = GET_TCGV(arg4);
1588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg5;
1598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg6;
1608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
1618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void gen_set_label(int n)
1638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1i(INDEX_op_set_label, n);
1658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
1668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_br(int label)
1688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1i(INDEX_op_br, label);
1708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
1718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_mov_i32(TCGv ret, TCGv arg)
1738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (GET_TCGV(ret) != GET_TCGV(arg))
1758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_op2(INDEX_op_mov_i32, ret, arg);
1768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
1778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_movi_i32(TCGv ret, int32_t arg)
1798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op2i(INDEX_op_movi_i32, ret, arg);
1818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
1828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* helper calls */
1848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TCG_HELPER_CALL_FLAGS 0
1858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_helper_0_0(void *func)
1878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0;
1898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_const_ptr((tcg_target_long)func);
1908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_call(&tcg_ctx,
1918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 t0, TCG_HELPER_CALL_FLAGS,
1928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 0, NULL, 0, NULL);
1938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
1948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
1958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_helper_0_1(void *func, TCGv arg)
1978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0;
1998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_const_ptr((tcg_target_long)func);
2008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_call(&tcg_ctx,
2018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 t0, TCG_HELPER_CALL_FLAGS,
2028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 0, NULL, 1, &arg);
2038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
2048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
2058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_helper_0_2(void *func, TCGv arg1, TCGv arg2)
2078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
2088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv args[2];
2098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0;
2108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    args[0] = arg1;
2118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    args[1] = arg2;
2128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_const_ptr((tcg_target_long)func);
2138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_call(&tcg_ctx,
2148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 t0, TCG_HELPER_CALL_FLAGS,
2158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 0, NULL, 2, args);
2168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
2178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
2188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_helper_0_3(void *func,
2208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                      TCGv arg1, TCGv arg2, TCGv arg3)
2218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
2228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv args[3];
2238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0;
2248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    args[0] = arg1;
2258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    args[1] = arg2;
2268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    args[2] = arg3;
2278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_const_ptr((tcg_target_long)func);
2288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_call(&tcg_ctx,
2298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 t0, TCG_HELPER_CALL_FLAGS,
2308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 0, NULL, 3, args);
2318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
2328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
2338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_helper_0_4(void *func, TCGv arg1, TCGv arg2,
2358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                      TCGv arg3, TCGv arg4)
2368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
2378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv args[4];
2388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0;
2398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    args[0] = arg1;
2408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    args[1] = arg2;
2418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    args[2] = arg3;
2428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    args[3] = arg4;
2438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_const_ptr((tcg_target_long)func);
2448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_call(&tcg_ctx,
2458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 t0, TCG_HELPER_CALL_FLAGS,
2468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 0, NULL, 4, args);
2478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
2488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
2498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_helper_1_0(void *func, TCGv ret)
2518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
2528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0;
2538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_const_ptr((tcg_target_long)func);
2548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_call(&tcg_ctx,
2558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 t0, TCG_HELPER_CALL_FLAGS,
2568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 1, &ret, 0, NULL);
2578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
2588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
2598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_helper_1_1(void *func, TCGv ret, TCGv arg1)
2618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
2628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0;
2638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_const_ptr((tcg_target_long)func);
2648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_call(&tcg_ctx,
2658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 t0, TCG_HELPER_CALL_FLAGS,
2668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 1, &ret, 1, &arg1);
2678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
2688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
2698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_helper_1_2(void *func, TCGv ret,
2718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                      TCGv arg1, TCGv arg2)
2728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
2738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv args[2];
2748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0;
2758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    args[0] = arg1;
2768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    args[1] = arg2;
2778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_const_ptr((tcg_target_long)func);
2788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_call(&tcg_ctx,
2798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 t0, TCG_HELPER_CALL_FLAGS,
2808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 1, &ret, 2, args);
2818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
2828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
2838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_helper_1_3(void *func, TCGv ret,
2858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                      TCGv arg1, TCGv arg2, TCGv arg3)
2868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
2878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv args[3];
2888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0;
2898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    args[0] = arg1;
2908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    args[1] = arg2;
2918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    args[2] = arg3;
2928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_const_ptr((tcg_target_long)func);
2938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_call(&tcg_ctx,
2948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 t0, TCG_HELPER_CALL_FLAGS,
2958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 1, &ret, 3, args);
2968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
2978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
2988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_helper_1_4(void *func, TCGv ret,
3008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                      TCGv arg1, TCGv arg2, TCGv arg3,
3018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                      TCGv arg4)
3028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv args[4];
3048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0;
3058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    args[0] = arg1;
3068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    args[1] = arg2;
3078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    args[2] = arg3;
3088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    args[3] = arg4;
3098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_const_ptr((tcg_target_long)func);
3108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_call(&tcg_ctx,
3118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 t0, TCG_HELPER_CALL_FLAGS,
3128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 1, &ret, 4, args);
3138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
3148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* 32 bit ops */
3178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ld8u_i32(TCGv ret, TCGv arg2, tcg_target_long offset)
3198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_ld8u_i32, ret, arg2, offset);
3218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ld8s_i32(TCGv ret, TCGv arg2, tcg_target_long offset)
3248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_ld8s_i32, ret, arg2, offset);
3268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ld16u_i32(TCGv ret, TCGv arg2, tcg_target_long offset)
3298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_ld16u_i32, ret, arg2, offset);
3318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ld16s_i32(TCGv ret, TCGv arg2, tcg_target_long offset)
3348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_ld16s_i32, ret, arg2, offset);
3368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ld_i32(TCGv ret, TCGv arg2, tcg_target_long offset)
3398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_ld_i32, ret, arg2, offset);
3418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_st8_i32(TCGv arg1, TCGv arg2, tcg_target_long offset)
3448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_st8_i32, arg1, arg2, offset);
3468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_st16_i32(TCGv arg1, TCGv arg2, tcg_target_long offset)
3498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_st16_i32, arg1, arg2, offset);
3518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_st_i32(TCGv arg1, TCGv arg2, tcg_target_long offset)
3548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_st_i32, arg1, arg2, offset);
3568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_add_i32(TCGv ret, TCGv arg1, TCGv arg2)
3598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_add_i32, ret, arg1, arg2);
3618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_addi_i32(TCGv ret, TCGv arg1, int32_t arg2)
3648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* some cases can be optimized here */
3668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
3678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
3688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
3698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        TCGv t0 = tcg_const_i32(arg2);
3708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_add_i32(ret, arg1, t0);
3718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_temp_free(t0);
3728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
3738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_sub_i32(TCGv ret, TCGv arg1, TCGv arg2)
3768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_sub_i32, ret, arg1, arg2);
3788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_subi_i32(TCGv ret, TCGv arg1, int32_t arg2)
3818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* some cases can be optimized here */
3838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
3848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
3858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
3868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        TCGv t0 = tcg_const_i32(arg2);
3878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_sub_i32(ret, arg1, t0);
3888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_temp_free(t0);
3898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
3908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_and_i32(TCGv ret, TCGv arg1, TCGv arg2)
3938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_and_i32, ret, arg1, arg2);
3958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_andi_i32(TCGv ret, TCGv arg1, int32_t arg2)
3988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* some cases can be optimized here */
4008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
4018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_movi_i32(ret, 0);
4028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else if (arg2 == 0xffffffff) {
4038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
4048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
4058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        TCGv t0 = tcg_const_i32(arg2);
4068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_and_i32(ret, arg1, t0);
4078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_temp_free(t0);
4088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
4098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_or_i32(TCGv ret, TCGv arg1, TCGv arg2)
4128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_or_i32, ret, arg1, arg2);
4148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ori_i32(TCGv ret, TCGv arg1, int32_t arg2)
4178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* some cases can be optimized here */
4198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0xffffffff) {
4208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_movi_i32(ret, 0xffffffff);
4218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else if (arg2 == 0) {
4228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
4238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
4248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        TCGv t0 = tcg_const_i32(arg2);
4258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_or_i32(ret, arg1, t0);
4268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_temp_free(t0);
4278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
4288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_xor_i32(TCGv ret, TCGv arg1, TCGv arg2)
4318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_xor_i32, ret, arg1, arg2);
4338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_xori_i32(TCGv ret, TCGv arg1, int32_t arg2)
4368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* some cases can be optimized here */
4388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
4398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
4408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
4418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        TCGv t0 = tcg_const_i32(arg2);
4428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_xor_i32(ret, arg1, t0);
4438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_temp_free(t0);
4448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
4458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_shl_i32(TCGv ret, TCGv arg1, TCGv arg2)
4488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_shl_i32, ret, arg1, arg2);
4508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_shli_i32(TCGv ret, TCGv arg1, int32_t arg2)
4538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
4558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
4568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
4578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        TCGv t0 = tcg_const_i32(arg2);
4588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_shl_i32(ret, arg1, t0);
4598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_temp_free(t0);
4608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
4618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_shr_i32(TCGv ret, TCGv arg1, TCGv arg2)
4648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_shr_i32, ret, arg1, arg2);
4668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_shri_i32(TCGv ret, TCGv arg1, int32_t arg2)
4698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
4718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
4728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
4738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        TCGv t0 = tcg_const_i32(arg2);
4748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_shr_i32(ret, arg1, t0);
4758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_temp_free(t0);
4768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
4778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_sar_i32(TCGv ret, TCGv arg1, TCGv arg2)
4808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_sar_i32, ret, arg1, arg2);
4828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_sari_i32(TCGv ret, TCGv arg1, int32_t arg2)
4858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
4878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
4888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
4898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        TCGv t0 = tcg_const_i32(arg2);
4908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_sar_i32(ret, arg1, t0);
4918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_temp_free(t0);
4928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
4938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_brcond_i32(int cond, TCGv arg1, TCGv arg2,
4968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                      int label_index)
4978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op4ii(INDEX_op_brcond_i32, arg1, arg2, cond, label_index);
4998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_brcondi_i32(int cond, TCGv arg1, int32_t arg2,
5028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                       int label_index)
5038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0 = tcg_const_i32(arg2);
5058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_brcond_i32(cond, arg1, t0, label_index);
5068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
5078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_mul_i32(TCGv ret, TCGv arg1, TCGv arg2)
5108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_mul_i32, ret, arg1, arg2);
5128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_muli_i32(TCGv ret, TCGv arg1, int32_t arg2)
5158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0 = tcg_const_i32(arg2);
5178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_mul_i32(ret, arg1, t0);
5188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
5198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_div_i32
5228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_div_i32(TCGv ret, TCGv arg1, TCGv arg2)
5238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_div_i32, ret, arg1, arg2);
5258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_rem_i32(TCGv ret, TCGv arg1, TCGv arg2)
5288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_rem_i32, ret, arg1, arg2);
5308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_divu_i32(TCGv ret, TCGv arg1, TCGv arg2)
5338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_divu_i32, ret, arg1, arg2);
5358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_remu_i32(TCGv ret, TCGv arg1, TCGv arg2)
5388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_remu_i32, ret, arg1, arg2);
5408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
5428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_div_i32(TCGv ret, TCGv arg1, TCGv arg2)
5438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0;
5458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_temp_new(TCG_TYPE_I32);
5468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(t0, arg1, 31);
5478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op5(INDEX_op_div2_i32, ret, t0, arg1, t0, arg2);
5488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
5498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_rem_i32(TCGv ret, TCGv arg1, TCGv arg2)
5528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0;
5548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_temp_new(TCG_TYPE_I32);
5558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(t0, arg1, 31);
5568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op5(INDEX_op_div2_i32, t0, ret, arg1, t0, arg2);
5578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
5588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_divu_i32(TCGv ret, TCGv arg1, TCGv arg2)
5618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0;
5638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_temp_new(TCG_TYPE_I32);
5648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(t0, 0);
5658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op5(INDEX_op_divu2_i32, ret, t0, arg1, t0, arg2);
5668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
5678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_remu_i32(TCGv ret, TCGv arg1, TCGv arg2)
5708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0;
5728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_temp_new(TCG_TYPE_I32);
5738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(t0, 0);
5748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op5(INDEX_op_divu2_i32, t0, ret, arg1, t0, arg2);
5758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
5768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
5788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32
5808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_mov_i64(TCGv ret, TCGv arg)
5828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (GET_TCGV(ret) != GET_TCGV(arg)) {
5848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg);
5858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg));
5868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
5878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_movi_i64(TCGv ret, int64_t arg)
5908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(ret, arg);
5928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), arg >> 32);
5938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ld8u_i64(TCGv ret, TCGv arg2, tcg_target_long offset)
5968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ld8u_i32(ret, arg2, offset);
5988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
5998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ld8s_i64(TCGv ret, TCGv arg2, tcg_target_long offset)
6028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ld8s_i32(ret, arg2, offset);
6048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(TCGV_HIGH(ret), ret, 31);
6058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ld16u_i64(TCGv ret, TCGv arg2, tcg_target_long offset)
6088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ld16u_i32(ret, arg2, offset);
6108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
6118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ld16s_i64(TCGv ret, TCGv arg2, tcg_target_long offset)
6148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ld16s_i32(ret, arg2, offset);
6168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(TCGV_HIGH(ret), ret, 31);
6178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ld32u_i64(TCGv ret, TCGv arg2, tcg_target_long offset)
6208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ld_i32(ret, arg2, offset);
6228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
6238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ld32s_i64(TCGv ret, TCGv arg2, tcg_target_long offset)
6268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ld_i32(ret, arg2, offset);
6288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(TCGV_HIGH(ret), ret, 31);
6298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ld_i64(TCGv ret, TCGv arg2, tcg_target_long offset)
6328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* since arg2 and ret have different types, they cannot be the
6348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       same temporary */
6358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_WORDS_BIGENDIAN
6368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ld_i32(TCGV_HIGH(ret), arg2, offset);
6378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ld_i32(ret, arg2, offset + 4);
6388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
6398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ld_i32(ret, arg2, offset);
6408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ld_i32(TCGV_HIGH(ret), arg2, offset + 4);
6418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
6428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_st8_i64(TCGv arg1, TCGv arg2, tcg_target_long offset)
6458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_st8_i32(arg1, arg2, offset);
6478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_st16_i64(TCGv arg1, TCGv arg2, tcg_target_long offset)
6508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_st16_i32(arg1, arg2, offset);
6528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_st32_i64(TCGv arg1, TCGv arg2, tcg_target_long offset)
6558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_st_i32(arg1, arg2, offset);
6578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_st_i64(TCGv arg1, TCGv arg2, tcg_target_long offset)
6608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_WORDS_BIGENDIAN
6628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_st_i32(TCGV_HIGH(arg1), arg2, offset);
6638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_st_i32(arg1, arg2, offset + 4);
6648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
6658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_st_i32(arg1, arg2, offset);
6668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_st_i32(TCGV_HIGH(arg1), arg2, offset + 4);
6678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
6688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_add_i64(TCGv ret, TCGv arg1, TCGv arg2)
6718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op6(INDEX_op_add2_i32, ret, TCGV_HIGH(ret),
6738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                arg1, TCGV_HIGH(arg1), arg2, TCGV_HIGH(arg2));
6748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_addi_i64(TCGv ret, TCGv arg1, int64_t arg2)
6778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0 = tcg_const_i64(arg2);
6798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_add_i64(ret, arg1, t0);
6808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
6818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_sub_i64(TCGv ret, TCGv arg1, TCGv arg2)
6848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op6(INDEX_op_sub2_i32, ret, TCGV_HIGH(ret),
6868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                arg1, TCGV_HIGH(arg1), arg2, TCGV_HIGH(arg2));
6878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_subi_i64(TCGv ret, TCGv arg1, int64_t arg2)
6908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0 = tcg_const_i64(arg2);
6928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sub_i64(ret, arg1, t0);
6938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
6948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_and_i64(TCGv ret, TCGv arg1, TCGv arg2)
6978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_and_i32(ret, arg1, arg2);
6998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_and_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
7008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_andi_i64(TCGv ret, TCGv arg1, int64_t arg2)
7038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(ret, arg1, arg2);
7058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32);
7068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_or_i64(TCGv ret, TCGv arg1, TCGv arg2)
7098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i32(ret, arg1, arg2);
7118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
7128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ori_i64(TCGv ret, TCGv arg1, int64_t arg2)
7158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ori_i32(ret, arg1, arg2);
7178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ori_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32);
7188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_xor_i64(TCGv ret, TCGv arg1, TCGv arg2)
7218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xor_i32(ret, arg1, arg2);
7238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xor_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
7248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_xori_i64(TCGv ret, TCGv arg1, int64_t arg2)
7278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xori_i32(ret, arg1, arg2);
7298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xori_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32);
7308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* XXX: use generic code when basic block handling is OK or CPU
7338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   specific code (x86) */
7348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_shl_i64(TCGv ret, TCGv arg1, TCGv arg2)
7358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_helper_1_2(tcg_helper_shl_i64, ret, arg1, arg2);
7378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_shli_i64(TCGv ret, TCGv arg1, int64_t arg2)
7408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shifti_i64(ret, arg1, arg2, 0, 0);
7428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_shr_i64(TCGv ret, TCGv arg1, TCGv arg2)
7458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_helper_1_2(tcg_helper_shr_i64, ret, arg1, arg2);
7478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_shri_i64(TCGv ret, TCGv arg1, int64_t arg2)
7508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shifti_i64(ret, arg1, arg2, 1, 0);
7528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_sar_i64(TCGv ret, TCGv arg1, TCGv arg2)
7558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_helper_1_2(tcg_helper_sar_i64, ret, arg1, arg2);
7578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_sari_i64(TCGv ret, TCGv arg1, int64_t arg2)
7608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shifti_i64(ret, arg1, arg2, 1, 1);
7628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_brcond_i64(int cond, TCGv arg1, TCGv arg2,
7658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                      int label_index)
7668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op6ii(INDEX_op_brcond2_i32,
7688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                  arg1, TCGV_HIGH(arg1), arg2, TCGV_HIGH(arg2),
7698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                  cond, label_index);
7708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_mul_i64(TCGv ret, TCGv arg1, TCGv arg2)
7738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0, t1;
7758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_temp_new(TCG_TYPE_I64);
7778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t1 = tcg_temp_new(TCG_TYPE_I32);
7788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op4(INDEX_op_mulu2_i32, t0, TCGV_HIGH(t0), arg1, arg2);
7808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_mul_i32(t1, arg1, TCGV_HIGH(arg2));
7828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_add_i32(TCGV_HIGH(t0), TCGV_HIGH(t0), t1);
7838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_mul_i32(t1, TCGV_HIGH(arg1), arg2);
7848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_add_i32(TCGV_HIGH(t0), TCGV_HIGH(t0), t1);
7858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_mov_i64(ret, t0);
7878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
7888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t1);
7898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_muli_i64(TCGv ret, TCGv arg1, int64_t arg2)
7928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0 = tcg_const_i64(arg2);
7948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_mul_i64(ret, arg1, t0);
7958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
7968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_div_i64(TCGv ret, TCGv arg1, TCGv arg2)
7998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_helper_1_2(tcg_helper_div_i64, ret, arg1, arg2);
8018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_rem_i64(TCGv ret, TCGv arg1, TCGv arg2)
8048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_helper_1_2(tcg_helper_rem_i64, ret, arg1, arg2);
8068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_divu_i64(TCGv ret, TCGv arg1, TCGv arg2)
8098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_helper_1_2(tcg_helper_divu_i64, ret, arg1, arg2);
8118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_remu_i64(TCGv ret, TCGv arg1, TCGv arg2)
8148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_helper_1_2(tcg_helper_remu_i64, ret, arg1, arg2);
8168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
8198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_mov_i64(TCGv ret, TCGv arg)
8218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (GET_TCGV(ret) != GET_TCGV(arg))
8238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_op2(INDEX_op_mov_i64, ret, arg);
8248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_movi_i64(TCGv ret, int64_t arg)
8278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op2i(INDEX_op_movi_i64, ret, arg);
8298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ld8u_i64(TCGv ret, TCGv arg2,
8328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                    tcg_target_long offset)
8338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_ld8u_i64, ret, arg2, offset);
8358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ld8s_i64(TCGv ret, TCGv arg2,
8388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                    tcg_target_long offset)
8398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_ld8s_i64, ret, arg2, offset);
8418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ld16u_i64(TCGv ret, TCGv arg2,
8448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                     tcg_target_long offset)
8458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_ld16u_i64, ret, arg2, offset);
8478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ld16s_i64(TCGv ret, TCGv arg2,
8508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                     tcg_target_long offset)
8518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_ld16s_i64, ret, arg2, offset);
8538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ld32u_i64(TCGv ret, TCGv arg2,
8568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                     tcg_target_long offset)
8578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_ld32u_i64, ret, arg2, offset);
8598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ld32s_i64(TCGv ret, TCGv arg2,
8628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                     tcg_target_long offset)
8638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_ld32s_i64, ret, arg2, offset);
8658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ld_i64(TCGv ret, TCGv arg2, tcg_target_long offset)
8688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_ld_i64, ret, arg2, offset);
8708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_st8_i64(TCGv arg1, TCGv arg2,
8738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                   tcg_target_long offset)
8748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_st8_i64, arg1, arg2, offset);
8768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_st16_i64(TCGv arg1, TCGv arg2,
8798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                    tcg_target_long offset)
8808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_st16_i64, arg1, arg2, offset);
8828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_st32_i64(TCGv arg1, TCGv arg2,
8858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                    tcg_target_long offset)
8868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_st32_i64, arg1, arg2, offset);
8888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_st_i64(TCGv arg1, TCGv arg2, tcg_target_long offset)
8918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_st_i64, arg1, arg2, offset);
8938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_add_i64(TCGv ret, TCGv arg1, TCGv arg2)
8968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_add_i64, ret, arg1, arg2);
8988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_addi_i64(TCGv ret, TCGv arg1, int64_t arg2)
9018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0 = tcg_const_i64(arg2);
9038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_add_i64(ret, arg1, t0);
9048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
9058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_sub_i64(TCGv ret, TCGv arg1, TCGv arg2)
9088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_sub_i64, ret, arg1, arg2);
9108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_subi_i64(TCGv ret, TCGv arg1, int64_t arg2)
9138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0 = tcg_const_i64(arg2);
9158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sub_i64(ret, arg1, t0);
9168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
9178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_and_i64(TCGv ret, TCGv arg1, TCGv arg2)
9208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_and_i64, ret, arg1, arg2);
9228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_andi_i64(TCGv ret, TCGv arg1, int64_t arg2)
9258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0 = tcg_const_i64(arg2);
9278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_and_i64(ret, arg1, t0);
9288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
9298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_or_i64(TCGv ret, TCGv arg1, TCGv arg2)
9328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_or_i64, ret, arg1, arg2);
9348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ori_i64(TCGv ret, TCGv arg1, int64_t arg2)
9378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0 = tcg_const_i64(arg2);
9398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(ret, arg1, t0);
9408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
9418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_xor_i64(TCGv ret, TCGv arg1, TCGv arg2)
9448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_xor_i64, ret, arg1, arg2);
9468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_xori_i64(TCGv ret, TCGv arg1, int64_t arg2)
9498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0 = tcg_const_i64(arg2);
9518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xor_i64(ret, arg1, t0);
9528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
9538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_shl_i64(TCGv ret, TCGv arg1, TCGv arg2)
9568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_shl_i64, ret, arg1, arg2);
9588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_shli_i64(TCGv ret, TCGv arg1, int64_t arg2)
9618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
9638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i64(ret, arg1);
9648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
9658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        TCGv t0 = tcg_const_i64(arg2);
9668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_shl_i64(ret, arg1, t0);
9678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_temp_free(t0);
9688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
9698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_shr_i64(TCGv ret, TCGv arg1, TCGv arg2)
9728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_shr_i64, ret, arg1, arg2);
9748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_shri_i64(TCGv ret, TCGv arg1, int64_t arg2)
9778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
9798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i64(ret, arg1);
9808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
9818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        TCGv t0 = tcg_const_i64(arg2);
9828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_shr_i64(ret, arg1, t0);
9838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_temp_free(t0);
9848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
9858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_sar_i64(TCGv ret, TCGv arg1, TCGv arg2)
9888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_sar_i64, ret, arg1, arg2);
9908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_sari_i64(TCGv ret, TCGv arg1, int64_t arg2)
9938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
9958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i64(ret, arg1);
9968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
9978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        TCGv t0 = tcg_const_i64(arg2);
9988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_sar_i64(ret, arg1, t0);
9998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_temp_free(t0);
10008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
10018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_brcond_i64(int cond, TCGv arg1, TCGv arg2,
10048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                      int label_index)
10058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op4ii(INDEX_op_brcond_i64, arg1, arg2, cond, label_index);
10078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_mul_i64(TCGv ret, TCGv arg1, TCGv arg2)
10108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_mul_i64, ret, arg1, arg2);
10128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_muli_i64(TCGv ret, TCGv arg1, int64_t arg2)
10158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0 = tcg_const_i64(arg2);
10178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_mul_i64(ret, arg1, t0);
10188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
10198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_div_i64
10228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_div_i64(TCGv ret, TCGv arg1, TCGv arg2)
10238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_div_i64, ret, arg1, arg2);
10258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_rem_i64(TCGv ret, TCGv arg1, TCGv arg2)
10288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_rem_i64, ret, arg1, arg2);
10308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_divu_i64(TCGv ret, TCGv arg1, TCGv arg2)
10338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_divu_i64, ret, arg1, arg2);
10358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_remu_i64(TCGv ret, TCGv arg1, TCGv arg2)
10388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3(INDEX_op_remu_i64, ret, arg1, arg2);
10408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
10428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_div_i64(TCGv ret, TCGv arg1, TCGv arg2)
10438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0;
10458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_temp_new(TCG_TYPE_I64);
10468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i64(t0, arg1, 63);
10478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op5(INDEX_op_div2_i64, ret, t0, arg1, t0, arg2);
10488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
10498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_rem_i64(TCGv ret, TCGv arg1, TCGv arg2)
10528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0;
10548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_temp_new(TCG_TYPE_I64);
10558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i64(t0, arg1, 63);
10568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op5(INDEX_op_div2_i64, t0, ret, arg1, t0, arg2);
10578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
10588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_divu_i64(TCGv ret, TCGv arg1, TCGv arg2)
10618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0;
10638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_temp_new(TCG_TYPE_I64);
10648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i64(t0, 0);
10658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op5(INDEX_op_divu2_i64, ret, t0, arg1, t0, arg2);
10668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
10678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_remu_i64(TCGv ret, TCGv arg1, TCGv arg2)
10708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0;
10728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_temp_new(TCG_TYPE_I64);
10738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i64(t0, 0);
10748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op5(INDEX_op_divu2_i64, t0, ret, arg1, t0, arg2);
10758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
10768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
10788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
10808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_brcondi_i64(int cond, TCGv arg1, int64_t arg2,
10828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                       int label_index)
10838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0 = tcg_const_i64(arg2);
10858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_brcond_i64(cond, arg1, t0, label_index);
10868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
10878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/***************************************/
10908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* optional operations */
10918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ext8s_i32(TCGv ret, TCGv arg)
10938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext8s_i32
10958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op2(INDEX_op_ext8s_i32, ret, arg);
10968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
10978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i32(ret, arg, 24);
10988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(ret, ret, 24);
10998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
11008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ext16s_i32(TCGv ret, TCGv arg)
11038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext16s_i32
11058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op2(INDEX_op_ext16s_i32, ret, arg);
11068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
11078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i32(ret, arg, 16);
11088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(ret, ret, 16);
11098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
11108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* These are currently just for convenience.
11138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   We assume a target will recognise these automatically .  */
11148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ext8u_i32(TCGv ret, TCGv arg)
11158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(ret, arg, 0xffu);
11178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ext16u_i32(TCGv ret, TCGv arg)
11208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(ret, arg, 0xffffu);
11228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the two high bytes are set to zero */
11258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_bswap16_i32(TCGv ret, TCGv arg)
11268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_bswap16_i32
11288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op2(INDEX_op_bswap16_i32, ret, arg);
11298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
11308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0, t1;
11318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_temp_new(TCG_TYPE_I32);
11328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t1 = tcg_temp_new(TCG_TYPE_I32);
11338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i32(t0, arg, 8);
11358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(t1, arg, 0x000000ff);
11368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i32(t1, t1, 8);
11378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i32(ret, t0, t1);
11388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
11398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t1);
11408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
11418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_bswap_i32(TCGv ret, TCGv arg)
11448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_bswap_i32
11468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op2(INDEX_op_bswap_i32, ret, arg);
11478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
11488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0, t1;
11498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_temp_new(TCG_TYPE_I32);
11508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t1 = tcg_temp_new(TCG_TYPE_I32);
11518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i32(t0, arg, 24);
11538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(t1, arg, 0x0000ff00);
11558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i32(t1, t1, 8);
11568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i32(t0, t0, t1);
11578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i32(t1, arg, 8);
11598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(t1, t1, 0x0000ff00);
11608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i32(t0, t0, t1);
11618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i32(t1, arg, 24);
11638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i32(ret, t0, t1);
11648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
11658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t1);
11668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
11678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32
11708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ext8s_i64(TCGv ret, TCGv arg)
11718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ext8s_i32(ret, arg);
11738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(TCGV_HIGH(ret), ret, 31);
11748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ext16s_i64(TCGv ret, TCGv arg)
11778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ext16s_i32(ret, arg);
11798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(TCGV_HIGH(ret), ret, 31);
11808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ext32s_i64(TCGv ret, TCGv arg)
11838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_mov_i32(ret, arg);
11858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(TCGV_HIGH(ret), ret, 31);
11868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ext8u_i64(TCGv ret, TCGv arg)
11898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ext8u_i32(ret, arg);
11918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
11928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ext16u_i64(TCGv ret, TCGv arg)
11958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ext16u_i32(ret, arg);
11978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
11988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ext32u_i64(TCGv ret, TCGv arg)
12018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_mov_i32(ret, arg);
12038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
12048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_trunc_i64_i32(TCGv ret, TCGv arg)
12078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_mov_i32(ret, arg);
12098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_extu_i32_i64(TCGv ret, TCGv arg)
12128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_mov_i32(ret, arg);
12148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
12158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ext_i32_i64(TCGv ret, TCGv arg)
12188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_mov_i32(ret, arg);
12208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(TCGV_HIGH(ret), ret, 31);
12218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_bswap_i64(TCGv ret, TCGv arg)
12248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0, t1;
12268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_temp_new(TCG_TYPE_I32);
12278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t1 = tcg_temp_new(TCG_TYPE_I32);
12288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_bswap_i32(t0, arg);
12308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_bswap_i32(t1, TCGV_HIGH(arg));
12318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_mov_i32(ret, t1);
12328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_mov_i32(TCGV_HIGH(ret), t0);
12338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
12348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t1);
12358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
12378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ext8s_i64(TCGv ret, TCGv arg)
12398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext8s_i64
12418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op2(INDEX_op_ext8s_i64, ret, arg);
12428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
12438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(ret, arg, 56);
12448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i64(ret, ret, 56);
12458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
12468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ext16s_i64(TCGv ret, TCGv arg)
12498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext16s_i64
12518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op2(INDEX_op_ext16s_i64, ret, arg);
12528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
12538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(ret, arg, 48);
12548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i64(ret, ret, 48);
12558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
12568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ext32s_i64(TCGv ret, TCGv arg)
12598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext32s_i64
12618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op2(INDEX_op_ext32s_i64, ret, arg);
12628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
12638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(ret, arg, 32);
12648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i64(ret, ret, 32);
12658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
12668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ext8u_i64(TCGv ret, TCGv arg)
12698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(ret, arg, 0xffu);
12718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ext16u_i64(TCGv ret, TCGv arg)
12748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(ret, arg, 0xffffu);
12768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ext32u_i64(TCGv ret, TCGv arg)
12798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(ret, arg, 0xffffffffu);
12818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the target supports move between 32 and 64 bit
12848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   registers.  This will probably break MIPS64 targets.  */
12858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_trunc_i64_i32(TCGv ret, TCGv arg)
12868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_mov_i32(ret, arg);
12888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the target supports move between 32 and 64 bit
12918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   registers */
12928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_extu_i32_i64(TCGv ret, TCGv arg)
12938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(ret, arg, 0xffffffffu);
12958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the target supports move between 32 and 64 bit
12988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   registers */
12998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_ext_i32_i64(TCGv ret, TCGv arg)
13008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ext32s_i64(ret, arg);
13028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_bswap_i64(TCGv ret, TCGv arg)
13058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_bswap_i64
13078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op2(INDEX_op_bswap_i64, ret, arg);
13088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
13098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0, t1;
13108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t0 = tcg_temp_new(TCG_TYPE_I32);
13118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    t1 = tcg_temp_new(TCG_TYPE_I32);
13128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(t0, arg, 56);
13148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, arg, 0x0000ff00);
13168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(t1, t1, 40);
13178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
13188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, arg, 0x00ff0000);
13208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(t1, t1, 24);
13218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
13228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, arg, 0xff000000);
13248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(t1, t1, 8);
13258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
13268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i64(t1, arg, 8);
13288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, t1, 0xff000000);
13298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
13308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i64(t1, arg, 24);
13328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, t1, 0x00ff0000);
13338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
13348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i64(t1, arg, 40);
13368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, t1, 0x0000ff00);
13378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
13388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i64(t1, arg, 56);
13408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(ret, t0, t1);
13418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
13428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t1);
13438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
13448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
13478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_neg_i32(TCGv ret, TCGv arg)
13498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_neg_i32
13518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op2(INDEX_op_neg_i32, ret, arg);
13528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
13538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0 = tcg_const_i32(0);
13548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sub_i32(ret, t0, arg);
13558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
13568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
13578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_neg_i64(TCGv ret, TCGv arg)
13608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_neg_i64
13628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op2(INDEX_op_neg_i64, ret, arg);
13638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
13648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    TCGv t0 = tcg_const_i64(0);
13658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sub_i64(ret, t0, arg);
13668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_temp_free(t0);
13678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
13688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_not_i32(TCGv ret, TCGv arg)
13718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xori_i32(ret, arg, -1);
13738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_not_i64(TCGv ret, TCGv arg)
13768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xori_i64(ret, arg, -1);
13788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_discard_i32(TCGv arg)
13818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1(INDEX_op_discard, arg);
13838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32
13868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_discard_i64(TCGv arg)
13878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_discard_i32(arg);
13898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_discard_i32(TCGV_HIGH(arg));
13908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
13928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_discard_i64(TCGv arg)
13938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1(INDEX_op_discard, arg);
13958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
13978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/***************************************/
13998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* QEMU specific operations. Their type depend on the QEMU CPU
14008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   type. */
14018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef TARGET_LONG_BITS
14028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#error must include QEMU headers
14038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
14048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* debug info: write the PC of the corresponding QEMU CPU instruction */
14068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_debug_insn_start(uint64_t pc)
14078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* XXX: must really use a 32 bit size for TCGArg in all cases */
14098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS > TCG_TARGET_REG_BITS
14108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op2ii(INDEX_op_debug_insn_start,
14118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                  (uint32_t)(pc), (uint32_t)(pc >> 32));
14128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
14138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1i(INDEX_op_debug_insn_start, pc);
14148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
14158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_exit_tb(tcg_target_long val)
14188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1i(INDEX_op_exit_tb, val);
14208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_goto_tb(int idx)
14238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1i(INDEX_op_goto_tb, idx);
14258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32
14288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8u(TCGv ret, TCGv addr, int mem_index)
14298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
14318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_qemu_ld8u, ret, addr, mem_index);
14328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
14338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op4i(INDEX_op_qemu_ld8u, ret, addr, TCGV_HIGH(addr), mem_index);
14348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
14358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
14368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8s(TCGv ret, TCGv addr, int mem_index)
14398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
14418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_qemu_ld8s, ret, addr, mem_index);
14428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
14438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op4i(INDEX_op_qemu_ld8s, ret, addr, TCGV_HIGH(addr), mem_index);
14448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(TCGV_HIGH(ret), ret, 31);
14458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
14468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16u(TCGv ret, TCGv addr, int mem_index)
14498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
14518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_qemu_ld16u, ret, addr, mem_index);
14528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
14538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op4i(INDEX_op_qemu_ld16u, ret, addr, TCGV_HIGH(addr), mem_index);
14548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
14558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
14568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16s(TCGv ret, TCGv addr, int mem_index)
14598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
14618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_qemu_ld16s, ret, addr, mem_index);
14628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
14638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op4i(INDEX_op_qemu_ld16s, ret, addr, TCGV_HIGH(addr), mem_index);
14648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(TCGV_HIGH(ret), ret, 31);
14658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
14668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32u(TCGv ret, TCGv addr, int mem_index)
14698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
14718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_qemu_ld32u, ret, addr, mem_index);
14728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
14738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op4i(INDEX_op_qemu_ld32u, ret, addr, TCGV_HIGH(addr), mem_index);
14748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
14758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
14768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32s(TCGv ret, TCGv addr, int mem_index)
14798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
14818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_qemu_ld32u, ret, addr, mem_index);
14828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
14838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op4i(INDEX_op_qemu_ld32u, ret, addr, TCGV_HIGH(addr), mem_index);
14848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(TCGV_HIGH(ret), ret, 31);
14858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
14868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld64(TCGv ret, TCGv addr, int mem_index)
14898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
14918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op4i(INDEX_op_qemu_ld64, ret, TCGV_HIGH(ret), addr, mem_index);
14928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
14938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op5i(INDEX_op_qemu_ld64, ret, TCGV_HIGH(ret),
14948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 addr, TCGV_HIGH(addr), mem_index);
14958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
14968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st8(TCGv arg, TCGv addr, int mem_index)
14998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
15018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_qemu_st8, arg, addr, mem_index);
15028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
15038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op4i(INDEX_op_qemu_st8, arg, addr, TCGV_HIGH(addr), mem_index);
15048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
15058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st16(TCGv arg, TCGv addr, int mem_index)
15088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
15108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_qemu_st16, arg, addr, mem_index);
15118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
15128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op4i(INDEX_op_qemu_st16, arg, addr, TCGV_HIGH(addr), mem_index);
15138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
15148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st32(TCGv arg, TCGv addr, int mem_index)
15178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
15198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_qemu_st32, arg, addr, mem_index);
15208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
15218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op4i(INDEX_op_qemu_st32, arg, addr, TCGV_HIGH(addr), mem_index);
15228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
15238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st64(TCGv arg, TCGv addr, int mem_index)
15268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
15288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op4i(INDEX_op_qemu_st64, arg, TCGV_HIGH(arg), addr, mem_index);
15298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
15308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op5i(INDEX_op_qemu_st64, arg, TCGV_HIGH(arg),
15318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                 addr, TCGV_HIGH(addr), mem_index);
15328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
15338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_ptr tcg_gen_ld_i32
15368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_ptr tcg_gen_discard_i32
15378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else /* TCG_TARGET_REG_BITS == 32 */
15398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8u(TCGv ret, TCGv addr, int mem_index)
15418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_qemu_ld8u, ret, addr, mem_index);
15438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8s(TCGv ret, TCGv addr, int mem_index)
15468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_qemu_ld8s, ret, addr, mem_index);
15488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16u(TCGv ret, TCGv addr, int mem_index)
15518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_qemu_ld16u, ret, addr, mem_index);
15538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16s(TCGv ret, TCGv addr, int mem_index)
15568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_qemu_ld16s, ret, addr, mem_index);
15588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32u(TCGv ret, TCGv addr, int mem_index)
15618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_qemu_ld32u, ret, addr, mem_index);
15638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32s(TCGv ret, TCGv addr, int mem_index)
15668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_qemu_ld32s, ret, addr, mem_index);
15688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld64(TCGv ret, TCGv addr, int mem_index)
15718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_qemu_ld64, ret, addr, mem_index);
15738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st8(TCGv arg, TCGv addr, int mem_index)
15768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_qemu_st8, arg, addr, mem_index);
15788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st16(TCGv arg, TCGv addr, int mem_index)
15818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_qemu_st16, arg, addr, mem_index);
15838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st32(TCGv arg, TCGv addr, int mem_index)
15868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_qemu_st32, arg, addr, mem_index);
15888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st64(TCGv arg, TCGv addr, int mem_index)
15918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op3i(INDEX_op_qemu_st64, arg, addr, mem_index);
15938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_ptr tcg_gen_ld_i64
15968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_ptr tcg_gen_discard_i64
15978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* TCG_TARGET_REG_BITS != 32 */
15998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
16008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 64
16018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TCG_TYPE_TL TCG_TYPE_I64
16028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_movi_tl tcg_gen_movi_i64
16038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mov_tl tcg_gen_mov_i64
16048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8u_tl tcg_gen_ld8u_i64
16058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8s_tl tcg_gen_ld8s_i64
16068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16u_tl tcg_gen_ld16u_i64
16078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16s_tl tcg_gen_ld16s_i64
16088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32u_tl tcg_gen_ld32u_i64
16098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32s_tl tcg_gen_ld32s_i64
16108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_tl tcg_gen_ld_i64
16118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st8_tl tcg_gen_st8_i64
16128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st16_tl tcg_gen_st16_i64
16138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st32_tl tcg_gen_st32_i64
16148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st_tl tcg_gen_st_i64
16158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_tl tcg_gen_add_i64
16168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_tl tcg_gen_addi_i64
16178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sub_tl tcg_gen_sub_i64
16188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_neg_tl tcg_gen_neg_i64
16198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_subi_tl tcg_gen_subi_i64
16208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_and_tl tcg_gen_and_i64
16218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_andi_tl tcg_gen_andi_i64
16228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_or_tl tcg_gen_or_i64
16238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ori_tl tcg_gen_ori_i64
16248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xor_tl tcg_gen_xor_i64
16258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xori_tl tcg_gen_xori_i64
16268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_not_tl tcg_gen_not_i64
16278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shl_tl tcg_gen_shl_i64
16288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shli_tl tcg_gen_shli_i64
16298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shr_tl tcg_gen_shr_i64
16308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shri_tl tcg_gen_shri_i64
16318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sar_tl tcg_gen_sar_i64
16328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sari_tl tcg_gen_sari_i64
16338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcond_tl tcg_gen_brcond_i64
16348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcondi_tl tcg_gen_brcondi_i64
16358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mul_tl tcg_gen_mul_i64
16368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_muli_tl tcg_gen_muli_i64
16378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_tl tcg_gen_discard_i64
16388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_tl_i32 tcg_gen_trunc_i64_i32
16398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_i64_tl tcg_gen_mov_i64
16408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_i32_tl tcg_gen_extu_i32_i64
16418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_tl tcg_gen_ext_i32_i64
16428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_tl_i64 tcg_gen_mov_i64
16438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_tl_i64 tcg_gen_mov_i64
16448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8u_tl tcg_gen_ext8u_i64
16458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8s_tl tcg_gen_ext8s_i64
16468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16u_tl tcg_gen_ext16u_i64
16478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16s_tl tcg_gen_ext16s_i64
16488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32u_tl tcg_gen_ext32u_i64
16498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32s_tl tcg_gen_ext32s_i64
16508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_const_tl tcg_const_i64
16518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
16528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TCG_TYPE_TL TCG_TYPE_I32
16538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_movi_tl tcg_gen_movi_i32
16548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mov_tl tcg_gen_mov_i32
16558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8u_tl tcg_gen_ld8u_i32
16568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8s_tl tcg_gen_ld8s_i32
16578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16u_tl tcg_gen_ld16u_i32
16588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16s_tl tcg_gen_ld16s_i32
16598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32u_tl tcg_gen_ld_i32
16608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32s_tl tcg_gen_ld_i32
16618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_tl tcg_gen_ld_i32
16628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st8_tl tcg_gen_st8_i32
16638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st16_tl tcg_gen_st16_i32
16648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st32_tl tcg_gen_st_i32
16658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st_tl tcg_gen_st_i32
16668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_tl tcg_gen_add_i32
16678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_tl tcg_gen_addi_i32
16688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sub_tl tcg_gen_sub_i32
16698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_neg_tl tcg_gen_neg_i32
16708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_subi_tl tcg_gen_subi_i32
16718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_and_tl tcg_gen_and_i32
16728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_andi_tl tcg_gen_andi_i32
16738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_or_tl tcg_gen_or_i32
16748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ori_tl tcg_gen_ori_i32
16758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xor_tl tcg_gen_xor_i32
16768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xori_tl tcg_gen_xori_i32
16778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_not_tl tcg_gen_not_i32
16788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shl_tl tcg_gen_shl_i32
16798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shli_tl tcg_gen_shli_i32
16808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shr_tl tcg_gen_shr_i32
16818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shri_tl tcg_gen_shri_i32
16828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sar_tl tcg_gen_sar_i32
16838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sari_tl tcg_gen_sari_i32
16848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcond_tl tcg_gen_brcond_i32
16858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcondi_tl tcg_gen_brcondi_i32
16868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mul_tl tcg_gen_mul_i32
16878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_muli_tl tcg_gen_muli_i32
16888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_tl tcg_gen_discard_i32
16898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_tl_i32 tcg_gen_mov_i32
16908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_i64_tl tcg_gen_trunc_i64_i32
16918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_i32_tl tcg_gen_mov_i32
16928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_tl tcg_gen_mov_i32
16938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_tl_i64 tcg_gen_extu_i32_i64
16948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_tl_i64 tcg_gen_ext_i32_i64
16958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8u_tl tcg_gen_ext8u_i32
16968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8s_tl tcg_gen_ext8s_i32
16978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16u_tl tcg_gen_ext16u_i32
16988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16s_tl tcg_gen_ext16s_i32
16998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32u_tl tcg_gen_mov_i32
17008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32s_tl tcg_gen_mov_i32
17018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_const_tl tcg_const_i32
17028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
17038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32
17058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_ptr tcg_gen_add_i32
17068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_ptr tcg_gen_addi_i32
17078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_ptr tcg_gen_mov_i32
17088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else /* TCG_TARGET_REG_BITS == 32 */
17098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_ptr tcg_gen_add_i64
17108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_ptr tcg_gen_addi_i64
17118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_ptr tcg_gen_ext_i32_i64
17128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* TCG_TARGET_REG_BITS != 32 */
17138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1714