tcg-op.h revision b9317727862dd690cc67bb51f71991c404f9e4f6
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
283b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turnerstatic inline void tcg_gen_op6i_i32(int opc, TCGv_i32 arg1, TCGv_i32 arg2,
284b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner                                    TCGv_i32 arg3, TCGv_i32 arg4,
285b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner                                    TCGv_i32 arg5, TCGArg arg6)
286b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{
287b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opc_ptr++ = opc;
288b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
289b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
290b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
291b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg4);
292b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg5);
293b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = arg6;
294b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner}
295b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner
296b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turnerstatic inline void tcg_gen_op6i_i64(int opc, TCGv_i64 arg1, TCGv_i64 arg2,
297b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner                                    TCGv_i64 arg3, TCGv_i64 arg4,
298b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner                                    TCGv_i64 arg5, TCGArg arg6)
299b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{
300b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opc_ptr++ = opc;
301b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
302b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
303b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
304b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg4);
305b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg5);
306b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = arg6;
307b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner}
308b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner
3095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op6ii_i32(int opc, TCGv_i32 arg1, TCGv_i32 arg2,
3105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     TCGv_i32 arg3, TCGv_i32 arg4, TCGArg arg5,
3115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     TCGArg arg6)
3125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
3135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
3145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
3155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
3165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
3175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg4);
3185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = arg5;
3195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = arg6;
3205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
3215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
3225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op6ii_i64(int opc, TCGv_i64 arg1, TCGv_i64 arg2,
3235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     TCGv_i64 arg3, TCGv_i64 arg4, TCGArg arg5,
3245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     TCGArg arg6)
3255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
3265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
3275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
3285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
3295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
3305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg4);
3318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg5;
3328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg6;
3338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void gen_set_label(int n)
3368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1i(INDEX_op_set_label, n);
3388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_br(int label)
3418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1i(INDEX_op_br, label);
3438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mov_i32(TCGv_i32 ret, TCGv_i32 arg)
3468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (!TCGV_EQUAL_I32(ret, arg))
3485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op2_i32(INDEX_op_mov_i32, ret, arg);
3498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_movi_i32(TCGv_i32 ret, int32_t arg)
3528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2i_i32(INDEX_op_movi_i32, ret, arg);
3548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* helper calls */
3575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_helperN(void *func, int flags, int sizemask,
3585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   TCGArg ret, int nargs, TCGArg *args)
3595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
3605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_ptr fn;
3615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    fn = tcg_const_ptr((tcg_target_long)func);
3625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_callN(&tcg_ctx, fn, flags, sizemask, ret,
3635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                  nargs, args);
3645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_ptr(fn);
3655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
3668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* FIXME: Should this be pure?  */
3685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_helper64(void *func, TCGv_i64 ret,
3695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    TCGv_i64 a, TCGv_i64 b)
3708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_ptr fn;
3725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGArg args[2];
3735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    fn = tcg_const_ptr((tcg_target_long)func);
3745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    args[0] = GET_TCGV_I64(a);
3755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    args[1] = GET_TCGV_I64(b);
3765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_callN(&tcg_ctx, fn, 0, 7, GET_TCGV_I64(ret), 2, args);
3775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_ptr(fn);
3788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* 32 bit ops */
3818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8u_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset)
3838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_ld8u_i32, ret, arg2, offset);
3858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8s_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset)
3888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_ld8s_i32, ret, arg2, offset);
3908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16u_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset)
3938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_ld16u_i32, ret, arg2, offset);
3958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16s_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset)
3988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_ld16s_i32, ret, arg2, offset);
4008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset)
4038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_ld_i32, ret, arg2, offset);
4058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st8_i32(TCGv_i32 arg1, TCGv_ptr arg2, tcg_target_long offset)
4088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_st8_i32, arg1, arg2, offset);
4108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st16_i32(TCGv_i32 arg1, TCGv_ptr arg2, tcg_target_long offset)
4138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_st16_i32, arg1, arg2, offset);
4158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st_i32(TCGv_i32 arg1, TCGv_ptr arg2, tcg_target_long offset)
4188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_st_i32, arg1, arg2, offset);
4208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_add_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
4238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_add_i32, ret, arg1, arg2);
4258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_addi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
4288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* some cases can be optimized here */
4308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
4318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
4328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
4335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
4348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_add_i32(ret, arg1, t0);
4355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
4368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
4378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sub_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
4408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_sub_i32, ret, arg1, arg2);
4428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_subfi_i32(TCGv_i32 ret, int32_t arg1, TCGv_i32 arg2)
4455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
4465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0 = tcg_const_i32(arg1);
4475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sub_i32(ret, t0, arg2);
4485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
4495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
4505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
4515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_subi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
4528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* some cases can be optimized here */
4548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
4558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
4568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
4575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
4588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_sub_i32(ret, arg1, t0);
4595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
4608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
4618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_and_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
4648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (TCGV_EQUAL_I32(arg1, arg2)) {
4665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i32(ret, arg1);
4675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
4685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op3_i32(INDEX_op_and_i32, ret, arg1, arg2);
4695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
4708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
4738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* some cases can be optimized here */
4758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
4768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_movi_i32(ret, 0);
4778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else if (arg2 == 0xffffffff) {
4788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
4798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
4805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
4818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_and_i32(ret, arg1, t0);
4825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
4838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
4848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_or_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
4878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (TCGV_EQUAL_I32(arg1, arg2)) {
4895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i32(ret, arg1);
4905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
4915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op3_i32(INDEX_op_or_i32, ret, arg1, arg2);
4925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
4938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ori_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
4968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* some cases can be optimized here */
4988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0xffffffff) {
4998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_movi_i32(ret, 0xffffffff);
5008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else if (arg2 == 0) {
5018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
5028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
5035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
5048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_or_i32(ret, arg1, t0);
5055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
5068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
5078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xor_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
5108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (TCGV_EQUAL_I32(arg1, arg2)) {
5125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_movi_i32(ret, 0);
5135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
5145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op3_i32(INDEX_op_xor_i32, ret, arg1, arg2);
5155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
5168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xori_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
5198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* some cases can be optimized here */
5218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
5228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
5238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
5245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
5258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_xor_i32(ret, arg1, t0);
5265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
5278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
5288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shl_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
5318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_shl_i32, ret, arg1, arg2);
5338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shli_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
5368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
5388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
5398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
5405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
5418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_shl_i32(ret, arg1, t0);
5425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
5438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
5448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shr_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
5478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_shr_i32, ret, arg1, arg2);
5498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shri_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
5528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
5548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
5558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
5565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
5578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_shr_i32(ret, arg1, t0);
5585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
5598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
5608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sar_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
5638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_sar_i32, ret, arg1, arg2);
5658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sari_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
5688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
5708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
5718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
5725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
5738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_sar_i32(ret, arg1, t0);
5745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
5758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
5768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_brcond_i32(int cond, TCGv_i32 arg1, TCGv_i32 arg2,
5798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                      int label_index)
5808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4ii_i32(INDEX_op_brcond_i32, arg1, arg2, cond, label_index);
5828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_brcondi_i32(int cond, TCGv_i32 arg1, int32_t arg2,
5858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                       int label_index)
5868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0 = tcg_const_i32(arg2);
5888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_brcond_i32(cond, arg1, t0, label_index);
5895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
5908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
592b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turnerstatic inline void tcg_gen_setcond_i32(int cond, TCGv_i32 ret,
593b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner                                       TCGv_i32 arg1, TCGv_i32 arg2)
594b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{
595b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_setcond_i32, ret, arg1, arg2, cond);
596b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner}
597b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner
598b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turnerstatic inline void tcg_gen_setcondi_i32(int cond, TCGv_i32 ret, TCGv_i32 arg1,
599b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner                                        int32_t arg2)
600b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{
601b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    TCGv_i32 t0 = tcg_const_i32(arg2);
602b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_setcond_i32(cond, ret, arg1, t0);
603b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_temp_free_i32(t0);
604b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner}
605b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner
6065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mul_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_mul_i32, ret, arg1, arg2);
6098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_muli_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
6128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0 = tcg_const_i32(arg2);
6148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_mul_i32(ret, arg1, t0);
6155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
6168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_div_i32
6195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_div_i32, ret, arg1, arg2);
6228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_rem_i32, ret, arg1, arg2);
6278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_divu_i32, ret, arg1, arg2);
6328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_remu_i32, ret, arg1, arg2);
6378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
6395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0;
6425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
6438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(t0, arg1, 31);
6445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i32(INDEX_op_div2_i32, ret, t0, arg1, t0, arg2);
6455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
6468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0;
6515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
6528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(t0, arg1, 31);
6535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i32(INDEX_op_div2_i32, t0, ret, arg1, t0, arg2);
6545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
6558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0;
6605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
6618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(t0, 0);
6625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i32(INDEX_op_divu2_i32, ret, t0, arg1, t0, arg2);
6635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
6648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0;
6695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
6708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(t0, 0);
6715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i32(INDEX_op_divu2_i32, t0, ret, arg1, t0, arg2);
6725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
6738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
6758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32
6778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mov_i64(TCGv_i64 ret, TCGv_i64 arg)
6798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (!TCGV_EQUAL_I64(ret, arg)) {
6815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i32(TCGV_LOW(ret), TCGV_LOW(arg));
6828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg));
6838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
6848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_movi_i64(TCGv_i64 ret, int64_t arg)
6878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_movi_i32(TCGV_LOW(ret), arg);
6898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), arg >> 32);
6908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8u_i64(TCGv_i64 ret, TCGv_ptr arg2,
6935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    tcg_target_long offset)
6948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld8u_i32(TCGV_LOW(ret), arg2, offset);
6968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
6978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8s_i64(TCGv_i64 ret, TCGv_ptr arg2,
7005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    tcg_target_long offset)
7018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld8s_i32(TCGV_LOW(ret), arg2, offset);
7035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_HIGH(ret), 31);
7048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16u_i64(TCGv_i64 ret, TCGv_ptr arg2,
7075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     tcg_target_long offset)
7088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld16u_i32(TCGV_LOW(ret), arg2, offset);
7108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
7118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16s_i64(TCGv_i64 ret, TCGv_ptr arg2,
7145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     tcg_target_long offset)
7158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld16s_i32(TCGV_LOW(ret), arg2, offset);
7175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
7188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld32u_i64(TCGv_i64 ret, TCGv_ptr arg2,
7215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     tcg_target_long offset)
7228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset);
7248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
7258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld32s_i64(TCGv_i64 ret, TCGv_ptr arg2,
7285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     tcg_target_long offset)
7298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset);
7315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
7328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld_i64(TCGv_i64 ret, TCGv_ptr arg2,
7355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                  tcg_target_long offset)
7368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* since arg2 and ret have different types, they cannot be the
7388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       same temporary */
7398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_WORDS_BIGENDIAN
7408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ld_i32(TCGV_HIGH(ret), arg2, offset);
7415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset + 4);
7428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
7435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset);
7448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ld_i32(TCGV_HIGH(ret), arg2, offset + 4);
7458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
7468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st8_i64(TCGv_i64 arg1, TCGv_ptr arg2,
7495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   tcg_target_long offset)
7508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_st8_i32(TCGV_LOW(arg1), arg2, offset);
7528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st16_i64(TCGv_i64 arg1, TCGv_ptr arg2,
7555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    tcg_target_long offset)
7568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_st16_i32(TCGV_LOW(arg1), arg2, offset);
7588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st32_i64(TCGv_i64 arg1, TCGv_ptr arg2,
7615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    tcg_target_long offset)
7628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_st_i32(TCGV_LOW(arg1), arg2, offset);
7648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st_i64(TCGv_i64 arg1, TCGv_ptr arg2,
7675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                  tcg_target_long offset)
7688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_WORDS_BIGENDIAN
7708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_st_i32(TCGV_HIGH(arg1), arg2, offset);
7715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_st_i32(TCGV_LOW(arg1), arg2, offset + 4);
7728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
7735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_st_i32(TCGV_LOW(arg1), arg2, offset);
7748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_st_i32(TCGV_HIGH(arg1), arg2, offset + 4);
7758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
7768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_add_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
7798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op6_i32(INDEX_op_add2_i32, TCGV_LOW(ret), TCGV_HIGH(ret),
7815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                    TCGV_LOW(arg1), TCGV_HIGH(arg1), TCGV_LOW(arg2),
7825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                    TCGV_HIGH(arg2));
7838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sub_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
7868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op6_i32(INDEX_op_sub2_i32, TCGV_LOW(ret), TCGV_HIGH(ret),
7885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                    TCGV_LOW(arg1), TCGV_HIGH(arg1), TCGV_LOW(arg2),
7895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                    TCGV_HIGH(arg2));
7908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_and_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
7938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_and_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
7958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_and_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
7968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
7998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_andi_i32(TCGV_LOW(ret), TCGV_LOW(arg1), arg2);
8018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32);
8028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_or_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
8058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
8078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
8088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
8118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ori_i32(TCGV_LOW(ret), TCGV_LOW(arg1), arg2);
8138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ori_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32);
8148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xor_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
8178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_xor_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
8198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xor_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
8208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
8238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_xori_i32(TCGV_LOW(ret), TCGV_LOW(arg1), arg2);
8258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xori_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32);
8268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* XXX: use generic code when basic block handling is OK or CPU
8298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   specific code (x86) */
8305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shl_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
8318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_helper64(tcg_helper_shl_i64, ret, arg1, arg2);
8338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
8368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shifti_i64(ret, arg1, arg2, 0, 0);
8388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shr_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
8418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_helper64(tcg_helper_shr_i64, ret, arg1, arg2);
8438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shri_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
8468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shifti_i64(ret, arg1, arg2, 1, 0);
8488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sar_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
8518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_helper64(tcg_helper_sar_i64, ret, arg1, arg2);
8538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sari_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
8568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shifti_i64(ret, arg1, arg2, 1, 1);
8588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_brcond_i64(int cond, TCGv_i64 arg1, TCGv_i64 arg2,
8618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                      int label_index)
8628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op6ii_i32(INDEX_op_brcond2_i32,
8645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                      TCGV_LOW(arg1), TCGV_HIGH(arg1), TCGV_LOW(arg2),
8655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                      TCGV_HIGH(arg2), cond, label_index);
8668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
868b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turnerstatic inline void tcg_gen_setcond_i64(int cond, TCGv_i64 ret,
869b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner                                       TCGv_i64 arg1, TCGv_i64 arg2)
870b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{
871b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op6i_i32(INDEX_op_setcond2_i32, TCGV_LOW(ret),
872b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner                     TCGV_LOW(arg1), TCGV_HIGH(arg1),
873b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner                     TCGV_LOW(arg2), TCGV_HIGH(arg2), cond);
874b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
875b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner}
876b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner
8775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mul_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
8788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
8805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t1;
8818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
8835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i32();
8845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
8855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4_i32(INDEX_op_mulu2_i32, TCGV_LOW(t0), TCGV_HIGH(t0),
8865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                    TCGV_LOW(arg1), TCGV_LOW(arg2));
8875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
8885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mul_i32(t1, TCGV_LOW(arg1), TCGV_HIGH(arg2));
8898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_add_i32(TCGV_HIGH(t0), TCGV_HIGH(t0), t1);
8905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mul_i32(t1, TCGV_HIGH(arg1), TCGV_LOW(arg2));
8918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_add_i32(TCGV_HIGH(t0), TCGV_HIGH(t0), t1);
8928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i64(ret, t0);
8945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
8955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t1);
8968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
8998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_helper64(tcg_helper_div_i64, ret, arg1, arg2);
9018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
9048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_helper64(tcg_helper_rem_i64, ret, arg1, arg2);
9068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
9098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_helper64(tcg_helper_divu_i64, ret, arg1, arg2);
9118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
9148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_helper64(tcg_helper_remu_i64, ret, arg1, arg2);
9168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
9198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mov_i64(TCGv_i64 ret, TCGv_i64 arg)
9218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (!TCGV_EQUAL_I64(ret, arg))
9235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op2_i64(INDEX_op_mov_i64, ret, arg);
9248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_movi_i64(TCGv_i64 ret, int64_t arg)
9278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2i_i64(INDEX_op_movi_i64, ret, arg);
9298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8u_i64(TCGv_i64 ret, TCGv_i64 arg2,
9328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                    tcg_target_long offset)
9338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld8u_i64, ret, arg2, offset);
9358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8s_i64(TCGv_i64 ret, TCGv_i64 arg2,
9388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                    tcg_target_long offset)
9398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld8s_i64, ret, arg2, offset);
9418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16u_i64(TCGv_i64 ret, TCGv_i64 arg2,
9448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                     tcg_target_long offset)
9458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld16u_i64, ret, arg2, offset);
9478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16s_i64(TCGv_i64 ret, TCGv_i64 arg2,
9508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                     tcg_target_long offset)
9518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld16s_i64, ret, arg2, offset);
9538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld32u_i64(TCGv_i64 ret, TCGv_i64 arg2,
9568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                     tcg_target_long offset)
9578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld32u_i64, ret, arg2, offset);
9598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld32s_i64(TCGv_i64 ret, TCGv_i64 arg2,
9628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                     tcg_target_long offset)
9638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld32s_i64, ret, arg2, offset);
9658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld_i64(TCGv_i64 ret, TCGv_i64 arg2, tcg_target_long offset)
9688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld_i64, ret, arg2, offset);
9708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st8_i64(TCGv_i64 arg1, TCGv_i64 arg2,
9738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                   tcg_target_long offset)
9748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_st8_i64, arg1, arg2, offset);
9768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st16_i64(TCGv_i64 arg1, TCGv_i64 arg2,
9798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                    tcg_target_long offset)
9808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_st16_i64, arg1, arg2, offset);
9828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st32_i64(TCGv_i64 arg1, TCGv_i64 arg2,
9858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                    tcg_target_long offset)
9868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_st32_i64, arg1, arg2, offset);
9888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st_i64(TCGv_i64 arg1, TCGv_i64 arg2, tcg_target_long offset)
9918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_st_i64, arg1, arg2, offset);
9938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_add_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
9968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_add_i64, ret, arg1, arg2);
9988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sub_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_sub_i64, ret, arg1, arg2);
10038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_and_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (TCGV_EQUAL_I64(arg1, arg2)) {
10085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i64(ret, arg1);
10095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
10105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op3_i64(INDEX_op_and_i64, ret, arg1, arg2);
10115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
10128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
10158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(arg2);
10178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_and_i64(ret, arg1, t0);
10185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
10198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_or_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (TCGV_EQUAL_I64(arg1, arg2)) {
10245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i64(ret, arg1);
10255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
10265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op3_i64(INDEX_op_or_i64, ret, arg1, arg2);
10275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
10288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
10318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(arg2);
10338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(ret, arg1, t0);
10345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
10358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xor_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (TCGV_EQUAL_I64(arg1, arg2)) {
10405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_movi_i64(ret, 0);
10415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
10425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op3_i64(INDEX_op_xor_i64, ret, arg1, arg2);
10435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
10448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
10478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(arg2);
10498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xor_i64(ret, arg1, t0);
10505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
10518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shl_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_shl_i64, ret, arg1, arg2);
10568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
10598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
10618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i64(ret, arg1);
10628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
10635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0 = tcg_const_i64(arg2);
10648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_shl_i64(ret, arg1, t0);
10655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
10668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
10678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shr_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_shr_i64, ret, arg1, arg2);
10728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shri_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
10758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
10778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i64(ret, arg1);
10788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
10795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0 = tcg_const_i64(arg2);
10808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_shr_i64(ret, arg1, t0);
10815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
10828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
10838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sar_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_sar_i64, ret, arg1, arg2);
10888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sari_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
10918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
10938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i64(ret, arg1);
10948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
10955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0 = tcg_const_i64(arg2);
10968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_sar_i64(ret, arg1, t0);
10975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
10988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
10998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_brcond_i64(int cond, TCGv_i64 arg1, TCGv_i64 arg2,
11028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                      int label_index)
11038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4ii_i64(INDEX_op_brcond_i64, arg1, arg2, cond, label_index);
11058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1107b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turnerstatic inline void tcg_gen_setcond_i64(int cond, TCGv_i64 ret,
1108b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner                                       TCGv_i64 arg1, TCGv_i64 arg2)
1109b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{
1110b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op4i_i64(INDEX_op_setcond_i64, ret, arg1, arg2, cond);
1111b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner}
1112b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner
11135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mul_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
11148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_mul_i64, ret, arg1, arg2);
11168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_div_i64
11195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
11208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_div_i64, ret, arg1, arg2);
11228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
11258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_rem_i64, ret, arg1, arg2);
11278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
11308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_divu_i64, ret, arg1, arg2);
11328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
11358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_remu_i64, ret, arg1, arg2);
11378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
11395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
11408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
11425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
11438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i64(t0, arg1, 63);
11445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i64(INDEX_op_div2_i64, ret, t0, arg1, t0, arg2);
11455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
11468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
11498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
11515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
11528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i64(t0, arg1, 63);
11535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i64(INDEX_op_div2_i64, t0, ret, arg1, t0, arg2);
11545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
11558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
11588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
11605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
11618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i64(t0, 0);
11625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i64(INDEX_op_divu2_i64, ret, t0, arg1, t0, arg2);
11635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
11648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
11678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
11695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
11708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i64(t0, 0);
11715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i64(INDEX_op_divu2_i64, t0, ret, arg1, t0, arg2);
11725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
11738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
11758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
11778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_addi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
11795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
11805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* some cases can be optimized here */
11815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (arg2 == 0) {
11825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i64(ret, arg1);
11835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
11845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0 = tcg_const_i64(arg2);
11855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_add_i64(ret, arg1, t0);
11865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
11875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
11885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
11895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
11905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_subfi_i64(TCGv_i64 ret, int64_t arg1, TCGv_i64 arg2)
11915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
11925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(arg1);
11935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sub_i64(ret, t0, arg2);
11945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
11955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
11965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
11975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_subi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
11985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
11995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* some cases can be optimized here */
12005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (arg2 == 0) {
12015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i64(ret, arg1);
12025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
12035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0 = tcg_const_i64(arg2);
12045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_sub_i64(ret, arg1, t0);
12055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
12065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
12075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
12085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_brcondi_i64(int cond, TCGv_i64 arg1, int64_t arg2,
12098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                       int label_index)
12108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(arg2);
12128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_brcond_i64(cond, arg1, t0, label_index);
12135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
12148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1216b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turnerstatic inline void tcg_gen_setcondi_i64(int cond, TCGv_i64 ret, TCGv_i64 arg1,
1217b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner                                        int64_t arg2)
1218b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{
1219b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(arg2);
1220b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_setcond_i64(cond, ret, arg1, t0);
1221b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_temp_free_i64(t0);
1222b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner}
1223b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner
12245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_muli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
12255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
12265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(arg2);
12275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mul_i64(ret, arg1, t0);
12285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
12295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
12305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
12315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
12328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/***************************************/
12338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* optional operations */
12348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8s_i32(TCGv_i32 ret, TCGv_i32 arg)
12368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext8s_i32
12385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_ext8s_i32, ret, arg);
12398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
12408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i32(ret, arg, 24);
12418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(ret, ret, 24);
12428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
12438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16s_i32(TCGv_i32 ret, TCGv_i32 arg)
12468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext16s_i32
12485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_ext16s_i32, ret, arg);
12498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
12508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i32(ret, arg, 16);
12518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(ret, ret, 16);
12528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
12538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8u_i32(TCGv_i32 ret, TCGv_i32 arg)
12568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1257b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_ext8u_i32
1258b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_ext8u_i32, ret, arg);
1259b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else
12608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(ret, arg, 0xffu);
1261b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif
12628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16u_i32(TCGv_i32 ret, TCGv_i32 arg)
12658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1266b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_ext16u_i32
1267b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_ext16u_i32, ret, arg);
1268b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else
12698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(ret, arg, 0xffffu);
1270b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif
12718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the two high bytes are set to zero */
12745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap16_i32(TCGv_i32 ret, TCGv_i32 arg)
12758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_bswap16_i32
12775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_bswap16_i32, ret, arg);
12788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
12795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0 = tcg_temp_new_i32();
12808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext8u_i32(t0, arg);
12825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shli_i32(t0, t0, 8);
12835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shri_i32(ret, arg, 8);
12845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i32(ret, ret, t0);
12855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
12868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
12878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap32_i32(TCGv_i32 ret, TCGv_i32 arg)
12908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_bswap32_i32
12925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_bswap32_i32, ret, arg);
12938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
12945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0, t1;
12955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
12965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i32();
12978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i32(t0, arg, 24);
12998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(t1, arg, 0x0000ff00);
13018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i32(t1, t1, 8);
13028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i32(t0, t0, t1);
13038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i32(t1, arg, 8);
13058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(t1, t1, 0x0000ff00);
13068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i32(t0, t0, t1);
13078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i32(t1, arg, 24);
13098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i32(ret, t0, t1);
13105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
13115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t1);
13128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
13138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32
13165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8s_i64(TCGv_i64 ret, TCGv_i64 arg)
13178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext8s_i32(TCGV_LOW(ret), TCGV_LOW(arg));
13195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
13208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16s_i64(TCGv_i64 ret, TCGv_i64 arg)
13238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext16s_i32(TCGV_LOW(ret), TCGV_LOW(arg));
13255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
13268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext32s_i64(TCGv_i64 ret, TCGv_i64 arg)
13298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_LOW(ret), TCGV_LOW(arg));
13315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
13328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8u_i64(TCGv_i64 ret, TCGv_i64 arg)
13358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext8u_i32(TCGV_LOW(ret), TCGV_LOW(arg));
13378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
13388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16u_i64(TCGv_i64 ret, TCGv_i64 arg)
13418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext16u_i32(TCGV_LOW(ret), TCGV_LOW(arg));
13438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
13448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext32u_i64(TCGv_i64 ret, TCGv_i64 arg)
13478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_LOW(ret), TCGV_LOW(arg));
13498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
13508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_trunc_i64_i32(TCGv_i32 ret, TCGv_i64 arg)
13538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(ret, TCGV_LOW(arg));
13558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_extu_i32_i64(TCGv_i64 ret, TCGv_i32 arg)
13588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_LOW(ret), arg);
13608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
13618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext_i32_i64(TCGv_i64 ret, TCGv_i32 arg)
13645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
13655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_LOW(ret), arg);
13665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
13675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
13685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
13695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note: we assume the six high bytes are set to zero */
13705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap16_i64(TCGv_i64 ret, TCGv_i64 arg)
13715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
13725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg));
13735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_bswap16_i32(TCGV_LOW(ret), TCGV_LOW(arg));
13745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
13755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
13765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note: we assume the four high bytes are set to zero */
13775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap32_i64(TCGv_i64 ret, TCGv_i64 arg)
13788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg));
13805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_bswap32_i32(TCGV_LOW(ret), TCGV_LOW(arg));
13818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap64_i64(TCGv_i64 ret, TCGv_i64 arg)
13848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0, t1;
13865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
13875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i32();
13888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_bswap32_i32(t0, TCGV_LOW(arg));
13905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_bswap32_i32(t1, TCGV_HIGH(arg));
13915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_LOW(ret), t1);
13928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_mov_i32(TCGV_HIGH(ret), t0);
13935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
13945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t1);
13958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
13978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8s_i64(TCGv_i64 ret, TCGv_i64 arg)
13998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext8s_i64
14015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_ext8s_i64, ret, arg);
14028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
14038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(ret, arg, 56);
14048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i64(ret, ret, 56);
14058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
14068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16s_i64(TCGv_i64 ret, TCGv_i64 arg)
14098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext16s_i64
14115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_ext16s_i64, ret, arg);
14128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
14138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(ret, arg, 48);
14148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i64(ret, ret, 48);
14158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
14168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext32s_i64(TCGv_i64 ret, TCGv_i64 arg)
14198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext32s_i64
14215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_ext32s_i64, ret, arg);
14228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
14238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(ret, arg, 32);
14248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i64(ret, ret, 32);
14258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
14268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8u_i64(TCGv_i64 ret, TCGv_i64 arg)
14298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1430b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_ext8u_i64
1431b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_ext8u_i64, ret, arg);
1432b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else
14338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(ret, arg, 0xffu);
1434b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif
14358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16u_i64(TCGv_i64 ret, TCGv_i64 arg)
14388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1439b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_ext16u_i64
1440b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_ext16u_i64, ret, arg);
1441b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else
14428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(ret, arg, 0xffffu);
1443b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif
14448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext32u_i64(TCGv_i64 ret, TCGv_i64 arg)
14478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1448b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_ext32u_i64
1449b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_ext32u_i64, ret, arg);
1450b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else
14518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(ret, arg, 0xffffffffu);
1452b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif
14538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the target supports move between 32 and 64 bit
14568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   registers.  This will probably break MIPS64 targets.  */
14575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_trunc_i64_i32(TCGv_i32 ret, TCGv_i64 arg)
14588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(ret, MAKE_TCGV_I32(GET_TCGV_I64(arg)));
14608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the target supports move between 32 and 64 bit
14638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   registers */
14645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_extu_i32_i64(TCGv_i64 ret, TCGv_i32 arg)
14658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1466b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_ext32u_i64(ret, MAKE_TCGV_I64(GET_TCGV_I32(arg)));
14678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the target supports move between 32 and 64 bit
14708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   registers */
14715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext_i32_i64(TCGv_i64 ret, TCGv_i32 arg)
14728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext32s_i64(ret, MAKE_TCGV_I64(GET_TCGV_I32(arg)));
14745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
14755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
14765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note: we assume the six high bytes are set to zero */
14775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap16_i64(TCGv_i64 ret, TCGv_i64 arg)
14785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
14795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_bswap16_i64
14805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_bswap16_i64, ret, arg);
14815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
14825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_temp_new_i64();
14835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
14845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext8u_i64(t0, arg);
14855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shli_i64(t0, t0, 8);
14865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shri_i64(ret, arg, 8);
14875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(ret, ret, t0);
14885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
14895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
14908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note: we assume the four high bytes are set to zero */
14935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap32_i64(TCGv_i64 ret, TCGv_i64 arg)
14948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_bswap32_i64
14965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_bswap32_i64, ret, arg);
14978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
14985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0, t1;
14995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
15005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i64();
15015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
15025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shli_i64(t0, arg, 24);
15035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext32u_i64(t0, t0);
15045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
15055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_andi_i64(t1, arg, 0x0000ff00);
15065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shli_i64(t1, t1, 8);
15075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(t0, t0, t1);
15085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
15095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shri_i64(t1, arg, 8);
15105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_andi_i64(t1, t1, 0x0000ff00);
15115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(t0, t0, t1);
15125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
15135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shri_i64(t1, arg, 24);
15145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(ret, t0, t1);
15155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
15165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t1);
15175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
15185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
15195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
15205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap64_i64(TCGv_i64 ret, TCGv_i64 arg)
15215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
15225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_bswap64_i64
15235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_bswap64_i64, ret, arg);
15245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
1525ddf49e53df97a349f42c733059165dc73c9907dcDavid 'Digit' Turner    TCGv_i64 t0 = tcg_temp_new_i64();
1526ddf49e53df97a349f42c733059165dc73c9907dcDavid 'Digit' Turner    TCGv_i64 t1 = tcg_temp_new_i64();
15278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(t0, arg, 56);
15298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, arg, 0x0000ff00);
15318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(t1, t1, 40);
15328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
15338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, arg, 0x00ff0000);
15358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(t1, t1, 24);
15368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
15378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, arg, 0xff000000);
15398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(t1, t1, 8);
15408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
15418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i64(t1, arg, 8);
15438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, t1, 0xff000000);
15448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
15458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i64(t1, arg, 24);
15478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, t1, 0x00ff0000);
15488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
15498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i64(t1, arg, 40);
15518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, t1, 0x0000ff00);
15528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
15538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i64(t1, arg, 56);
15558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(ret, t0, t1);
1556ddf49e53df97a349f42c733059165dc73c9907dcDavid 'Digit' Turner    tcg_temp_free_i64(t0);
1557ddf49e53df97a349f42c733059165dc73c9907dcDavid 'Digit' Turner    tcg_temp_free_i64(t1);
15588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
15598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
15628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_neg_i32(TCGv_i32 ret, TCGv_i32 arg)
15648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_neg_i32
15665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_neg_i32, ret, arg);
15678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
15685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0 = tcg_const_i32(0);
15698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sub_i32(ret, t0, arg);
15705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
15718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
15728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_neg_i64(TCGv_i64 ret, TCGv_i64 arg)
15758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_neg_i64
15775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_neg_i64, ret, arg);
15788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
15795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(0);
15808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sub_i64(ret, t0, arg);
15815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
15828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
15838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_not_i32(TCGv_i32 ret, TCGv_i32 arg)
15868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_not_i32
15885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_not_i32, ret, arg);
15895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
15908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xori_i32(ret, arg, -1);
15915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
15928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_not_i64(TCGv_i64 ret, TCGv_i64 arg)
15958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_not_i64
15975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_not_i64, ret, arg);
15985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
15998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xori_i64(ret, arg, -1);
16005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
16018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
16028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
16035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_discard_i32(TCGv_i32 arg)
16048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
16055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op1_i32(INDEX_op_discard, arg);
16068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
16078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
16088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32
16095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_discard_i64(TCGv_i64 arg)
16108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
16115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_discard_i32(TCGV_LOW(arg));
16128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_discard_i32(TCGV_HIGH(arg));
16138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
16148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
16155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_discard_i64(TCGv_i64 arg)
16165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
16175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op1_i64(INDEX_op_discard, arg);
16185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
16195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
16205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_concat_i32_i64(TCGv_i64 dest, TCGv_i32 low, TCGv_i32 high)
16225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
16235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#if TCG_TARGET_REG_BITS == 32
16245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_LOW(dest), low);
16255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_HIGH(dest), high);
16265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
16275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 tmp = tcg_temp_new_i64();
16285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* This extension is only needed for type correctness.
16295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner       We may be able to do better given target specific information.  */
16305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_extu_i32_i64(tmp, high);
16315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shli_i64(tmp, tmp, 32);
16325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_extu_i32_i64(dest, low);
16335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(dest, dest, tmp);
16345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(tmp);
16355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
16365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
16375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_concat32_i64(TCGv_i64 dest, TCGv_i64 low, TCGv_i64 high)
16395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
16405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#if TCG_TARGET_REG_BITS == 32
16415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_concat_i32_i64(dest, TCGV_LOW(low), TCGV_LOW(high));
16425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
16435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 tmp = tcg_temp_new_i64();
16445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext32u_i64(dest, low);
16455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shli_i64(tmp, high, 32);
16465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(dest, dest, tmp);
16475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(tmp);
16485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
16495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
16505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andc_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
16525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1653b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_andc_i32
1654b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_andc_i32, ret, arg1, arg2);
1655b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else
16565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0;
16575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
16585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i32(t0, arg2);
16595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_and_i32(ret, arg1, t0);
16605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
1661b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif
16625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
16635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andc_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
16655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1666b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_andc_i64
1667b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_andc_i64, ret, arg1, arg2);
1668b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#elif defined(TCG_TARGET_HAS_andc_i32) && TCG_TARGET_REG_BITS == 32
1669b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_andc_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
1670b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_andc_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
1671b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else
16725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
16735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
16745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i64(t0, arg2);
16755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_and_i64(ret, arg1, t0);
16765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
1677b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif
16785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
16795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_eqv_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
16815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
16825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_xor_i32(ret, arg1, arg2);
16835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i32(ret, ret);
16845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
16855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_eqv_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
16875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
16885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_xor_i64(ret, arg1, arg2);
16895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i64(ret, ret);
16905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
16915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_nand_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
16935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
16945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_and_i32(ret, arg1, arg2);
16955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i32(ret, ret);
16965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
16975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_nand_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
16995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
17005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_and_i64(ret, arg1, arg2);
17015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i64(ret, ret);
17025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
17035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
17045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_nor_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
17055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
17065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i32(ret, arg1, arg2);
17075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i32(ret, ret);
17085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
17095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
17105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_nor_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
17115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
17125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(ret, arg1, arg2);
17135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i64(ret, ret);
17145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
17155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
17165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_orc_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
17175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1718b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_orc_i32
1719b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_orc_i32, ret, arg1, arg2);
1720b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else
17215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0;
17225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
17235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i32(t0, arg2);
17245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i32(ret, arg1, t0);
17255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
1726b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif
17275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
17285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
17295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_orc_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
17305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1731b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_orc_i64
1732b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_orc_i64, ret, arg1, arg2);
1733b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#elif defined(TCG_TARGET_HAS_orc_i32) && TCG_TARGET_REG_BITS == 32
1734b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_orc_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
1735b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_orc_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
1736b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else
17375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
17385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
17395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i64(t0, arg2);
17405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(ret, arg1, t0);
17415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
1742b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif
17435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
17445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
17455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotl_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
17465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
17475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i32
17485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_rotl_i32, ret, arg1, arg2);
17495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
17505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0, t1;
17515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
17525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
17535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i32();
17545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shl_i32(t0, arg1, arg2);
17555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_subfi_i32(t1, 32, arg2);
17565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shr_i32(t1, arg1, t1);
17575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i32(ret, t0, t1);
17585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
17595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t1);
17605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
17615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
17625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
17635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotl_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
17648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
17655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i64
17665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_rotl_i64, ret, arg1, arg2);
17675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
17685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0, t1;
17695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
17705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
17715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i64();
17725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shl_i64(t0, arg1, arg2);
17735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_subfi_i64(t1, 64, arg2);
17745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shr_i64(t1, arg1, t1);
17755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(ret, t0, t1);
17765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
17775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t1);
17785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
17798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
17805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
17815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotli_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
17825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
17835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* some cases can be optimized here */
17845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (arg2 == 0) {
17855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i32(ret, arg1);
17865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
17875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i32
17885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
17895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_rotl_i32(ret, arg1, t0);
17905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
17915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
17925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0, t1;
17935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        t0 = tcg_temp_new_i32();
17945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        t1 = tcg_temp_new_i32();
17955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_shli_i32(t0, arg1, arg2);
17965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_shri_i32(t1, arg1, 32 - arg2);
17975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_or_i32(ret, t0, t1);
17985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
17995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t1);
18008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
18015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
18025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
18035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
18045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
18055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
18065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* some cases can be optimized here */
18075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (arg2 == 0) {
18085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i64(ret, arg1);
18095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
18105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i64
18115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0 = tcg_const_i64(arg2);
18125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_rotl_i64(ret, arg1, t0);
18135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
18145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
18155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0, t1;
18165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        t0 = tcg_temp_new_i64();
18175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        t1 = tcg_temp_new_i64();
18185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_shli_i64(t0, arg1, arg2);
18195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_shri_i64(t1, arg1, 64 - arg2);
18205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_or_i64(ret, t0, t1);
18215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
18225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t1);
18235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
18245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
18255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
18265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
18275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotr_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
18285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
18295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i32
18305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_rotr_i32, ret, arg1, arg2);
18315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
18325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0, t1;
18335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
18345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
18355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i32();
18365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shr_i32(t0, arg1, arg2);
18375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_subfi_i32(t1, 32, arg2);
18385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shl_i32(t1, arg1, t1);
18395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i32(ret, t0, t1);
18405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
18415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t1);
18425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
18435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
18445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
18455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotr_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
18465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
18475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i64
18485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_rotr_i64, ret, arg1, arg2);
18495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
18505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0, t1;
18515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
18525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
18535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i64();
1854ddf49e53df97a349f42c733059165dc73c9907dcDavid 'Digit' Turner    tcg_gen_shr_i64(t0, arg1, arg2);
18555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_subfi_i64(t1, 64, arg2);
18565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shl_i64(t1, arg1, t1);
18575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(ret, t0, t1);
18585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
18595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t1);
18605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
18615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
18625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
18635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotri_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
18645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
18655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* some cases can be optimized here */
18665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (arg2 == 0) {
18675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i32(ret, arg1);
18685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
18695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_rotli_i32(ret, arg1, 32 - arg2);
18705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
18715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
18725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
18735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotri_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
18745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
18755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* some cases can be optimized here */
18765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (arg2 == 0) {
18775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i64(ret, arg1);
18785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
18795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_rotli_i64(ret, arg1, 64 - arg2);
18805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
18815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
18828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
18838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/***************************************/
18848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* QEMU specific operations. Their type depend on the QEMU CPU
18858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   type. */
18868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef TARGET_LONG_BITS
18878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#error must include QEMU headers
18888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
18898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
18905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#if TARGET_LONG_BITS == 32
18915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGv TCGv_i32
18925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_new() tcg_temp_new_i32()
18935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_global_reg_new tcg_global_reg_new_i32
18945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_global_mem_new tcg_global_mem_new_i32
18955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_local_new() tcg_temp_local_new_i32()
18965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_free tcg_temp_free_i32
18975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_qemu_ldst_op tcg_gen_op3i_i32
18985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_qemu_ldst_op_i64 tcg_gen_qemu_ldst_op_i64_i32
18995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGV_UNUSED(x) TCGV_UNUSED_I32(x)
19005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGV_EQUAL(a, b) TCGV_EQUAL_I32(a, b)
19015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
19025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGv TCGv_i64
19035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_new() tcg_temp_new_i64()
19045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_global_reg_new tcg_global_reg_new_i64
19055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_global_mem_new tcg_global_mem_new_i64
19065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_local_new() tcg_temp_local_new_i64()
19075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_free tcg_temp_free_i64
19085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_qemu_ldst_op tcg_gen_op3i_i64
19095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_qemu_ldst_op_i64 tcg_gen_qemu_ldst_op_i64_i64
19105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGV_UNUSED(x) TCGV_UNUSED_I64(x)
19115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGV_EQUAL(a, b) TCGV_EQUAL_I64(a, b)
19125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
19135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
19148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* debug info: write the PC of the corresponding QEMU CPU instruction */
19158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_debug_insn_start(uint64_t pc)
19168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* XXX: must really use a 32 bit size for TCGArg in all cases */
19188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS > TCG_TARGET_REG_BITS
19198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op2ii(INDEX_op_debug_insn_start,
19208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                  (uint32_t)(pc), (uint32_t)(pc >> 32));
19218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
19228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1i(INDEX_op_debug_insn_start, pc);
19238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
19248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_exit_tb(tcg_target_long val)
19278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1i(INDEX_op_exit_tb, val);
19298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_goto_tb(int idx)
19328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1i(INDEX_op_goto_tb, idx);
19348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32
19378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8u(TCGv ret, TCGv addr, int mem_index)
19388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
19405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_ld8u, ret, addr, mem_index);
19418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
19425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld8u, TCGV_LOW(ret), TCGV_LOW(addr),
19435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
19448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
19458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
19468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8s(TCGv ret, TCGv addr, int mem_index)
19498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
19515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_ld8s, ret, addr, mem_index);
19528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
19535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld8s, TCGV_LOW(ret), TCGV_LOW(addr),
19545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
19555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
19568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
19578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16u(TCGv ret, TCGv addr, int mem_index)
19608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
19625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_ld16u, ret, addr, mem_index);
19638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
19645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld16u, TCGV_LOW(ret), TCGV_LOW(addr),
19655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
19668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
19678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
19688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16s(TCGv ret, TCGv addr, int mem_index)
19718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
19735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_ld16s, ret, addr, mem_index);
19748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
19755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld16s, TCGV_LOW(ret), TCGV_LOW(addr),
19765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
19775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
19788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
19798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32u(TCGv ret, TCGv addr, int mem_index)
19828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
19845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_ld32u, ret, addr, mem_index);
19858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
19865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld32u, TCGV_LOW(ret), TCGV_LOW(addr),
19875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
19888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
19898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
19908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32s(TCGv ret, TCGv addr, int mem_index)
19938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
19955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_ld32u, ret, addr, mem_index);
19968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
19975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld32u, TCGV_LOW(ret), TCGV_LOW(addr),
19985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
19995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
20008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
20018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
20028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_ld64(TCGv_i64 ret, TCGv addr, int mem_index)
20048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
20058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
20065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld64, TCGV_LOW(ret), TCGV_HIGH(ret), addr, mem_index);
20078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
20085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5i_i32(INDEX_op_qemu_ld64, TCGV_LOW(ret), TCGV_HIGH(ret),
20095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_LOW(addr), TCGV_HIGH(addr), mem_index);
20108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
20118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
20128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st8(TCGv arg, TCGv addr, int mem_index)
20148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
20158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
20165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_st8, arg, addr, mem_index);
20178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
20185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_st8, TCGV_LOW(arg), TCGV_LOW(addr),
20195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
20208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
20218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
20228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st16(TCGv arg, TCGv addr, int mem_index)
20248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
20258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
20265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_st16, arg, addr, mem_index);
20278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
20285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_st16, TCGV_LOW(arg), TCGV_LOW(addr),
20295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
20308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
20318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
20328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st32(TCGv arg, TCGv addr, int mem_index)
20348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
20358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
20365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_st32, arg, addr, mem_index);
20378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
20385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_st32, TCGV_LOW(arg), TCGV_LOW(addr),
20395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
20408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
20418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
20428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_st64(TCGv_i64 arg, TCGv addr, int mem_index)
20448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
20458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
20465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_st64, TCGV_LOW(arg), TCGV_HIGH(arg), addr,
20475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     mem_index);
20488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
20495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5i_i32(INDEX_op_qemu_st64, TCGV_LOW(arg), TCGV_HIGH(arg),
20505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_LOW(addr), TCGV_HIGH(addr), mem_index);
20518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
20528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
20538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_ptr tcg_gen_ld_i32
20558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_ptr tcg_gen_discard_i32
20568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else /* TCG_TARGET_REG_BITS == 32 */
20588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8u(TCGv ret, TCGv addr, int mem_index)
20608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
20615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld8u, ret, addr, mem_index);
20628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
20638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8s(TCGv ret, TCGv addr, int mem_index)
20658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
20665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld8s, ret, addr, mem_index);
20678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
20688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16u(TCGv ret, TCGv addr, int mem_index)
20708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
20715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld16u, ret, addr, mem_index);
20728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
20738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16s(TCGv ret, TCGv addr, int mem_index)
20758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
20765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld16s, ret, addr, mem_index);
20778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
20788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32u(TCGv ret, TCGv addr, int mem_index)
20808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
20815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld32u, ret, addr, mem_index);
20828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
20838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32s(TCGv ret, TCGv addr, int mem_index)
20858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
20865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld32s, ret, addr, mem_index);
20878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
20888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_ld64(TCGv_i64 ret, TCGv addr, int mem_index)
20908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
20915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op_i64(INDEX_op_qemu_ld64, ret, addr, mem_index);
20928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
20938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st8(TCGv arg, TCGv addr, int mem_index)
20958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
20965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_st8, arg, addr, mem_index);
20978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
20988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st16(TCGv arg, TCGv addr, int mem_index)
21008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
21015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_st16, arg, addr, mem_index);
21028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
21038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st32(TCGv arg, TCGv addr, int mem_index)
21058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
21065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_st32, arg, addr, mem_index);
21078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
21088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_st64(TCGv_i64 arg, TCGv addr, int mem_index)
21108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
21115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op_i64(INDEX_op_qemu_st64, arg, addr, mem_index);
21128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
21138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_ptr tcg_gen_ld_i64
21158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_ptr tcg_gen_discard_i64
21168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* TCG_TARGET_REG_BITS != 32 */
21188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 64
21208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TCG_TYPE_TL TCG_TYPE_I64
21218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_movi_tl tcg_gen_movi_i64
21228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mov_tl tcg_gen_mov_i64
21238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8u_tl tcg_gen_ld8u_i64
21248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8s_tl tcg_gen_ld8s_i64
21258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16u_tl tcg_gen_ld16u_i64
21268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16s_tl tcg_gen_ld16s_i64
21278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32u_tl tcg_gen_ld32u_i64
21288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32s_tl tcg_gen_ld32s_i64
21298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_tl tcg_gen_ld_i64
21308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st8_tl tcg_gen_st8_i64
21318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st16_tl tcg_gen_st16_i64
21328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st32_tl tcg_gen_st32_i64
21338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st_tl tcg_gen_st_i64
21348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_tl tcg_gen_add_i64
21358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_tl tcg_gen_addi_i64
21368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sub_tl tcg_gen_sub_i64
21378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_neg_tl tcg_gen_neg_i64
21385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_subfi_tl tcg_gen_subfi_i64
21398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_subi_tl tcg_gen_subi_i64
21408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_and_tl tcg_gen_and_i64
21418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_andi_tl tcg_gen_andi_i64
21428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_or_tl tcg_gen_or_i64
21438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ori_tl tcg_gen_ori_i64
21448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xor_tl tcg_gen_xor_i64
21458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xori_tl tcg_gen_xori_i64
21468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_not_tl tcg_gen_not_i64
21478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shl_tl tcg_gen_shl_i64
21488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shli_tl tcg_gen_shli_i64
21498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shr_tl tcg_gen_shr_i64
21508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shri_tl tcg_gen_shri_i64
21518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sar_tl tcg_gen_sar_i64
21528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sari_tl tcg_gen_sari_i64
21538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcond_tl tcg_gen_brcond_i64
21548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcondi_tl tcg_gen_brcondi_i64
2155b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#define tcg_gen_setcond_tl tcg_gen_setcond_i64
2156b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#define tcg_gen_setcondi_tl tcg_gen_setcondi_i64
21578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mul_tl tcg_gen_mul_i64
21588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_muli_tl tcg_gen_muli_i64
21595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_div_tl tcg_gen_div_i64
21605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rem_tl tcg_gen_rem_i64
21615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_divu_tl tcg_gen_divu_i64
21625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_remu_tl tcg_gen_remu_i64
21638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_tl tcg_gen_discard_i64
21648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_tl_i32 tcg_gen_trunc_i64_i32
21658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_i64_tl tcg_gen_mov_i64
21668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_i32_tl tcg_gen_extu_i32_i64
21678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_tl tcg_gen_ext_i32_i64
21688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_tl_i64 tcg_gen_mov_i64
21698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_tl_i64 tcg_gen_mov_i64
21708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8u_tl tcg_gen_ext8u_i64
21718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8s_tl tcg_gen_ext8s_i64
21728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16u_tl tcg_gen_ext16u_i64
21738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16s_tl tcg_gen_ext16s_i64
21748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32u_tl tcg_gen_ext32u_i64
21758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32s_tl tcg_gen_ext32s_i64
21765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap16_tl tcg_gen_bswap16_i64
21775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap32_tl tcg_gen_bswap32_i64
21785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap64_tl tcg_gen_bswap64_i64
21795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_concat_tl_i64 tcg_gen_concat32_i64
21805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_andc_tl tcg_gen_andc_i64
21815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_eqv_tl tcg_gen_eqv_i64
21825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_nand_tl tcg_gen_nand_i64
21835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_nor_tl tcg_gen_nor_i64
21845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_orc_tl tcg_gen_orc_i64
21855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotl_tl tcg_gen_rotl_i64
21865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotli_tl tcg_gen_rotli_i64
21875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotr_tl tcg_gen_rotr_i64
21885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotri_tl tcg_gen_rotri_i64
21898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_const_tl tcg_const_i64
21905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_const_local_tl tcg_const_local_i64
21918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
21928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TCG_TYPE_TL TCG_TYPE_I32
21938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_movi_tl tcg_gen_movi_i32
21948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mov_tl tcg_gen_mov_i32
21958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8u_tl tcg_gen_ld8u_i32
21968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8s_tl tcg_gen_ld8s_i32
21978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16u_tl tcg_gen_ld16u_i32
21988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16s_tl tcg_gen_ld16s_i32
21998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32u_tl tcg_gen_ld_i32
22008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32s_tl tcg_gen_ld_i32
22018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_tl tcg_gen_ld_i32
22028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st8_tl tcg_gen_st8_i32
22038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st16_tl tcg_gen_st16_i32
22048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st32_tl tcg_gen_st_i32
22058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st_tl tcg_gen_st_i32
22068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_tl tcg_gen_add_i32
22078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_tl tcg_gen_addi_i32
22088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sub_tl tcg_gen_sub_i32
22098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_neg_tl tcg_gen_neg_i32
22105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_subfi_tl tcg_gen_subfi_i32
22118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_subi_tl tcg_gen_subi_i32
22128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_and_tl tcg_gen_and_i32
22138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_andi_tl tcg_gen_andi_i32
22148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_or_tl tcg_gen_or_i32
22158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ori_tl tcg_gen_ori_i32
22168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xor_tl tcg_gen_xor_i32
22178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xori_tl tcg_gen_xori_i32
22188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_not_tl tcg_gen_not_i32
22198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shl_tl tcg_gen_shl_i32
22208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shli_tl tcg_gen_shli_i32
22218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shr_tl tcg_gen_shr_i32
22228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shri_tl tcg_gen_shri_i32
22238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sar_tl tcg_gen_sar_i32
22248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sari_tl tcg_gen_sari_i32
22258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcond_tl tcg_gen_brcond_i32
22268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcondi_tl tcg_gen_brcondi_i32
2227b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#define tcg_gen_setcond_tl tcg_gen_setcond_i32
2228b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#define tcg_gen_setcondi_tl tcg_gen_setcondi_i32
22298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mul_tl tcg_gen_mul_i32
22308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_muli_tl tcg_gen_muli_i32
22315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_div_tl tcg_gen_div_i32
22325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rem_tl tcg_gen_rem_i32
22335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_divu_tl tcg_gen_divu_i32
22345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_remu_tl tcg_gen_remu_i32
22358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_tl tcg_gen_discard_i32
22368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_tl_i32 tcg_gen_mov_i32
22378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_i64_tl tcg_gen_trunc_i64_i32
22388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_i32_tl tcg_gen_mov_i32
22398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_tl tcg_gen_mov_i32
22408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_tl_i64 tcg_gen_extu_i32_i64
22418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_tl_i64 tcg_gen_ext_i32_i64
22428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8u_tl tcg_gen_ext8u_i32
22438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8s_tl tcg_gen_ext8s_i32
22448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16u_tl tcg_gen_ext16u_i32
22458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16s_tl tcg_gen_ext16s_i32
22468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32u_tl tcg_gen_mov_i32
22478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32s_tl tcg_gen_mov_i32
22485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap16_tl tcg_gen_bswap16_i32
22495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap32_tl tcg_gen_bswap32_i32
22505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_concat_tl_i64 tcg_gen_concat_i32_i64
22515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_andc_tl tcg_gen_andc_i32
22525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_eqv_tl tcg_gen_eqv_i32
22535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_nand_tl tcg_gen_nand_i32
22545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_nor_tl tcg_gen_nor_i32
22555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_orc_tl tcg_gen_orc_i32
22565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotl_tl tcg_gen_rotl_i32
22575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotli_tl tcg_gen_rotli_i32
22585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotr_tl tcg_gen_rotr_i32
22595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotri_tl tcg_gen_rotri_i32
22608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_const_tl tcg_const_i32
22615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_const_local_tl tcg_const_local_i32
22628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
22638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
22648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32
22658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_ptr tcg_gen_add_i32
22668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_ptr tcg_gen_addi_i32
22678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_ptr tcg_gen_mov_i32
22688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else /* TCG_TARGET_REG_BITS == 32 */
22698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_ptr tcg_gen_add_i64
22708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_ptr tcg_gen_addi_i64
22718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_ptr tcg_gen_ext_i32_i64
22728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* TCG_TARGET_REG_BITS != 32 */
2273