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
28f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op1_i32(TCGOpcode 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
34f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op1_i64(TCGOpcode 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
40f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op1i(TCGOpcode 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
46f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op2_i32(TCGOpcode 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
53f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op2_i64(TCGOpcode 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
60f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op2i_i32(TCGOpcode 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
67f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op2i_i64(TCGOpcode 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
74f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op2ii(TCGOpcode 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
81f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op3_i32(TCGOpcode 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
90f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op3_i64(TCGOpcode 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
99f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op3i_i32(TCGOpcode opc, TCGv_i32 arg1,
100f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                    TCGv_i32 arg2, 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
108f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op3i_i64(TCGOpcode opc, TCGv_i64 arg1,
109f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                    TCGv_i64 arg2, 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
117f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_ldst_op_i32(TCGOpcode opc, TCGv_i32 val,
118f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                       TCGv_ptr base, 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
126f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_ldst_op_i64(TCGOpcode opc, TCGv_i64 val,
127f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                       TCGv_ptr base, 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
135f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_qemu_ldst_op_i64_i32(TCGOpcode opc, TCGv_i64 val,
136f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                                TCGv_i32 addr, 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
144f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_qemu_ldst_op_i64_i64(TCGOpcode opc, TCGv_i64 val,
145f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                                TCGv_i64 addr, 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
153f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op4_i32(TCGOpcode 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
163f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op4_i64(TCGOpcode 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
173f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op4i_i32(TCGOpcode 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
183f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op4i_i64(TCGOpcode 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
193f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op4ii_i32(TCGOpcode 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
203f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op4ii_i64(TCGOpcode 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
213f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op5_i32(TCGOpcode 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
224f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op5_i64(TCGOpcode 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
235f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op5i_i32(TCGOpcode 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
246f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op5i_i64(TCGOpcode 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
257f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op5ii_i32(TCGOpcode opc, TCGv_i32 arg1,
258f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                     TCGv_i32 arg2, TCGv_i32 arg3,
259f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                     TCGArg arg4, TCGArg arg5)
260f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{
261f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    *gen_opc_ptr++ = opc;
262f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
263f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
264f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
265f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    *gen_opparam_ptr++ = arg4;
266f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    *gen_opparam_ptr++ = arg5;
267f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner}
268f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
269f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op5ii_i64(TCGOpcode opc, TCGv_i64 arg1,
270f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                     TCGv_i64 arg2, TCGv_i64 arg3,
271f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                     TCGArg arg4, TCGArg arg5)
272f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{
273f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    *gen_opc_ptr++ = opc;
274f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
275f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
276f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
277f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    *gen_opparam_ptr++ = arg4;
278f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    *gen_opparam_ptr++ = arg5;
279f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner}
280f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
281f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op6_i32(TCGOpcode opc, TCGv_i32 arg1, TCGv_i32 arg2,
2825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   TCGv_i32 arg3, TCGv_i32 arg4, TCGv_i32 arg5,
2835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   TCGv_i32 arg6)
2845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
2855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
2865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
2875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
2885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
2895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg4);
2905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg5);
2915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg6);
2928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
2938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
294f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op6_i64(TCGOpcode opc, TCGv_i64 arg1, TCGv_i64 arg2,
2955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   TCGv_i64 arg3, TCGv_i64 arg4, TCGv_i64 arg5,
2965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   TCGv_i64 arg6)
2978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
2988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opc_ptr++ = opc;
2995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
3005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
3015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
3025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg4);
3035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg5);
3045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg6);
3055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
3065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
307f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op6i_i32(TCGOpcode opc, TCGv_i32 arg1, TCGv_i32 arg2,
308b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner                                    TCGv_i32 arg3, TCGv_i32 arg4,
309b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner                                    TCGv_i32 arg5, TCGArg arg6)
310b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{
311b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opc_ptr++ = opc;
312b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
313b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
314b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
315b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg4);
316b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg5);
317b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = arg6;
318b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner}
319b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner
320f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op6i_i64(TCGOpcode opc, TCGv_i64 arg1, TCGv_i64 arg2,
321b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner                                    TCGv_i64 arg3, TCGv_i64 arg4,
322b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner                                    TCGv_i64 arg5, TCGArg arg6)
323b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{
324b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opc_ptr++ = opc;
325b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
326b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
327b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
328b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg4);
329b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg5);
330b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    *gen_opparam_ptr++ = arg6;
331b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner}
332b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner
333f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op6ii_i32(TCGOpcode opc, TCGv_i32 arg1,
334f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                     TCGv_i32 arg2, TCGv_i32 arg3,
335f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                     TCGv_i32 arg4, TCGArg arg5, TCGArg arg6)
3365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
3375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
3385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
3395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
3405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
3415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I32(arg4);
3425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = arg5;
3435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = arg6;
3445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
3455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
346f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op6ii_i64(TCGOpcode opc, TCGv_i64 arg1,
347f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                     TCGv_i64 arg2, TCGv_i64 arg3,
348f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                     TCGv_i64 arg4, TCGArg arg5, TCGArg arg6)
3495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
3505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opc_ptr++ = opc;
3515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
3525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
3535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
3545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    *gen_opparam_ptr++ = GET_TCGV_I64(arg4);
3558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg5;
3568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *gen_opparam_ptr++ = arg6;
3578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void gen_set_label(int n)
3608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1i(INDEX_op_set_label, n);
3628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_br(int label)
3658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1i(INDEX_op_br, label);
3678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mov_i32(TCGv_i32 ret, TCGv_i32 arg)
3708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (!TCGV_EQUAL_I32(ret, arg))
3725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op2_i32(INDEX_op_mov_i32, ret, arg);
3738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_movi_i32(TCGv_i32 ret, int32_t arg)
3768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2i_i32(INDEX_op_movi_i32, ret, arg);
3788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
380f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner/* A version of dh_sizemask from def-helper.h that doesn't rely on
381f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner   preprocessor magic.  */
382f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline int tcg_gen_sizemask(int n, int is_64bit, int is_signed)
383f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{
384f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    return (is_64bit << n*2) | (is_signed << (n*2 + 1));
385f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner}
386f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
3878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* helper calls */
3885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_helperN(void *func, int flags, int sizemask,
3895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   TCGArg ret, int nargs, TCGArg *args)
3905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
3915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_ptr fn;
3925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    fn = tcg_const_ptr((tcg_target_long)func);
3935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_callN(&tcg_ctx, fn, flags, sizemask, ret,
3945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                  nargs, args);
3955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_ptr(fn);
3965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
3978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
398f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner/* Note: Both tcg_gen_helper32() and tcg_gen_helper64() are currently
399f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner   reserved for helpers in tcg-runtime.c. These helpers are all const
400f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner   and pure, hence the call to tcg_gen_callN() with TCG_CALL_CONST |
401f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner   TCG_CALL_PURE. This may need to be adjusted if these functions
402f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner   start to be used with other helpers. */
403f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_helper32(void *func, int sizemask, TCGv_i32 ret,
404f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                    TCGv_i32 a, TCGv_i32 b)
405f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{
406f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    TCGv_ptr fn;
407f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    TCGArg args[2];
408f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    fn = tcg_const_ptr((tcg_target_long)func);
409f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    args[0] = GET_TCGV_I32(a);
410f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    args[1] = GET_TCGV_I32(b);
411f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_callN(&tcg_ctx, fn, TCG_CALL_CONST | TCG_CALL_PURE, sizemask,
412f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                  GET_TCGV_I32(ret), 2, args);
413f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_temp_free_ptr(fn);
414f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner}
415f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
416f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_helper64(void *func, int sizemask, TCGv_i64 ret,
4175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    TCGv_i64 a, TCGv_i64 b)
4188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_ptr fn;
4205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGArg args[2];
4215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    fn = tcg_const_ptr((tcg_target_long)func);
4225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    args[0] = GET_TCGV_I64(a);
4235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    args[1] = GET_TCGV_I64(b);
424f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_callN(&tcg_ctx, fn, TCG_CALL_CONST | TCG_CALL_PURE, sizemask,
425f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                  GET_TCGV_I64(ret), 2, args);
4265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_ptr(fn);
4278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* 32 bit ops */
4308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8u_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset)
4328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_ld8u_i32, ret, arg2, offset);
4348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8s_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset)
4378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_ld8s_i32, ret, arg2, offset);
4398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16u_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset)
4428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_ld16u_i32, ret, arg2, offset);
4448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16s_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset)
4478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_ld16s_i32, ret, arg2, offset);
4498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset)
4528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_ld_i32, ret, arg2, offset);
4548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st8_i32(TCGv_i32 arg1, TCGv_ptr arg2, tcg_target_long offset)
4578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_st8_i32, arg1, arg2, offset);
4598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st16_i32(TCGv_i32 arg1, TCGv_ptr arg2, tcg_target_long offset)
4628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_st16_i32, arg1, arg2, offset);
4648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st_i32(TCGv_i32 arg1, TCGv_ptr arg2, tcg_target_long offset)
4678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i32(INDEX_op_st_i32, arg1, arg2, offset);
4698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_add_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
4728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_add_i32, ret, arg1, arg2);
4748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_addi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
4778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* some cases can be optimized here */
4798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
4808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
4818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
4825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
4838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_add_i32(ret, arg1, t0);
4845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
4858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
4868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sub_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
4898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
4905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_sub_i32, ret, arg1, arg2);
4918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_subfi_i32(TCGv_i32 ret, int32_t arg1, TCGv_i32 arg2)
4945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
4955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0 = tcg_const_i32(arg1);
4965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sub_i32(ret, t0, arg2);
4975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
4985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
4995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
5005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_subi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
5018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* some cases can be optimized here */
5038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
5048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
5058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
5065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
5078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_sub_i32(ret, arg1, t0);
5085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
5098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
5108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_and_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
5138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (TCGV_EQUAL_I32(arg1, arg2)) {
5155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i32(ret, arg1);
5165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
5175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op3_i32(INDEX_op_and_i32, ret, arg1, arg2);
5185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
5198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
5228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* some cases can be optimized here */
5248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
5258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_movi_i32(ret, 0);
5268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else if (arg2 == 0xffffffff) {
5278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
5288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
5295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
5308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_and_i32(ret, arg1, t0);
5315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
5328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
5338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_or_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
5368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (TCGV_EQUAL_I32(arg1, arg2)) {
5385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i32(ret, arg1);
5395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
5405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op3_i32(INDEX_op_or_i32, ret, arg1, arg2);
5415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
5428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ori_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
5458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* some cases can be optimized here */
5478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0xffffffff) {
5488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_movi_i32(ret, 0xffffffff);
5498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else if (arg2 == 0) {
5508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
5518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
5525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
5538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_or_i32(ret, arg1, t0);
5545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
5558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
5568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xor_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
5598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (TCGV_EQUAL_I32(arg1, arg2)) {
5615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_movi_i32(ret, 0);
5625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
5635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op3_i32(INDEX_op_xor_i32, ret, arg1, arg2);
5645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
5658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xori_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
5688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* some cases can be optimized here */
5708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
5718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
5728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
5735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
5748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_xor_i32(ret, arg1, t0);
5755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
5768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
5778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shl_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
5808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_shl_i32, ret, arg1, arg2);
5828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shli_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
5858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
5878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
5888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
5895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
5908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_shl_i32(ret, arg1, t0);
5915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
5928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
5938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shr_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
5968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_shr_i32, ret, arg1, arg2);
5988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
5998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shri_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
6018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
6038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
6048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
6055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
6068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_shr_i32(ret, arg1, t0);
6075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
6088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
6098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sar_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_sar_i32, ret, arg1, arg2);
6148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sari_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
6178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
6198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(ret, arg1);
6208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
6215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
6228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_sar_i32(ret, arg1, t0);
6235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
6248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
6258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
627f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_brcond_i32(TCGCond cond, TCGv_i32 arg1,
628f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                      TCGv_i32 arg2, int label_index)
6298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4ii_i32(INDEX_op_brcond_i32, arg1, arg2, cond, label_index);
6318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
633f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_brcondi_i32(TCGCond cond, TCGv_i32 arg1,
634f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                       int32_t arg2, int label_index)
6358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0 = tcg_const_i32(arg2);
6378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_brcond_i32(cond, arg1, t0, label_index);
6385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
6398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
641f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_setcond_i32(TCGCond cond, TCGv_i32 ret,
642b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner                                       TCGv_i32 arg1, TCGv_i32 arg2)
643b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{
644b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_setcond_i32, ret, arg1, arg2, cond);
645b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner}
646b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner
647f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_setcondi_i32(TCGCond cond, TCGv_i32 ret,
648f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                        TCGv_i32 arg1, int32_t arg2)
649b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{
650b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    TCGv_i32 t0 = tcg_const_i32(arg2);
651b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_setcond_i32(cond, ret, arg1, t0);
652b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_temp_free_i32(t0);
653b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner}
654b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner
6555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mul_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_mul_i32, ret, arg1, arg2);
6588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_muli_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
6618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0 = tcg_const_i32(arg2);
6638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_mul_i32(ret, arg1, t0);
6645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
6658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_div_i32
6685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_div_i32, ret, arg1, arg2);
6718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_rem_i32, ret, arg1, arg2);
6768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_divu_i32, ret, arg1, arg2);
6818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_remu_i32, ret, arg1, arg2);
6868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
687f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#elif defined(TCG_TARGET_HAS_div2_i32)
6885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0;
6915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
6928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(t0, arg1, 31);
6935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i32(INDEX_op_div2_i32, ret, t0, arg1, t0, arg2);
6945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
6958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
6968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
6988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
6995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0;
7005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
7018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(t0, arg1, 31);
7025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i32(INDEX_op_div2_i32, t0, ret, arg1, t0, arg2);
7035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
7048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
7078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0;
7095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
7108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(t0, 0);
7115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i32(INDEX_op_divu2_i32, ret, t0, arg1, t0, arg2);
7125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
7138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
7168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0;
7185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
7198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(t0, 0);
7205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i32(INDEX_op_divu2_i32, t0, ret, arg1, t0, arg2);
7215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
7228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
723f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else
724f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_div_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
725f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{
726f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    int sizemask = 0;
727f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    /* Return value and both arguments are 32-bit and signed.  */
728f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(0, 0, 1);
729f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(1, 0, 1);
730f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(2, 0, 1);
731f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
732f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_helper32(tcg_helper_div_i32, sizemask, ret, arg1, arg2);
733f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner}
734f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
735f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_rem_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
736f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{
737f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    int sizemask = 0;
738f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    /* Return value and both arguments are 32-bit and signed.  */
739f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(0, 0, 1);
740f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(1, 0, 1);
741f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(2, 0, 1);
742f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
743f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_helper32(tcg_helper_rem_i32, sizemask, ret, arg1, arg2);
744f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner}
745f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
746f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_divu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
747f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{
748f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    int sizemask = 0;
749f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    /* Return value and both arguments are 32-bit and unsigned.  */
750f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(0, 0, 0);
751f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(1, 0, 0);
752f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(2, 0, 0);
753f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
754f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_helper32(tcg_helper_divu_i32, sizemask, ret, arg1, arg2);
755f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner}
756f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
757f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_remu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
758f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{
759f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    int sizemask = 0;
760f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    /* Return value and both arguments are 32-bit and unsigned.  */
761f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(0, 0, 0);
762f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(1, 0, 0);
763f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(2, 0, 0);
764f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
765f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_helper32(tcg_helper_remu_i32, sizemask, ret, arg1, arg2);
766f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner}
7678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
7688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32
7708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mov_i64(TCGv_i64 ret, TCGv_i64 arg)
7728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (!TCGV_EQUAL_I64(ret, arg)) {
7745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i32(TCGV_LOW(ret), TCGV_LOW(arg));
7758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg));
7768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
7778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_movi_i64(TCGv_i64 ret, int64_t arg)
7808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_movi_i32(TCGV_LOW(ret), arg);
7828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), arg >> 32);
7838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8u_i64(TCGv_i64 ret, TCGv_ptr arg2,
7865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    tcg_target_long offset)
7878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld8u_i32(TCGV_LOW(ret), arg2, offset);
7898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
7908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8s_i64(TCGv_i64 ret, TCGv_ptr arg2,
7935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    tcg_target_long offset)
7948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
7955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld8s_i32(TCGV_LOW(ret), arg2, offset);
7965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_HIGH(ret), 31);
7978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
7988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16u_i64(TCGv_i64 ret, TCGv_ptr arg2,
8005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     tcg_target_long offset)
8018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld16u_i32(TCGV_LOW(ret), arg2, offset);
8038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
8048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16s_i64(TCGv_i64 ret, TCGv_ptr arg2,
8075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     tcg_target_long offset)
8088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld16s_i32(TCGV_LOW(ret), arg2, offset);
8105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
8118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld32u_i64(TCGv_i64 ret, TCGv_ptr arg2,
8145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     tcg_target_long offset)
8158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset);
8178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
8188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld32s_i64(TCGv_i64 ret, TCGv_ptr arg2,
8215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                     tcg_target_long offset)
8228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset);
8245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
8258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld_i64(TCGv_i64 ret, TCGv_ptr arg2,
8285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                  tcg_target_long offset)
8298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* since arg2 and ret have different types, they cannot be the
8318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       same temporary */
8328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_WORDS_BIGENDIAN
8338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ld_i32(TCGV_HIGH(ret), arg2, offset);
8345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset + 4);
8358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
8365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset);
8378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ld_i32(TCGV_HIGH(ret), arg2, offset + 4);
8388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
8398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st8_i64(TCGv_i64 arg1, TCGv_ptr arg2,
8425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   tcg_target_long offset)
8438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_st8_i32(TCGV_LOW(arg1), arg2, offset);
8458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st16_i64(TCGv_i64 arg1, TCGv_ptr arg2,
8485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    tcg_target_long offset)
8498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_st16_i32(TCGV_LOW(arg1), arg2, offset);
8518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st32_i64(TCGv_i64 arg1, TCGv_ptr arg2,
8545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                    tcg_target_long offset)
8558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_st_i32(TCGV_LOW(arg1), arg2, offset);
8578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st_i64(TCGv_i64 arg1, TCGv_ptr arg2,
8605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                  tcg_target_long offset)
8618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_WORDS_BIGENDIAN
8638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_st_i32(TCGV_HIGH(arg1), arg2, offset);
8645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_st_i32(TCGV_LOW(arg1), arg2, offset + 4);
8658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
8665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_st_i32(TCGV_LOW(arg1), arg2, offset);
8678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_st_i32(TCGV_HIGH(arg1), arg2, offset + 4);
8688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
8698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_add_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
8728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op6_i32(INDEX_op_add2_i32, TCGV_LOW(ret), TCGV_HIGH(ret),
8745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                    TCGV_LOW(arg1), TCGV_HIGH(arg1), TCGV_LOW(arg2),
8755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                    TCGV_HIGH(arg2));
8768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sub_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
8798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op6_i32(INDEX_op_sub2_i32, TCGV_LOW(ret), TCGV_HIGH(ret),
8815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                    TCGV_LOW(arg1), TCGV_HIGH(arg1), TCGV_LOW(arg2),
8825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                    TCGV_HIGH(arg2));
8838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_and_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
8868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_and_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
8888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_and_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
8898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
8928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_andi_i32(TCGV_LOW(ret), TCGV_LOW(arg1), arg2);
8948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32);
8958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
8968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_or_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
8988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
9008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
9018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
9048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ori_i32(TCGV_LOW(ret), TCGV_LOW(arg1), arg2);
9068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_ori_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32);
9078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xor_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
9108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_xor_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
9128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xor_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
9138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
9168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_xori_i32(TCGV_LOW(ret), TCGV_LOW(arg1), arg2);
9188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xori_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32);
9198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* XXX: use generic code when basic block handling is OK or CPU
9228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   specific code (x86) */
9235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shl_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
9248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
925f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    int sizemask = 0;
926f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    /* Return value and both arguments are 64-bit and signed.  */
927f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(0, 1, 1);
928f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(1, 1, 1);
929f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(2, 1, 1);
930f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
931f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_helper64(tcg_helper_shl_i64, sizemask, ret, arg1, arg2);
9328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
9358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shifti_i64(ret, arg1, arg2, 0, 0);
9378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shr_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
9408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
941f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    int sizemask = 0;
942f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    /* Return value and both arguments are 64-bit and signed.  */
943f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(0, 1, 1);
944f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(1, 1, 1);
945f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(2, 1, 1);
946f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
947f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_helper64(tcg_helper_shr_i64, sizemask, ret, arg1, arg2);
9488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shri_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
9518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shifti_i64(ret, arg1, arg2, 1, 0);
9538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sar_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
9568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
957f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    int sizemask = 0;
958f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    /* Return value and both arguments are 64-bit and signed.  */
959f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(0, 1, 1);
960f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(1, 1, 1);
961f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(2, 1, 1);
962f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
963f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_helper64(tcg_helper_sar_i64, sizemask, ret, arg1, arg2);
9648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sari_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
9678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shifti_i64(ret, arg1, arg2, 1, 1);
9698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
971f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_brcond_i64(TCGCond cond, TCGv_i64 arg1,
972f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                      TCGv_i64 arg2, int label_index)
9738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op6ii_i32(INDEX_op_brcond2_i32,
9755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                      TCGV_LOW(arg1), TCGV_HIGH(arg1), TCGV_LOW(arg2),
9765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                      TCGV_HIGH(arg2), cond, label_index);
9778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
9788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
979f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_setcond_i64(TCGCond cond, TCGv_i64 ret,
980b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner                                       TCGv_i64 arg1, TCGv_i64 arg2)
981b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{
982b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op6i_i32(INDEX_op_setcond2_i32, TCGV_LOW(ret),
983b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner                     TCGV_LOW(arg1), TCGV_HIGH(arg1),
984b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner                     TCGV_LOW(arg2), TCGV_HIGH(arg2), cond);
985b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
986b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner}
987b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner
9885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mul_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
9898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
9905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
9915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t1;
9928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
9945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i32();
9955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
9965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4_i32(INDEX_op_mulu2_i32, TCGV_LOW(t0), TCGV_HIGH(t0),
9975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                    TCGV_LOW(arg1), TCGV_LOW(arg2));
9985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
9995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mul_i32(t1, TCGV_LOW(arg1), TCGV_HIGH(arg2));
10008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_add_i32(TCGV_HIGH(t0), TCGV_HIGH(t0), t1);
10015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mul_i32(t1, TCGV_HIGH(arg1), TCGV_LOW(arg2));
10028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_add_i32(TCGV_HIGH(t0), TCGV_HIGH(t0), t1);
10038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i64(ret, t0);
10055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
10065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t1);
10078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1011f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    int sizemask = 0;
1012f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    /* Return value and both arguments are 64-bit and signed.  */
1013f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(0, 1, 1);
1014f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(1, 1, 1);
1015f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(2, 1, 1);
1016f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
1017f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_helper64(tcg_helper_div_i64, sizemask, ret, arg1, arg2);
10188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1022f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    int sizemask = 0;
1023f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    /* Return value and both arguments are 64-bit and signed.  */
1024f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(0, 1, 1);
1025f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(1, 1, 1);
1026f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(2, 1, 1);
1027f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
1028f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_helper64(tcg_helper_rem_i64, sizemask, ret, arg1, arg2);
10298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1033f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    int sizemask = 0;
1034f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    /* Return value and both arguments are 64-bit and unsigned.  */
1035f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(0, 1, 0);
1036f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(1, 1, 0);
1037f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(2, 1, 0);
1038f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
1039f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_helper64(tcg_helper_divu_i64, sizemask, ret, arg1, arg2);
10408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
10438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1044f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    int sizemask = 0;
1045f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    /* Return value and both arguments are 64-bit and unsigned.  */
1046f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(0, 1, 0);
1047f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(1, 1, 0);
1048f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(2, 1, 0);
1049f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
1050f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_helper64(tcg_helper_remu_i64, sizemask, ret, arg1, arg2);
10518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
10548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mov_i64(TCGv_i64 ret, TCGv_i64 arg)
10568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (!TCGV_EQUAL_I64(ret, arg))
10585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op2_i64(INDEX_op_mov_i64, ret, arg);
10598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_movi_i64(TCGv_i64 ret, int64_t arg)
10628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2i_i64(INDEX_op_movi_i64, ret, arg);
10648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8u_i64(TCGv_i64 ret, TCGv_i64 arg2,
10678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                    tcg_target_long offset)
10688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld8u_i64, ret, arg2, offset);
10708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8s_i64(TCGv_i64 ret, TCGv_i64 arg2,
10738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                    tcg_target_long offset)
10748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld8s_i64, ret, arg2, offset);
10768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16u_i64(TCGv_i64 ret, TCGv_i64 arg2,
10798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                     tcg_target_long offset)
10808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld16u_i64, ret, arg2, offset);
10828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16s_i64(TCGv_i64 ret, TCGv_i64 arg2,
10858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                     tcg_target_long offset)
10868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld16s_i64, ret, arg2, offset);
10888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld32u_i64(TCGv_i64 ret, TCGv_i64 arg2,
10918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                     tcg_target_long offset)
10928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld32u_i64, ret, arg2, offset);
10948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
10958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld32s_i64(TCGv_i64 ret, TCGv_i64 arg2,
10978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                     tcg_target_long offset)
10988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld32s_i64, ret, arg2, offset);
11008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld_i64(TCGv_i64 ret, TCGv_i64 arg2, tcg_target_long offset)
11038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_ld_i64, ret, arg2, offset);
11058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st8_i64(TCGv_i64 arg1, TCGv_i64 arg2,
11088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                   tcg_target_long offset)
11098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_st8_i64, arg1, arg2, offset);
11118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st16_i64(TCGv_i64 arg1, TCGv_i64 arg2,
11148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                    tcg_target_long offset)
11158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_st16_i64, arg1, arg2, offset);
11178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st32_i64(TCGv_i64 arg1, TCGv_i64 arg2,
11208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                    tcg_target_long offset)
11218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_st32_i64, arg1, arg2, offset);
11238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st_i64(TCGv_i64 arg1, TCGv_i64 arg2, tcg_target_long offset)
11268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ldst_op_i64(INDEX_op_st_i64, arg1, arg2, offset);
11288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_add_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
11318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_add_i64, ret, arg1, arg2);
11338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sub_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
11368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_sub_i64, ret, arg1, arg2);
11388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_and_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
11418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (TCGV_EQUAL_I64(arg1, arg2)) {
11435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i64(ret, arg1);
11445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
11455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op3_i64(INDEX_op_and_i64, ret, arg1, arg2);
11465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
11478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
11508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(arg2);
11528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_and_i64(ret, arg1, t0);
11535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
11548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_or_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
11578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (TCGV_EQUAL_I64(arg1, arg2)) {
11595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i64(ret, arg1);
11605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
11615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op3_i64(INDEX_op_or_i64, ret, arg1, arg2);
11625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
11638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
11668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(arg2);
11688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(ret, arg1, t0);
11695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
11708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xor_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
11738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (TCGV_EQUAL_I64(arg1, arg2)) {
11755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_movi_i64(ret, 0);
11765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
11775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_op3_i64(INDEX_op_xor_i64, ret, arg1, arg2);
11785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
11798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
11828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(arg2);
11848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xor_i64(ret, arg1, t0);
11855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
11868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shl_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
11898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_shl_i64, ret, arg1, arg2);
11918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
11928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
11948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
11958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
11968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i64(ret, arg1);
11978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
11985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0 = tcg_const_i64(arg2);
11998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_shl_i64(ret, arg1, t0);
12005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
12018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
12028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shr_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
12058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_shr_i64, ret, arg1, arg2);
12078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shri_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
12108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
12128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i64(ret, arg1);
12138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
12145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0 = tcg_const_i64(arg2);
12158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_shr_i64(ret, arg1, t0);
12165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
12178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
12188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sar_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
12218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_sar_i64, ret, arg1, arg2);
12238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sari_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
12268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (arg2 == 0) {
12288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_mov_i64(ret, arg1);
12298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } else {
12305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0 = tcg_const_i64(arg2);
12318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        tcg_gen_sar_i64(ret, arg1, t0);
12325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
12338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
12348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1236f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_brcond_i64(TCGCond cond, TCGv_i64 arg1,
1237f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                      TCGv_i64 arg2, int label_index)
12388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4ii_i64(INDEX_op_brcond_i64, arg1, arg2, cond, label_index);
12408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1242f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_setcond_i64(TCGCond cond, TCGv_i64 ret,
1243b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner                                       TCGv_i64 arg1, TCGv_i64 arg2)
1244b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{
1245b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op4i_i64(INDEX_op_setcond_i64, ret, arg1, arg2, cond);
1246b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner}
1247b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner
12485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mul_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
12498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_mul_i64, ret, arg1, arg2);
12518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_div_i64
12545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
12558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_div_i64, ret, arg1, arg2);
12578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
12608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_rem_i64, ret, arg1, arg2);
12628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
12658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_divu_i64, ret, arg1, arg2);
12678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
12708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_remu_i64, ret, arg1, arg2);
12728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
1273f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#elif defined(TCG_TARGET_HAS_div2_i64)
12745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
12758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
12775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
12788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i64(t0, arg1, 63);
12795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i64(INDEX_op_div2_i64, ret, t0, arg1, t0, arg2);
12805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
12818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
12848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
12865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
12878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i64(t0, arg1, 63);
12885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i64(INDEX_op_div2_i64, t0, ret, arg1, t0, arg2);
12895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
12908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
12918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
12938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
12955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
12968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i64(t0, 0);
12975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i64(INDEX_op_divu2_i64, ret, t0, arg1, t0, arg2);
12985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
12998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
13028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
13045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
13058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i64(t0, 0);
13065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5_i64(INDEX_op_divu2_i64, t0, ret, arg1, t0, arg2);
13075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
13088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
1309f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else
1310f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
1311f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{
1312f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    int sizemask = 0;
1313f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    /* Return value and both arguments are 64-bit and signed.  */
1314f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(0, 1, 1);
1315f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(1, 1, 1);
1316f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(2, 1, 1);
1317f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
1318f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_helper64(tcg_helper_div_i64, sizemask, ret, arg1, arg2);
1319f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner}
1320f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
1321f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
1322f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{
1323f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    int sizemask = 0;
1324f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    /* Return value and both arguments are 64-bit and signed.  */
1325f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(0, 1, 1);
1326f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(1, 1, 1);
1327f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(2, 1, 1);
1328f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
1329f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_helper64(tcg_helper_rem_i64, sizemask, ret, arg1, arg2);
1330f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner}
1331f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
1332f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
1333f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{
1334f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    int sizemask = 0;
1335f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    /* Return value and both arguments are 64-bit and unsigned.  */
1336f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(0, 1, 0);
1337f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(1, 1, 0);
1338f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(2, 1, 0);
1339f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
1340f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_helper64(tcg_helper_divu_i64, sizemask, ret, arg1, arg2);
1341f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner}
1342f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
1343f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
1344f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{
1345f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    int sizemask = 0;
1346f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    /* Return value and both arguments are 64-bit and unsigned.  */
1347f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(0, 1, 0);
1348f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(1, 1, 0);
1349f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    sizemask |= tcg_gen_sizemask(2, 1, 0);
1350f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
1351f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_helper64(tcg_helper_remu_i64, sizemask, ret, arg1, arg2);
1352f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner}
13538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
13548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
13568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
13575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_addi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
13585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
13595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* some cases can be optimized here */
13605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (arg2 == 0) {
13615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i64(ret, arg1);
13625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
13635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0 = tcg_const_i64(arg2);
13645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_add_i64(ret, arg1, t0);
13655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
13665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
13675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
13685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
13695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_subfi_i64(TCGv_i64 ret, int64_t arg1, TCGv_i64 arg2)
13705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
13715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(arg1);
13725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sub_i64(ret, t0, arg2);
13735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
13745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
13755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
13765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_subi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
13775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
13785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* some cases can be optimized here */
13795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (arg2 == 0) {
13805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i64(ret, arg1);
13815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
13825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0 = tcg_const_i64(arg2);
13835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_sub_i64(ret, arg1, t0);
13845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
13855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
13865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
1387f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_brcondi_i64(TCGCond cond, TCGv_i64 arg1,
1388f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                       int64_t arg2, int label_index)
13898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
13905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(arg2);
13918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_brcond_i64(cond, arg1, t0, label_index);
13925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
13938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
13948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1395f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_setcondi_i64(TCGCond cond, TCGv_i64 ret,
1396f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner                                        TCGv_i64 arg1, int64_t arg2)
1397b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{
1398b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(arg2);
1399b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_setcond_i64(cond, ret, arg1, t0);
1400b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_temp_free_i64(t0);
1401b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner}
1402b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner
14035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_muli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
14045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
14055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(arg2);
14065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mul_i64(ret, arg1, t0);
14075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
14085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
14095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
14105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
14118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/***************************************/
14128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* optional operations */
14138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8s_i32(TCGv_i32 ret, TCGv_i32 arg)
14158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext8s_i32
14175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_ext8s_i32, ret, arg);
14188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
14198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i32(ret, arg, 24);
14208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(ret, ret, 24);
14218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
14228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16s_i32(TCGv_i32 ret, TCGv_i32 arg)
14258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext16s_i32
14275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_ext16s_i32, ret, arg);
14288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
14298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i32(ret, arg, 16);
14308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i32(ret, ret, 16);
14318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
14328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8u_i32(TCGv_i32 ret, TCGv_i32 arg)
14358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1436b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_ext8u_i32
1437b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_ext8u_i32, ret, arg);
1438b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else
14398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(ret, arg, 0xffu);
1440b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif
14418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16u_i32(TCGv_i32 ret, TCGv_i32 arg)
14448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1445b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_ext16u_i32
1446b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_ext16u_i32, ret, arg);
1447b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else
14488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(ret, arg, 0xffffu);
1449b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif
14508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the two high bytes are set to zero */
14535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap16_i32(TCGv_i32 ret, TCGv_i32 arg)
14548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_bswap16_i32
14565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_bswap16_i32, ret, arg);
14578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
14585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0 = tcg_temp_new_i32();
14598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext8u_i32(t0, arg);
14615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shli_i32(t0, t0, 8);
14625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shri_i32(ret, arg, 8);
14635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i32(ret, ret, t0);
14645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
14658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
14668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap32_i32(TCGv_i32 ret, TCGv_i32 arg)
14698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_bswap32_i32
14715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_bswap32_i32, ret, arg);
14728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
14735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0, t1;
14745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
14755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i32();
14768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i32(t0, arg, 24);
14788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(t1, arg, 0x0000ff00);
14808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i32(t1, t1, 8);
14818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i32(t0, t0, t1);
14828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i32(t1, arg, 8);
14848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i32(t1, t1, 0x0000ff00);
14858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i32(t0, t0, t1);
14868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i32(t1, arg, 24);
14888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i32(ret, t0, t1);
14895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
14905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t1);
14918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
14928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32
14955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8s_i64(TCGv_i64 ret, TCGv_i64 arg)
14968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext8s_i32(TCGV_LOW(ret), TCGV_LOW(arg));
14985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
14998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16s_i64(TCGv_i64 ret, TCGv_i64 arg)
15028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext16s_i32(TCGV_LOW(ret), TCGV_LOW(arg));
15045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
15058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext32s_i64(TCGv_i64 ret, TCGv_i64 arg)
15088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_LOW(ret), TCGV_LOW(arg));
15105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
15118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8u_i64(TCGv_i64 ret, TCGv_i64 arg)
15148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext8u_i32(TCGV_LOW(ret), TCGV_LOW(arg));
15168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
15178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16u_i64(TCGv_i64 ret, TCGv_i64 arg)
15208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext16u_i32(TCGV_LOW(ret), TCGV_LOW(arg));
15228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
15238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext32u_i64(TCGv_i64 ret, TCGv_i64 arg)
15268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_LOW(ret), TCGV_LOW(arg));
15288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
15298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_trunc_i64_i32(TCGv_i32 ret, TCGv_i64 arg)
15328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(ret, TCGV_LOW(arg));
15348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_extu_i32_i64(TCGv_i64 ret, TCGv_i32 arg)
15378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_LOW(ret), arg);
15398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
15408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext_i32_i64(TCGv_i64 ret, TCGv_i32 arg)
15435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
15445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_LOW(ret), arg);
15455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
15465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
15475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
15485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note: we assume the six high bytes are set to zero */
15495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap16_i64(TCGv_i64 ret, TCGv_i64 arg)
15505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
15515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg));
15525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_bswap16_i32(TCGV_LOW(ret), TCGV_LOW(arg));
15535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
15545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
15555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note: we assume the four high bytes are set to zero */
15565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap32_i64(TCGv_i64 ret, TCGv_i64 arg)
15578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg));
15595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_bswap32_i32(TCGV_LOW(ret), TCGV_LOW(arg));
15608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap64_i64(TCGv_i64 ret, TCGv_i64 arg)
15638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0, t1;
15655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
15665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i32();
15678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_bswap32_i32(t0, TCGV_LOW(arg));
15695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_bswap32_i32(t1, TCGV_HIGH(arg));
15705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_LOW(ret), t1);
15718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_mov_i32(TCGV_HIGH(ret), t0);
15725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
15735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t1);
15748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
15768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8s_i64(TCGv_i64 ret, TCGv_i64 arg)
15788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext8s_i64
15805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_ext8s_i64, ret, arg);
15818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
15828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(ret, arg, 56);
15838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i64(ret, ret, 56);
15848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
15858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16s_i64(TCGv_i64 ret, TCGv_i64 arg)
15888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext16s_i64
15905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_ext16s_i64, ret, arg);
15918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
15928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(ret, arg, 48);
15938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i64(ret, ret, 48);
15948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
15958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext32s_i64(TCGv_i64 ret, TCGv_i64 arg)
15988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext32s_i64
16005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_ext32s_i64, ret, arg);
16018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
16028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(ret, arg, 32);
16038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sari_i64(ret, ret, 32);
16048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
16058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
16068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
16075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8u_i64(TCGv_i64 ret, TCGv_i64 arg)
16088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1609b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_ext8u_i64
1610b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_ext8u_i64, ret, arg);
1611b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else
16128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(ret, arg, 0xffu);
1613b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif
16148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
16158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
16165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16u_i64(TCGv_i64 ret, TCGv_i64 arg)
16178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1618b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_ext16u_i64
1619b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_ext16u_i64, ret, arg);
1620b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else
16218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(ret, arg, 0xffffu);
1622b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif
16238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
16248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
16255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext32u_i64(TCGv_i64 ret, TCGv_i64 arg)
16268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1627b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_ext32u_i64
1628b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_ext32u_i64, ret, arg);
1629b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else
16308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(ret, arg, 0xffffffffu);
1631b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif
16328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
16338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
16348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the target supports move between 32 and 64 bit
16358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   registers.  This will probably break MIPS64 targets.  */
16365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_trunc_i64_i32(TCGv_i32 ret, TCGv_i64 arg)
16378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
16385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(ret, MAKE_TCGV_I32(GET_TCGV_I64(arg)));
16398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
16408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
16418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the target supports move between 32 and 64 bit
16428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   registers */
16435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_extu_i32_i64(TCGv_i64 ret, TCGv_i32 arg)
16448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1645b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_ext32u_i64(ret, MAKE_TCGV_I64(GET_TCGV_I32(arg)));
16468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
16478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
16488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the target supports move between 32 and 64 bit
16498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   registers */
16505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext_i32_i64(TCGv_i64 ret, TCGv_i32 arg)
16518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
16525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext32s_i64(ret, MAKE_TCGV_I64(GET_TCGV_I32(arg)));
16535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
16545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note: we assume the six high bytes are set to zero */
16565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap16_i64(TCGv_i64 ret, TCGv_i64 arg)
16575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
16585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_bswap16_i64
16595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_bswap16_i64, ret, arg);
16605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
16615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_temp_new_i64();
16625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext8u_i64(t0, arg);
16645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shli_i64(t0, t0, 8);
16655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shri_i64(ret, arg, 8);
16665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(ret, ret, t0);
16675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
16685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
16698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
16708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
16715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note: we assume the four high bytes are set to zero */
16725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap32_i64(TCGv_i64 ret, TCGv_i64 arg)
16738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
16745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_bswap32_i64
16755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_bswap32_i64, ret, arg);
16768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
16775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0, t1;
16785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
16795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i64();
16805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shli_i64(t0, arg, 24);
16825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext32u_i64(t0, t0);
16835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_andi_i64(t1, arg, 0x0000ff00);
16855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shli_i64(t1, t1, 8);
16865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(t0, t0, t1);
16875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shri_i64(t1, arg, 8);
16895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_andi_i64(t1, t1, 0x0000ff00);
16905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(t0, t0, t1);
16915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shri_i64(t1, arg, 24);
16935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(ret, t0, t1);
16945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
16955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t1);
16965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
16975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
16985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
16995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap64_i64(TCGv_i64 ret, TCGv_i64 arg)
17005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
17015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_bswap64_i64
17025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_bswap64_i64, ret, arg);
17035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
1704ddf49e53df97a349f42c733059165dc73c9907dcDavid 'Digit' Turner    TCGv_i64 t0 = tcg_temp_new_i64();
1705ddf49e53df97a349f42c733059165dc73c9907dcDavid 'Digit' Turner    TCGv_i64 t1 = tcg_temp_new_i64();
17068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(t0, arg, 56);
17088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, arg, 0x0000ff00);
17108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(t1, t1, 40);
17118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
17128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, arg, 0x00ff0000);
17148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(t1, t1, 24);
17158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
17168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, arg, 0xff000000);
17188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shli_i64(t1, t1, 8);
17198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
17208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i64(t1, arg, 8);
17228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, t1, 0xff000000);
17238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
17248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i64(t1, arg, 24);
17268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, t1, 0x00ff0000);
17278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
17288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i64(t1, arg, 40);
17308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_andi_i64(t1, t1, 0x0000ff00);
17318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(t0, t0, t1);
17328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_shri_i64(t1, arg, 56);
17348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_or_i64(ret, t0, t1);
1735ddf49e53df97a349f42c733059165dc73c9907dcDavid 'Digit' Turner    tcg_temp_free_i64(t0);
1736ddf49e53df97a349f42c733059165dc73c9907dcDavid 'Digit' Turner    tcg_temp_free_i64(t1);
17378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
17388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
17398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
17418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_neg_i32(TCGv_i32 ret, TCGv_i32 arg)
17438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
17448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_neg_i32
17455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_neg_i32, ret, arg);
17468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
17475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0 = tcg_const_i32(0);
17488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sub_i32(ret, t0, arg);
17495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
17508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
17518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
17528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_neg_i64(TCGv_i64 ret, TCGv_i64 arg)
17548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
17558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_neg_i64
17565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_neg_i64, ret, arg);
17578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
17585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0 = tcg_const_i64(0);
17598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_sub_i64(ret, t0, arg);
17605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
17618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
17628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
17638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_not_i32(TCGv_i32 ret, TCGv_i32 arg)
17658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
17665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_not_i32
17675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i32(INDEX_op_not_i32, ret, arg);
17685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
17698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xori_i32(ret, arg, -1);
17705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
17718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
17728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_not_i64(TCGv_i64 ret, TCGv_i64 arg)
17748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
17755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_not_i64
17765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op2_i64(INDEX_op_not_i64, ret, arg);
1777f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#elif defined(TCG_TARGET_HAS_not_i32) && TCG_TARGET_REG_BITS == 32
1778f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_not_i32(TCGV_LOW(ret), TCGV_LOW(arg));
1779f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_not_i32(TCGV_HIGH(ret), TCGV_HIGH(arg));
17805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
17818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_xori_i64(ret, arg, -1);
17825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
17838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
17848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_discard_i32(TCGv_i32 arg)
17868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
17875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op1_i32(INDEX_op_discard, arg);
17888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
17898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32
17915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_discard_i64(TCGv_i64 arg)
17928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
17935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_discard_i32(TCGV_LOW(arg));
17948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_discard_i32(TCGV_HIGH(arg));
17958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
17968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
17975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_discard_i64(TCGv_i64 arg)
17985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
17995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op1_i64(INDEX_op_discard, arg);
18005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
18015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
18025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
18035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_concat_i32_i64(TCGv_i64 dest, TCGv_i32 low, TCGv_i32 high)
18045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
18055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#if TCG_TARGET_REG_BITS == 32
18065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_LOW(dest), low);
18075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_mov_i32(TCGV_HIGH(dest), high);
18085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
18095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 tmp = tcg_temp_new_i64();
18105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* This extension is only needed for type correctness.
18115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner       We may be able to do better given target specific information.  */
18125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_extu_i32_i64(tmp, high);
18135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shli_i64(tmp, tmp, 32);
18145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_extu_i32_i64(dest, low);
18155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(dest, dest, tmp);
18165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(tmp);
18175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
18185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
18195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
18205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_concat32_i64(TCGv_i64 dest, TCGv_i64 low, TCGv_i64 high)
18215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
18225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#if TCG_TARGET_REG_BITS == 32
18235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_concat_i32_i64(dest, TCGV_LOW(low), TCGV_LOW(high));
18245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
18255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 tmp = tcg_temp_new_i64();
18265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_ext32u_i64(dest, low);
18275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shli_i64(tmp, high, 32);
18285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(dest, dest, tmp);
18295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(tmp);
18305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
18315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
18325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
18335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andc_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
18345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1835b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_andc_i32
1836b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_andc_i32, ret, arg1, arg2);
1837b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else
18385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0;
18395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
18405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i32(t0, arg2);
18415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_and_i32(ret, arg1, t0);
18425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
1843b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif
18445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
18455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
18465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andc_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
18475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1848b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_andc_i64
1849b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_andc_i64, ret, arg1, arg2);
1850b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#elif defined(TCG_TARGET_HAS_andc_i32) && TCG_TARGET_REG_BITS == 32
1851b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_andc_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
1852b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_andc_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
1853b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else
18545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
18555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
18565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i64(t0, arg2);
18575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_and_i64(ret, arg1, t0);
18585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
1859b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif
18605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
18615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
18625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_eqv_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
18635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1864f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#ifdef TCG_TARGET_HAS_eqv_i32
1865f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_eqv_i32, ret, arg1, arg2);
1866f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else
18675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_xor_i32(ret, arg1, arg2);
18685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i32(ret, ret);
1869f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#endif
18705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
18715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
18725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_eqv_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
18735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1874f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#ifdef TCG_TARGET_HAS_eqv_i64
1875f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_eqv_i64, ret, arg1, arg2);
1876f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#elif defined(TCG_TARGET_HAS_eqv_i32) && TCG_TARGET_REG_BITS == 32
1877f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_eqv_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
1878f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_eqv_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
1879f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else
18805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_xor_i64(ret, arg1, arg2);
18815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i64(ret, ret);
1882f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#endif
18835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
18845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
18855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_nand_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
18865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1887f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#ifdef TCG_TARGET_HAS_nand_i32
1888f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_nand_i32, ret, arg1, arg2);
1889f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else
18905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_and_i32(ret, arg1, arg2);
18915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i32(ret, ret);
1892f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#endif
18935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
18945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
18955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_nand_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
18965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1897f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#ifdef TCG_TARGET_HAS_nand_i64
1898f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_nand_i64, ret, arg1, arg2);
1899f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#elif defined(TCG_TARGET_HAS_nand_i32) && TCG_TARGET_REG_BITS == 32
1900f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_nand_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
1901f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_nand_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
1902f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else
19035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_and_i64(ret, arg1, arg2);
19045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i64(ret, ret);
1905f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#endif
19065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
19075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
19085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_nor_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
19095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1910f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#ifdef TCG_TARGET_HAS_nor_i32
1911f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_nor_i32, ret, arg1, arg2);
1912f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else
19135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i32(ret, arg1, arg2);
19145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i32(ret, ret);
1915f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#endif
19165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
19175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
19185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_nor_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
19195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1920f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#ifdef TCG_TARGET_HAS_nor_i64
1921f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_nor_i64, ret, arg1, arg2);
1922f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#elif defined(TCG_TARGET_HAS_nor_i32) && TCG_TARGET_REG_BITS == 32
1923f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_nor_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
1924f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_nor_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
1925f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else
19265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(ret, arg1, arg2);
19275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i64(ret, ret);
1928f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#endif
19295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
19305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
19315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_orc_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
19325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1933b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_orc_i32
1934b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_orc_i32, ret, arg1, arg2);
1935b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else
19365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0;
19375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
19385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i32(t0, arg2);
19395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i32(ret, arg1, t0);
19405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
1941b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif
19425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
19435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
19445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_orc_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
19455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
1946b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_orc_i64
1947b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_orc_i64, ret, arg1, arg2);
1948b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#elif defined(TCG_TARGET_HAS_orc_i32) && TCG_TARGET_REG_BITS == 32
1949b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_orc_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
1950b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner    tcg_gen_orc_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
1951b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else
19525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0;
19535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
19545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_not_i64(t0, arg2);
19555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(ret, arg1, t0);
19565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
1957b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif
19585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
19595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
19605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotl_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
19615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
19625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i32
19635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_rotl_i32, ret, arg1, arg2);
19645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
19655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0, t1;
19665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
19675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
19685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i32();
19695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shl_i32(t0, arg1, arg2);
19705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_subfi_i32(t1, 32, arg2);
19715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shr_i32(t1, arg1, t1);
19725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i32(ret, t0, t1);
19735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
19745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t1);
19755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
19765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
19775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
19785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotl_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
19798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
19805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i64
19815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_rotl_i64, ret, arg1, arg2);
19825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
19835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0, t1;
19845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
19855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
19865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i64();
19875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shl_i64(t0, arg1, arg2);
19885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_subfi_i64(t1, 64, arg2);
19895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shr_i64(t1, arg1, t1);
19905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(ret, t0, t1);
19915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
19925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t1);
19935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
19948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
19955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
19965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotli_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
19975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
19985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* some cases can be optimized here */
19995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (arg2 == 0) {
20005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i32(ret, arg1);
20015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
20025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i32
20035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0 = tcg_const_i32(arg2);
20045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_rotl_i32(ret, arg1, t0);
20055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
20065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
20075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i32 t0, t1;
20085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        t0 = tcg_temp_new_i32();
20095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        t1 = tcg_temp_new_i32();
20105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_shli_i32(t0, arg1, arg2);
20115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_shri_i32(t1, arg1, 32 - arg2);
20125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_or_i32(ret, t0, t1);
20135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t0);
20145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i32(t1);
20158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
20165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
20175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
20185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
20195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
20205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
20215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* some cases can be optimized here */
20225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (arg2 == 0) {
20235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i64(ret, arg1);
20245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
20255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i64
20265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0 = tcg_const_i64(arg2);
20275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_rotl_i64(ret, arg1, t0);
20285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
20295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
20305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        TCGv_i64 t0, t1;
20315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        t0 = tcg_temp_new_i64();
20325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        t1 = tcg_temp_new_i64();
20335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_shli_i64(t0, arg1, arg2);
20345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_shri_i64(t1, arg1, 64 - arg2);
20355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_or_i64(ret, t0, t1);
20365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t0);
20375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_temp_free_i64(t1);
20385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
20395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
20405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
20415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
20425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotr_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
20435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
20445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i32
20455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i32(INDEX_op_rotr_i32, ret, arg1, arg2);
20465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
20475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i32 t0, t1;
20485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
20495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i32();
20505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i32();
20515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shr_i32(t0, arg1, arg2);
20525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_subfi_i32(t1, 32, arg2);
20535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shl_i32(t1, arg1, t1);
20545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i32(ret, t0, t1);
20555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t0);
20565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i32(t1);
20575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
20585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
20595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
20605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotr_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
20615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
20625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i64
20635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3_i64(INDEX_op_rotr_i64, ret, arg1, arg2);
20645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
20655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    TCGv_i64 t0, t1;
20665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
20675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t0 = tcg_temp_new_i64();
20685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    t1 = tcg_temp_new_i64();
2069ddf49e53df97a349f42c733059165dc73c9907dcDavid 'Digit' Turner    tcg_gen_shr_i64(t0, arg1, arg2);
20705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_subfi_i64(t1, 64, arg2);
20715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_shl_i64(t1, arg1, t1);
20725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_or_i64(ret, t0, t1);
20735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t0);
20745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_temp_free_i64(t1);
20755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
20765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
20775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
20785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotri_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
20795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
20805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* some cases can be optimized here */
20815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (arg2 == 0) {
20825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i32(ret, arg1);
20835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
20845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_rotli_i32(ret, arg1, 32 - arg2);
20855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
20865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
20875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
20885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotri_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
20895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
20905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /* some cases can be optimized here */
20915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (arg2 == 0) {
20925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_mov_i64(ret, arg1);
20935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } else {
20945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        tcg_gen_rotli_i64(ret, arg1, 64 - arg2);
20955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
20965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
20978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2098f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_deposit_i32(TCGv_i32 ret, TCGv_i32 arg1,
2099f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner				       TCGv_i32 arg2, unsigned int ofs,
2100f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner				       unsigned int len)
2101f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{
2102f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#ifdef TCG_TARGET_HAS_deposit_i32
2103f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner  tcg_gen_op5ii_i32(INDEX_op_deposit_i32, ret, arg1, arg2, ofs, len);
2104f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else
2105f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner  uint32_t mask = (1u << len) - 1;
2106f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner  TCGv_i32 t1 = tcg_temp_new_i32 ();
2107f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
2108f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner  tcg_gen_andi_i32(t1, arg2, mask);
2109f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner  tcg_gen_shli_i32(t1, t1, ofs);
2110f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner  tcg_gen_andi_i32(ret, arg1, ~(mask << ofs));
2111f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner  tcg_gen_or_i32(ret, ret, t1);
2112f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
2113f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner  tcg_temp_free_i32(t1);
2114f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#endif
2115f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner}
2116f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
2117f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_deposit_i64(TCGv_i64 ret, TCGv_i64 arg1,
2118f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner				       TCGv_i64 arg2, unsigned int ofs,
2119f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner				       unsigned int len)
2120f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{
2121f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#ifdef TCG_TARGET_HAS_deposit_i64
2122f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner  tcg_gen_op5ii_i64(INDEX_op_deposit_i64, ret, arg1, arg2, ofs, len);
2123f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else
2124f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner  uint64_t mask = (1ull << len) - 1;
2125f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner  TCGv_i64 t1 = tcg_temp_new_i64 ();
2126f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
2127f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner  tcg_gen_andi_i64(t1, arg2, mask);
2128f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner  tcg_gen_shli_i64(t1, t1, ofs);
2129f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner  tcg_gen_andi_i64(ret, arg1, ~(mask << ofs));
2130f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner  tcg_gen_or_i64(ret, ret, t1);
2131f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
2132f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner  tcg_temp_free_i64(t1);
2133f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#endif
2134f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner}
2135f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner
21368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/***************************************/
21378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* QEMU specific operations. Their type depend on the QEMU CPU
21388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   type. */
21398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef TARGET_LONG_BITS
21408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#error must include QEMU headers
21418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
21428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#if TARGET_LONG_BITS == 32
21445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGv TCGv_i32
21455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_new() tcg_temp_new_i32()
21465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_global_reg_new tcg_global_reg_new_i32
21475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_global_mem_new tcg_global_mem_new_i32
21485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_local_new() tcg_temp_local_new_i32()
21495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_free tcg_temp_free_i32
21505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_qemu_ldst_op tcg_gen_op3i_i32
21515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_qemu_ldst_op_i64 tcg_gen_qemu_ldst_op_i64_i32
21525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGV_UNUSED(x) TCGV_UNUSED_I32(x)
21535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGV_EQUAL(a, b) TCGV_EQUAL_I32(a, b)
21545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
21555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGv TCGv_i64
21565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_new() tcg_temp_new_i64()
21575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_global_reg_new tcg_global_reg_new_i64
21585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_global_mem_new tcg_global_mem_new_i64
21595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_local_new() tcg_temp_local_new_i64()
21605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_free tcg_temp_free_i64
21615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_qemu_ldst_op tcg_gen_op3i_i64
21625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_qemu_ldst_op_i64 tcg_gen_qemu_ldst_op_i64_i64
21635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGV_UNUSED(x) TCGV_UNUSED_I64(x)
21645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGV_EQUAL(a, b) TCGV_EQUAL_I64(a, b)
21655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
21665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
21678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* debug info: write the PC of the corresponding QEMU CPU instruction */
21688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_debug_insn_start(uint64_t pc)
21698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
21708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* XXX: must really use a 32 bit size for TCGArg in all cases */
21718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS > TCG_TARGET_REG_BITS
21728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op2ii(INDEX_op_debug_insn_start,
21738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                  (uint32_t)(pc), (uint32_t)(pc >> 32));
21748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
21758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1i(INDEX_op_debug_insn_start, pc);
21768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
21778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
21788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_exit_tb(tcg_target_long val)
21808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
21818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1i(INDEX_op_exit_tb, val);
21828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
21838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_goto_tb(int idx)
21858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
21868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_op1i(INDEX_op_goto_tb, idx);
21878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
21888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32
21908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8u(TCGv ret, TCGv addr, int mem_index)
21918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
21928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
21935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_ld8u, ret, addr, mem_index);
21948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
21955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld8u, TCGV_LOW(ret), TCGV_LOW(addr),
21965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
21978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
21988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
21998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
22008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
22018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8s(TCGv ret, TCGv addr, int mem_index)
22028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
22038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
22045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_ld8s, ret, addr, mem_index);
22058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
22065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld8s, TCGV_LOW(ret), TCGV_LOW(addr),
22075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
22085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
22098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
22108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
22118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
22128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16u(TCGv ret, TCGv addr, int mem_index)
22138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
22148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
22155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_ld16u, ret, addr, mem_index);
22168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
22175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld16u, TCGV_LOW(ret), TCGV_LOW(addr),
22185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
22198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
22208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
22218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
22228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
22238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16s(TCGv ret, TCGv addr, int mem_index)
22248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
22258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
22265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_ld16s, ret, addr, mem_index);
22278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
22285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld16s, TCGV_LOW(ret), TCGV_LOW(addr),
22295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
22305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
22318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
22328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
22338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
22348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32u(TCGv ret, TCGv addr, int mem_index)
22358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
22368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
2237f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_ld32, ret, addr, mem_index);
22388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
2239f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld32, TCGV_LOW(ret), TCGV_LOW(addr),
22405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
22418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
22428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
22438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
22448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
22458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32s(TCGv ret, TCGv addr, int mem_index)
22468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
22478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
2248f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_ld32, ret, addr, mem_index);
22498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
2250f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld32, TCGV_LOW(ret), TCGV_LOW(addr),
22515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
22525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
22538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
22548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
22558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
22565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_ld64(TCGv_i64 ret, TCGv addr, int mem_index)
22578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
22588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
22595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_ld64, TCGV_LOW(ret), TCGV_HIGH(ret), addr, mem_index);
22608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
22615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5i_i32(INDEX_op_qemu_ld64, TCGV_LOW(ret), TCGV_HIGH(ret),
22625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_LOW(addr), TCGV_HIGH(addr), mem_index);
22638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
22648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
22658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
22668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st8(TCGv arg, TCGv addr, int mem_index)
22678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
22688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
22695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_st8, arg, addr, mem_index);
22708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
22715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_st8, TCGV_LOW(arg), TCGV_LOW(addr),
22725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
22738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
22748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
22758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
22768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st16(TCGv arg, TCGv addr, int mem_index)
22778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
22788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
22795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_st16, arg, addr, mem_index);
22808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
22815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_st16, TCGV_LOW(arg), TCGV_LOW(addr),
22825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
22838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
22848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
22858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
22868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st32(TCGv arg, TCGv addr, int mem_index)
22878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
22888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
22895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op3i_i32(INDEX_op_qemu_st32, arg, addr, mem_index);
22908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
22915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_st32, TCGV_LOW(arg), TCGV_LOW(addr),
22925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_HIGH(addr), mem_index);
22938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
22948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
22958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
22965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_st64(TCGv_i64 arg, TCGv addr, int mem_index)
22978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
22988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32
22995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op4i_i32(INDEX_op_qemu_st64, TCGV_LOW(arg), TCGV_HIGH(arg), addr,
23005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     mem_index);
23018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
23025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_op5i_i32(INDEX_op_qemu_st64, TCGV_LOW(arg), TCGV_HIGH(arg),
23035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     TCGV_LOW(addr), TCGV_HIGH(addr), mem_index);
23048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
23058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
23068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_ptr tcg_gen_ld_i32
23088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_ptr tcg_gen_discard_i32
23098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else /* TCG_TARGET_REG_BITS == 32 */
23118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8u(TCGv ret, TCGv addr, int mem_index)
23138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
23145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld8u, ret, addr, mem_index);
23158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
23168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8s(TCGv ret, TCGv addr, int mem_index)
23188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
23195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld8s, ret, addr, mem_index);
23208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
23218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16u(TCGv ret, TCGv addr, int mem_index)
23238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
23245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld16u, ret, addr, mem_index);
23258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
23268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16s(TCGv ret, TCGv addr, int mem_index)
23288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
23295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld16s, ret, addr, mem_index);
23308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
23318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32u(TCGv ret, TCGv addr, int mem_index)
23338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
2334f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#if TARGET_LONG_BITS == 32
2335f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld32, ret, addr, mem_index);
2336f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else
23375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld32u, ret, addr, mem_index);
2338f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#endif
23398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
23408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32s(TCGv ret, TCGv addr, int mem_index)
23428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
2343f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#if TARGET_LONG_BITS == 32
2344f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld32, ret, addr, mem_index);
2345f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else
23465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld32s, ret, addr, mem_index);
2347f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#endif
23488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
23498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_ld64(TCGv_i64 ret, TCGv addr, int mem_index)
23518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
23525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op_i64(INDEX_op_qemu_ld64, ret, addr, mem_index);
23538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
23548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st8(TCGv arg, TCGv addr, int mem_index)
23568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
23575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_st8, arg, addr, mem_index);
23588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
23598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st16(TCGv arg, TCGv addr, int mem_index)
23618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
23625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_st16, arg, addr, mem_index);
23638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
23648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st32(TCGv arg, TCGv addr, int mem_index)
23668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
23675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op(INDEX_op_qemu_st32, arg, addr, mem_index);
23688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
23698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_st64(TCGv_i64 arg, TCGv addr, int mem_index)
23718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
23725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    tcg_gen_qemu_ldst_op_i64(INDEX_op_qemu_st64, arg, addr, mem_index);
23738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
23748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_ptr tcg_gen_ld_i64
23768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_ptr tcg_gen_discard_i64
23778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* TCG_TARGET_REG_BITS != 32 */
23798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 64
23818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_movi_tl tcg_gen_movi_i64
23828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mov_tl tcg_gen_mov_i64
23838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8u_tl tcg_gen_ld8u_i64
23848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8s_tl tcg_gen_ld8s_i64
23858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16u_tl tcg_gen_ld16u_i64
23868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16s_tl tcg_gen_ld16s_i64
23878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32u_tl tcg_gen_ld32u_i64
23888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32s_tl tcg_gen_ld32s_i64
23898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_tl tcg_gen_ld_i64
23908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st8_tl tcg_gen_st8_i64
23918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st16_tl tcg_gen_st16_i64
23928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st32_tl tcg_gen_st32_i64
23938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st_tl tcg_gen_st_i64
23948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_tl tcg_gen_add_i64
23958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_tl tcg_gen_addi_i64
23968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sub_tl tcg_gen_sub_i64
23978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_neg_tl tcg_gen_neg_i64
23985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_subfi_tl tcg_gen_subfi_i64
23998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_subi_tl tcg_gen_subi_i64
24008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_and_tl tcg_gen_and_i64
24018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_andi_tl tcg_gen_andi_i64
24028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_or_tl tcg_gen_or_i64
24038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ori_tl tcg_gen_ori_i64
24048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xor_tl tcg_gen_xor_i64
24058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xori_tl tcg_gen_xori_i64
24068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_not_tl tcg_gen_not_i64
24078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shl_tl tcg_gen_shl_i64
24088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shli_tl tcg_gen_shli_i64
24098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shr_tl tcg_gen_shr_i64
24108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shri_tl tcg_gen_shri_i64
24118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sar_tl tcg_gen_sar_i64
24128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sari_tl tcg_gen_sari_i64
24138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcond_tl tcg_gen_brcond_i64
24148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcondi_tl tcg_gen_brcondi_i64
2415b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#define tcg_gen_setcond_tl tcg_gen_setcond_i64
2416b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#define tcg_gen_setcondi_tl tcg_gen_setcondi_i64
24178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mul_tl tcg_gen_mul_i64
24188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_muli_tl tcg_gen_muli_i64
24195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_div_tl tcg_gen_div_i64
24205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rem_tl tcg_gen_rem_i64
24215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_divu_tl tcg_gen_divu_i64
24225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_remu_tl tcg_gen_remu_i64
24238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_tl tcg_gen_discard_i64
24248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_tl_i32 tcg_gen_trunc_i64_i32
24258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_i64_tl tcg_gen_mov_i64
24268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_i32_tl tcg_gen_extu_i32_i64
24278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_tl tcg_gen_ext_i32_i64
24288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_tl_i64 tcg_gen_mov_i64
24298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_tl_i64 tcg_gen_mov_i64
24308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8u_tl tcg_gen_ext8u_i64
24318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8s_tl tcg_gen_ext8s_i64
24328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16u_tl tcg_gen_ext16u_i64
24338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16s_tl tcg_gen_ext16s_i64
24348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32u_tl tcg_gen_ext32u_i64
24358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32s_tl tcg_gen_ext32s_i64
24365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap16_tl tcg_gen_bswap16_i64
24375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap32_tl tcg_gen_bswap32_i64
24385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap64_tl tcg_gen_bswap64_i64
24395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_concat_tl_i64 tcg_gen_concat32_i64
24405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_andc_tl tcg_gen_andc_i64
24415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_eqv_tl tcg_gen_eqv_i64
24425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_nand_tl tcg_gen_nand_i64
24435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_nor_tl tcg_gen_nor_i64
24445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_orc_tl tcg_gen_orc_i64
24455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotl_tl tcg_gen_rotl_i64
24465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotli_tl tcg_gen_rotli_i64
24475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotr_tl tcg_gen_rotr_i64
24485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotri_tl tcg_gen_rotri_i64
2449f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#define tcg_gen_deposit_tl tcg_gen_deposit_i64
24508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_const_tl tcg_const_i64
24515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_const_local_tl tcg_const_local_i64
24528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
24538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_movi_tl tcg_gen_movi_i32
24548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mov_tl tcg_gen_mov_i32
24558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8u_tl tcg_gen_ld8u_i32
24568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8s_tl tcg_gen_ld8s_i32
24578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16u_tl tcg_gen_ld16u_i32
24588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16s_tl tcg_gen_ld16s_i32
24598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32u_tl tcg_gen_ld_i32
24608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32s_tl tcg_gen_ld_i32
24618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_tl tcg_gen_ld_i32
24628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st8_tl tcg_gen_st8_i32
24638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st16_tl tcg_gen_st16_i32
24648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st32_tl tcg_gen_st_i32
24658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st_tl tcg_gen_st_i32
24668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_tl tcg_gen_add_i32
24678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_tl tcg_gen_addi_i32
24688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sub_tl tcg_gen_sub_i32
24698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_neg_tl tcg_gen_neg_i32
24705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_subfi_tl tcg_gen_subfi_i32
24718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_subi_tl tcg_gen_subi_i32
24728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_and_tl tcg_gen_and_i32
24738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_andi_tl tcg_gen_andi_i32
24748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_or_tl tcg_gen_or_i32
24758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ori_tl tcg_gen_ori_i32
24768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xor_tl tcg_gen_xor_i32
24778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xori_tl tcg_gen_xori_i32
24788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_not_tl tcg_gen_not_i32
24798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shl_tl tcg_gen_shl_i32
24808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shli_tl tcg_gen_shli_i32
24818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shr_tl tcg_gen_shr_i32
24828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shri_tl tcg_gen_shri_i32
24838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sar_tl tcg_gen_sar_i32
24848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sari_tl tcg_gen_sari_i32
24858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcond_tl tcg_gen_brcond_i32
24868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcondi_tl tcg_gen_brcondi_i32
2487b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#define tcg_gen_setcond_tl tcg_gen_setcond_i32
2488b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#define tcg_gen_setcondi_tl tcg_gen_setcondi_i32
24898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mul_tl tcg_gen_mul_i32
24908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_muli_tl tcg_gen_muli_i32
24915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_div_tl tcg_gen_div_i32
24925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rem_tl tcg_gen_rem_i32
24935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_divu_tl tcg_gen_divu_i32
24945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_remu_tl tcg_gen_remu_i32
24958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_tl tcg_gen_discard_i32
24968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_tl_i32 tcg_gen_mov_i32
24978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_i64_tl tcg_gen_trunc_i64_i32
24988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_i32_tl tcg_gen_mov_i32
24998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_tl tcg_gen_mov_i32
25008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_tl_i64 tcg_gen_extu_i32_i64
25018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_tl_i64 tcg_gen_ext_i32_i64
25028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8u_tl tcg_gen_ext8u_i32
25038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8s_tl tcg_gen_ext8s_i32
25048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16u_tl tcg_gen_ext16u_i32
25058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16s_tl tcg_gen_ext16s_i32
25068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32u_tl tcg_gen_mov_i32
25078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32s_tl tcg_gen_mov_i32
25085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap16_tl tcg_gen_bswap16_i32
25095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap32_tl tcg_gen_bswap32_i32
25105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_concat_tl_i64 tcg_gen_concat_i32_i64
25115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_andc_tl tcg_gen_andc_i32
25125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_eqv_tl tcg_gen_eqv_i32
25135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_nand_tl tcg_gen_nand_i32
25145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_nor_tl tcg_gen_nor_i32
25155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_orc_tl tcg_gen_orc_i32
25165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotl_tl tcg_gen_rotl_i32
25175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotli_tl tcg_gen_rotli_i32
25185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotr_tl tcg_gen_rotr_i32
25195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotri_tl tcg_gen_rotri_i32
2520f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#define tcg_gen_deposit_tl tcg_gen_deposit_i32
25218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_const_tl tcg_const_i32
25225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_const_local_tl tcg_const_local_i32
25238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
25248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
25258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32
25268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_ptr tcg_gen_add_i32
25278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_ptr tcg_gen_addi_i32
25288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_ptr tcg_gen_mov_i32
25298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else /* TCG_TARGET_REG_BITS == 32 */
25308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_ptr tcg_gen_add_i64
25318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_ptr tcg_gen_addi_i64
25328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_ptr tcg_gen_ext_i32_i64
25338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* TCG_TARGET_REG_BITS != 32 */
2534