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