tcg-op.h revision 5d8f37ad78fc66901af50c762029a501561f3b23
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 Projectint gen_new_label(void);
278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op1_i32(int opc, TCGv_i32 arg1)
295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op1_i64(int opc, TCGv_i64 arg1)
358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_op1i(int opc, TCGArg arg1)
418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg1;
448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op2_i32(int opc, TCGv_i32 arg1, TCGv_i32 arg2)
475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op2_i64(int opc, TCGv_i64 arg1, TCGv_i64 arg2)
548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op2i_i32(int opc, TCGv_i32 arg1, TCGArg arg2)
618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = arg2;
655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op2i_i64(int opc, TCGv_i64 arg1, TCGArg arg2)
685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg2;
728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_op2ii(int opc, TCGArg arg1, TCGArg arg2)
758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg1;
788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg2;
798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op3_i32(int opc, TCGv_i32 arg1, TCGv_i32 arg2,
825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   TCGv_i32 arg3)
838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op3_i64(int opc, TCGv_i64 arg1, TCGv_i64 arg2,
915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   TCGv_i64 arg3)
928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op3i_i32(int opc, TCGv_i32 arg1, TCGv_i32 arg2,
1005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    TCGArg arg3)
1015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
1035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
1045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
1058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg3;
1068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
1078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op3i_i64(int opc, TCGv_i64 arg1, TCGv_i64 arg2,
1095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    TCGArg arg3)
1105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
1125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
1135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
1145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = arg3;
1155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
1165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ldst_op_i32(int opc, TCGv_i32 val, TCGv_ptr base,
1185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                       TCGArg offset)
1195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
1215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(val);
1225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_PTR(base);
1235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = offset;
1245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
1255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ldst_op_i64(int opc, TCGv_i64 val, TCGv_ptr base,
1275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                       TCGArg offset)
1285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
1305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(val);
1315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_PTR(base);
1325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = offset;
1335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
1345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_ldst_op_i64_i32(int opc, TCGv_i64 val, TCGv_i32 addr,
1365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                                TCGArg mem_index)
1375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
1395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(val);
1405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(addr);
1415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = mem_index;
1425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
1435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_ldst_op_i64_i64(int opc, TCGv_i64 val, TCGv_i64 addr,
1455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                                TCGArg mem_index)
1465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
1485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(val);
1495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(addr);
1505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = mem_index;
1515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
1525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op4_i32(int opc, TCGv_i32 arg1, TCGv_i32 arg2,
1545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   TCGv_i32 arg3, TCGv_i32 arg4)
1555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
1575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
1585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
1595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
1605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg4);
1615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
1625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op4_i64(int opc, TCGv_i64 arg1, TCGv_i64 arg2,
1645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   TCGv_i64 arg3, TCGv_i64 arg4)
1655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
1675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
1685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
1695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
1705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg4);
1715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
1725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op4i_i32(int opc, TCGv_i32 arg1, TCGv_i32 arg2,
1745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    TCGv_i32 arg3, TCGArg arg4)
1755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
1775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
1785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
1795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
1805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = arg4;
1815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
1825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op4i_i64(int opc, TCGv_i64 arg1, TCGv_i64 arg2,
1845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    TCGv_i64 arg3, TCGArg arg4)
1858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
1875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
1885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
1895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
1905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = arg4;
1918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
1928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op4ii_i32(int opc, TCGv_i32 arg1, TCGv_i32 arg2,
1945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     TCGArg arg3, TCGArg arg4)
1958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
1975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
1985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
1995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = arg3;
2008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg4;
2018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
2028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op4ii_i64(int opc, TCGv_i64 arg1, TCGv_i64 arg2,
2045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     TCGArg arg3, TCGArg arg4)
2058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
2068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
2075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
2085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
2098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg3;
2108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg4;
2118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
2128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op5_i32(int opc, TCGv_i32 arg1, TCGv_i32 arg2,
2145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   TCGv_i32 arg3, TCGv_i32 arg4, TCGv_i32 arg5)
2155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
2165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
2175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
2185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
2195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
2205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg4);
2215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg5);
2225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
2235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op5_i64(int opc, TCGv_i64 arg1, TCGv_i64 arg2,
2255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   TCGv_i64 arg3, TCGv_i64 arg4, TCGv_i64 arg5)
2268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
2278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
2285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
2295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
2305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
2315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg4);
2325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg5);
2338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
2348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op5i_i32(int opc, TCGv_i32 arg1, TCGv_i32 arg2,
2365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    TCGv_i32 arg3, TCGv_i32 arg4, TCGArg arg5)
2378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
2388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
2395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
2405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
2415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
2425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg4);
2438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg5;
2448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
2458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op5i_i64(int opc, TCGv_i64 arg1, TCGv_i64 arg2,
2475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    TCGv_i64 arg3, TCGv_i64 arg4, TCGArg arg5)
2488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
2498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
2505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
2515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
2525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
2535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg4);
2545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = arg5;
2555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
2565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op6_i32(int opc, TCGv_i32 arg1, TCGv_i32 arg2,
2585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   TCGv_i32 arg3, TCGv_i32 arg4, TCGv_i32 arg5,
2595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   TCGv_i32 arg6)
2605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
2615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
2625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
2635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
2645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
2655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg4);
2665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg5);
2675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg6);
2688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
2698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op6_i64(int opc, TCGv_i64 arg1, TCGv_i64 arg2,
2715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   TCGv_i64 arg3, TCGv_i64 arg4, TCGv_i64 arg5,
2725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   TCGv_i64 arg6)
2738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
2748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
2755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
2765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
2775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
2785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg4);
2795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg5);
2805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg6);
2815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
2825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op6ii_i32(int opc, TCGv_i32 arg1, TCGv_i32 arg2,
2845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     TCGv_i32 arg3, TCGv_i32 arg4, TCGArg arg5,
2855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     TCGArg arg6)
2865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
2875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
2885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
2895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
2905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
2915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg4);
2925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = arg5;
2935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = arg6;
2945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
2955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op6ii_i64(int opc, TCGv_i64 arg1, TCGv_i64 arg2,
2975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     TCGv_i64 arg3, TCGv_i64 arg4, TCGArg arg5,
2985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     TCGArg arg6)
2995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
3005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
3015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
3025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
3035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
3045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg4);
3058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg5;
3068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg6;
3078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void gen_set_label(int n)
3108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1i(INDEX_op_set_label, n);
3128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_br(int label)
3158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1i(INDEX_op_br, label);
3178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mov_i32(TCGv_i32 ret, TCGv_i32 arg)
3208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (!TCGV_EQUAL_I32(ret, arg))
3225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op2_i32(INDEX_op_mov_i32, ret, arg);
3238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_movi_i32(TCGv_i32 ret, int32_t arg)
3268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2i_i32(INDEX_op_movi_i32, ret, arg);
3288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* helper calls */
3315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_helperN(void *func, int flags, int sizemask,
3325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   TCGArg ret, int nargs, TCGArg *args)
3335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
3345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_ptr fn;
3355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    fn = tcg_const_ptr((tcg_target_long)func);
3365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_callN(&tcg_ctx, fn, flags, sizemask, ret,
3375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                  nargs, args);
3385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_ptr(fn);
3395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
3408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* FIXME: Should this be pure?  */
3425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_helper64(void *func, TCGv_i64 ret,
3435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    TCGv_i64 a, TCGv_i64 b)
3448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_ptr fn;
3465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGArg args[2];
3475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    fn = tcg_const_ptr((tcg_target_long)func);
3485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    args[0] = GET_TCGV_I64(a);
3495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    args[1] = GET_TCGV_I64(b);
3505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_callN(&tcg_ctx, fn, 0, 7, GET_TCGV_I64(ret), 2, args);
3515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_ptr(fn);
3528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* 32 bit ops */
3558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8u_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset)
3578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_ld8u_i32, ret, arg2, offset);
3598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8s_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset)
3628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_ld8s_i32, ret, arg2, offset);
3648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16u_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset)
3678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_ld16u_i32, ret, arg2, offset);
3698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16s_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset)
3728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_ld16s_i32, ret, arg2, offset);
3748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset)
3778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_ld_i32, ret, arg2, offset);
3798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st8_i32(TCGv_i32 arg1, TCGv_ptr arg2, tcg_target_long offset)
3828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_st8_i32, arg1, arg2, offset);
3848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st16_i32(TCGv_i32 arg1, TCGv_ptr arg2, tcg_target_long offset)
3878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_st16_i32, arg1, arg2, offset);
3898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st_i32(TCGv_i32 arg1, TCGv_ptr arg2, tcg_target_long offset)
3928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_st_i32, arg1, arg2, offset);
3948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_add_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
3978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_add_i32, ret, arg1, arg2);
3998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_addi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
4028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* some cases can be optimized here */
4048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
4058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
4068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
4075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
4088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_add_i32(ret, arg1, t0);
4095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
4108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
4118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sub_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
4148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_sub_i32, ret, arg1, arg2);
4168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_subfi_i32(TCGv_i32 ret, int32_t arg1, TCGv_i32 arg2)
4195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
4205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0 = tcg_const_i32(arg1);
4215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sub_i32(ret, t0, arg2);
4225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
4235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
4245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
4255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_subi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
4268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* some cases can be optimized here */
4288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
4298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
4308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
4315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
4328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_sub_i32(ret, arg1, t0);
4335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
4348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
4358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_and_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
4388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (TCGV_EQUAL_I32(arg1, arg2)) {
4405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i32(ret, arg1);
4415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
4425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op3_i32(INDEX_op_and_i32, ret, arg1, arg2);
4435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
4448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
4478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* some cases can be optimized here */
4498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
4508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_movi_i32(ret, 0);
4518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else if (arg2 == 0xffffffff) {
4528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
4538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
4545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
4558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_and_i32(ret, arg1, t0);
4565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
4578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
4588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_or_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
4618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (TCGV_EQUAL_I32(arg1, arg2)) {
4635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i32(ret, arg1);
4645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
4655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op3_i32(INDEX_op_or_i32, ret, arg1, arg2);
4665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
4678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ori_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
4708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* some cases can be optimized here */
4728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0xffffffff) {
4738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_movi_i32(ret, 0xffffffff);
4748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else if (arg2 == 0) {
4758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
4768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
4775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
4788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_or_i32(ret, arg1, t0);
4795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
4808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
4818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xor_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
4848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (TCGV_EQUAL_I32(arg1, arg2)) {
4865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_movi_i32(ret, 0);
4875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
4885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op3_i32(INDEX_op_xor_i32, ret, arg1, arg2);
4895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
4908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xori_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
4938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* some cases can be optimized here */
4958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
4968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
4978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
4985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
4998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_xor_i32(ret, arg1, t0);
5005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
5018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
5028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shl_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
5058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_shl_i32, ret, arg1, arg2);
5078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shli_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
5108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
5128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
5138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
5145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
5158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_shl_i32(ret, arg1, t0);
5165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
5178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
5188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shr_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
5218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_shr_i32, ret, arg1, arg2);
5238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shri_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
5268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
5288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
5298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
5305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
5318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_shr_i32(ret, arg1, t0);
5325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
5338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
5348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sar_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
5378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_sar_i32, ret, arg1, arg2);
5398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sari_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
5428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
5448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
5458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
5465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
5478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_sar_i32(ret, arg1, t0);
5485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
5498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
5508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_brcond_i32(int cond, TCGv_i32 arg1, TCGv_i32 arg2,
5538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                      int label_index)
5548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4ii_i32(INDEX_op_brcond_i32, arg1, arg2, cond, label_index);
5568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_brcondi_i32(int cond, TCGv_i32 arg1, int32_t arg2,
5598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                       int label_index)
5608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0 = tcg_const_i32(arg2);
5628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_brcond_i32(cond, arg1, t0, label_index);
5635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
5648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mul_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
5678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_mul_i32, ret, arg1, arg2);
5698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_muli_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
5728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0 = tcg_const_i32(arg2);
5748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_mul_i32(ret, arg1, t0);
5755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
5768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_div_i32
5795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
5808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_div_i32, ret, arg1, arg2);
5828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
5858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_rem_i32, ret, arg1, arg2);
5878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
5908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_divu_i32, ret, arg1, arg2);
5928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
5958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_remu_i32, ret, arg1, arg2);
5978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
5995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0;
6025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
6038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(t0, arg1, 31);
6045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i32(INDEX_op_div2_i32, ret, t0, arg1, t0, arg2);
6055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
6068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0;
6115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
6128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(t0, arg1, 31);
6135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i32(INDEX_op_div2_i32, t0, ret, arg1, t0, arg2);
6145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
6158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0;
6205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
6218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(t0, 0);
6225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i32(INDEX_op_divu2_i32, ret, t0, arg1, t0, arg2);
6235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
6248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0;
6295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
6308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(t0, 0);
6315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i32(INDEX_op_divu2_i32, t0, ret, arg1, t0, arg2);
6325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
6338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
6358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32
6378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mov_i64(TCGv_i64 ret, TCGv_i64 arg)
6398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (!TCGV_EQUAL_I64(ret, arg)) {
6415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i32(TCGV_LOW(ret), TCGV_LOW(arg));
6428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg));
6438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
6448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_movi_i64(TCGv_i64 ret, int64_t arg)
6478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_movi_i32(TCGV_LOW(ret), arg);
6498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), arg >> 32);
6508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8u_i64(TCGv_i64 ret, TCGv_ptr arg2,
6535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    tcg_target_long offset)
6548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld8u_i32(TCGV_LOW(ret), arg2, offset);
6568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
6578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8s_i64(TCGv_i64 ret, TCGv_ptr arg2,
6605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    tcg_target_long offset)
6618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld8s_i32(TCGV_LOW(ret), arg2, offset);
6635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_HIGH(ret), 31);
6648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16u_i64(TCGv_i64 ret, TCGv_ptr arg2,
6675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     tcg_target_long offset)
6688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld16u_i32(TCGV_LOW(ret), arg2, offset);
6708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
6718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16s_i64(TCGv_i64 ret, TCGv_ptr arg2,
6745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     tcg_target_long offset)
6758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld16s_i32(TCGV_LOW(ret), arg2, offset);
6775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
6788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld32u_i64(TCGv_i64 ret, TCGv_ptr arg2,
6815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     tcg_target_long offset)
6828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset);
6848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
6858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld32s_i64(TCGv_i64 ret, TCGv_ptr arg2,
6885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     tcg_target_long offset)
6898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset);
6915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
6928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld_i64(TCGv_i64 ret, TCGv_ptr arg2,
6955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                  tcg_target_long offset)
6968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* since arg2 and ret have different types, they cannot be the
6988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       same temporary */
6998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_WORDS_BIGENDIAN
7008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ld_i32(TCGV_HIGH(ret), arg2, offset);
7015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset + 4);
7028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
7035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset);
7048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ld_i32(TCGV_HIGH(ret), arg2, offset + 4);
7058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
7068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st8_i64(TCGv_i64 arg1, TCGv_ptr arg2,
7095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   tcg_target_long offset)
7108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_st8_i32(TCGV_LOW(arg1), arg2, offset);
7128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st16_i64(TCGv_i64 arg1, TCGv_ptr arg2,
7155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    tcg_target_long offset)
7168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_st16_i32(TCGV_LOW(arg1), arg2, offset);
7188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st32_i64(TCGv_i64 arg1, TCGv_ptr arg2,
7215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    tcg_target_long offset)
7228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_st_i32(TCGV_LOW(arg1), arg2, offset);
7248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st_i64(TCGv_i64 arg1, TCGv_ptr arg2,
7275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                  tcg_target_long offset)
7288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_WORDS_BIGENDIAN
7308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_st_i32(TCGV_HIGH(arg1), arg2, offset);
7315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_st_i32(TCGV_LOW(arg1), arg2, offset + 4);
7328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
7335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_st_i32(TCGV_LOW(arg1), arg2, offset);
7348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_st_i32(TCGV_HIGH(arg1), arg2, offset + 4);
7358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
7368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_add_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
7398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op6_i32(INDEX_op_add2_i32, TCGV_LOW(ret), TCGV_HIGH(ret),
7415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                    TCGV_LOW(arg1), TCGV_HIGH(arg1), TCGV_LOW(arg2),
7425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                    TCGV_HIGH(arg2));
7438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sub_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
7468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op6_i32(INDEX_op_sub2_i32, TCGV_LOW(ret), TCGV_HIGH(ret),
7485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                    TCGV_LOW(arg1), TCGV_HIGH(arg1), TCGV_LOW(arg2),
7495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                    TCGV_HIGH(arg2));
7508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_and_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
7538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_and_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
7558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_and_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
7568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
7598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_andi_i32(TCGV_LOW(ret), TCGV_LOW(arg1), arg2);
7618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32);
7628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_or_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
7658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
7678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
7688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
7718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ori_i32(TCGV_LOW(ret), TCGV_LOW(arg1), arg2);
7738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ori_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32);
7748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xor_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
7778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_xor_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
7798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xor_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
7808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
7838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_xori_i32(TCGV_LOW(ret), TCGV_LOW(arg1), arg2);
7858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xori_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32);
7868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* XXX: use generic code when basic block handling is OK or CPU
7898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   specific code (x86) */
7905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shl_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
7918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_helper64(tcg_helper_shl_i64, ret, arg1, arg2);
7938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
7968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shifti_i64(ret, arg1, arg2, 0, 0);
7988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shr_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
8018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_helper64(tcg_helper_shr_i64, ret, arg1, arg2);
8038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shri_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
8068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shifti_i64(ret, arg1, arg2, 1, 0);
8088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sar_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
8118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_helper64(tcg_helper_sar_i64, ret, arg1, arg2);
8138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sari_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
8168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shifti_i64(ret, arg1, arg2, 1, 1);
8188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_brcond_i64(int cond, TCGv_i64 arg1, TCGv_i64 arg2,
8218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                      int label_index)
8228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op6ii_i32(INDEX_op_brcond2_i32,
8245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                      TCGV_LOW(arg1), TCGV_HIGH(arg1), TCGV_LOW(arg2),
8255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                      TCGV_HIGH(arg2), cond, label_index);
8268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mul_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
8298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
8315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t1;
8328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
8345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i32();
8355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
8365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4_i32(INDEX_op_mulu2_i32, TCGV_LOW(t0), TCGV_HIGH(t0),
8375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                    TCGV_LOW(arg1), TCGV_LOW(arg2));
8385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
8395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mul_i32(t1, TCGV_LOW(arg1), TCGV_HIGH(arg2));
8408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_add_i32(TCGV_HIGH(t0), TCGV_HIGH(t0), t1);
8415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mul_i32(t1, TCGV_HIGH(arg1), TCGV_LOW(arg2));
8428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_add_i32(TCGV_HIGH(t0), TCGV_HIGH(t0), t1);
8438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i64(ret, t0);
8455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
8465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t1);
8478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
8508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_helper64(tcg_helper_div_i64, ret, arg1, arg2);
8528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
8558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_helper64(tcg_helper_rem_i64, ret, arg1, arg2);
8578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
8608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_helper64(tcg_helper_divu_i64, ret, arg1, arg2);
8628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
8658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_helper64(tcg_helper_remu_i64, ret, arg1, arg2);
8678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
8708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mov_i64(TCGv_i64 ret, TCGv_i64 arg)
8728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (!TCGV_EQUAL_I64(ret, arg))
8745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op2_i64(INDEX_op_mov_i64, ret, arg);
8758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_movi_i64(TCGv_i64 ret, int64_t arg)
8788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2i_i64(INDEX_op_movi_i64, ret, arg);
8808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8u_i64(TCGv_i64 ret, TCGv_i64 arg2,
8838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                    tcg_target_long offset)
8848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld8u_i64, ret, arg2, offset);
8868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8s_i64(TCGv_i64 ret, TCGv_i64 arg2,
8898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                    tcg_target_long offset)
8908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld8s_i64, ret, arg2, offset);
8928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16u_i64(TCGv_i64 ret, TCGv_i64 arg2,
8958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                     tcg_target_long offset)
8968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld16u_i64, ret, arg2, offset);
8988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16s_i64(TCGv_i64 ret, TCGv_i64 arg2,
9018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                     tcg_target_long offset)
9028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld16s_i64, ret, arg2, offset);
9048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld32u_i64(TCGv_i64 ret, TCGv_i64 arg2,
9078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                     tcg_target_long offset)
9088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld32u_i64, ret, arg2, offset);
9108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld32s_i64(TCGv_i64 ret, TCGv_i64 arg2,
9138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                     tcg_target_long offset)
9148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld32s_i64, ret, arg2, offset);
9168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld_i64(TCGv_i64 ret, TCGv_i64 arg2, tcg_target_long offset)
9198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld_i64, ret, arg2, offset);
9218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st8_i64(TCGv_i64 arg1, TCGv_i64 arg2,
9248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                   tcg_target_long offset)
9258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_st8_i64, arg1, arg2, offset);
9278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st16_i64(TCGv_i64 arg1, TCGv_i64 arg2,
9308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                    tcg_target_long offset)
9318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_st16_i64, arg1, arg2, offset);
9338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st32_i64(TCGv_i64 arg1, TCGv_i64 arg2,
9368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                    tcg_target_long offset)
9378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_st32_i64, arg1, arg2, offset);
9398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st_i64(TCGv_i64 arg1, TCGv_i64 arg2, tcg_target_long offset)
9428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_st_i64, arg1, arg2, offset);
9448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_add_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
9478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_add_i64, ret, arg1, arg2);
9498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sub_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
9528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_sub_i64, ret, arg1, arg2);
9548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_and_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
9578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (TCGV_EQUAL_I64(arg1, arg2)) {
9595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i64(ret, arg1);
9605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
9615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op3_i64(INDEX_op_and_i64, ret, arg1, arg2);
9625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
9638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
9668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(arg2);
9688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_and_i64(ret, arg1, t0);
9695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
9708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_or_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
9738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (TCGV_EQUAL_I64(arg1, arg2)) {
9755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i64(ret, arg1);
9765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
9775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op3_i64(INDEX_op_or_i64, ret, arg1, arg2);
9785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
9798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
9828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(arg2);
9848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(ret, arg1, t0);
9855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
9868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xor_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
9898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (TCGV_EQUAL_I64(arg1, arg2)) {
9915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_movi_i64(ret, 0);
9925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
9935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op3_i64(INDEX_op_xor_i64, ret, arg1, arg2);
9945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
9958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
9988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(arg2);
10008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xor_i64(ret, arg1, t0);
10015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
10028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shl_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_shl_i64, ret, arg1, arg2);
10078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
10108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
10128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i64(ret, arg1);
10138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
10145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0 = tcg_const_i64(arg2);
10158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_shl_i64(ret, arg1, t0);
10165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
10178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
10188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shr_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_shr_i64, ret, arg1, arg2);
10238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shri_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
10268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
10288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i64(ret, arg1);
10298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
10305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0 = tcg_const_i64(arg2);
10318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_shr_i64(ret, arg1, t0);
10325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
10338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
10348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sar_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_sar_i64, ret, arg1, arg2);
10398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sari_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
10428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
10448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i64(ret, arg1);
10458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
10465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0 = tcg_const_i64(arg2);
10478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_sar_i64(ret, arg1, t0);
10485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
10498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
10508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_brcond_i64(int cond, TCGv_i64 arg1, TCGv_i64 arg2,
10538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                      int label_index)
10548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4ii_i64(INDEX_op_brcond_i64, arg1, arg2, cond, label_index);
10568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mul_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_mul_i64, ret, arg1, arg2);
10618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_div_i64
10645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_div_i64, ret, arg1, arg2);
10678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_rem_i64, ret, arg1, arg2);
10728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_divu_i64, ret, arg1, arg2);
10778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_remu_i64, ret, arg1, arg2);
10828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
10845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
10875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
10888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i64(t0, arg1, 63);
10895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i64(INDEX_op_div2_i64, ret, t0, arg1, t0, arg2);
10905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
10918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
10965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
10978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i64(t0, arg1, 63);
10985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i64(INDEX_op_div2_i64, t0, ret, arg1, t0, arg2);
10995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
11008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
11038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
11055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
11068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i64(t0, 0);
11075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i64(INDEX_op_divu2_i64, ret, t0, arg1, t0, arg2);
11085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
11098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
11128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
11145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
11158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i64(t0, 0);
11165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i64(INDEX_op_divu2_i64, t0, ret, arg1, t0, arg2);
11175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
11188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
11208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
11228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_addi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
11245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
11255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* some cases can be optimized here */
11265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (arg2 == 0) {
11275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i64(ret, arg1);
11285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
11295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0 = tcg_const_i64(arg2);
11305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_add_i64(ret, arg1, t0);
11315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
11325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
11335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
11345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
11355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_subfi_i64(TCGv_i64 ret, int64_t arg1, TCGv_i64 arg2)
11365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
11375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(arg1);
11385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sub_i64(ret, t0, arg2);
11395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
11405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
11415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
11425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_subi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
11435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
11445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* some cases can be optimized here */
11455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (arg2 == 0) {
11465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i64(ret, arg1);
11475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
11485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0 = tcg_const_i64(arg2);
11495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_sub_i64(ret, arg1, t0);
11505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
11515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
11525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
11535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_brcondi_i64(int cond, TCGv_i64 arg1, int64_t arg2,
11548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                       int label_index)
11558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(arg2);
11578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_brcond_i64(cond, arg1, t0, label_index);
11585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
11598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_muli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
11625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
11635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(arg2);
11645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mul_i64(ret, arg1, t0);
11655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
11665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
11675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
11685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
11698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/***************************************/
11708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* optional operations */
11718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8s_i32(TCGv_i32 ret, TCGv_i32 arg)
11738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext8s_i32
11755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_ext8s_i32, ret, arg);
11768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
11778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i32(ret, arg, 24);
11788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(ret, ret, 24);
11798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
11808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16s_i32(TCGv_i32 ret, TCGv_i32 arg)
11838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext16s_i32
11855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_ext16s_i32, ret, arg);
11868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
11878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i32(ret, arg, 16);
11888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(ret, ret, 16);
11898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
11908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* These are currently just for convenience.
11938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   We assume a target will recognise these automatically .  */
11945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8u_i32(TCGv_i32 ret, TCGv_i32 arg)
11958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(ret, arg, 0xffu);
11978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16u_i32(TCGv_i32 ret, TCGv_i32 arg)
12008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(ret, arg, 0xffffu);
12028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the two high bytes are set to zero */
12055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap16_i32(TCGv_i32 ret, TCGv_i32 arg)
12068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_bswap16_i32
12085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_bswap16_i32, ret, arg);
12098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
12105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0 = tcg_temp_new_i32();
12118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext8u_i32(t0, arg);
12135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shli_i32(t0, t0, 8);
12145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shri_i32(ret, arg, 8);
12155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i32(ret, ret, t0);
12165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
12178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
12188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap32_i32(TCGv_i32 ret, TCGv_i32 arg)
12218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_bswap32_i32
12235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_bswap32_i32, ret, arg);
12248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
12255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0, t1;
12265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
12275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i32();
12288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i32(t0, arg, 24);
12308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(t1, arg, 0x0000ff00);
12328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i32(t1, t1, 8);
12338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i32(t0, t0, t1);
12348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i32(t1, arg, 8);
12368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(t1, t1, 0x0000ff00);
12378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i32(t0, t0, t1);
12388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i32(t1, arg, 24);
12408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i32(ret, t0, t1);
12415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
12425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t1);
12438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
12448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32
12475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8s_i64(TCGv_i64 ret, TCGv_i64 arg)
12488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext8s_i32(TCGV_LOW(ret), TCGV_LOW(arg));
12505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
12518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16s_i64(TCGv_i64 ret, TCGv_i64 arg)
12548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext16s_i32(TCGV_LOW(ret), TCGV_LOW(arg));
12565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
12578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext32s_i64(TCGv_i64 ret, TCGv_i64 arg)
12608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_LOW(ret), TCGV_LOW(arg));
12625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
12638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8u_i64(TCGv_i64 ret, TCGv_i64 arg)
12668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext8u_i32(TCGV_LOW(ret), TCGV_LOW(arg));
12688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
12698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16u_i64(TCGv_i64 ret, TCGv_i64 arg)
12728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext16u_i32(TCGV_LOW(ret), TCGV_LOW(arg));
12748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
12758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext32u_i64(TCGv_i64 ret, TCGv_i64 arg)
12788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_LOW(ret), TCGV_LOW(arg));
12808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
12818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_trunc_i64_i32(TCGv_i32 ret, TCGv_i64 arg)
12848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(ret, TCGV_LOW(arg));
12868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_extu_i32_i64(TCGv_i64 ret, TCGv_i32 arg)
12898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_LOW(ret), arg);
12918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
12928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext_i32_i64(TCGv_i64 ret, TCGv_i32 arg)
12955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
12965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_LOW(ret), arg);
12975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
12985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
12995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
13005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note: we assume the six high bytes are set to zero */
13015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap16_i64(TCGv_i64 ret, TCGv_i64 arg)
13025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
13035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg));
13045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_bswap16_i32(TCGV_LOW(ret), TCGV_LOW(arg));
13055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
13065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
13075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note: we assume the four high bytes are set to zero */
13085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap32_i64(TCGv_i64 ret, TCGv_i64 arg)
13098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg));
13115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_bswap32_i32(TCGV_LOW(ret), TCGV_LOW(arg));
13128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap64_i64(TCGv_i64 ret, TCGv_i64 arg)
13158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0, t1;
13175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
13185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i32();
13198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_bswap32_i32(t0, TCGV_LOW(arg));
13215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_bswap32_i32(t1, TCGV_HIGH(arg));
13225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_LOW(ret), t1);
13238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_mov_i32(TCGV_HIGH(ret), t0);
13245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
13255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t1);
13268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
13288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8s_i64(TCGv_i64 ret, TCGv_i64 arg)
13308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext8s_i64
13325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_ext8s_i64, ret, arg);
13338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
13348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(ret, arg, 56);
13358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i64(ret, ret, 56);
13368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
13378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16s_i64(TCGv_i64 ret, TCGv_i64 arg)
13408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext16s_i64
13425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_ext16s_i64, ret, arg);
13438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
13448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(ret, arg, 48);
13458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i64(ret, ret, 48);
13468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
13478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext32s_i64(TCGv_i64 ret, TCGv_i64 arg)
13508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext32s_i64
13525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_ext32s_i64, ret, arg);
13538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
13548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(ret, arg, 32);
13558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i64(ret, ret, 32);
13568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
13578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8u_i64(TCGv_i64 ret, TCGv_i64 arg)
13608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(ret, arg, 0xffu);
13628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16u_i64(TCGv_i64 ret, TCGv_i64 arg)
13658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(ret, arg, 0xffffu);
13678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext32u_i64(TCGv_i64 ret, TCGv_i64 arg)
13708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(ret, arg, 0xffffffffu);
13728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the target supports move between 32 and 64 bit
13758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   registers.  This will probably break MIPS64 targets.  */
13765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_trunc_i64_i32(TCGv_i32 ret, TCGv_i64 arg)
13778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(ret, MAKE_TCGV_I32(GET_TCGV_I64(arg)));
13798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the target supports move between 32 and 64 bit
13828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   registers */
13835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_extu_i32_i64(TCGv_i64 ret, TCGv_i32 arg)
13848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_andi_i64(ret, MAKE_TCGV_I64(GET_TCGV_I32(arg)), 0xffffffffu);
13868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the target supports move between 32 and 64 bit
13898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   registers */
13905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext_i32_i64(TCGv_i64 ret, TCGv_i32 arg)
13918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext32s_i64(ret, MAKE_TCGV_I64(GET_TCGV_I32(arg)));
13935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
13945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
13955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note: we assume the six high bytes are set to zero */
13965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap16_i64(TCGv_i64 ret, TCGv_i64 arg)
13975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
13985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_bswap16_i64
13995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_bswap16_i64, ret, arg);
14005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
14015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_temp_new_i64();
14025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
14035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext8u_i64(t0, arg);
14045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shli_i64(t0, t0, 8);
14055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shri_i64(ret, arg, 8);
14065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(ret, ret, t0);
14075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
14085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
14098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note: we assume the four high bytes are set to zero */
14125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap32_i64(TCGv_i64 ret, TCGv_i64 arg)
14138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_bswap32_i64
14155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_bswap32_i64, ret, arg);
14168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
14175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0, t1;
14185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
14195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i64();
14205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
14215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shli_i64(t0, arg, 24);
14225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext32u_i64(t0, t0);
14235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
14245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_andi_i64(t1, arg, 0x0000ff00);
14255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shli_i64(t1, t1, 8);
14265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(t0, t0, t1);
14275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
14285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shri_i64(t1, arg, 8);
14295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_andi_i64(t1, t1, 0x0000ff00);
14305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(t0, t0, t1);
14315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
14325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shri_i64(t1, arg, 24);
14335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(ret, t0, t1);
14345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
14355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t1);
14365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
14375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
14385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
14395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap64_i64(TCGv_i64 ret, TCGv_i64 arg)
14405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
14415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_bswap64_i64
14425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_bswap64_i64, ret, arg);
14435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
14445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0, t1;
14455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
14465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i32();
14478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(t0, arg, 56);
14498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, arg, 0x0000ff00);
14518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(t1, t1, 40);
14528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
14538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, arg, 0x00ff0000);
14558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(t1, t1, 24);
14568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
14578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, arg, 0xff000000);
14598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(t1, t1, 8);
14608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
14618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i64(t1, arg, 8);
14638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, t1, 0xff000000);
14648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
14658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i64(t1, arg, 24);
14678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, t1, 0x00ff0000);
14688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
14698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i64(t1, arg, 40);
14718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, t1, 0x0000ff00);
14728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
14738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i64(t1, arg, 56);
14758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(ret, t0, t1);
14765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
14775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t1);
14788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
14798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
14828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_neg_i32(TCGv_i32 ret, TCGv_i32 arg)
14848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_neg_i32
14865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_neg_i32, ret, arg);
14878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
14885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0 = tcg_const_i32(0);
14898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sub_i32(ret, t0, arg);
14905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
14918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
14928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_neg_i64(TCGv_i64 ret, TCGv_i64 arg)
14958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_neg_i64
14975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_neg_i64, ret, arg);
14988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
14995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(0);
15008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sub_i64(ret, t0, arg);
15015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
15028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
15038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_not_i32(TCGv_i32 ret, TCGv_i32 arg)
15068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_not_i32
15085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_not_i32, ret, arg);
15095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
15108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xori_i32(ret, arg, -1);
15115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
15128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_not_i64(TCGv_i64 ret, TCGv_i64 arg)
15158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_not_i64
15175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_not_i64, ret, arg);
15185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
15198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xori_i64(ret, arg, -1);
15205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
15218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_discard_i32(TCGv_i32 arg)
15248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op1_i32(INDEX_op_discard, arg);
15268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32
15295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_discard_i64(TCGv_i64 arg)
15308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_discard_i32(TCGV_LOW(arg));
15328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_discard_i32(TCGV_HIGH(arg));
15338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
15355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_discard_i64(TCGv_i64 arg)
15365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
15375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op1_i64(INDEX_op_discard, arg);
15385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
15395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
15405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
15415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_concat_i32_i64(TCGv_i64 dest, TCGv_i32 low, TCGv_i32 high)
15425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
15435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#if TCG_TARGET_REG_BITS == 32
15445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_LOW(dest), low);
15455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_HIGH(dest), high);
15465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
15475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 tmp = tcg_temp_new_i64();
15485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* This extension is only needed for type correctness.
15495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner       We may be able to do better given target specific information.  */
15505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_extu_i32_i64(tmp, high);
15515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shli_i64(tmp, tmp, 32);
15525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_extu_i32_i64(dest, low);
15535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(dest, dest, tmp);
15545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(tmp);
15555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
15565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
15575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
15585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_concat32_i64(TCGv_i64 dest, TCGv_i64 low, TCGv_i64 high)
15595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
15605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#if TCG_TARGET_REG_BITS == 32
15615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_concat_i32_i64(dest, TCGV_LOW(low), TCGV_LOW(high));
15625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
15635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 tmp = tcg_temp_new_i64();
15645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext32u_i64(dest, low);
15655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shli_i64(tmp, high, 32);
15665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(dest, dest, tmp);
15675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(tmp);
15685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
15695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
15705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
15715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andc_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
15725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
15735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0;
15745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
15755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i32(t0, arg2);
15765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_and_i32(ret, arg1, t0);
15775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
15785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
15795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
15805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andc_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
15815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
15825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
15835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
15845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i64(t0, arg2);
15855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_and_i64(ret, arg1, t0);
15865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
15875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
15885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
15895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_eqv_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
15905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
15915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_xor_i32(ret, arg1, arg2);
15925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i32(ret, ret);
15935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
15945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
15955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_eqv_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
15965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
15975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_xor_i64(ret, arg1, arg2);
15985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i64(ret, ret);
15995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
16005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_nand_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
16025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
16035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_and_i32(ret, arg1, arg2);
16045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i32(ret, ret);
16055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
16065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_nand_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
16085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
16095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_and_i64(ret, arg1, arg2);
16105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i64(ret, ret);
16115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
16125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_nor_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
16145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
16155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i32(ret, arg1, arg2);
16165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i32(ret, ret);
16175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
16185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_nor_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
16205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
16215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(ret, arg1, arg2);
16225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i64(ret, ret);
16235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
16245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_orc_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
16265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
16275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0;
16285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
16295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i32(t0, arg2);
16305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i32(ret, arg1, t0);
16315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
16325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
16335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_orc_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
16355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
16365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
16375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
16385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i64(t0, arg2);
16395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(ret, arg1, t0);
16405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
16415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
16425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotl_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
16445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
16455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i32
16465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_rotl_i32, ret, arg1, arg2);
16475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
16485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0, t1;
16495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
16515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i32();
16525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shl_i32(t0, arg1, arg2);
16535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_subfi_i32(t1, 32, arg2);
16545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shr_i32(t1, arg1, t1);
16555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i32(ret, t0, t1);
16565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
16575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t1);
16585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
16595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
16605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotl_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
16628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
16635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i64
16645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_rotl_i64, ret, arg1, arg2);
16655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
16665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0, t1;
16675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
16695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i64();
16705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shl_i64(t0, arg1, arg2);
16715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_subfi_i64(t1, 64, arg2);
16725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shr_i64(t1, arg1, t1);
16735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(ret, t0, t1);
16745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
16755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t1);
16765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
16778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
16785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotli_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
16805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
16815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* some cases can be optimized here */
16825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (arg2 == 0) {
16835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i32(ret, arg1);
16845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
16855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i32
16865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
16875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_rotl_i32(ret, arg1, t0);
16885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
16895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
16905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0, t1;
16915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        t0 = tcg_temp_new_i32();
16925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        t1 = tcg_temp_new_i32();
16935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_shli_i32(t0, arg1, arg2);
16945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_shri_i32(t1, arg1, 32 - arg2);
16955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_or_i32(ret, t0, t1);
16965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
16975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t1);
16988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
16995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
17005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
17015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
17025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
17035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
17045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* some cases can be optimized here */
17055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (arg2 == 0) {
17065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i64(ret, arg1);
17075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
17085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i64
17095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0 = tcg_const_i64(arg2);
17105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_rotl_i64(ret, arg1, t0);
17115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
17125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
17135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0, t1;
17145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        t0 = tcg_temp_new_i64();
17155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        t1 = tcg_temp_new_i64();
17165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_shli_i64(t0, arg1, arg2);
17175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_shri_i64(t1, arg1, 64 - arg2);
17185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_or_i64(ret, t0, t1);
17195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
17205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t1);
17215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
17225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
17235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
17245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
17255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotr_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
17265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
17275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i32
17285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_rotr_i32, ret, arg1, arg2);
17295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
17305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0, t1;
17315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
17325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
17335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i32();
17345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shr_i32(t0, arg1, arg2);
17355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_subfi_i32(t1, 32, arg2);
17365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shl_i32(t1, arg1, t1);
17375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i32(ret, t0, t1);
17385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
17395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t1);
17405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
17415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
17425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
17435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotr_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
17445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
17455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i64
17465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_rotr_i64, ret, arg1, arg2);
17475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
17485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0, t1;
17495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
17505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
17515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i64();
17525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shl_i64(t0, arg1, arg2);
17535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_subfi_i64(t1, 64, arg2);
17545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shl_i64(t1, arg1, t1);
17555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(ret, t0, t1);
17565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
17575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t1);
17585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
17595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
17605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
17615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotri_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
17625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
17635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* some cases can be optimized here */
17645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (arg2 == 0) {
17655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i32(ret, arg1);
17665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
17675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_rotli_i32(ret, arg1, 32 - arg2);
17685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
17695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
17705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
17715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotri_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
17725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
17735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* some cases can be optimized here */
17745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (arg2 == 0) {
17755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i64(ret, arg1);
17765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
17775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_rotli_i64(ret, arg1, 64 - arg2);
17785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
17795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
17808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/***************************************/
17828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* QEMU specific operations. Their type depend on the QEMU CPU
17838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   type. */
17848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef TARGET_LONG_BITS
17858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#error must include QEMU headers
17868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
17878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#if TARGET_LONG_BITS == 32
17895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGv TCGv_i32
17905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_new() tcg_temp_new_i32()
17915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_global_reg_new tcg_global_reg_new_i32
17925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_global_mem_new tcg_global_mem_new_i32
17935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_local_new() tcg_temp_local_new_i32()
17945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_free tcg_temp_free_i32
17955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_qemu_ldst_op tcg_gen_op3i_i32
17965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_qemu_ldst_op_i64 tcg_gen_qemu_ldst_op_i64_i32
17975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGV_UNUSED(x) TCGV_UNUSED_I32(x)
17985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGV_EQUAL(a, b) TCGV_EQUAL_I32(a, b)
17995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
18005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGv TCGv_i64
18015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_new() tcg_temp_new_i64()
18025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_global_reg_new tcg_global_reg_new_i64
18035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_global_mem_new tcg_global_mem_new_i64
18045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_local_new() tcg_temp_local_new_i64()
18055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_free tcg_temp_free_i64
18065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_qemu_ldst_op tcg_gen_op3i_i64
18075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_qemu_ldst_op_i64 tcg_gen_qemu_ldst_op_i64_i64
18085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGV_UNUSED(x) TCGV_UNUSED_I64(x)
18095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGV_EQUAL(a, b) TCGV_EQUAL_I64(a, b)
18105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
18115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
18128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* debug info: write the PC of the corresponding QEMU CPU instruction */
18138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_debug_insn_start(uint64_t pc)
18148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
18158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* XXX: must really use a 32 bit size for TCGArg in all cases */
18168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS > TCG_TARGET_REG_BITS
18178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op2ii(INDEX_op_debug_insn_start,
18188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                  (uint32_t)(pc), (uint32_t)(pc >> 32));
18198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
18208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1i(INDEX_op_debug_insn_start, pc);
18218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
18228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
18238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
18248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_exit_tb(tcg_target_long val)
18258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
18268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1i(INDEX_op_exit_tb, val);
18278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
18288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
18298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_goto_tb(int idx)
18308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
18318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1i(INDEX_op_goto_tb, idx);
18328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
18338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
18348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32
18358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8u(TCGv ret, TCGv addr, int mem_index)
18368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
18378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
18385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_ld8u, ret, addr, mem_index);
18398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
18405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld8u, TCGV_LOW(ret), TCGV_LOW(addr),
18415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
18428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
18438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
18448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
18458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
18468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8s(TCGv ret, TCGv addr, int mem_index)
18478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
18488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
18495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_ld8s, ret, addr, mem_index);
18508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
18515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld8s, TCGV_LOW(ret), TCGV_LOW(addr),
18525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
18535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
18548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
18558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
18568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
18578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16u(TCGv ret, TCGv addr, int mem_index)
18588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
18598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
18605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_ld16u, ret, addr, mem_index);
18618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
18625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld16u, TCGV_LOW(ret), TCGV_LOW(addr),
18635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
18648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
18658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
18668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
18678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
18688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16s(TCGv ret, TCGv addr, int mem_index)
18698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
18708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
18715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_ld16s, ret, addr, mem_index);
18728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
18735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld16s, TCGV_LOW(ret), TCGV_LOW(addr),
18745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
18755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
18768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
18778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
18788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
18798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32u(TCGv ret, TCGv addr, int mem_index)
18808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
18818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
18825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_ld32u, ret, addr, mem_index);
18838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
18845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld32u, TCGV_LOW(ret), TCGV_LOW(addr),
18855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
18868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
18878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
18888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
18898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
18908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32s(TCGv ret, TCGv addr, int mem_index)
18918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
18928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
18935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_ld32u, ret, addr, mem_index);
18948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
18955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld32u, TCGV_LOW(ret), TCGV_LOW(addr),
18965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
18975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
18988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
18998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_ld64(TCGv_i64 ret, TCGv addr, int mem_index)
19028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
19045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld64, TCGV_LOW(ret), TCGV_HIGH(ret), addr, mem_index);
19058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
19065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5i_i32(INDEX_op_qemu_ld64, TCGV_LOW(ret), TCGV_HIGH(ret),
19075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_LOW(addr), TCGV_HIGH(addr), mem_index);
19088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
19098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st8(TCGv arg, TCGv addr, int mem_index)
19128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
19145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_st8, arg, addr, mem_index);
19158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
19165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_st8, TCGV_LOW(arg), TCGV_LOW(addr),
19175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
19188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
19198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st16(TCGv arg, TCGv addr, int mem_index)
19228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
19245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_st16, arg, addr, mem_index);
19258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
19265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_st16, TCGV_LOW(arg), TCGV_LOW(addr),
19275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
19288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
19298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st32(TCGv arg, TCGv addr, int mem_index)
19328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
19345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_st32, arg, addr, mem_index);
19358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
19365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_st32, TCGV_LOW(arg), TCGV_LOW(addr),
19375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
19388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
19398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_st64(TCGv_i64 arg, TCGv addr, int mem_index)
19428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
19445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_st64, TCGV_LOW(arg), TCGV_HIGH(arg), addr,
19455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     mem_index);
19468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
19475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5i_i32(INDEX_op_qemu_st64, TCGV_LOW(arg), TCGV_HIGH(arg),
19485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_LOW(addr), TCGV_HIGH(addr), mem_index);
19498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
19508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_ptr tcg_gen_ld_i32
19538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_ptr tcg_gen_discard_i32
19548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else /* TCG_TARGET_REG_BITS == 32 */
19568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8u(TCGv ret, TCGv addr, int mem_index)
19588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld8u, ret, addr, mem_index);
19608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8s(TCGv ret, TCGv addr, int mem_index)
19638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld8s, ret, addr, mem_index);
19658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16u(TCGv ret, TCGv addr, int mem_index)
19688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld16u, ret, addr, mem_index);
19708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16s(TCGv ret, TCGv addr, int mem_index)
19738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld16s, ret, addr, mem_index);
19758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32u(TCGv ret, TCGv addr, int mem_index)
19788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld32u, ret, addr, mem_index);
19808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32s(TCGv ret, TCGv addr, int mem_index)
19838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld32s, ret, addr, mem_index);
19858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_ld64(TCGv_i64 ret, TCGv addr, int mem_index)
19888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op_i64(INDEX_op_qemu_ld64, ret, addr, mem_index);
19908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st8(TCGv arg, TCGv addr, int mem_index)
19938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_st8, arg, addr, mem_index);
19958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st16(TCGv arg, TCGv addr, int mem_index)
19988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_st16, arg, addr, mem_index);
20008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
20018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st32(TCGv arg, TCGv addr, int mem_index)
20038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
20045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_st32, arg, addr, mem_index);
20058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
20068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_st64(TCGv_i64 arg, TCGv addr, int mem_index)
20088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
20095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op_i64(INDEX_op_qemu_st64, arg, addr, mem_index);
20108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
20118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_ptr tcg_gen_ld_i64
20138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_ptr tcg_gen_discard_i64
20148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* TCG_TARGET_REG_BITS != 32 */
20168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 64
20188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TCG_TYPE_TL TCG_TYPE_I64
20198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_movi_tl tcg_gen_movi_i64
20208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mov_tl tcg_gen_mov_i64
20218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8u_tl tcg_gen_ld8u_i64
20228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8s_tl tcg_gen_ld8s_i64
20238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16u_tl tcg_gen_ld16u_i64
20248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16s_tl tcg_gen_ld16s_i64
20258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32u_tl tcg_gen_ld32u_i64
20268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32s_tl tcg_gen_ld32s_i64
20278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_tl tcg_gen_ld_i64
20288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st8_tl tcg_gen_st8_i64
20298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st16_tl tcg_gen_st16_i64
20308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st32_tl tcg_gen_st32_i64
20318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st_tl tcg_gen_st_i64
20328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_tl tcg_gen_add_i64
20338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_tl tcg_gen_addi_i64
20348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sub_tl tcg_gen_sub_i64
20358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_neg_tl tcg_gen_neg_i64
20365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_subfi_tl tcg_gen_subfi_i64
20378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_subi_tl tcg_gen_subi_i64
20388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_and_tl tcg_gen_and_i64
20398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_andi_tl tcg_gen_andi_i64
20408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_or_tl tcg_gen_or_i64
20418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ori_tl tcg_gen_ori_i64
20428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xor_tl tcg_gen_xor_i64
20438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xori_tl tcg_gen_xori_i64
20448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_not_tl tcg_gen_not_i64
20458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shl_tl tcg_gen_shl_i64
20468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shli_tl tcg_gen_shli_i64
20478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shr_tl tcg_gen_shr_i64
20488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shri_tl tcg_gen_shri_i64
20498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sar_tl tcg_gen_sar_i64
20508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sari_tl tcg_gen_sari_i64
20518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcond_tl tcg_gen_brcond_i64
20528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcondi_tl tcg_gen_brcondi_i64
20538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mul_tl tcg_gen_mul_i64
20548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_muli_tl tcg_gen_muli_i64
20555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_div_tl tcg_gen_div_i64
20565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rem_tl tcg_gen_rem_i64
20575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_divu_tl tcg_gen_divu_i64
20585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_remu_tl tcg_gen_remu_i64
20598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_tl tcg_gen_discard_i64
20608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_tl_i32 tcg_gen_trunc_i64_i32
20618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_i64_tl tcg_gen_mov_i64
20628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_i32_tl tcg_gen_extu_i32_i64
20638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_tl tcg_gen_ext_i32_i64
20648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_tl_i64 tcg_gen_mov_i64
20658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_tl_i64 tcg_gen_mov_i64
20668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8u_tl tcg_gen_ext8u_i64
20678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8s_tl tcg_gen_ext8s_i64
20688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16u_tl tcg_gen_ext16u_i64
20698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16s_tl tcg_gen_ext16s_i64
20708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32u_tl tcg_gen_ext32u_i64
20718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32s_tl tcg_gen_ext32s_i64
20725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap16_tl tcg_gen_bswap16_i64
20735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap32_tl tcg_gen_bswap32_i64
20745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap64_tl tcg_gen_bswap64_i64
20755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_concat_tl_i64 tcg_gen_concat32_i64
20765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_andc_tl tcg_gen_andc_i64
20775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_eqv_tl tcg_gen_eqv_i64
20785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_nand_tl tcg_gen_nand_i64
20795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_nor_tl tcg_gen_nor_i64
20805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_orc_tl tcg_gen_orc_i64
20815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotl_tl tcg_gen_rotl_i64
20825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotli_tl tcg_gen_rotli_i64
20835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotr_tl tcg_gen_rotr_i64
20845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotri_tl tcg_gen_rotri_i64
20858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_const_tl tcg_const_i64
20865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_const_local_tl tcg_const_local_i64
20878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
20888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TCG_TYPE_TL TCG_TYPE_I32
20898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_movi_tl tcg_gen_movi_i32
20908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mov_tl tcg_gen_mov_i32
20918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8u_tl tcg_gen_ld8u_i32
20928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8s_tl tcg_gen_ld8s_i32
20938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16u_tl tcg_gen_ld16u_i32
20948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16s_tl tcg_gen_ld16s_i32
20958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32u_tl tcg_gen_ld_i32
20968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32s_tl tcg_gen_ld_i32
20978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_tl tcg_gen_ld_i32
20988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st8_tl tcg_gen_st8_i32
20998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st16_tl tcg_gen_st16_i32
21008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st32_tl tcg_gen_st_i32
21018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st_tl tcg_gen_st_i32
21028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_tl tcg_gen_add_i32
21038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_tl tcg_gen_addi_i32
21048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sub_tl tcg_gen_sub_i32
21058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_neg_tl tcg_gen_neg_i32
21065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_subfi_tl tcg_gen_subfi_i32
21078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_subi_tl tcg_gen_subi_i32
21088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_and_tl tcg_gen_and_i32
21098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_andi_tl tcg_gen_andi_i32
21108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_or_tl tcg_gen_or_i32
21118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ori_tl tcg_gen_ori_i32
21128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xor_tl tcg_gen_xor_i32
21138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xori_tl tcg_gen_xori_i32
21148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_not_tl tcg_gen_not_i32
21158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shl_tl tcg_gen_shl_i32
21168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shli_tl tcg_gen_shli_i32
21178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shr_tl tcg_gen_shr_i32
21188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shri_tl tcg_gen_shri_i32
21198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sar_tl tcg_gen_sar_i32
21208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sari_tl tcg_gen_sari_i32
21218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcond_tl tcg_gen_brcond_i32
21228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcondi_tl tcg_gen_brcondi_i32
21238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mul_tl tcg_gen_mul_i32
21248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_muli_tl tcg_gen_muli_i32
21255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_div_tl tcg_gen_div_i32
21265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rem_tl tcg_gen_rem_i32
21275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_divu_tl tcg_gen_divu_i32
21285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_remu_tl tcg_gen_remu_i32
21298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_tl tcg_gen_discard_i32
21308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_tl_i32 tcg_gen_mov_i32
21318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_i64_tl tcg_gen_trunc_i64_i32
21328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_i32_tl tcg_gen_mov_i32
21338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_tl tcg_gen_mov_i32
21348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_tl_i64 tcg_gen_extu_i32_i64
21358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_tl_i64 tcg_gen_ext_i32_i64
21368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8u_tl tcg_gen_ext8u_i32
21378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8s_tl tcg_gen_ext8s_i32
21388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16u_tl tcg_gen_ext16u_i32
21398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16s_tl tcg_gen_ext16s_i32
21408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32u_tl tcg_gen_mov_i32
21418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32s_tl tcg_gen_mov_i32
21425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap16_tl tcg_gen_bswap16_i32
21435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap32_tl tcg_gen_bswap32_i32
21445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_concat_tl_i64 tcg_gen_concat_i32_i64
21455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_andc_tl tcg_gen_andc_i32
21465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_eqv_tl tcg_gen_eqv_i32
21475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_nand_tl tcg_gen_nand_i32
21485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_nor_tl tcg_gen_nor_i32
21495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_orc_tl tcg_gen_orc_i32
21505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotl_tl tcg_gen_rotl_i32
21515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotli_tl tcg_gen_rotli_i32
21525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotr_tl tcg_gen_rotr_i32
21535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotri_tl tcg_gen_rotri_i32
21548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_const_tl tcg_const_i32
21555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_const_local_tl tcg_const_local_i32
21568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
21578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32
21598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_ptr tcg_gen_add_i32
21608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_ptr tcg_gen_addi_i32
21618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_ptr tcg_gen_mov_i32
21628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else /* TCG_TARGET_REG_BITS == 32 */
21638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_ptr tcg_gen_add_i64
21648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_ptr tcg_gen_addi_i64
21658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_ptr tcg_gen_ext_i32_i64
21668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* TCG_TARGET_REG_BITS != 32 */
2167